mirror of https://github.com/jeremysrand/BuGS.git
Get the scorpion moving to the right and to the left and poisoning the mushrooms. Still need to handle exploding the scorpion and double speed scorpions.
This commit is contained in:
parent
44cb944f22
commit
b3da2023e4
|
@ -172,7 +172,7 @@ updateFlea_nextTile anop
|
|||
lda tiles+TILE_TYPE_OFFSET,x
|
||||
bne updateFlea_nextAction
|
||||
|
||||
jsl rand65535
|
||||
jsl rand0_to_65534
|
||||
and #$7
|
||||
bne updateFlea_nextAction
|
||||
lda #TILE_MUSHROOM4
|
||||
|
|
|
@ -22,6 +22,10 @@ SCORPION_STATE_EXPLODING equ 3
|
|||
SCORPION_SLOW_UPDATES_PER_TILE equ TILE_PIXEL_WIDTH-1
|
||||
SCORPION_FAST_UPDATES_PER_TILE equ TILE_PIXEL_WIDTH/2-1
|
||||
|
||||
; A scorpion will only be generated in the top N rows. This defines that number.
|
||||
SCORPION_NUM_POSSIBLE_ROWS equ 15
|
||||
|
||||
|
||||
drawScorpion entry
|
||||
lda scorpionState
|
||||
bne drawScorpion_cont
|
||||
|
@ -149,31 +153,64 @@ jumpInst jmp >leftScorpion1
|
|||
|
||||
updateScorpion entry
|
||||
lda scorpionState
|
||||
beq updateScorpion_done
|
||||
bne updateScorpion_cont
|
||||
rtl
|
||||
|
||||
updateScorpion_cont anop
|
||||
cmp #SCORPION_STATE_EXPLODING
|
||||
bra updateScorpion_notExploding
|
||||
jmp updateScorpion_exploding
|
||||
|
||||
updateScorpion_notExploding anop
|
||||
; Common code for left or right moving scorpions
|
||||
lda scorpionSprite
|
||||
beq updateScorpionLeft_resetSprite
|
||||
beq updateScorpion_resetSprite
|
||||
sec
|
||||
sbc #$4
|
||||
sta scorpionSprite
|
||||
|
||||
bra updateScorpionLeft_nextAction
|
||||
bra updateScorpion_nextAction
|
||||
|
||||
updateScorpionLeft_resetSprite anop
|
||||
updateScorpion_resetSprite anop
|
||||
lda #SCORPION_SPRITE_LAST_OFFSET
|
||||
sta scorpionSprite
|
||||
|
||||
updateScorpionLeft_nextAction anop
|
||||
updateScorpion_nextAction anop
|
||||
lda scorpionShiftInTile
|
||||
beq updateScorpionLeft_nextTile
|
||||
beq updateScorpion_nextTile
|
||||
dec a
|
||||
sta scorpionShiftInTile
|
||||
|
||||
and #$1
|
||||
beq updateScorpion_done
|
||||
dec scorpionScreenOffset
|
||||
bra updateScorpion_done
|
||||
lda scorpionState
|
||||
cmp #SCORPION_STATE_LEFT
|
||||
beq updateScorpion_screenLeft
|
||||
inc scorpionScreenOffset
|
||||
rtl
|
||||
|
||||
updateScorpion_screenLeft anop
|
||||
dec scorpionScreenOffset
|
||||
rtl
|
||||
|
||||
|
||||
updateScorpion_nextTile anop
|
||||
lda scorpionState
|
||||
cmp #SCORPION_STATE_LEFT
|
||||
beq updateScorpionLeft_nextTile
|
||||
|
||||
updateScorpionRight_nextTile anop
|
||||
inc scorpionScreenOffset
|
||||
lda #SCORPION_SLOW_UPDATES_PER_TILE
|
||||
sta scorpionShiftInTile
|
||||
|
||||
ldx scorpionTileOffsets+2
|
||||
cpx #RHS_FIRST_TILE_OFFSET
|
||||
blt updateScorpionRight_notOffScreen
|
||||
cpx #LHS_FIRST_TILE_OFFSET
|
||||
bge updateScorpionRight_notOffScreen
|
||||
bra updateScorpion_offScreen
|
||||
|
||||
updateScorpionLeft_nextTile anop
|
||||
dec scorpionScreenOffset
|
||||
lda #SCORPION_SLOW_UPDATES_PER_TILE
|
||||
|
@ -188,11 +225,32 @@ updateScorpionLeft_nextTile anop
|
|||
stx scorpionTileOffsets+2
|
||||
lda tiles+TILE_LEFT_OFFSET,x
|
||||
sta scorpionTileOffsets
|
||||
bra updateScorpion_maybePoison
|
||||
|
||||
updateScorpionRight_notOffScreen anop
|
||||
stx scorpionTileOffsets+4
|
||||
ldx scorpionTileOffsets
|
||||
stx scorpionTileOffsets+2
|
||||
lda tiles+TILE_RIGHT_OFFSET,x
|
||||
sta scorpionTileOffsets
|
||||
|
||||
updateScorpion_maybePoison anop
|
||||
lda tiles+TILE_TYPE_OFFSET,x
|
||||
beq updateScorpion_done
|
||||
cmp #TILE_MUSHROOM4+1
|
||||
bge updateScorpion_done
|
||||
|
||||
ora #32
|
||||
sta tiles+TILE_TYPE_OFFSET,x
|
||||
rtl
|
||||
|
||||
updateScorpion_offScreen anop
|
||||
stz scorpionState
|
||||
|
||||
rtl
|
||||
|
||||
updateScorpion_exploding anop
|
||||
; Write this code
|
||||
|
||||
updateScorpion_done anop
|
||||
rtl
|
||||
|
||||
|
@ -201,11 +259,20 @@ addScorpion entry
|
|||
lda scorpionState
|
||||
bne addScorpion_done
|
||||
|
||||
jsl rand0_to_14
|
||||
asl a
|
||||
tay
|
||||
|
||||
jsl rand0_to_65534
|
||||
and #1
|
||||
beq addScorpion_right
|
||||
|
||||
lda #SCORPION_STATE_LEFT
|
||||
sta scorpionState
|
||||
|
||||
ldx #(24+25)*16
|
||||
ldx scorpionLeftTileOffset,y
|
||||
stx scorpionTileOffsets
|
||||
|
||||
lda tiles+TILE_SCREEN_OFFSET_OFFSET,x
|
||||
dec a
|
||||
sta scorpionScreenOffset
|
||||
|
@ -217,6 +284,30 @@ addScorpion entry
|
|||
lda tiles+TILE_RIGHT_OFFSET,x
|
||||
sta scorpionTileOffsets+4
|
||||
|
||||
bra addScorpion_common
|
||||
|
||||
addScorpion_right anop
|
||||
|
||||
lda #SCORPION_STATE_RIGHT
|
||||
sta scorpionState
|
||||
|
||||
ldx scorpionRightTileOffset,y
|
||||
stx scorpionTileOffsets
|
||||
|
||||
lda tiles+TILE_LEFT_OFFSET,x
|
||||
sta scorpionTileOffsets+2
|
||||
|
||||
tax
|
||||
lda tiles+TILE_LEFT_OFFSET,x
|
||||
sta scorpionTileOffsets+4
|
||||
|
||||
tax
|
||||
lda tiles+TILE_SCREEN_OFFSET_OFFSET,x
|
||||
dec a
|
||||
dec a
|
||||
sta scorpionScreenOffset
|
||||
|
||||
addScorpion_common anop
|
||||
lda #SCORPION_SLOW_UPDATES_PER_TILE
|
||||
sta scorpionShiftInTile
|
||||
|
||||
|
@ -275,6 +366,40 @@ scorpionRightJumpTable dc i4'rightScorpion4'
|
|||
dc i4'rightScorpion1s'
|
||||
dc i4'rightScorpion1'
|
||||
dc i4'rightScorpion1s'
|
||||
|
||||
|
||||
scorpionLeftTileOffset dc i2'((0*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((1*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((2*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((3*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((4*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((5*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((6*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((7*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((8*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((9*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((10*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((11*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((12*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((13*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
dc i2'((14*GAME_NUM_TILES_WIDE)+GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO'
|
||||
|
||||
|
||||
scorpionRightTileOffset dc i2'0*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'1*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'2*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'3*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'4*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'5*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'6*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'7*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'8*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'9*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'10*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'11*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'12*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'13*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
dc i2'14*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO'
|
||||
|
||||
|
||||
end
|
||||
|
|
|
@ -4,6 +4,27 @@
|
|||
;
|
||||
; Created by Jeremy Rand on 2020-07-19.
|
||||
;Copyright © 2020 Jeremy Rand. All rights reserved.
|
||||
;
|
||||
;
|
||||
; This code was suggested by John Brooks
|
||||
;
|
||||
; If you need a random range less than 16 bits, here the smaller EOR constants:
|
||||
; BITS EOR_CONST
|
||||
; 2 $0003
|
||||
; 3 $0006
|
||||
; 4 $000C
|
||||
; 5 $0014
|
||||
; 6 $0030
|
||||
; 7 $0060
|
||||
; 8 $00B8
|
||||
; 9 $0110
|
||||
; 10 $0240
|
||||
; 11 $0500
|
||||
; 12 $0CA0
|
||||
; 13 $1B00
|
||||
; 14 $3500
|
||||
; 15 $6000
|
||||
; 16 $B400
|
||||
;
|
||||
|
||||
case on
|
||||
|
@ -15,44 +36,65 @@ random start
|
|||
randInit entry
|
||||
lda randomSeed
|
||||
sta seed65535
|
||||
|
||||
and #$1f
|
||||
bne randInit_store32
|
||||
lda #$1f
|
||||
randInit_store32 anop
|
||||
sta seed32
|
||||
|
||||
and #$f
|
||||
bne randInit_store16
|
||||
lda #$f
|
||||
randInit_store16 anop
|
||||
sta seed16
|
||||
|
||||
rtl
|
||||
|
||||
; Returns a number from 0 to 14
|
||||
rand0_to_14 entry
|
||||
lda seed16
|
||||
lsr a
|
||||
bcc skipEor16
|
||||
eor #$000c
|
||||
skipEor16 anop
|
||||
sta seed16
|
||||
dec a
|
||||
rtl
|
||||
|
||||
|
||||
; Returns a number from 1 to 31
|
||||
rand32 entry
|
||||
; Returns a number from 0 to 30
|
||||
rand0_to_30 entry
|
||||
lda seed32
|
||||
lsr a
|
||||
bcc skipEor32
|
||||
eor #$0014
|
||||
skipEor32 anop
|
||||
sta seed32
|
||||
dec a
|
||||
rtl
|
||||
|
||||
; returns a number from 0 to 24
|
||||
rand25 entry
|
||||
jsl rand32
|
||||
dec a
|
||||
jsl rand0_to_30
|
||||
cmp #25
|
||||
bge rand25
|
||||
rtl
|
||||
|
||||
|
||||
; Returns a number from 1 to 65535
|
||||
rand65535 entry
|
||||
; Returns a number from 0 to 65534
|
||||
rand0_to_65534 entry
|
||||
lda seed65535
|
||||
lsr a
|
||||
bcc skipEor65535
|
||||
eor #$b400
|
||||
skipEor65535 anop
|
||||
sta seed65535
|
||||
dec a
|
||||
rtl
|
||||
|
||||
|
||||
seed65535 dc i2'0'
|
||||
seed32 dc i2'0'
|
||||
seed16 dc i2'0'
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue