Jump to content
duncantoml

Berzerk

Recommended Posts

I've got 4 copies of Berzerk and ALL 4 go "berzerk" any where between 50,000 and 100,000 and just reset.

 

2 regulars, 1 voice, and 1 on a multicart. They all do this. So I figure that others have had this problem.

 

I know that there was the same issue on the Vectrex carts, but someone produced a "debugged" cart that fixed this problem.

 

Looking for someone that can help me fix this problem on the 2600 cart.

Share this post


Link to post
Share on other sites

Never heard of this happening before. I'm sure you've probably already done this, but did you clean the contacts of both the carts and the VCS?

Share this post


Link to post
Share on other sites

Actually, on the first setting (whatever its set at on power on) it does seem to cut off around 70,000 or so. I posted a question a long time ago as to why the happy ball thing never came out and the game reset around there, and someone told me it was my settings (in real life, on the board, I don't think I got a single reply actually)

Share this post


Link to post
Share on other sites

This happens to me all the time, except it doesn't say anything. What happens to me is if I sit to long (actually just a few seconds) it just "resets" on me. I've read that it doesn't do this if you set it where Otto comes out.

Share this post


Link to post
Share on other sites

I've got 4 copies of Berzerk and ALL 4 go "berzerk" any where between 50,000 and 100,000 and just reset.

 

2 regulars, 1 voice, and 1 on a multicart. They all do this. So I figure that others have had this problem.

 

I know that there was the same issue on the Vectrex carts, but someone produced a "debugged" cart that fixed this problem.

 

Looking for someone that can help me fix this problem on the 2600 cart.

I didn't know this was happening so I didn't notice it when I was disassembling the game.

 

The problem occurs when you accumulate over 127 lives. The game will reset if it reaches 128 and you press the fire button. Dan uses the D7 bit of this variable to determine if the game should be in attract mode.

 

It should be an easy fix by limiting the number of lives to 127.

Share this post


Link to post
Share on other sites

Pardon me if I'm resurrecting an old thread, but this is my first post to AA so I plead ignorance!

 

The resetting problem in Berzerk can occur if someone accrues more than 127 lives, but is more likely to be happening because of the piece of code below (with thanks to Dennis Debro who did the original dissassembly). Essentially Berzerk has an undocumented doomsday clock aka 'attractModeTimer' which increments if the joystick is in the neutral position every 256th frame. When the attractModeTimer rolls past 255 the game resets. I figure this gives the gamer a cumulative total of approx 17 minutes of 'not moving the joystick' time before the game resets.

 

ReadJoystickValues
  lda #0
  sta temp02
  lda #127
  sta randomNumberMax              ; set random number ceiling
  lda SWCHA                        ; read the joystick values
  lsr                              ; shift player1's values to lower nybbles
  lsr
  lsr
  lsr
  eor #$0F                         ; flip the bits so high bit shows movement
  and #$0F                         ; mask the upper nybbles
  bne .setPlayerDirection
  lda #PLAYER_STAND_ANIM_OFFSET
  sta playerAnimationIndex
  sta playerGraphicLSB
  sta playerMotion                 ; reset player fractional movement delay
  lda frameCount                   ; get current frame count
  bne CheckForFireButtonPressed    ; branch if not rolled over from 255
  inc attractModeTimer             ; increment attract mode timer
  bne CheckForFireButtonPressed    ; branch if not rolled over from 255
  lda gameSelection                ; get current game selection
  jmp SetGameSelection             ; make game go into attract mode

Edited by Rev John

Share this post


Link to post
Share on other sites

Pardon me if I'm resurrecting an old thread, but this is my first post to AA so I plead ignorance!

 

The resetting problem in Berzerk can occur if someone accrues more than 127 lives, but is more likely to be happening because of the piece of code below (with thanks to Dennis Debro who did the original dissassembly). Essentially Berzerk has an undocumented doomsday clock aka 'attractModeTimer' which increments if the joystick is in the neutral position every 256th frame. When the attractModeTimer rolls past 255 the game resets. I figure this gives the gamer a cumulative total of approx 17 minutes of 'not moving the joystick' time before the game resets.

 

ReadJoystickValues
  lda #0
  sta temp02
  lda #127
  sta randomNumberMax              ; set random number ceiling
  lda SWCHA                        ; read the joystick values
  lsr                              ; shift player1's values to lower nybbles
  lsr
  lsr
  lsr
  eor #$0F                         ; flip the bits so high bit shows movement
  and #$0F                         ; mask the upper nybbles
  bne .setPlayerDirection
  lda #PLAYER_STAND_ANIM_OFFSET
  sta playerAnimationIndex
  sta playerGraphicLSB
  sta playerMotion                 ; reset player fractional movement delay
  lda frameCount                   ; get current frame count
  bne CheckForFireButtonPressed    ; branch if not rolled over from 255
  inc attractModeTimer             ; increment attract mode timer
  bne CheckForFireButtonPressed    ; branch if not rolled over from 255
  lda gameSelection                ; get current game selection
  jmp SetGameSelection             ; make game go into attract mode

 

Dude that is awesome!!! I surprised it wasn't mentioned in the original game manual because if I saw that I would think its a software bug and not part of the game itself.

 

-Disjaukifa

Share this post


Link to post
Share on other sites

My thinking is that the programmer wanted to (or had to) put in some way for the game to get back into attract mode, to help prevent an image of the unfinished game being burnt permanently onto the screen. ie to go back into screen saver mode.

 

The code is written to wait a suitably long time (approx 255 x 256 frames / 17 minutes) when someone stops playing and leaves the screen potentially vulnerable. However the 'attractModeTimer' variable never resets during normal play, so it appears to be a bug that the game will eventually reset during normal play when there is no problem of damage to the screen.

 

I'm curious as to whether other Atari games have a similar reset / intervention feature to prevent the screen image from remaing the same during play?

Share this post


Link to post
Share on other sites

...I'm curious as to whether other Atari games have a similar reset / intervention feature to prevent the screen image from remaing the same during play?

Starmaster will go into screen-saver mode whether you're playing a game or not. Well, playing a game isn't exactly the right way to put it, because to see the screen-saver activate in-game you have to leave the joystick alone.

 

I can't remember how I discovered this, I think I got bored one day and wanted to see how long it would take for all of my space stations to be destroyed if I just sat there and didn't put up a fight.

 

Also, just remembered this, doesn't Yars' Revenge have a screen-saver (of sorts)? It's been a while since I've played it so someone correct me, I seem to recall if you lose a life it waits for you to press the button to continue. If you don't press the button for a while the score dims.

 

-tet

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...