The Reposition Player 1 routines have been rewritten. It now takes 4 scanlines to reposition player 1, plus an additional scan line to get back into sync with the main kernel loop. The player 1 graphics can start on the additional scan line, but a reposition of player 0 cannot be triggered on it as the BMI KernelEvent is what was dropped to get back in sync.
The new kernels take up a bit more ROM than before as I had to move the jmp() outside of the horizontal retrace time, which mea
I was reviewing the source for Frantic this weekend and while I was going over the time-critical kernel loop:
KernelLoop: ; 70
lda #<DS_COLUP0 ; 2 72
sta WSYNC
KernelLoopNoWSYNC:
beq RepositionP0 ; 2 2
sta COLUP0 ; 3 5 - before 25
lda #<DS_COLUP1 ; 2 7
beq RepositionP1 ; 2 9
sta COLUP1 ; 3 12 - before 25
stx ENAM0 ; 3 15 - before 25
lda #<DS_GRP0 ; 2 17
sta GRP0 ; 3 20 - before 25
sty ENAM1 ; 3 23 - before 25
lda #<DS_PF2L ; 2 25
sta PF2 ; 3 28 - before 38
ld
Special images are in place. All they do at the moment is animate.
Humanoid shifts with room
Can shoot out walls
There's also updated humanoid and explosion animations.
This will most likely be the last Frantic update until January.
ROMs
frantic_harmony_20111104_ntsc.bin
frantic_harmony_20111104_pal.bin
frantic_stella_20111104.bin
So
The sprite collision routine is called a lot, and I do mean a lot. it's used to check if a robot can safely move (Wall Avoidance in Berzerk and Wall + Robot Avoidance in Frenzy), figure out if a robot collided with something, figure out if the humanoid collided with something, and so on. So my first optimization was to look it over and see what I could do to make it faster. I ended up replacing a number of things with pre-calculated values that are stored in the space freed up by dropping the di
hello 2 channel sound
The bug in the ARM chip had me >this close< to cancelling Frantic. Thanks to the help of GroovyBee, I'm now using the bug workaround which is to set the ARM's MAM to Mode 1. That partially disables the ARM's cache, which introduces a performance hit in the ARM code.
To make the drop in performance easier to address, I've turned off the random selection of where robots appear - instead robots appear in every slot they can so I can test worst cas
Frenzy variation playable
Traditional Tanks in place, they won the votes
Hitting GAME SELECT will bypass the end-of-game score screen
door routines revamped, if you die the room's entry door will reopen
for testing purposes, the room number shows during the room-shift sequence
ROM
frantic_harmony_20110927.bin
Source
Frantic20110927.zip
Finished merging 6507 banks 4 & 5 into bank 5. Saved 377 bytes by doing this!
updated robot up/down graphics (no more sliding leg)
revised sprite routines to offset the Right-Robot images by 1 pixel
revised wall avoidance routines to work better with animated sprites
new screen which shows last score for a bit, with continue countdown if enabled. Hitting fire on this screen will start a new game, starting level depends on the continue setting
Robot animation frames are in place. They have thrown off the wall avoidance routines though, so no need to let me know that the robots are walking into walls more frequently than they should!
Also no need to let me know the Frenzy variation doesn't look right! That's because the Tank robots aren't in place yet.
Speaking of Tanks, which do you prefer?
Traditional Tank
Scorpion Tank
Both Tanks look cool. The main tradeof
espire8's been quite busy churning out the graphics, so I decided it was time to work on how to implement the animation sequences. First up, the humanoid's now using a 4 frame run sequence.
When I initially got it working, I thought the the speed was a bit to fast, so I did another build where each frame is used twice in succession.
ROMs
frantic_harmony_20110917fast.bin
frantic_harmony_20110917slow.bin
Source
Frantic20110917.zip
though I might end up redoing it in 6507 code as I think it'll take less ROM space and processing time is not an issue when displaying the menu.
Up/Down to select option to change.
Left/Right/Fire to change an option.
Only Fire works on the Start option, and it starts the game when Fire is released.
The options are:
Maze Type (berzerk style on the left, frenzy style on the right)
Homing - tank robots shoot homing missiles (frenzy only)
Wa
I decided to take advantage of the 2 color kernel for the menu options as well. The menu is not functional yet, I just finished working out how to display it.
The options that are displayed are going to be:
Maze Style - berzerk is currently selected
Homing Missiles Yes/No. Frenzy only(will be greyed out if berzerk maze selected)
Wall Flicker Rate 1/2/3/4. Frenzy only. Maze sample at top will flicker at the selected rate for user feedback.
Max Robot Sh
Updated the collision routines to handle the 2x players. To do this I needed to double-up the pixels of the sprites so that a 2x image of _X__X_X_ would be tested as __XX____XX__XX__
const unsigned char double_nybble[] = { 0x00, 0x03, 0x0C, 0x0F,
0x30, 0x33, 0x3C, 0x3F,
0xC0, 0xC3, 0xCC, 0xCF,
0xF0, 0xF3, 0xFC, 0xFF};
int DoubleBits(int bits)
{
return (double_nybble[(bits &
Was trying to figure out how to show the special objects* in the Frenzy variation when I realized a 2x player would just about fill the width of the smaller room sections. I checked the kernel and discovered I had enough time to change the size of Player 1 during it's reposition routines. I also had an unused color data stream value, due to Player 1's reposition routine taking 1 scanline longer than player 0's routine, where I could store the NUSIZ1 value. So I've updated the kernel and the spri
fixed the shoot-off-screen bug
Evil Otto now bounces
Evil Otto using a different Direction-To-Humanoid routine than the robots (so he'll do angles unless he's perfectly lined up horizontally or vertically)
extra lives ever 1000 points
ROM
frantic_harmony_20110902.bin
Source
Frantic20110902.zip
added a function to trigger the phrases (before phrases were hardcoded to the direction you exited the room). It's used to say:
"Intruder Alert! Intruder Alert" when Evil Otto shows up
"Chicken" if you leave a room without killing all the robots
"Get the Humanoid" if you leave a room after killing all the robots.
[*]made changes to the sound effects
[*]revised the wall avoidance routines
ROM
frantic_harmony_20110830.bin
Added the sound routines along with a few cheesy sound effects. Will revise those later. I'm using only channel 1 due to the digitized sample support, which requires AUDV0 to be updated on just about every scan line (it's using a variation of DPC+'s 3-voice music routine). I have some ideas on how to work around this for users with an AtariVox plugged in. I might even be able to make it work when there's no speech being played back.
Tweaked the WallAvoidance routines, in the prior ro
The robots now try to avoid the walls.
Shots now take out other shots. Sometimes a robot will shoot too quickly, causing both shots to disappear. This will be fixed later when I add a "gun cool down" routine.
This change took a bit longer than I expected - a shift in the compiled code triggered the MAM1 bug in the ARM chip and it took me a few hours of reordering the functions until it cleared up. Not fun.
ROM
frantic_harmony_20110827.bin
Sour
fixed the bug where the explosions were sometimes half invisible.
fixed bug where bonuses won't be added if explosions were still onscreen
shrank explosion width by 1 pixel as if the robot ran into the wall on his right side the explosion would go thru the wall and hit robots/human on the other side.
added new stealth mode. Set Right Difficult to A to activate it.
Here's a screen recording of stealth mode in Stella
http://www.spiceware.org/movies/FranticStealth.mov
Robot speed ramp up redone to take twice as many levels to hit max speed.
Slow robot shots now move at 1/4 humanoid shot speed.
Fast robot shots now move at 1/2 humanoid shot speed.
Max shots per level now ramps up from 0 shots to 3 slow shots, then 1 to 3 fast shots.
Death sequence for humanoid
Robots explode when hit. Shrapnel can take out other robots and the humanoid.
Preliminary Evil Otto routines.
Implemented 3 reserved lives
Robots a
I decided to worry about the homing missiles later, so here's the initial version with moving and shooting robots!
ROM
frantic_harmony20110824.bin
Source
Frantic20110824.zip
The robots now know if they'll hit you when they shoot. To visually show this, I change their shots from the homing missiles(squares) to the normal shots (lines). In the screen shot the top and bottom row robots have acquired target lock, the middle row robot has not.
The test them, I made it so that holding up on the right joystick (Y key in Stella) will cause the robots to shoot. Let go and the shots will reset. If you can line things up correctly, the robots will shoot other
In order for the Robots to move or shoot, they need to know where the Humanoid is in relation to themselves. If we're only looking at 4 directions it fairly straightforward - horizontal vs vertical is determined by seeing if the difference between Robot X and Humanoid X bigger or smaller than the difference between Robot Y and Humanoid Y. Once horizontal/vertical is decided then if the difference is negative the direction is left or up, while if it's positive it's right or down.
For
Shot collisions are in place. Use Left Joystick to move shot (hold fire for slo-mo), use Right Joystick to select shot style (horizontal, vertical, homing missile).
Note: selecting "no missile" (Right Joystick Up) turns off the missile, but in the test routines I didn't skip the collision detect. As such, you'll still see collisions occur (for the curious, it's using the Tank robot shape).
No collision
Colliding with wall
Colliding with
Playfield collision logic is now in place. When moving the humanoid the score will change from white to red. When moving Otto the score will change from green to blue.
Humanoid not touching the wall
Humanoid touching the wall
Otto not touching the wall
Otto touching the wall
As you might have noticed, the robots can now appear in different colors. The current colors are just tests, so let me know if you really li