;========================================================= ; ;Bock Tile Data Pointers ;========================================================= .define PlayerWalkingLeftTileDataPointer = $9601 .define PlayerWalkingRightTileDataPointer = $9632 .define BockSwordStrikeLeftTileDataPointer = $9663 .define BockSwordStrikeRightTileDataPointer = $9692 .define PlayerJumpingLeftTileDataPointer = $96c1 .define PlayerJumpingRightTileDataPointer = $96C3 .define PlayerFallingLeftTileDataPointer = $96C5 .define PlayerFallingRightTileDataPointer = $96F0 .define PlayerHitRightTileDataPointer = $971B .define PlayerHitRightTileDataPointer = $971D ;========================================================= ;JoyPad Constants ;========================================================= .define JoyPadUp = 1 .define JoyPadDown = 2 .define JoyPadLeft = 4 .define JoyPadRight = 8 .define JoyPadButtonA = 16 .define JoyPadButtonB = 32 ;========================================================= ;Bock State Constants ;========================================================= .define BockWalkLeftState = 1 .define BockWalkRightState = 2 .define BockSwordStrikeLeftState = 3 .define BockSwordStrikeRightState = 4 .define BockJumpingWestState = 5 .define BockJumpingEastState = 6 .define BockFallingLeftState = 7 .define BockFallingRightState = 8 .define BockHitLeftState = 9 .define BockHitRightState = 10 .define BockOnLadderState = 11 .define BockDoorKnockingState = 12 .define BockDyingLeftState = 13 .define BockDyingRightState = 14 ;========================================================= ;========================================================= ObjectHandler: add a,a ld e,a ld d,0 add hl,de ld a,(hl) inc hl ld h,(hl) ld l,a jp (hl) ;========================================================= ;========================================================= ld a,(_BockState) hl,BockStateJumpPointerTable-2 jp ObjectHandler ;========================================================= BockStateJumpPointerTable: .dw BockWalkLeftFunction . .dw BockWalkRightFunction .dw BockSwordStrikeLeftFunction .dw BockSwordStrikeRightFunction .dw BockJumpLeftFunction .dw BockJumpRightFunction .dw BockFallingLeftFunction .dw BockFallingRightFunction .dw BockHitLeftFunction .dw BockHitRightFunction .dw BockOnLadderFunction .dw BockDoorKnockingFunction .dw BockDyingLeftFunction .dw BockDyingRightFunction ;========================================================= BockWalkLeftFunction: ld a,(_PlayerAnimationSwitchFlag) or a jr z,- call Do_BockJumpingAndSwordCheck ret c call Do_BockXTileCollisionCheck jp nc,+ ld a,(_JoyPadPressed) bit 2,a jp z,Do_AddBockNegativeAcceleration ld (iy+ObjStateOffset),BockWalkLeftState ld (iy+ObjectAnimationSwitchFlag),0 ret ;========================================================= ;Init Bock Falling Left State ;========================================================= +: ld (iy+ObjectStateOffset),BockFallingLeftState ld (iy+ObjectAnimationSwitchFlag),0 ret ;========================================================= BockWalkRightFunction: ld a,(_PlayerAnimationSwitchFlag) or a jr z,- call Do_BockJumpAndSwordCheck ret c call Do_BockXTileCollisionCheck jp nc,+ ld a,(_JoyPadPressed) bit 3,a jp z,Do_AddBockPositiveAcceleration ld (iy+ObjStateOffset),BockWalkRightState ld (iy+ObjectAnimationSwitchFlag),0 ret ;========================================================= ;Init Bock Falling Right State ;========================================================= +: ld (iy+ObjStateOffset),BockFallingRightState ld (iy+ObjectAnimationSwitchFlag),0 ret ;========================================================= PlayerSwordStrikeLeftFunction: ld a,(iy+ObjectAnimationSwitchFlag) or a jp nz,++ ld hl,BockSwordStrikeRightTileDataPointer ld a,4 jp + ;========================================================= BockSwordStrikeRightFunction: ld a,(iy+ObjectAnimationSwitchFlag) or a jp nz,++ ld hl,BockSwordStrikeRightTileDataPointer ld a,8 +: ld (_BockAnimationPtr),hl ld (iy+33),a ld (iy+ObjFrameIndexOffset),0 ld (iy+ObjFrameTimerOffset),6 ld (iy+ObjFrameIndexTimerLimitOffset),8 ld (iy+ObjectDrawTilesFlag),1 ld (iy+ObjAnimationSwitchFlag),1 ld (iy+49),1 ld a,$92 ld ($de04),a ++: call Do_BockSwordStrikeCheck ret c ld a,(_BockInAirFlag) or a jp nz,+ ld a,($c429) or a jp nz,+ ld a,(_BockFrameIndex) cp 2 jp nz,+ call Do_BockJumpingCheck ret c +: Call Label1738 ;========================================================= BockJumpLeftFunction: ld de,BockJumpingLeftTileDataPointer ld c,4 ld a,(_BockAnimationSwitchFlag) or a jp z,+ dec a jp nz,++ jp BockJumpFunctionCont ;========================================================= BockJumpRightFunction: : ld de,BockJumpingRightTileDataPointer ld c,8 ld a,(_BockAnimationSwitchFlag) or a jp z,+ dec a jp nz,++ jp BockJumpFunctionCont ;========================================================= +: ld hl,(_PlayerBootsYDeltaSubPixel) ld a,(_RamC1C3) or a jp z,+ ld hl,$f8c0 +: ld (_BockYDeltaSubPixel),hl ld (iy+ObjInAirFlagOffset),1 ++: ld (iy+33),c ex de,hl ld (iy+ObjAnimationStructPointerL),hl ld (iy+ObjectFrameIndexOffset),0 ld (iy+ObjectDrawTilesFlag),1 ld (iy+ObjAnimationSwitchFlag),1 ret ;========================================================= ; ;========================================================= BockFallingLeftFunction: ld hl,PlayerFallingLeftTileDataPointer ld c,4 ld a,(_PlayerAnimationSwitchFlag) or a jp z,+ jp ++ ;========================================================= BockFallingRightFunction: ld hl,BOckFallingRightTileDataPointer ld c,8 ld a,(_BockAnimationSwitchFlag) or a jp z,+ jp ++ +: ld (_BockAnimationStructPointerL),hl ld hl,$0200 ld (_BockYDeltaSubPixel),hl ld (iy+ObjPreviousState),c ld (iy+ObjectFrameIndexOffset),0 ld (iy+ObjectDrawTilesFlag),1 ld (iy+ObjAnimationSwitchFlag),1 ld (iy+41),1 ret ++: call Do_BockSwordStrikeCheck ret c call Label1738 jr nc,++ ld a,(C433) or a jp nz,Label1482 ld c,BockWalkLeftState ld a,(_BockPreviousState) cp 4 jp z,+ ld c,BockWalkRightState +: ld (iy+ObjStateOffset),c ld hl,0 ld (iy+ObjYDeltaSubPixel),hl ret ++: call Do_ModObjectYPosition ld a,(_JoyPadPressed) and %00001100 jp z,Label11f8 cp (iy+33) jp z,++ ld c,BockFallingLeftState cp 4 jp z,+ ld c,BockFallingRightState +: ld (iy+33),a ld (iy+ObjStateOffset),c ld (iy+ObjAnimationSwitchFlag),0 ld (iy+41),0 ret ++: cp 4 jp z,Do_AddBockNegativeAcceleration jp Do_AddBockPositiveAcceleration ;========================================================= ; ;========================================================= BockJumpFunctionCont: bit 7,(iy+ObjYDeltaPixel) jr nz,+ call Label1738 jr c,++ +: call Do_BockJumpingLadderCheck ret c jp Do_BockSwordStrikeCheck ++: ld a,(_RamC433) or a jp nz,Label1482 xor a ld (_BockInAirFlag),a ld (_BockAnimationSwitchFlag),a call Label1482 ld c,BockWalkLeftState ld a,(_BockState) cp BockJumpingWestState jp z,+ ld c,BockWalkRightState +: ld (iy+ObjStateOffset),c ld (iy+33),c ret ;========================================================= ;Check Bock Ladder,Jumping,Sword Strike ;========================================================= Do_BockJumpingAndSwordCheck: call Do_BockOnLadderCheck ret c call Do_BockJumpingCheck ret c call Do_BockSwordStrikeCheck ret c jp Label193A ;========================================================= ; ;========================================================= Do_BockSwordStrikeCheck: ld a,(_JoyPadButtonPressed) bit 4,a jr nz,+ xor a ret +: ld a,(_BockSwordFlag) or a ret nz ld a,(_PlayerState) cp PlayerSwordStrikeLeftState jp z,+ cp PlayerSwordStrikeRightState jp z,+ -: ld c,PlayerSwordStrikeLeftState bit 0,(iy+ObjStateOffset) jp nz,BockSwordStrikeCheckCont ld c,PlayerSwordStrikeRightState ;========================================================= BockSwordStrikeCheckCont: ld (iy+ObjectStateOffset),c ld (iy+ObjAnimationSwitchFlag),0 scf ret +: ld a,(_BockFrameIndex) cp 2 jp nc,+ xor a ret +: ld a,(_JoyPadPressed) and %00001100 jp z,- cp (iy+33) jp z,- ld c,PlayerSwordStrikeLeftState bit 2,a jp nz,BockSwordStrikeCheckCont ld c,PlayerSwordStrikeRightState jp BockSwordStrikeCheckCont ;========================================================= ; ;========================================================= Do_BockOnLadderCheck: ld (_JoyPadPressed) cp 1 jp z,JoyPadPressedUpCheck cp 2 jp z,JoyPadPressedDownCheck xor a ret ;========================================================= ; ;========================================================= BockJumpingLadderCheck: ld a,(_JoyPadPressed) and %00000001 jp nz,JoyPadPressedUpCheck xor a ret ;========================================================= --: call Do_ObjectMSBTileCheck ld a,l and %11000000 cp Ladder jp nz,+ scf ret ;========================================================= +: xor ret ;========================================================= ;d = YOffset ;e = XOffset ;========================================================= JoyPadPressedUpCheck: ld de,$fffc call -- ret nc ld de,$ff03 call -- ret nc jp - ;========================================================= :d = YOffset ;e = XOffset ;========================================================= Do_BockXTileCollisionChk: ld a,(_PlayerYPositionPixel) cp 192 ret nc xor a ld de,$00f8 call Do_ObjectMSBTileCheck ld de,$04f8 bit 5,l jp nz,+ ld de,$0007 call Do_ObjectMSBTileCheck ld de,$0407 bit 5,l jp z,++ + ld c,0 bit 4,l jr z,+ ld c,1 ld a,l and %11110000 push bc push de call +++ pop de pop bc ld a,c or a jr nz,+ call Do_ObjectMSBTileCheck bit 5,l jr z,++ +: scf ret ;========================================================= ;========================================================= Do_AddBockNegativeAcceleration: ld a,(_JoyPad) and %00001100 jp z,AddPositiveDeceleration cp JoyPadLeft ret nz ld (iy+45),0 ld a,(_BockState) cp BockWalkLeftState call z,Do_BockAnimationHelper ld hl,(_BockXDeltaSubPixel) ld d,-1 ld e,(iy+37) ;#$ec "236 add hl,de ld (_BockXDeltaSubPixel),hl xor a ld de,($c423) ;de = MaxNegativeAcceleration sbc hl,de bit 7,h jp z,Label154c ld hl,($c423) ld (_BockXDeltaSubPixel),hl jp Label154c ;========================================================= Do_AddBockPositiveAcceleration: ld a,(_JoyPad) and %00001100 jp z,Label15f2 cp JoyPadRight ret nz ld (iy+45),a ld a,(_BockState) cp BockWalkRightState call z,Do_BockAnimationHelper ld hl,(_BockXDeltaSubPixel) ld d,0 ld e,(iy+40) add hl,de ld (_BockXDeltaSubPixel),hl xor a ld de,(_BockPositiveAccelerationLimit) sbc hl,de bit 7,h jp nz,Label163a ld hl,(c426) ld (_BockXDeltaSubPixel),hl jp Label163a ;========================================================= ; ;========================================================= Do_BockJumpingCheck: ld a,(_JoyPadButtonPressed) bit 5,a jr nz,+ xor a ret +: ld a,(RamC1A7) or a jp z,+ +: ld a,(_BockInAirFlag) or a ret nz ld a,PlayerJumpingWestState bit 0,(iy+ObjStateOffset) jp nz,+ ld a,PlayerJumpingEastState +: ld (_BockState),a ld (iy+ObjAnimationSwitchFlag),0 ld a,145 ld (RamDe01),a ;Sound Fx scf ret |
Text here
|