Sparse Invaders Source Invaders Player.txt - simondotm/stardot-wiki GitHub Wiki

Sparse Invaders Source - Invader_Player.txt

   ;-------------------------------------------------------------------------------

   ;  Invader_Player

   ;  Written by Neil Beresford.

   ;

   ;  Copyright 2008,2009 Neil Beresford

   ;

   ;    This file is part of Sparse Invaders.

   ;    Sparse Invaders is free software: you can redistribute it and/or modify

   ;    it under the terms of the GNU General Public License as published by

   ;    the Free Software Foundation, either version 3 of the License, or

   ;    (at your option) any later version.

   ;

   ;    Sparse Invaders is distributed in the hope that it will be useful,

   ;    but WITHOUT ANY WARRANTY; without even the implied warranty of

   ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

   ;    GNU General Public License for more details.

   ;

   ;    You should have received a copy of the GNU General Public License

   ;    along with Sparse Invaders.  If not, see <http://www.gnu.org/licenses/>.

   ;

   ;

   ;   Notes:

   ;

   ;-------------------------------------------------------------------------------

   

   .require "Constands"

   .require "Macros"

   

   ;-------------------------------------------------------------------------------

   

   .alias  EXPLOSION_TIME 20             ; explosion time for invader and mother etc

   .alias  PLAYER_BULLET_SPRITE 6        ; sprtie for the player's bullet 

   

   ;-------------------------------------------------------------------------------

   ;  PlayerInit:

   ;    initializes the player at the start of the level and game...

   ;-------------------------------------------------------------------------------

   PlayerInit:

   

      ; initialize the player and bullet

      LDA   #PLAYER_STARTX

      STA   PLAYER_X

      LDA   #PLAYER_STARTY

      STA   PLAYER_Y

      LDA   #0

      STA   PLAYER_FRAME

        

      LDA   #$ff

      STA   PLAYER_BULLET_X

      STA   PLAYER_BULLET_Y

      STA   PLAYER_BULLET_F

      

   

      ;kick off the player...

      LDA   #0

      STA   SPRITE

      STA   CALLPARAM1

      STA   CALLPARAM2

      LDA   #PLAYER_SPRITE_SLOT 

      LDX   PLAYER_X

      LDY   PLAYER_Y

      JSR   SpriteController.SpriteStart

   

      LDA   #1

      STA   GAME_LEVEL

   

      LDA   #3

      STA   PLAYER_LIFES

      LDA   #ONE_HALF_SEC_DELAY

      STA   DELAY_COUNT

   

      LDA   #0

      STA   INPUTCHECK

      STA   SCORE_LO

      STA   SCORE_HI

      

      LDA   #<500

      STA   BONUSSCORE_LO

      LDA   #>500

      STA   BONUSSCORE_HI

      RTS

   

   ;-------------------------------------------------------------------------------

   ;

   ;   Bullet functionality...

   ;

   ;-------------------------------------------------------------------------------

   

   ;-------------------------------------------------------------------------------

   ;  Player_BulletStart:

   ;    initializes the player bullet...

   ;-------------------------------------------------------------------------------

   Player_BulletStart:

   

      LDA #0       ;fire bullet

      JSR Sound._MAKE_SOUND

   

      LDA  PLAYER_X

      CLC

      ADC  #1

      STA  PLAYER_BULLET_X

      

      LDA  PLAYER_Y

      SEC

      SBC  #5

      STA  PLAYER_BULLET_Y

      

      LDA   #PLAYER_BULLET_SPRITE

      STA   SPRITE

      LDA   #0

      STA   CALLPARAM1

      STA   CALLPARAM2

      LDA   #BULLET_SPRITE_SLOT   

      LDX   PLAYER_BULLET_X

      LDY   PLAYER_BULLET_Y

      JSR   SpriteController.SpriteStart

     

      RTS 

   

   

   ;-------------------------------------------------------------------------------

   ;  Player_BulletStart:

   ;    initializes the player bullet...

   ;-------------------------------------------------------------------------------

   Player_BulletMove:

   

      LDA  PLAYER_BULLET_Y

      CMP  #$ff

      BEQ  PBM_End

   

      LDA  PLAYER_BULLET_Y

      SEC

      SBC  #4

      CMP  #8

      BCS  PBM_checkInvaders

   

   PBM_killBullet:

   

      LDA  #BULLET_SPRITE_SLOT*16

      LDX  #SPRFLAG_KILL + SPRFLAG_REDRAW

      JSR  SpriteController.Sprite_SetFlag

   

      LDA   #$ff

      STA   PLAYER_BULLET_X

      STA   PLAYER_BULLET_Y

      STA   PLAYER_BULLET_F

   

      RTS

      

   PBM_checkInvaders:   

   

      STA  PLAYER_BULLET_Y

   

      ; but ... first check the bases ...  ;-)

      LDX  PLAYER_BULLET_X

      LDY  PLAYER_BULLET_Y

      JSR  Invader_Bases.CheckCollison

      BCS  PBM_KillBullet

   

   

      LDX  PLAYER_BULLET_X

      LDY  PLAYER_BULLET_Y

      JSR  Invader_Baddies.Baddie_CheckKill

      CMP  #$ff

      BNE  PBM_KillBullet

     

   

   PBM_moveSprite:

   

      LDA  #BULLET_SPRITE_SLOT

      LDX  PLAYER_BULLET_X

      LDY  PLAYER_BULLET_Y

      JMP  SpriteController.SpriteMoveSprite    

   

   PBM_End:

      

      RTS

   

   ;-------------------------------------------------------------------------------

   ;   Explosion

   ;-------------------------------------------------------------------------------

   

   

   ;-------------------------------------------------------------------------------

   ;  Player_ExplosionStart:

   ;    initializes the player or invader explosion...

   ;    x - XPOS

   ;    y - YPOS

   ;-------------------------------------------------------------------------------

   Player_ExplosionStart:

   

      LDA   EXPLOSION_COUNT

      BNE   PES_end

      

      LDA   #EXPLOSION_TIME

      STA   EXPLOSION_COUNT

      LDA   #0

      STA   CALLPARAM1

      STA   CALLPARAM2

      LDA   #5

      STA   SPRITE

      LDA   #EXPLOSION_SPRITE_SLOT   

      JMP   SpriteController.SpriteStart

   

   PES_end:

   

      RTS

   

   ;-------------------------------------------------------------------------------

   ;-------------------------------------------------------------------------------

   ;  Player_MotherExplosionStart:

   ;    initializes the other explosion...

   ;    x - XPOS

   ;    y - YPOS

   ;-------------------------------------------------------------------------------

   Player_MotherExplosionStart:

   

      LDA   EXPLOSION2_COUNT

      BNE   PES_end

   

      INX

      INX

      LDA   #EXPLOSION_TIME

      STA   EXPLOSION2_COUNT

      LDA   #0

      STA   CALLPARAM1

      STA   CALLPARAM2

      LDA   #5

      STA   SPRITE

      LDA   #EXPLOSION2_SPRITE_SLOT

      JMP   SpriteController.SpriteStart

   

   

   ;-------------------------------------------------------------------------------

   ;   Game Messages ... 

   ;-------------------------------------------------------------------------------

   

   ;-------------------------------------------------------------------------------

   ;  Player_GameMessage:

   ;    displays the start game message

   ;-------------------------------------------------------------------------------

   Player_GameMessage:

   

     LDA  #GAME_STATE_INTRO                 ; GAME state

     STA  GAME_STATE

     LDA  #ONE_HALF_SEC_DELAY

     STA  DELAY_COUNT

     LDA   #0

     STA   INPUTCHECK

   

     LDA  #<GM_1

  STA  USERPTR 

  LDA  #>`GM_1`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

     LDA  #<GM_11

  STA  USERPTR 

  LDA  #>`GM_11`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

   

     LDA  #<GM_2

  STA  USERPTR 

  LDA  #>`GM_2`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

     LDA  #<GM_3

  STA  USERPTR 

  LDA  #>`GM_3`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

     LDA  #<GM_31

  STA  USERPTR 

  LDA  #>`GM_31`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

     LDA  #<GM_32

  STA  USERPTR 

  LDA  #>`GM_32`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

     LDA  #<GM_4

  STA  USERPTR 

  LDA  #>`GM_4`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

   

   PGM_waitFire:

   

     LDA  #0

     STA  INPUTCHECK

   

   PGM_CheckKeys:

   

     LDA  DELAY_COUNT

     BNE  PGM_CK

   

     LDA  #<IN_1

  STA  USERPTR 

  LDA  #>`IN_1`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

   

   PGM_CK:

   

     JSR  Keyboard.Keyboard_checkkeys

     LDA  INPUTCHECK

     AND  #INPUTFLAG_FIRE

     BEQ  PGM_CheckKeys

   

     RTS

   

   

   ;-------------------------------------------------------------------------------

   ;  Player_StartLevel:

   ;    displays the game message, passing in the message number

   ;-------------------------------------------------------------------------------

   Player_StartLevel:

   

      LDA  #GAME_STATE_STARTLEVEL            ; GAME state

      STA  GAME_STATE

      

      ; convert the number ...

      LDX  #11

      LDA  GAME_LEVEL

   

      CMP  #10

      BCC  PSL_dounits

   

   PSL_dotens:

   

      SEC

      SBC  #10

   

      PHA

      LDA  SL_1,X

      CLC

      ADC  #1

      STA  SL_1,X

      PLA

      

      CMP  #10

      BCS  PSL_dotens  

   

      INX

   

   

   PSL_dounits:

   

     CLC

     ADC  #48

     STA  SL_1,X

     INX

     LDA  #0

     STA  SL_1,X

       

   

     JSR  ScreenFunctionality.Screen_Clear  ; Display main message...

   

     LDA  #<GM_1

  STA  USERPTR 

  LDA  #>`GM_1`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

     LDA  #<GM_11

  STA  USERPTR 

  LDA  #>`GM_11`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

   

     LDA  #<SL_1

  STA  USERPTR 

  LDA  #>`SL_1`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

     LDA  #GAME_STATE_PLAYING            ; GAMe state

     STA  GAME_STATE

     LDA  #ONE_HALF_SEC_DELAY

     STA  DELAY_COUNT

     

     JMP  PGM_waitFire

   

   ;-------------------------------------------------------------------------------

   ;  Player_GameOver:

   ;    displays the game over message

   ;-------------------------------------------------------------------------------

   Player_GameOver:

   

       LDA #8  ;;//stop loop

       JSR Sound._MAKE_SOUND

   

   

     LDA  #GAME_STATE_INVADED                 ; GAME state

     STA  GAME_STATE

   

   PG_AdjustScore:

   

     LDA  SCORE_ADDITION

     BEQ  PG_Cont

     JSR  ScreenFunctionality.AdjustScore

     JMP  PG_AdjustScore

     

   PG_Cont:

   

     LDX  SCORE_LO

     LDY  SCORE_HI

     JSR  Invader_Hiscore.Invader_CheckScore

   

     LDA  #<GO_2

  CLC

  ADC  #10

  STA  USERPTR

  LDA  #>`GO_2`

     ADC  #0

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_CopyScoreToString

   

     JSR  ScreenFunctionality.Screen_Clear  ; Display main message...

   

     LDA  #<GM_1

  STA  USERPTR 

  LDA  #>`GM_1`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

   

     LDA  #<GO_1

  STA  USERPTR 

  LDA  #>`GO_1`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

   

     LDA  #<GO_2

  STA  USERPTR 

  LDA  #>`GO_2`

     STA  USERPTR+1

     JSR  ScreenFunctionality.Screen_PositionedMessage

   

     LDA  #ONE_HALF_SEC_DELAY

     STA  DELAY_COUNT

     LDA   #0

     STA   INPUTCHECK

   

     JSR  PGM_waitFire

   

     JMP  Invader_Hiscore.Invader_Hiscore_Display

   

   

   ;-------------------------------------------------------------------------------

   ;  strings used for game

   ;-------------------------------------------------------------------------------

   

   GM_1:  .byte 2,3,"sparse invaders",0

   GM_11: .byte 1,5,"a small production",0

   GM_2:  .byte 4,9,"written by",0

   GM_3:  .byte 3,11,"neil beresford",0

   GM_31: .byte 4,18,"sound by pj",0

   GM_32: .byte 3,20,"misc by steve o ",0

   GM_4:  .byte 2,24,"date  3 nov 2009",0

   SL_1:  .byte 5,10,"level       ",0

   GO_1:  .byte 5,11,"game over",0

   GO_2:  .byte 4,17,"score   xxxx",0

   IN_1:  .byte 3,26,"fire to start",0

   

   

   ;-------------------------------------------------------------------------------

   ;   End of Invader_Player

   ;-------------------------------------------------------------------------------

⚠️ **GitHub.com Fallback** ⚠️