Quantcast
Channel: Atari Systems Forums
Viewing all articles
Browse latest Browse all 22482

Boulder Dash -- some programmer interaction, a historical record

$
0
0
Thomas and I worked through the final push to get Boulder Dash™ out the door by noting bugs and thoughts in a "dolist" file, and commenting to each other on specific aspects of the game. Now we're a few years down the track and all copies are sold, I really wanted to put this dolist "out there" so everyone could perhaps get some idea of the amount of work involved in completing the game. There's one small section I've removed for reasons which I can't explain... but otherwise this is an unedited version of the dolist left over after we completed programming.  Enjoy...

CHECKLIST
=========
BUGS TO FIX (TOP IS HIGHEST PRIORITY)
=====================================

PRIORITY
If this list is empty(ish), it means we've finished.
3			 spotted a time overflow screen roll (stella) on level O.
			 So, we still have a timing issue. Propose: don't worry about it
4			 there's a bit of a 'click' when exiting the title screen to play the game.
			 I suspect it's when the volume is initialised to 0. Would be really nice for the title sequence
			 to cleanly exit by gradually reducing both volumes to 0. Not a high priority.
			 TJ: I'll check this, not sure if I can fix it.

DONE!!! FIXED OR IGNORE (TOP IS NEWEST)
=======================================
3			 Rockford shifts when entering the level (PAL only)
3			 Added PAL-60 mode (left difficulty = A)
2			 Fixed preserving 7800 mode
3			 NTSC Colour Checks
			 A,E,I,M OK. Need the rest of the screenshots from Al.
1			 Some level colors are now VERY ugly. We have to discuss/fix this!
E/N colours reverted -- or close -- now we don't have this problem anymore.
E	 NEW
	 Reason: Diamonds were really awful colour.
N	 NEW - TODO
	 Reason: No colour difference between butterfly/diamond. Screen almost B&W.
	 see: N_AD.png vs N_TJ.png
We currently disagree on
E N
C	 agreed palette (PAL) updated. NTSC equivalent added.
		 NEW - TODO. AD HATES ORIGINAL
		 reason: Not enough contrast, very uni-colour and washed-out.
		 Action: Find colours AD/TJ like
		 see: C_AD.png vs C_TJ.png. Note, the emulator colours are way-out on this particular screen. Must view on TV for real colour scheme.
		 I hate it on the emulator colours (and these images). I like it on the TV.
			 cave I	 agreed palette updated.
			 updated I4 palette to agreed change.
3			 Lookaround color 02 doesn't show on my TV (too dark). Is that just my TV?
			 changed to 04. yes, it's your TV :P
3			 On Juniors, some Cosmik Ark starfield effects might not work
			 TJ: Title screen star field and extra live both work on my Jr.
			 @Andrew: How about yours?
1			 Scanlines where unstable after "lookaround feet" bugfix
4			 Level E once crashed when running left to collect diamonds (not reproducable)
			 FINGERS CROSSED.
			 ID TYPE S/N			 SYMPTOM
4			 1 WOODY 549272824	 Selection screen initially OK, then column 2 starts to wobble, then ends up in corrupt state. Heat related?
										 Improves after extended use -- solid after 2 hours.
										 Problem exists with new 3E.arm too. POSSIBLY WILL NOT FIX.
			 2 JR	 XC1251852	 COLOUR/B&W switch resets game. This is normal behaviour for units with inbuilt ROMs. Will not fix.
				 (inbuilt 128 games)
			 4 JR	 A1 692002	 "AMOEBA CRASH" unit. Shows the "bad" cosmic ark stars.
										 Crash seems to be fixed with new 3E.ARM file. ?
			 5 JR	 X73 94 008641 Cosmic Ark looks good (TJ)

2			 I realise I should make the PAL palette compatible with SECAM, not the NTSC one!
			 I will have a look at this shortly.
4			 in look-around when Rockford is on bottom line, his feet are visible at top of screen (1 scanline) above score.
4			 Restart (SELECT+RESET) sometimes caused garbled selection display
			 TJ: Console detection failed with VDELP1 enabled, @Andrew: please test Jr. again (just to be sure)
-			 New wall shape made C very hard to see. I have modified the palette for this level.
-			 Changed lookaround colour to darkest grey for both systems.
3			 Magic Wall sound missing in level H/P (reproducable, sometimes other sound disables it)
			 TJ: Fixes, was caused by SOLI sound having wrong priority in hi channel
-			 Modified brick wall character so that vertical walls are continuous without a blank line space.
-			 Fixed up the asymmetrical mirrored/non-mirroed soil characters. The shapes for soil changed depending on column.
			 Not *really* sure I like the change. At least it's "perfect" now.
3			 RESET during demo mode. Neat, but unfortunately if you leave it in this state for a few minutes, it tries to replay demo mode
			 and then starts with demo mode paused. I've simply disabled the reset during demo mode to fix this.
2			 New music speed is good. But the timer no longer corresponds to 2 full loops of the sound.
			 TJ: Are you sure? It still does for me, just each loop takes 2s less or so.
			 assumed OK.
4			 Update embedded copyright notice and build date
			 hardwired build date. Updated copyright notice.
2			 Selection graphics glitch on Junior.
			 TJ: now autodetect the Junior and adjust HM-values accordingly
1			 AtariAge logo.
			 TJ: Still have no idea how to do the two colored AtariAge text... :(
2			 How about the music speed that ********* mentioned? If it is really faster in the NTSC version,
			 then we should try to match that for our NTSC version too. Shouldn't be very difficult at all.
			 AD: I agree!
			 TJ: Done. NTSC now faster. Still a bit slower than original NTSC, but the next step would become too fast.
2			 Done! Enabled if all digits are identical (e.g. 111111) instead of intermission 4
---------------
			 [[this secton has been removed to allow public release of this commentary]]
---------------
2			 Pause? With B/W key and 7800 compatible?
			 AD: If you really want, however I don't think it's really needed.
			 TJ: If I find nothing better to do... :)
			 TJ: Done (for 7800 too)
2			 Any chance to make lookaround scroll faster (2x)? (also after releasing the button). Currently it
			 seems that the game continues to run at full speed, just the time is updated at half speed. If we
			 let the whole game run at half speed, we should have time for additional calls to TrackPlayer, no?
			 AD: Yes, probably. I'll have a look at it.
			 AD: I think this is very low priority and not needed.

2			 Would it be possible to make the game run faster after Rockford reaches the exit? That way we could
			 countdown the time faster, update the score nicer and have a better sound for the last 10s.
			 AD: Could modify Throttle so that it was lower. That would make everything run faster.
			 Double ThrottleSpeed works, but unfortunately animations then go double-speed, too.
			 Test: put asl ThrottleSpeed just before jmp MoveButton2 in MoveExit
			 TJ: the timer is only used for animations, right? So manipulating that one should be possible.
			 I see two options:
			 1. We usually inc the timer twice/frame and adapt the animation checks accordingly. At exit
			 we only increase once/frame. After exit we make sure the timer is even again.
			 2. We check during the animations if we are in exit mode
			 AD: Leave as-is.
2			 am I seeing a sort of fluttering flicker at the start of the whole thing?
			 is this the resynch,perhaps?
			 TJ: not sure what you mean, can you describe a bit more detailed, please?
			 AD: a very quick blue flashing screen, almost like it's turning on/off/on/off a few times. very very
			 brief. I seem to see it first thing when the game runs. Especially when I have (say) copyright commented out
			 and I was wondering if it's the rsync causing it. Not even SURE it's there... it's brief. But I think it is.
			 It is. I've seen it a couple more times.
			 TJ: Might be Stella. I will check when I have access to a real TV.
			 AD: Not so important, we can live with it.
3			 When a cave is (re)started the board should scroll from Rockford's last position
			 TJ: experimenting with it (INITIAL_SCROLL = YES)
				 currently scrolling is too slow (uncover delay would help) and
				 doesn't start until Rockford is processed.
			 AD: I think it's unnecessary.
			 TJ: Not necessary, but it would look cool. :)
3			 Board should uncover at the beginning (incl. sound)
			 AD: I did a lot of code to do with this but ultimately abandoned it. The method I used was to
			 rely on the random routine to guarantee coverage of all squares, and pick (say) 8 squares per game
			 loop to uncover. I got it part-working and decided I really didn't like it at all, and abandoned.
			 TJ: Didn't you like the way it worked or how it looks? Combined with the inital scrolling it looks
			 very cool in the original.
			 AD: It suffered from the small screen. It just looked 'cluttered' and didn't have the same effect
			 as the original.
			 AD: This is probably not going to happen. I want to finish!

3?			 We currently usually only check for the maximum required time. If those times vary a lot, it would
			 make sense to additional checks and reduce the initial check time (like for MOVE_DIAMOND).
			 AD: Yes, this is a good idea. Be careful not to have any stuff that can't be done again -- that is
			 you cannot time-abort out of an operation which must be integral.
			 AD: Let's forget this one.

2			 Bubble Sort is always iterating to the end. It should iterate one less with each iteration.
			 AD: *NO* because creatures are still being added to the list while the sort is happening. The new
			 creature could go anywhere, so the sort needs to complete the entire scan.
			 TJ: Ah, didn't think about that. Nevertheless we can assume that the end is sorted, *except* when
			 a swap has happened in the last step before the new end. In that case we have to iterate until
			 there is no swap, else we can stop. Agreed?
			 AD: We have to iterate one FULL iteration after the sortRequired is set. A full iteration being
			 starting from the very end of the list, and checking every element with no swap happening. sortRequired
			 is set under two conditions. a) when a new creature is added to the list, or b) when a swap happens.
			 Technically, you could know when b) is the case, and then reduce the endpoint for future iterations.
			 Personally, I think it's more effort than it's worth, but I may be wrong. I don't fully understand
			 your suggestion, but it sounds wrong. You can't, for example, assume the "end is sorted" when a new
			 creature has been added.
			 TJ: You are right. I thought the end would be sorted internally. But if an element which is sorted
			 at the end moves, while we are sorting, then the end becomes unsorted.

2			 SaveKey support
			 Saving a high score should easy, but we have to display it somehow. I would suggest that when the game is over
			 we alternate through 4 displays instead of 3. With the fourth displaying the current high score in a different color.
			 And maybe if the player beat the highscore, its score is displayed in a different color too.
			 Also we probably should do a separate highscore for each starting cave and level. But then we have to remember them!
			 OK for you Andrew?
			 AD: Not so sure about one for each starting cave/level. I'd be happy with just the single high score, no matter how
			 it was arrived at.
			 As to the display, how about blinking the score? A colour is OK, too.
			 Cycling through -- seems OK, but not very intuitive. Don't have any other suggestions, though.
			 TJ: One single highscore would be OK too.
			 AD: How about 5-stage display. The 4th would be "HIGH" using 6-digit, and the 5th would be the high score?
				 No extra character definitions required. Did you get a reply about your request for a "slot" for savekey?
			 TJ: Yes, SaveKey slot is reserved (64 bytes, so plenty of space)
			 Regarding the display, how about adding "GAME OVER" too? The 2x4 pixel display can do that easily.
			 So we would have:
			 - diamonds/time
			 - players score
			 - player/lives/cave
			 - HIGH
			 - high score
			 - GAME OVER
			 Maybe starting the loop with GAME OVER. OK?
			 AD: OK.
				 How about adding "BONUS" too, so we can use that for the bonus levels @ startup?
			 BTW: I need more space in BANK_ROM_SHADOW_SCORING.asm, can you move one CaveBank somewhere else?
			 AD: Done... but this doesn't free up space in the 1K area, just the 2K larger block. Is this what you wanted?
			 TJ: No I need more RAM space for the scoring display code. Hm...
				 We probably have to move quite some code which is not directly required for the SM kernel somewhere else.
				 Sounds like tedious work... :(
			 AD: How about having a completely new bank switched in? This bank just for displaying those scoring things
			 which cycle. e.g., BONUS, GAME OVER, etc?
			 TJ: New bank yes, but I think we have to split setup from displaying code (kernels, graphic data).
				 And we still have be able to patch the displaying code with the setup code! (subroutine in fixed bank)
			 AD: I've been thinking about this. I think we're missing the point entirely. Let's get it finished.
				 A simple score with a colour is all we need. Let's keep it simple, and finish ASAP.
			 TJ: Ok
3			 Bonus live of intermission doesn't switch display
3			 Preserve diamond display mode at life end
1			 Demo mode goes awry and Rockford wanders and gets stuck. Maybe we should reconsider how this is done -- rather
			 than a series of joystick moves, it could be a series of destinations which are used to calculate joystick moves...
			 becasue what I think is happening is it is closely tied to frame rate so if that changes the demo borks.
			 TJ: Acutally it is tied to man processing. So if the demo makes problems, that means that the man process is
				 aborted and not repeated before the next frame. IMO that shouldn't even happen, because in the real game
				 the player could get killed due to this delay.
				 I fixed the demo by adding an extra move, but IMO we should fix the reason of the demo bug.
			 AD: Isn't the reason this: the player goes to get the diamond, but runs out of time. So the system aborts
				 correctly. Next chance it gets, it runs the player again. Which runs the GetJoystick code again. Which advances
				 to the next joystick move -- even though we should re-try the SAME joystick move. So it's really GetJoystick
				 advancing when it shouldn't... NOT the player code not repeating. In fact, it DOES repeat... and that's the
				 reason it all fails, because now GetJOystick is out of synch.
			 AD: In the end, it was a bit of both. The player WAS skipping, but also the GetJoystick WAS advancing. Two bugs.
			 Fixed.
2			 The mixed white looks much brighter on TV than in emulator. I suggest we brighten the score color by 2 or 4 so that
			 the brightness is about identical.
			 AD: OK give it a try.
			 TJ: +2 worked well

1			 Mmh. Cave I. Start the boulders falling. Get killed. Press fire -- half the time it crashes on restart.
			 Now, comment out 'jsr SaveScore' -- and it no longer crashes. No, my mistake. It still does.
			 Fixed. Missing init of DrawStackPointer at start of level. How did this get missed?!!
			 Amazing, but that wasn't the bug. :(
			 Fixed. Missing init of ScreenDrawPhase. How did THIS get missed?!!!! Amazing.

3			 end of life score cycling has a brief flash/glitch. It's not changing properly, in other words.
			 TJ: Not sure what you mean
			 AD: rather than an evenly paced A...B...C...A...B...C, I sometimes see A...B...CA..B...CA..
			 Haven't seen it for a while.
1			 something bizarre has happened to throttle on intermissions :) see INT4, for eg.
4			 PAL cave B seems to have lost the blue colour in the bricks. It's now a very similar purple to the other
			 purple. Does it look this way on a TV, too?
			 TJ: It does. After looking at it again, the color difference between dirt and boulders is too small now. I
			 think I should make the dirt less red and more orange/brown.
			 Done!
1			 B1 is showing some 277 frames. Not sure what's causing it, yet. Just thought I'd write it down.
			 TJ: That's prio 1 IMO
			 AD: Also seeng frequent overflow on M for NTSC.
			 AD: "O1" is overtime simply by scrolling left/right on top row!
			 I *suspect* we're now going overtime because of the overhead of the new time throttle code
			 which is now slower, and "uncounted".
			 TJ: Could be the moved joystick code too.
			 AD: It's no longer the new time throttle code, as that has its own SEGTIME.
				 - Changed man's segtime +1 and that seemed to fix the problem on O1.
1			 check/fix sort. Symptoms -- objects hanging in the air on screen I, randomly exploding butterflies
			 screen M, player disappearing screen M. These issues appear to be a sort-related problem.
			 TJ: Moticed this too. Maybe some random sorts, even if the throttle is overrun already, would help?
			 AD: Switched off sort on game loop object stack swap. I think the sort was corrupting the new object
			 stack as it got 1 chance to run just after the game loop end switch... in an unknown state.
1			 playing M. Diamonds exploding around me, lots happening and the man... just locked up. Rest of
			 game appears to be running OK, but I can't move, or look-around (I was in the lookaround when it
			 locked). It's stuck :(
			 I *suspect* the player has disappeared because of too many objects! Had a look with the debugger,
			 PROCESS_MAN is never reached (PROCESS_FLUTTERBY is) so basically the man object has disappeared.
			 I believe this to be a problem with the sort. Sort is currently disabled.
			 AD: See above.
2			 title theme music doesn't even complete one iteration before it jumps into demo mode.
			 Should be at least two loops.
			 TJ: It does in FINAL_VERSION
0			 TJ: I checked the values of Throttle and it overruns MAX_THROTTLE by far! So it is updated each
			 frame but not checked (and if necessary reset) every frame. This would explain the behavior we
			 notice very well.
			 So please check your code, Andrew. Somewhere there must be an exit/early abort.
			 Alternatively it could be that already some code before is taking extremely long, so that Throttle
			 overruns MAX_THROTTLE before we expect and check it.
			 AD: All creatures are processed BEFORE the throttle is checked to exceed MAX_THROTTLE. This is correct behaviour.
			 So, on M... lots of butterflies... take longer than expected. MAX_THROTTLE is often exceeded. The Throttle
			 IMHO definitely should NOT be checked/reset/updated every *frame*, but only at the end of each game loop
			 after all creatures have processed. Consequently it can easily exceed MAX_THROTTLE in complex caves. That's
			 why my overflow fix (don't write Throttle when carry set) fixes the problem.
			 I don't understand your comment about exit/early abort. I think everything is running correctly NOW.
			 PS: You appear to be inserting tabs :)
3			 The diamond's abort if overtime is causing problems. You can stand next to a diamond and push
			 the joystick towards it. Just a quick tap. The player animates, but doesn't move, because the
			 move diamond code has aborted. So it feels very unresponsive. You have to hold the joystick
			 for several frames to move on a diamond, whereas to move into soil it's always just a tap.
			 I propose that the joytick code OR's (or AND's) the values to the joystick variable, and
			 that this variable is cleared IFF there was no abort on the man's move. That way we get
			 a buffered joystick and we get our responsiveness back.
			 Done.
3			 sometimes if you open the bottom-right 'exit' for the butterflies on M, they don't move out
			 even though there's a clear path. This is because they're not sorted, and they can get into a
			 loop where they never see the exit. Not sure what to do about this.
			 With the recent change to the switch over of object stacks, all objects are now sortable, so the above
			 problem isn't a problem anymore.
1			 Maybe related to lagging:
			 I timed the levels, they all are much slower currently!
			 So I had a look at the throttle code and I don't think it works as you described. To me the
			 logic seemes reversed:
			 If Throttle >= MAX_THROTTLE then Throttle is reset ALWAYS reset to 0. This kills fractional speed!
			 And if Throttle < MAX_THROTTLE, then you check for remaining sorts and only subtract MAX_THROTTLE
			 if sorting has finished. If Throttle is low, this will result into a high Throttle value, causing
			 the next frame to ve very short.
			 Either I misunderstand the code or we are just lucky that it works "somehow".
			 IMO it should be vice versa;
			 If Throttle >= MAX_THROTTLE then MAX_THROTTLE should be subtracted. Except when the sort hasn't
			 finished. In that case you have to recognize the overflow and reset to 0..
			 AD: I quite probably got it wrong. I found it difficult to understand at first, so I may have
				 just stumbled on something that looked OK but wasn't. I'll review it tonight.
			 AD: I suspect I know what's happening. We're not overflowing in the sorting, we're overflowing in the Object
			 processing. That's a whole different thing. Because then what happens is that Throttlespeed is added
			 to throttle, every frame, and we get a wrap-around. That is, Throttle goes over 255 (and so, goes back
			 to something close to 0). When the object processing finishes, the timing loop goes "is throttle past
			 MAX_THROTTLE yet?" and the answer is NO. So the game waits. In fact, it can wait almost the whole
			 MAX_THROTTLE units. In other words, every now and then we get a game loop that is twice as long
			 as it should be. This could be solved by having a two-byte throttle. Your thoughts?
			 AD: Solved by stopping overflow of Throttle when adding ThrottleSpeed!
2			 TJ: I would rather do a demo mode. :)
			 ...and very nice it is, too :)
1			 INT4 -- it's possible to trigger a non-collectable diamond.
			 push the first two boulders to the right, then drop everything from the top
			 we end up with a non-collectable diamond sitting on the lower platform.
			 I think it's probably left on the board as a "falling" object -- should switch to a normal object
			 YEP. Fixed.

1			 TJ's PAL TV color review:
			 A 90%		 grey walls and white bricks are slightly green, dirt less red
			 B 80%		 purple more blueish, dirt less red
			 C 85%		 walls more reddish, dirt too dark
			 D 90%		 walls more reddish (very nice white)
			 i1 90%		 walls more reddish
			 E 80%		 walls less blue, more red, dirt more greenish
			 F 95%		 dirt a bit less red
			 G 75%		 dirt less red, more green, walls more blue, amoeba more yellow
			 H 85%		 wall more blue, dirt more brown
			 i2 95%		 dirt a bit more blue
			 I 85%		 walls much more green, less blue
			 J 95%		 dirt less red, more blue
			 K 85%		 low contrast, boulders too dark
			 L 95%		 walls slightly more red
			 i3 90%		 walls darker, more brown, less red
			 M 80%		 amoeba more yellow than green, dirt less red, more greenish (your colors, Andrew)
			 N 85%		 walls and dirt darker
			 O 90%		 walls more blue, dirt more brown
			 P 85%		 dirt more greenish, walls more red
			 i4 95%		 dirt less red
			 Can I fix them a bit?
			 Please correct the colour definitions so they're how you like them.
			 Except for M, where we have wildly different colours.
			 Can you check out my colour scheme on M?
			 TJ: Done!

2			 When Rockford reaches the exit, the game freezes are bit too late. If e.g. a boulder is falling
			 after him, this will overlap Rockford (not killing) at the exit,
			 AD: Will have a look at it.
			 Looks like the boulder may have been generated after the player killed all creatures, by the
			 blank stack processor seeing there was a fallable boulder -- so it fell. I have now zapped
			 the blank stack, too :) So now nothing should move. Ever!!!!!!
			 Fix didn't work. To test; A1 with TEST_BONUS_COUNTDOWN on. Push the boulder over the diamond.
			 Get the diamond, move to the exit.
			 DEFINITELY FIXED :)

1			 stagger is back, what have I done????
			 seems to be reallllly bad in final_version, too
			 I think this may have been due to the tracking bug, too. I reverted TrackPlayer to the original
			 and now I seem to have good scroll without stagger.
			 TJ: not sure what you mean, it is only a bit slow in M (NTSC). And the tracking bug shouldn't
			 have had any impact here.
			 I wonder if the staggering is related to animation. At least for characters which are not animated
			 every frame (Diamonds, Amoeba) we could e.g. use two different characters and animate them at different
			 frames. Might look odd though, especially for Amoeba. Or maybe even more organic. :)
			 AD: Updated throttling, doesn't abandon sort on intermissions. Zaps the throttle fractional to 0
			 if overtime. Otherwise operates as before. Seems OK. I'm sure the staggering was this issue, not
			 animation. M is now great on NtSC.

1			 In J1 (after many, many! tries) I finally reached the exit. The game was freezing, but Rockford
			 continued running, the time was displayed and not counting down. The game was stuck.
			 AD: I put a further bit of code (earlier check-in) which disabled sorting at exit, and also
			 I have tested this level with a custom 1-diamond to get + exit door near, and it works OK.
			 I hope/suspect the sorting was the culprit, but let's keep our eyes open for other occurrences.
			 Meanwhile, moving it to done with fingers crossed.

1			 There seems to be some unwanted randomness in creature interaction. E.g. check i3, the fireflies
			 never follow the same pattern, instead they seem to act chaotic. i3 is almost unsolvable now.
			 Same problem as below?
			 AD: Try removing the early abort on the sort, as if the creatures aren't all sorted then there
			 will be chaos/randomness. I don't quite understand why the intermissions are running at level
			 5 -- this seems absurdly fast and difficult to me. The fast speed also means that the sort
			 is much much more likely to abort, too.
			 TJ: Regarding the speed, well that's how it works in the original. And it shows were our system has
			 problems, which we should try to fix.
			 I checked i3 at level 1 speed and it still seems pretty chaotic. Also it is pretty unfair, due to
			 the much reduced overview. I reduced the number from 4x4 to 4x3 and moved the man position. Now it
			 is doable and seems not completely unfair. What do you think?
			 AD: OK there are a couple issues here.
			 1) If the sort abort is enabled, then the objects process in chaotic order, so they lose their formation
				 and muck each other up... so lots of chaos and spinning in circles. I have disabled the sort overtime
				 abort and it's much better. But that's a stopgap; we need to consider what to do -- perhaps
				 don't abort sort based on level.
			 2) The actual positioning of the fireflies dramatically affects their behaviour. The block needs
				 to be resting exactly on the diamonds for the formation to march to the left properly.
1			 i4 is not working 100%. For some reason, sometimes the 6 boulders only convert into 4 or 5
			 diamonds, making the intermission unsolvable! Could that be a scan order problem?
			 AD: Could be. Any randomness is likely to be the sort aborting (or not working!).
			 A good solution would be to throttle back to (say) level 3 for the intermissions.
			 AD: Had a look at this. This is a separate problem; I've seen only 4 diamonds/boulders survive
			 the fall to the bottom. I'll get this fixed ASAP.
			 AD: Fixed. Diamond processor blanked the diamond, then realised it didn't have enough time to
			 continue, then aborted. So the diamond never got rewritten -- and so disappeared.
1			 Board colors are not adapted when switching between PAL and NTSC and then restarting cave. (maybe the
			 throttle speed fix?)
4			 Butterfly exploded against exit door flashing after level complete.
			 AD: Creatures now stop when level complete, so this won't happen.
1			 look-around scroll is broken. A1, look-scroll to the right. Let button go. Moves further right.
			 No idea what's changed...? Ah... didn't you just optimise the tracking...?
			 BUG INTRODUCED IN REVISION 586
			 TJ: fixed (using signed branches now)
2			 spotted an overtime glitch on I5. May need to revisit the segtimes I modified!
			 TJ: stress tested increased MINIMUM_SEGTIMEBLANK by 1
1			 Game is sometimes stuck after you die and then want to reenter the screen. Only a blank square is
			 displayed at the entry. Nothing else happens. (tested on N1)
			 AD: Have never seen this and cannot reproduce.
			 TJ: I tried again in N1. Just run from left to right through the vertical butterfly alleys until
			 you get killed. It usually takes quite some attempts, but eventually it will happen. :(
			 It seems like there is no man on the board for process.
			 UPDATE: I think I now know how to reproduce:
			 1. Works only with butterfly (not firefly or F1) explosions
			 2. You have to press fire at the correct moment
			 3. This moment is when the Rockford explosion turns into a blank (right when e.g. the created diamond
				 does enter the now empty spot)
			 For fixing the bug, maybe the new Rockford explosion bug I added below will make things a bit
			 easier.
			 BTW: I once even managed to create the last part of the explosion at the entry door. :)
			 AD: STILL cannot reproduce after lots and lots of tries.
			 TJ: Pressing fire during the very last frame of Rockford's explosion is important.
			 TJ: Seems like the bug has disappeared now. I tried maybe 100 times and couldn't reproduce anymore
3			 When Rockford reaches the exit door, the door should disappear and Rockford should be displayed instead
			 Completed exit door changes. There's a new 'unkillable' man character added. When the player hits the
			 exit door, that character is put on the board. Nothing should be able to kill or be killed by it.
			 Test using butterfly on A with the TEST_BONUS_COUNTDOWN flag
1			 SIZE_BOARD_X = 64 ;*** <<<< DO *NOT* CHANGE THIS TO OTHER THAN A POWER OF 2!!! ***
			 SIZE_BOARD_Y = 32
			 SIZE_BOARD	 = SIZE_BOARD_X * SIZE_BOARD_Y
			 I think we can now change that. Then the board would fit into one 1k bank and the boardbank would
			 be constant. That would save some space and quite some CPU cycles.
			 For keeping the engine moe flexible, we could use some IFs.
			 BTW: SIZE_BOARD_X seems not limited to 2^n sizes.
			 AD: It was restricted so we had no (zp),y writes over page boundaries.
				 Provided this can be guaranteed not to happen, it's OK. I will need to check the code.
				 I think it's dangerous to assume it's OK -- the warning was there for a reason!
			 AD: Checked -- its OK because BoardLineStart tables cater for page crossing.
				 Fixed the size calculation so it's strictly correct.
1			 ThrottleSpeed has to be set AFTER DecodeCave if we want to use CaveDisplay, else we have to check
			 cave numbers. -> Game currently much too fast! :)
1			 Throttle is staggering on M for NTSC.
			 AD: Moved platformselect to the end of DecodeCave. Staggering gone, too.
3			 In the original, when Rockford dies, he does NOT explode. Only the objects killing him explode..
			 This included falling objects, though it makes no difference, since they explode at
			 Rockford's spot.
			 Also when your kill Rockford yourself, there is no explosion, just the cave restarting immediately.
			 So Rockford NEVER explodes.
			 AD: Too costly to fix. Also, I *like* seeing rockford explode and the consequences of that, after death.
			 TJ: OK for me, doesn't make any difference to the gameplay anyway.
1			 need to revisit amoeba fast-growth. Is it still OK?
2			 Maybe Amoeba should grow slightly faster (30 instead of 27)?
			 TODO: visit amoeba timing once again.
			 TJ: I didn't change anything there, did you? Or why do you worry?
			 AD: yes, the creature is no longer used. So the write to the squares happens immediately.
			 It no longer hangs around for a random time before showing. So the fast-growth is much faster.
			 It needs to be adjusted.
			 TJ: I reenabled the FAST_GROW limitation, but the limit is not much lower than before. IMO speed
				 is OK now (and in perfect relation to SLOWGROW :), but the amoeba turns into boulders much
				 earlier because we have a lower size limit.
				 Shouldn't we change that to the original 200?
			 AD: Yes. Not sure why it's on 133 so I've changed it.
1			 I was playing level A5. The time showing 042, but the game has gone into 'time out' mode. That is
			 my player is still visible, but I can't move, and the scoreline is cycling through the various
			 display options. In other words, it has prematurely detected an end-of-timer.
			 TJ: Me optimizing a bit too much. Again...
3			 Spotted a diamond on M just under the amoeba (after a butterfly had exploded) that I couldn't
			 collect. It was hovering in mid-air -- should have fallen. I think this may have been an aborted
			 diamond due to too many creatures...? Not sure why I couldn't grab it, though.
			 TJ: Saw the same yesterday too. IIRC it was't directly below the Amoeba. Didn't try to grab, since it
			 got removed by another explosion.
			 TJ: A vague guess: Could this be due to a mid processing abort at BlankDown of a non-falling,
				 rolling of diamond? This would not be set to "FALLING" in that case.
			 AD: I think I know what it is. A while back we had a problem with chain-explosions of butterflies.
			 TO fix this, I generate the diamonds NON-falling -- because if a diamond generated above a
			 butterfly, and it was considered already faling, then it would fall and kill the butterfly, making
			 a chain-explosion. If a diamond generates above a butterfly, it should not fall on it. BUT, my
			 fix has obviously caused diamonds to hang in the air, because when they have nothing below them
			 they sometimes do not fall. I will have to think about a solution to this.
			 AD: OK, I spotted a non-killable amoeba too. And i Know what's happening! Basically, we have too
			 many creatures on the screen. So when the amoeba (or diamond) tries to process, our failsafe code
			 is kicking in and denies the generation of the replacement object. So, although the board has
			 the character... there is no corresponding creature to process it. Now, normally, this is how things
			 are supposed to happen with diamonds. But I couldn't grab the diamond. Why? Because it's not really
			 a diamond... it's a FALLING diamond, with a different character number.
			 Secondly, why did I see a non-killing butterfly stationary? Because the butterfly creature aborted
			 and didn't continue as an object. But the character is still on the board. But it's butterflies that
			 kill the man, not the man who detects he's killed by butterflies. So we had a stationary flapping
			 butterfly on the board that couldn't kill.
			 SO, what's causing this? Too many creatures. Because I changed the way that explosions worked recently
			 to try and match the original exactly. IN particular I made explosion characters explodable. What this
			 means is that if we get an explosion on top of another explosion, the last explosion will create
			 new explosion objects over the top of the original explosion objects. SO we will have two or more
			 objects processing for the same board square. THis wouldn't be a problem, but it ends up with too
			 many creatures and we start getting dropouts of diamonds and butterflies.
			 So I've switched back to explosion characters being non-explodable. The visuals of this will be
			 very hard to detect any difference. And we should have way fewer objects in use, which will in turn
			 lead to much less chance of orphaned diamonds or butterflies hanging around.
1			 FINAL_VERSION does not assemble.
			 TJ: fixed BANK_LOGO.asm
1			 Throttling causes staggering.
			 TJ: I think, the basic idea is, that sort should be allowed to have e.g. one or two extra frames if
			 necessary, so that the game doesn't slow down, right? But currently, extending one frame, shortens
			 the next frame. So on average you gain nothing for sorting.
			 AD: You fixed this, right?
			 TJ: I hope so. :)
2			 sort really isn't working. Fix.
			 idea: use FIFO instead of LIFO for objects/blanks -- this puts new objs/blanks onto lists in
			 order they will be processed, making the sorting more efficient.
			 Objects done. Not doing blanks.
1			 is it my imagination... I was playing M1.... LOTS of diamonds... and I could swear that I saw TWO
			 door-opening flashes. One early on, then another about 2 minutes later. Need to check this -- this
			 note just a reminder. Not totally sure it happened.
			 TJ: Will happen if you collect 100 extra diamonds. The BCD variable will reach 00 then.
				 What should we do here? Add another variable for the hundreds? The display is prepared for that.
				 Or limit the number to 99? The original simply overflows and starts with 00 again.
				 Preventing the extra flash is done.
			 AD: I'm inclined to limit the # to 99.
			 TJ: done
2			 After life gained, the life display should show
			 AD: Actually, we should just cosmic-ark effect.
1			 IS it possible to complete A on level 5??? Time seems really really short.
			 TJ: I managed once. :) But you are right. I compared with the original.
			 There the game runs faster overall, BUT the timer still ticks at the initial speed.
			 (1 tick = ~1.2s), where our timer ticks is just ~0.8s. Plus the inital second seems
			 too short. I suggest that we change the way we calculate the time. Instead of couting
			 down the frac variable, we should add a level depending fixed value and check for overflow.
			 the faster a level runs, the lower that value becomes. We can finetune the speed very well
			 that way. Should I go for it?
			 BTW: IMO we should use the same for throttleing. We can finetune the speed much better that way.
			 AD: OK, that sounds reasonable for the time. As to throttle, it has to be integral frames anyway
			 so I don't see any advantage to having a fractional fine-tune for that. I don't want to have
			 3-frames then 4-frames just to try and get 3.5 frame average.
			 So, no to the throttle... yes to the time.
			 TJ: But that will be not noticeable at all and we are way more flexible then. I am all for it.
			 AD: OK, let's try it and see how it goes.
			 I modified the throttle for NTSC/PAL to slower, and as close to each other as I could get
			 in terms of FPS. LMK if you think it's too slow.
			 TJ: I think it is much too slow now. For reference go to Cave E and move from left to right. It
			 takes ~5.6/5.0/4.5/4.2/4.0s in the C64 version.
			 Our current values result into: ~6.8/6.8/6.1/6.1/5.4s (NTSC)
			 We should try to get close to that, even if we do not agree on fractional throttleing.
			 AD: Agreed.
			 TJ: Throttling and constant "seconds" (1.2s) done for NTSC and PAL. Andrew, please check.
			 AD: Seems OK. I have rewritten the sort overtime allowance. It's now 2 extra frames, maximum. Have also
			 disabled sort on butterflies, firefly. M has significant slowdowns on NTSC version.
2			 selection screen cave# is not initialised. Sometimes starts other than A
			 TJ: Could it be possible, that you moved the joystick while the logo is still displayed? It's not
			 reset after switching from logo to selection mode. Should I change that?
			 AD... Yep. It needs to be clean on entry.
			 TJ: agreed, fixed
3			 Maybe look around should also work withot a man, funny to see what is going on after you died :)
			 BTW: Why was there a threshold of 1 for look around? I wrote shorter code for that.
			 AD: Because originally it was triggered by button-press. Which was used for grab. So I didn't
			 want to look-around unless you held down the button for a lengthy time.
			 AD: Not a bug, not going to change -- now the look-around is on the button.
1			 "Chain explosions do not occur (a butterfly caught in another butterfly's explosion does not in
			 turn explode, creating even more diamonds)."
			 ...and...
			 "The explosion spaces act like wall in the sense that creatures can not enter an explosion.
			 Should a falling diamond or boulder hit an exlosion, it will stop falling (complete with sound)
			 as if it were a bit of dirt; they do not roll off. Explosions can be exploded again (they get
			 reset to a stage 1 explosion, and set to the appropriate type of explosion: explode to space,
			 or explode to diamonds)."
			 TJ: Does it work like that? I am a bit unsure here.
			 AD: We get chain-reactions because a butterfly explodes, turns into diamonds which then
			 fall onto an adjacent butterfly, causing it to explode. We don't have chain-reactions caused by
			 the explosions themselves.
			 I'm pretty sure explosion spaces act like walls, as expected. Even though we may have two or
			 more 'explosion creatures' handlng a single square, the end-result will be that the last explosion
			 will be the result of the explosion. Have to check this one!
			 ... and I did.
			 Two fixes. 1: explosions now check to see if the board square contains what they expect. If NOT, then
			 the explosion object dies on the assumption that another creature (probably an explosion) has taken over.
			 This means that the explosion characters themselves ARE explodable, so the last explosion has priority.
			 2: diamonds from exploding butterflies are generated as NOT falling. There was a non-initialisation of
			 POS_VAR which just happened to have the falling flag set. This in turn caused a just-generated diamond
			 to fall on top of an immediately-below butterfly which then exploded. Hence, chain reaction. You can
			 see/test this by going to M, bottom left and getting yourself killed by standing next to the butterfly;
			 on the old version you get a chain reaction, and on the new one you don't.

2			 Extra life should be provided at START of intermission incl. Cosmic Ark effect!
			 Currently people are not aware of the bonus life.
			 Put the star effect upon reaching the exit door -- IMHO that's when you earn the life.
2			 DecodeCave's fill is broken. It draws the outline OK (I think) but in the inner
			 part it either fails completely (guess) or draws butterflies (definite). This explains the large areas
			 of unexplained butterflies in caves (set width/height large and have a look around).
			 e.g., intermission 1 - set width to 28,12 and scroll right -- columns of butterflies
			 now comment out the fill lines in the cave defn. No butterflies.
			 TJ: fixed, the problem was using magic numbers for the fill characters in the cave definitions
			 Since we only have slighlty different characters, this problem wasn't obvious.
			 Besides the intermission, "Tracks" was also broken.
1			 pretty sure intermission3 is broken. Did I see butterflies on that screen?
			 There are no butterflies in the cave definition. And I'm pretty sure the FILL is not working
			 in decodecave. So FILL+CHARACTER_FIREFLY will not work.
			 TJ: see above! :)
1			 REMOVE slocum sound system!! songPlayer
2			 sort keeps a track of the throttle, and stops sorting if overtime by too much.
			 this should help-out when we have problems with lots of cascading boulders, when we don't really
			 care about 100% correct physics.
1			 after P5/I4.5, the next screen should be A5. Currently it's A1.
1			 major issues writing to 'playerscores'... seems to corrupt the score/diamond/digits
			 what's happening here????
			 TJ: The scores are ok, but the kernel patching code updated only the changed digit pair(s). So we
			 had to patch all three digit pairs when switching players.
			 Also found and fixed a bad bug with the 1st digit.
3			 +AD: Push boulder bug. I've seen this or similar about 3 times. When you push a boulder it basically keeps going
			 and you with it (sometimes). Instead of pushed one to the side, it clears 4 or 5 squares.
			 TJ: Never seen that one, I will try to reproduce
			 AD: if you push boulder when it's on top of soil, all is OK. If you push it when it's on a row of boulders
			 you can see the super-push.
			 TJ: still not able to reproduce, I tried in A1
1			 The increasing tone used to show time is short (9 seconds... 8 seconds...) happened with 150 seconds on
			 the clock. It played about 8 or so times, then stopped. Game continued playing.
			 TJ: Which level was that? What did you do before?
2			 +AD twice now, I've played screen APOCALYPSE where the amoeba simply did not grow. No change from initial square...
			 - UNTIL time 20 was reached. Then it grew 3 squares... AND CHANGED INTO DIAMONDS. What?!!
			 + TJ: the non-grow problem should be fixed by the random number improvement
			 +AD: following my analysis of the random routine, I have my doubts!
			 -TJ: I don't :)
???			 SortedObjPtr-1,y in OKStack should cause an error then, no?
			 AD: No. I believe it's only a WRITE which fails. Nonetheless, I have been changing some
			 of the read code as well, as it's easy and doesn't cost much.
				 ; WARNING: THESE MUST NOT CROSS PAGE BOUNDARIES!!!
			 ObjStackX	 ds OBJ_STACK_SIZE
			 ObjStackY	 ds OBJ_STACK_SIZE
			 ObjStackVar	 ds OBJ_STACK_SIZE	 ; for general use
			 ObjStackType ds OBJ_STACK_SIZE	 ; type of object
			 SortedObjPtr ds OBJ_STACK_SIZE							 ; list of indexes of objects (sorted)
2			 Intermission 1: The butterfly shouldn't move, just circle clockwise
			 THIS IS ABSOLUTELY NOT CORRECT! CHECK OUT YOUTUBE VIDEOS. It should move around the wall, clockwise.
1			 DISPUTED BUG.
			 I died because I ran out of time. I should have exploded! But didn't. Then, butterfly hit amoeba and
			 diamond fell on man. No explosion! So diamond and man were superimposed.
			 The REAL issue here is that player should explode when time = 0. He doesn't -- just has no control.
			 TJ: We had that already, it is like in the original (just without the bug you describe :)
			 AD: Brings up an issue, really. Why are we reproducing bugs in the original? It's supposed to be
			 an Atari 2600 version of Boulder Dash, not a bit perfect clone of a particular machine's BD.
							 TJ: If I would consider it a bug, I would agree. But IMO it's not a bug.
2			 You lose a life when the timer gets to 0, but really it's 1 second too early.
			 i.e., it should happen when the fractional time reaches 0, not just the integer time.
			 TJ: No, the life is lost when the displayed time reaches 000, not when the 000 second
				 is over. (BTW: that's like in the original ;). If you e.g have 100 seconds for a
				 cave the timer start at 100. If we would allow the 000 seconds to be completed,
				 you would get 101 seconds. So we just have to make sure that the initial second
				 is really one second long.
4			 +AD There are TWO independant magic walls on level P. The code only caters for one. So, if you start the magic wall
				 on the left, the right-side one animates too! This can possibly be solved by introducing new magic wall character
				 numbers. But, for this demo... not to be fixed. If there's ever a full version with this screen, this problem
				 needs to be addressed!
				 Incorrect assumption. Orginal has just the one magic wall split into two sections. Existing code works properly.
2			 magic wall time... very short on o1. Check timings to reasonable levels
			 TJ: that's intentional, you have to prepare the avalanche before triggering the wall,
				 it's pretty easy then.
???			 When I used F1+F2 to trigger next level, it was stuck on displaying the score only.
			 Obviously we have some initialisation and ordering issues here.
			 TJ: Or maybe a banking problem?
			 We aren't using F1F2 for next level so this doesn't apply
1			 Amoeba levels (G,M) crash immediately (Amoeba code broken?)
			 incorrect register in decodecave. whoops.
1			 + TJ: @AD, your colors for the demo levels H and M are (almost) identical, IMO, a bit more difference wouldn't hurt
			 +AD: agreed. I will play with colours before release.
			 -TJ: You know, that I would suggest using my colors. ;) (those are carefully selected to match the C64 original)
1-2?		 M needs more butterflies, too easy to kill them all, We have 13, I tested with all 30 and it worked
			 very well. The faster Amoeba scanning seems to help here.
			 Yes, but difficult when sort is active. Will increase when possible.
2			 Intermission cave colors have not been done yet
3			 Remove unused data in CaveBankX.asm
1			 in MAZE extra diamonds are worth 0. Why?
			 in CROWD, ditto
			 in WALLS, ditto
			 Maybe because it makes no sense :)
			 TJ: values are from original, IMO we shouldn't change that
			 IGNORE
4			 - there appears to be a crackling sound (volume overload...?) with lots of boulders falling
			 - the volumes of the sounds have been adjusted (TJ), AD please check
			 - checked, but there's still crackle/pop at start with lots of boulders falling.
			 - TJ: can't be a volume overload then, because all boulders use only one channel, maybe it's the sound code itself... or your ears? ;)
			 + AD: Have you listened through headphones?
			 IGNORE
3			 shrink to 16K.
			 not going to worry about this for the demo.
			 IGNORE NOT IMPORTANT
2			 seems sluggish again...?
			 TJ: It takes ~5.6s to run form one side of the cave to the other. That's the same time we had before. So nothing changed.
			 IGNORE NOT A BUG
3			 life counter corrupt when F1-F2 to next level after all lives gone (can be ignored, as we have changed F1F2 anyway)
			 F1-F2 on demo to 2nd screen (M1) crashes
			 - but manually selecting the screen is OK. Presumably transition is OK too. Bank??
			 IGNORE
1			 TJ: Soemthing is broken for PAL, screen flickers horrible
			 - seems to be just a Stella problem, if you start with PAL everthing works fine
				 @AD: do you face the same problem?
				 YES!
				 TJ: Is that really a problem? PAL works fine on my Krokodile Cart
				 OK< but as long as Stella starts up OK for the release version with no switches required.
3			 Remove Paul's music code + data
			 Completely replaced by batari's sounds, thomas's rewrite of the code
1			 scoreline gets "stuck" on initial P1... display. Even when getting new points, it sticks there
			 you know you're getting close to the end when you start hacking things.
			 scoreline and end of life scoreline mods were stomping on each other.
1			 player# incorrect start?
			 'whichPlayer' needed to be toggled... i optimised it out accidentally
1			 init butterfly facing on 1st bonus level -- it should be going around the wall anticlockwise
			 fixed, but are there any other face/init issues?
1			 need to handle the intermissions
			 a) Display something meaningfull (or nothing?) as the cave ID
			 b) don't restart intermission when losing life -- go to next cave :)
			 c) don't lose a life when dying -- it's a bonus after all (correct?)
			 ------
			 Selection screen. As you suggested, TJ, incorporate the BD title with a select text area on bottom.
			 TJ: Will do, but I need another bank for it, since I have to play the new music there too.
			 Q: how does level progression go...? A B C D intermission E F G H intermission I J K L intermission M N O P intermission?
			 What options are available -- can you only choose caves you've previously reached?
			 Can you choose an intermission as starting point?
			 Also, I assume if you get killed on intermission, you DO NOT lose a life?
			 TJ: Yes and yes. Effectively, if you get killed you loose your bonus life.
			 [url="http://www.elmerproductions.com/sp/peterb/insideBoulderdash.html"]http://www.elmerprod...oulderdash.html[/url]
1			 At end of game, there's no way of seeing your score!!!! The score needs to be shown as a priority
			 above the diamond/timer when the player loses life.
			 TJ: See ToDos below :)
			 Score is displayed when game is over.
			 AD: RESTORED AS A BUG -- NOT WORKING.
			 TJ: It's not easy to implement, the logic has to be spread over several places. So I need to know when exactly it doesn't work.
			 TJ: Andrew, please check
			 AD: I think this is OK.
			 Changed to end of life- - cycles through score displays.
1			 push boulder broken after 1p2p upgrade
1			 reset (F1F2) occasionally results in black-screen (i.e., never shows selection screen)
			 TJ: corrected stack pointer, that is one bug fixed, not sure if there is another one
1			 Something is broken at startup, the selection screen doesn't show and you immediately
			 start at A.something.
			 The A-something is fixed. The missing selection screen is because FINAL_VERSION is set in notboulderdash.asm
			 This new flag overrides all other settings, to guarantee a perfect state for the final game. Set it to NO.
			 TJ: With FINALE_VERSION = NO it doesn't assemble anymore.
				 BANK_FIXED.asm (300): error: Label mismatch...
					 --> PROCESS_SELECTOR 0000
			 I changed
					 IF DEMO_VERSION = YES || FINAL_VERSION = YES
				 PROCESS_SELECTOR = 0
					 ENDIF
			 but then I get
				 0 3046						 DEFINE_SUBROUTINE DecodeCave
				 1 3046			 00 06	 BANK_DecodeCave = _CURRENT_BANK
				 2 3046						 SUBROUTINE
				 DecodeCave.asm (17): error: Label mismatch...
					 --> DecodeCave f041
			 It seems that the cave size calculation is the root cause.
			 Your FINAL_VERSION changes seems to overstress DASMs capabilities.
			 So DASM seems to be freaking out again.
			 *** HELP! I am lost! :(( ***
			 UPDATE: Doesn't help. :( Same errors with FINAL_VERSION = NO
1			 initialiation error with cave/level when in FINAL_VERSION mode.
1			 Cosmic ark stars extra life effect broken :(
			 TJ: side effect of fixing the look around scanline bug
1			 -TJ: When moving, you (sometimes) can make a Butter-/Firefly explode without dying
			 + AD Is this still there after the sorted creatures (yesterday) implementation?
			 + TJ Unfortunately yes. It looks like Rockford triggers the fly kill, but moves out of range of the deadly zone before he gets killed
			 + TJ IMO this should have a higher priority (1 or 2) as it is pretty easy to abuse
			 +AD: I believe this is now fixed. I IMMEDIATELY place 1st explosion character on board when object
			 explodes. This removes the possibility of the man triggering an explosion and then moving away and
			 avoiding it.
			 TJ: Nope, still not fixed. Run in opposite direction of the fly while you pass it.
			 THIS ONE IS GOING TO STAY. Not enough time to fix before Sunday's release.
			 TJ: But now we have. :)
			 TJ: Not reproducible anymore (Note: passing a fly without killing BOTH is possible in original too)
2			 use look-around on M1. Scroll left-right. Screen scanlines jumps from 262 to 263.
			 TJ: happened due to Rockford positioning unexpectedly right
1			 problems with end-of-life score sticking and not showing etc.
			 TJ: for me it always shows. When does it not?
			 At end of life :) It shows at end of game, which is OK.
			 TJ: done?
			 AD: Yep.
1			 Getting unresolved symbols error when assmebling (CAVE_NAMED_INTERMISSION_1 .. 4)
			 These are commented out for space reasons. Do we have a DASM incompatibility? I will look at this ASAP
			 but perhaps you can just totally remove the references from your version, for now.
			 TJ: I am using the latest DASM 2.20.11
			 TJ: Ok, the problem is completely different:
			 I get a LOT of Label mismatch errors, here is the first occurence from the lst file.
					 0 2bf2						 START_CAVE INTRO
					 1 2bf2				 CAVE_START SET *
					 2 2bf2			 00 05	 BANK_CAVE_INTRO = _CURRENT_BANK
			 CaveBank0.asm (39): error: Label mismatch...
				 --> CAVE_INTRO f3c8
					 3 2bf2				 CAVE_INTRO SUBROUTINE
					 4 2bf2				 MAX_CAVE_NUMBER SET MAX_CAVE_NUMBER + 1
			 The problem starts with revision 295, I suspect the IFNCONST not working for me.
			 AD: And yet I can do a compile a clean grab just fine. I will have a look.
			 TJ: Works! :)
1			 snatch-up under a boulder. It doesn't fall. I broke something.
1			 Butterfly crash on M1
			 This was caused by the optimisation done in blankstack processing. Not exactly sure why, but revert
			 to the old code 'fixed' the problem.
1			 firefly merged, but not facing correctly - fix
			 Firefly is now initialised with direction+8 (in DecodeCave) and uses same butterfly code.
3			 I notice much more flicker in TJ_MODE now, it seems you have broken some segtimes. Really, those with
			 a * where tested VERY thouroughly.
			 (unless you optimized heavily, flies and bigbang are definitely too low now)
			 trying to find the exact timings for things and work from that. currently bigbang looks too short.
			 ...
			 +AD Many timing glitches now appear on NTSC version. The danger with testing only on preferred (faster) version!
			 I assume we are going to be releasing a PAL version for the demo. It has advantages :)
			 - TJ, yes, but IMO NTSC is better for most people. I like the switch we have. We better increase the scanlines for NTSC a bit (I already did)
			 - AD timing now seems OK
			 - TJ: I still notice some timer overruns, e.g. in A5 go into the vertical path between rocks on the right, go down and let the rocks kill you
			 + AD - I tested A5 probably 40 times in a row. Move right to rocks, move down get killed (taking out the wall). No glitching.
			 + TJ: Hm, for me it still happens EVERY(!) time. Note: I am moving in the tunnel between the two vertical rows of rocks
			 2nd Note: I am playing with 276 NTSC scanlines, it doesn't happen with 262, that's why you didn't notice
			 TJ: Do we declare this to be solved? I played a lot today with MY settings and there was one single
			 occurence I noticed (during avalanche in Funnel, just once)
			 Most timings are good. Can work on the absolute bee's knees later.
1			 colours crap on C. check colours on all levels/screens
1			 -TJ: If the amoeba turns into diamonds while you lookahead, weird things happen. Rockford is teleported into the diamonds created!
			 + AD: I will have a look through the amoeba code. Could be another banking issue? Or a sto var-1,y addressing problem...?
			 + TJ: 12/7, problem still there. Tested with A2, move to upper left, then lookaround to lower right
			 - a) scanlines increased by 1
			 - b) you hear boulders falling (as if you are moving which shouldn't be)
			 - c) sometimes Rockford gets warped somewhere else
			 >> This happens when butterflies change to diamonds (hitting amoeba), too, while you're looking around.
			 >> doesn't happen if diamond object immediately dies
			 Caused by Bypass of player position variable initialisation :) Fixed.

1			 Amoeba appears to be uninitialised..? If you F1F2 to M1, then it draws the screen and crashes back to reset.
			 If you remove the amoeba from the cave, all is OK.
			 Amoeba works OK if the selection screen is shown first.
			 But if the first screen is M1, or if you skip to M1, then amoeba crashes/resets the game.
			 by the time we hit processamoeba (putting an amoeba object on the board) it's too late.
			 knocking this out is OK, but it indicates a problem elsewhere.
			 So. Mmmh. Two issues.
			 #1 should not generate amoeba object in decodecave -- amoebas are handled by separate code
			 #2 there was a bank save at the start of PROCESS_AMOEBA. What was I thinking?
			 Appears to be OK now.
1			 add JENTZSCH/DAVIE tag inside free space
1			 Diamonds through magic wall -- are some disappearing? YES.
			 could it be the wall character....? No. Appears to be looking at wrong destination square when deciding
			 if where it is moving TO is blank. Needs to be fixed!
			 Fixed! This was a INTIM abort in the boulder code, but AFTER the boulder had been erased because it was
			 stepping through the wall. Required another intim check (SEGTIME_MAGIC) to ensure enough time available.

1			 Sort has a problem. Causes screen black-flashing. Adding illegal creatures...?
			 NO. I just saw a black-flash and overtime screen shake in M1 ... without the sort :(
			 TJ: I think the problem could be, that calling the sort adds some overhead. The previous timer checks assume
				 that there is only a certain, limited time required after the check. If you add another call and
				 an additional check, the previous check values may have to be increased

1			 TJ: Maybe related: E1, open one box and move to the bottom. Keep pressing down while the firefly come near to you.
				 No explosion is triggered! It seems the game is one step down ahead.
			 AD: I cannot reproduce this.
			 TJ: New fact: If the fly is above or right of Rockford, he doesn't get killed. From below and left it works.
			 Seems to be a DASM bug, here is the list file:
878 3bb7				 a6 80				 ldx	 Surround	 ; 3
879 3bb9				 bd 54 fe			 lda	 GenericCharFlag,x	 ; 4
880 3bb9							 .DIR	 SET	 1
881 3bbc										 REPEAT 3
882 3bbc				 a6 81				 ldx	 Surround+.DIR ; 3
883 3bbe				 1d 54 fe			 ora	 GenericCharFlag,x	 ; 4 = 28
884 3bbe							 .DIR	 SET	 .DIR + 1
881 3bbe										 REPEND
882 3bc1							 ,x				 ; 4 = 28
883 3bc1							 .DIR	 SET	 .DIR + 1
881 3bc1										 REPEND
882 3bc1							 ,x				 ; 4 = 28
883 3bc1							 .DIR	 SET	 .DIR + 1
884 3bc1										 REPEND
			 REPEAT seems broken (something I noticed in the past already, just not with BD). I'll fix the code.
1			 Music sounds different, does it start at a different point?

2			 While switching levels, the screen should be blanked and before getting enabled again, a proper
			 black screen should be generated for some frames. This allows TVs to sync without visible screen roll (did that in Jammed)
1			 keep scanlines constant between copyright, title and game
			 (solved with resync, see above)
1			 The explosion bug. Having difficulty finding it.
			 - when it happens, there's a black flash the whole screen
			 - it doesn't seem to be time overflows; if I put diagnostic colours just before the INTIM checks, all seems OK
			 - occasionally there are overtimes, but I think this is a different problem
			 - I have disabled much of the explosion0 code (that is, the checks for explodable, etc) but the problem is still there
			 - traced into processexplosion and disabled from PostExplosion onwards (rts) still there.
			 - disabled the multi-stage explosion creature regenerating -- it goes straight to blanks/diamonds -- still there
							 TJ: Is that the problem I reported for A5?
							 - the problem seems to disappear if you create 1 or 2 less explosions (or explode near the steel wall)
			 RESOLUTON:
			 1) Man was not catering for potential overtime abort in bigbang -- and did not pause for redo
			 2) Sort is borked.

1			 There could be some variables not initialized after Title and Copyright screen
			 This caused the tracking problem after I changed the ORG for the Title variables
			 I added clearing the RAM after displaying the title screen. Hope that is sufficient.
			 AD: I dislike fixing things this way. I would like to make sure everything is initialised correctly!
			 The initialisation was borked when using the selection screen. Bypassed. I corrected this and hope
			 that this was the major problem with tracking, blank screens and similar.
2			 Pressed restart (F1+F2) just as an explosion happened to me, and the screen went blank, rather than back
			 to the title.
			 TJ: could be related to the problem above. Hope clearing the variables fixes that too.
			 I was on the title screen, pressed the button -> blank nothing (x2)
			 See above comment -- bypassed initialisation was to blame. Probably.
3			 In the demo version, the level numbering is weird. The first screen is labeled "B1". I think we should
			 use the correct level numbers as per the game.
			 +AD: fixed -- the cave definitions now include a "name" for each cave.
1			 After the last life lost, the score should be displayed and stay
2			 Time should flash when nearly running out. People playing with no sound have no cue that its about to end.
			 Just for you, Andrew! :)
2			 Can we get a ™ symbol on the title screen next to DASH? I just know fSS are going to ask for one
			 it would be easy in PF, but could we have a sprite there?
3			 Title is showing 263 scanlines.
1			 Boulder physics has changed. It's almost like the sort isn't being called anymore. What I suspect is
			 happening is that the recent change to fallable objects (to fix push bug) has caused issues with
			 the physics because now objects are not on top of rounded objects (that is, the falling objects are
			 not rounded objects). They probably should be.
2			 Need to debounce the joystick button on the title screen so that if it's pressed when you enter
			 it waits for release and THEN press before exiting.
1			 Vertical scroll tracking is broken. Choose C1 and move player down. No tracking.
			 TJ: only if copyright screen is enabled, I suppose a variable is not initialized correctly
			 also seen with just title screen enabled. Level l1 initial scroll position totally borked.
			 TJ: set ScollBits to 0 in LevelInit
1			 add NTSC/PAL timing for copyright screen.
1			 - I grabbed a under a diamond and it didn't fall :(
			 - TJ: To test: Greed, open the left box by taking the first diamond, let everything fall down and the continue like
					 in the screenshots provided
				 - TJ: Greed example doesn't work anymore, due to change in logic. Is the bug fixed also?
				 - TJ: No, bug is still there, just enter the top and go one to the left, then grab the diamond
1			 add NTSC/PAL timing for title screen. Done, incl. color
			 + ad Play music on title screen
			 + ad use 6-sprite section beneath title screen for FSS logo
			 - grab diamond should not grab when diamond is falling (you should be able to push or grab moving boulders and diamonds)
			 TJ: seems really hard (== time consuiming) to fix
			 one would have to check if the boulder or diamond is in the object stack and falling
			 or is there another way to find out?
			 e.g. use a different character on the board for pushable objects in the stack...?
2			 + I think I know the "single cell to diamond" problem:
			 the amoeba finally grows by two squares, which then block the single one
			 those are put one the board delayed when the next scan has just passed their position
			 so only the original cell is checked which is blocked by the two new cells
			 +AD: good catch! See my suggestion about a counter for creatures about to go on the board. Don't change to diamonds/boulders
			 when this is non-0
			 TJ: Fixed by setting NON_ENCLOSED when a new amoeba cell is added to the board
			 -TJ: Sometimes the player's explosion sound is not triggered, though it has max. priority
				 - e.g. in A5 (see example above)
				 + priorities were not checked for boulders/diamonds
			 + TJ: Soemthing is broken for PAL, screen flickers horrible
				 + emulator problem: -format NTSC cause this
				 + I think I know the "single cell to diamond" problem:
				 the amoeba finally grows by two squares, which then block the single one
				 those are put one the board delayed when the next scan has just passed their position
				 so only the original cell is checked which is blocked by the two new cells
				 +AD: good catch! See my suggestion about a counter for creatures about to go on the board. Don't change to diamonds/boulders
					 when this is non-0
				 +TJ: replace with non-enclosed solution
			 + move SWCHB for full reset into normal game loop
			 + TJ: While last 10 seconds are counting, restart after death doesn't work
			 +AD twice now, I've played screen APOCALYPSE where the amoeba simply did not grow. No change from initial square...
				 - UNTIL time 20 was reached. Then it grew 3 squares... AND CHANGED INTO DIAMONDS. What?!!
				 + TJ: the non-grow problem should be fixed by the random number improvement
				 +AD: following my analysis of the random routine, I have my doubts!
				 +TJ: and I am 100% sure, really! Moved to DONE :)
				 o AD Sort creatures...? Try queue-based instead of stack-based first.
				 +AD sort is now installed and being called but the final step -- swapping two creatures -- is disabled. There appears to be
				 a dependancy somewhere with creature 0. The good news is the sort doesn't seem to slow down even the most busy
				 levels. :)
				 +AD Sort working (Yay!). The problem was -1,y addressing on a store. Whoops!
			 - TJ: what will we do with the "P1" display? There is no code for a 2nd player.
				 AD: leave it as it is.
			 + if you die while pressing button, the death waiting skips straight to restart. it should instead wait for button release
			 - ad move TJ identified section to separate bank from fixed
			 - something wrong with selection of PAL/NTSC. If you switch PAL in the code, first screen comes up as 276 scanlines.
			 - when an amoeba changes to boulders/diamonds, ONLY add a creature if at least one of the surrounding squares in "+" area is blank.
			 - double-sounds on boulders (TJ: this indicates that some boulders/diamonds are processed twice)
				 - AD: I would much prefer NOT to have a sound when boulders start falling
				 - TJ: It's there in the original, I hope you like it more when the crackling is fixed and there is no double sound anymore
				 - AD: Awaiting feedback. I really like it now. I know it's not as the original.
				 + TJ: I like it the other way around, even with the bug, maybe I should add a switch so that we both can have our preferences
				 + TJ: When a boulder rolls of something, in the original it makes no sound, here it does
			 x Rockford explodes too big (3x3, like a fly), it should be only 1 cell (no, original has 3 too)
				 x AD: damn. I like the big explosion. Any issues with keeping it?
				 x TJ: it is YOUR baby (I will alway try to stay as close to the original as possible :)
			 x check with original if amoeba grow should stop after players death (TJ, now it continues growing)
			 x If time is up, game should restart level immediately (TJ: original doesn't)
				 x AD: I dislike this. I don't want to reproduce original bugs too :)
				 x TJ: It's not a bug, its a feature; time is up, cave closes, you have to leave :),
					 Anyway, due to the missing cover/uncover effect, we probably better stick with what we have.
			 + amoeba sound continued after end of life -> back to selection screen
				 + TJ: StopSound for channel 1 should do
			 + Platform switch is done AFTER DecodeCave (has to be before!)
			 +AD Had a completely non-enclosed amoeba on level M1. I set TOO_MANY to 30. The amoeba grew, and instead of changing to
				 boulders when it got too big, it changed to diamonds. Whoops!
				 + TJ: should be fixed now, please report if it reoccurs
			 + the digging through dirt sound is quieter than the walking through blank sound. I think blank sound should be quieter.
				 - TJ: both have the same volume, but different frequencies. Maybe that's what you hear?
				 +AD: This is almost certainly my hearing at fault.
				 -TJ: Moved to DONE
			 + it seems sluggish today. Are we running slower than we were before? Maybe 50% too slow now.
				 Then when you select a level it's displaying 312.
				 -TJ Not sure what you mean, diff b = NTSC, diff a = PAL, works find for me, only Stella autodetection at startup fails
				 +AD have put this timing change under TJ_MODE
				 -TJ did it help?
				 +AD also, the PAL/NTSC changes now confuse stella. :(
				 -TJ see above, maybe something got reversed for you?
				 +AD button/joystick seems sluggish too. re-introduce buffered joystick...?
				 -TJ did you remove something there? I am currently optimizing the joystick code for space, but I haven't commited
					 anything yet. Guess I better don't, else you might blame me. ;)
			 +AD player stuck walking right when timer ran out.
				 - this could be a merge bug, but also since end of level timer countdown was a recent change, could be there.
				 + TJ: Works like the original :)
			 + is magic wall timer running after player death? should be.
				 TJ: the time should continue to run down, that's also like the original
					 so, the timer should run during normalMan...
			 +AD Sound is very expensive to call during gameplay. For example, grab diamond.
				 Can we have a buffered sound call -- the first call is quick and just registers the desire for a sound
				 And in the normal sound processing, separate to creatures, these call requests are processed. That way we
				 don't have a huge amount of processing time every time we call a sound. Please consider!
				 + TJ: Sounds like a good idea. But we would only really save time, if in the same frame multiple sounds
						 would be triggered. Doesn't happen in grab diamond. And I will need some new variables. I will look after it today.
				 + TJ: Any chance to move some ZP variables to extended RAM?
			 + amoeba growth needs to be fixed so it DOES fill up enclosed areas relatively rapidly (TJ)
				 + growth was fixed, initially it looks fine (AD, please check)
				 + AD - seems OK. Have tested quite a bit.
				 + fast growth seems still too slow, never reaching the (already lowered) too many limit in time
				 + FIXED: something in the new Amoeba scan limiting logic is not working correctly (TJ)
				 x Amoeba seems to grow in intervalls, it shouldn't do that, but I that's not due to generation, I suppose that's comming from the object processing
			 +AD when amoeba switches to fast scan, the linear nature of adding new amoeba is awfully obvious.
				 + AD I would like the random pause back in -- it worked very well to hide the scanning.
				 - TJ The code should still be there, maybe only use the pause at fast growth?
					 During slow growth I found the Amoeba nicer growing without it, maybe test for yourself?
				 + TJ random pause during fast grow
			 o Bonus points countdown (sound is done :)
				 o TJ: last 10 seconds don't sound right, but since the timer is processed by the man, there is not much you can do about it
			 + I died when magic wall was operational, and it stopped animating (even though sound was going)
				 + TJ not reproducable
			 o a way to restart the game without having to kill all lives (RESET+SELECT?)
				 + AD = POWER ON/OFF :)
				 + TJ = nah, RESET+SELECT!
				 - AD If reset+select is to be a cart reset, it has to work EVERYWHERE.
				 - doesn't work after you die.
				 - TJ I would define it as return to selection screen or 1st level (demo)
				 - AD: OK, I won't fuss about this. It doesn't hurt.
			 -TJ: Game returns to select screen when Amoeba should turn into diamonds (not always!)
			 +AD: Level G1 -- I died, everything went OK, but I could not press button to continue.
				 Locked up on waiting...? COuld this possibly be code waiting for sound to complete but it doesn't because
				 there's an amoeba present???
				 = YES> I disabled the wait in waitingManPress and it now works OK.
				 - There's another wait for sounds too... we need to be careful not to do this!
				 TJ: Yes, I think you are right. I will fix this and hunt down the other Amoeba problem.
				 AD: there's a sound wait on nextLevelMan, too. SHould this one be disabled too?
				 +TJ: should be fixed now
			 - AD AMOEBA problem. Just waited while the amoeba grew. Timer counted down while amoeba grew. At time 20, game locked up.
				 - This happened 2x once with sort in, once without. It's not the new sort. Bug in amoeba to rocks/diamonds? Or fast amoeba?
				 - Game crashes in M1 when timer reaches 20s (switch from fast to slow Amoeba)
				 - it doesn't happen when the slow growth time is reduced to ~30, weird...
				 - also happens at the end of magic wall (do must be related to MagicAmoebaFlag)
				 BUGS BUT NOT FIXING THESE (TOP IS NEWEST)
=========================================
1			 automate/modify date/timestamp in BANK_MUSIC (at top)
			 Bah. do it manually.

1			 local labels seem not to work :( Something is broken with SUBROUTINE
			 AD: Example? Tests OK for me.
			 TJ: look for ".intermission2" and change into ".intermission", This results into branch out of range
			 and/or label redefined errors
			 AD: OK, I see it. Assembler bug, can't fix now.

1			 OH. I was playing M. Watching butterflies with look-ahead while they exploded against the amoeba.
			 All was going fine for a while.... then it reset to the title screen :((((((
			 TJ: Buffer overflow?
			 AD: Possibly. I've rewritten the explosion/diamond stuff so there are no chain reactions and
			 explosions overwrite old explosions. If it was a buffer overflow this will reduce it lots. Other
			 than that, I guess we wait for a reoccurrence of this bug before hunting.

2			 LOL bug. I died exactly at time 0 at the same time as being squashed by a boulder.
			 but the boulder didn't explode, because I was dead from time first. So it was sitting on top (overlaying)
			 my player sprite, with my player's legs churning away underneath it. Looked like rockford was
			 still alive struggling to get out from under the boulder. Neat bug :)


Viewing all articles
Browse latest Browse all 22482

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>