🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

A C64 Game - Step 46

posted in New Old Things
Published March 17, 2012
Advertisement

This time we'll add a chapter intro. The game is supposed to be separated in themed chapters with an intro for each. There's nothing much to it, we'll display a short text while the boys drive to their new target.



For now we simply show the first page after starting the game:

          lda #0
          jsr ShowStory

Most of the code is spent to actually setup the impala and driver sprites. The text itself is displayed by our trusty DisplayText routine. Followed by the obligatory wait for button press and release.


;------------------------------------------------------------
;story pages
;------------------------------------------------------------
!zone ShowStory
ShowStory
          ;clear screen
          lda #32
          ldy #1
          jsr ClearScreen

          lda # sta ZEROPAGE_POINTER_1
          lda #>TEXT_STORY_1
          sta ZEROPAGE_POINTER_1 + 1
          lda #1
          sta PARAM1
          lda #1
          sta PARAM2
          jsr DisplayText

          lda #41
          sta PARAM1
          lda #20
          sta PARAM2
          lda #TYPE_IMPALA_1
          sta PARAM3
          jsr FindEmptySpriteSlot
          jsr SpawnObject
          lda #44
          sta PARAM1
          lda #TYPE_IMPALA_DRIVER
          sta PARAM3
          jsr FindEmptySpriteSlot
          jsr SpawnObject
          lda #44
          sta PARAM1
          lda #TYPE_IMPALA_2
          sta PARAM3
          jsr FindEmptySpriteSlot
          jsr SpawnObject
          lda #47
          sta PARAM1
          lda #TYPE_IMPALA_3
          sta PARAM3
          jsr FindEmptySpriteSlot
          jsr SpawnObject
          lda #48
          sta PARAM1
          lda #TYPE_IMPALA_DEBRIS
          sta PARAM3
          jsr FindEmptySpriteSlot
          jsr SpawnObject

          lda #12
          sta VIC_SPRITE_MULTICOLOR_1
          lda #11
          sta VIC_SPRITE_MULTICOLOR_2

          lda #0
          sta BUTTON_RELEASED

.StoryLoop
          jsr WaitFrame

          jsr ObjectControl
          ;ldx #0
          ;jsr MoveSpriteLeft
          ;inx
          ;jsr MoveSpriteLeft
          ;inx
          ;jsr MoveSpriteLeft
          ;inx
          ;jsr MoveSpriteLeft
          ;inx
          ;jsr MoveSpriteLeft

          lda #$10
          bit JOYSTICK_PORT_II
          bne .ButtonNotPressed

          ;button pushed
          lda BUTTON_RELEASED
          beq .StoryLoop

          lda #0
          sta VIC_SPRITE_ENABLE
          lda #11
          sta VIC_SPRITE_MULTICOLOR_1
          lda #1
          sta VIC_SPRITE_MULTICOLOR_2
          rts

.ButtonNotPressed
          lda #1
          sta BUTTON_RELEASED
          jmp .StoryLoop


The impala objects are simple game objects with the same behaviour. Move to the center, wait for a while and then move off the left side.

;------------------------------------------------------------
;drive left/pause/drive off left
;------------------------------------------------------------
!zone BehaviourImpala
BehaviourImpalaDebris
          inc SPRITE_ANIM_DELAY,x
          lda SPRITE_ANIM_DELAY,x
          and #$04lsr
          lsr
          clc
          adc #SPRITE_DEBRIS_1
          sta SPRITE_POINTER_BASE,x
          BehaviourImpala
          lda SPRITE_STATE,x
          beq .DriveFirstHalf
          cmp #1beq .HandlePause

          ;drive off
          jsr MoveSpriteLeft
          lda SPRITE_POS_X,x
          beq .DriveDone
          rts

.DriveDone
          jsr RemoveObject
          rts

.DriveFirstHalf
          jsr MoveSpriteLeft
          inc SPRITE_MOVE_POS,x
          lda SPRITE_MOVE_POS,x
          cmp #200beq .NextState
          rts

.NextState
          inc SPRITE_STATE,x
          lda #0
          sta SPRITE_MOVE_POS,x
          rts

.HandlePause
          inc SPRITE_MOVE_POS,x
          beq .NextState
          rts

The text is stored as usual. Nice to see, a - acts as CR, * as end of text.


TEXT_STORY_1
          !text "A LOCAL NEWSPAPER MENTIONS SEVERAL-"
          !text "MISSING PEOPLE",59," THIS SEEMS TO BE A-"
          !text "RECURRING PATTERN EVERY 44 YEARS",59,"-"
          !text "WE SHOULD INVESTIGATE THE TOWN-"
          !text "CEMETARY",59,"*"

step46.zip


Previous Step Next Step

Previous Entry A C64 Game - Step 45
0 likes 2 comments

Comments

ManTis
Ahh, nothing quite like some story to make the game better ;)
March 17, 2012 12:18 PM
mixmaster
I know its not the same but that sure brings back memories of coding Z80 ASM, ah the good old days :-)
March 18, 2012 11:28 AM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement