diff options
-rw-r--r-- | constants/pikachu_emotion_constants.asm | 14 | ||||
-rwxr-xr-x | engine/pikachu_emotions.asm | 37 | ||||
-rwxr-xr-x | engine/pikachu_movement.asm | 752 | ||||
-rwxr-xr-x | wram.asm | 60 |
4 files changed, 448 insertions, 415 deletions
diff --git a/constants/pikachu_emotion_constants.asm b/constants/pikachu_emotion_constants.asm index a8ed4cea..e8877026 100644 --- a/constants/pikachu_emotion_constants.asm +++ b/constants/pikachu_emotion_constants.asm @@ -16,7 +16,7 @@ ldpikaemotion: macro ; Starter Pikachu emotion commands constants -const_value = 0 + const_def const PIKAEMOTION_DUMMY1 const PIKAEMOTION_PRINTTEXT const PIKAEMOTION_PLAYPCMSOUNDCLIP @@ -29,7 +29,7 @@ const_value = 0 const PIKAEMOTION_9 const PIKAEMOTION_DUMMY3 -const_value = 0 + const_def const PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES const PIKAEMOTION_SUBCMD_LOADFONT const PIKAEMOTION_SUBCMD_SHOWMAPVIEW @@ -38,6 +38,16 @@ const_value = 0 const PIKAEMOTION_SUBCMD_CHECKLAVENDERTOWER const PIKAEMOTION_SUBCMD_CHECKBILLSHOUSE + const_def + const PIKASTEPDIR_DOWN + const PIKASTEPDIR_UP + const PIKASTEPDIR_LEFT + const PIKASTEPDIR_RIGHT + const PIKASTEPDIR_DOWN_LEFT + const PIKASTEPDIR_DOWN_RIGHT + const PIKASTEPDIR_UP_LEFT + const PIKASTEPDIR_UP_RIGHT + ; Macros for commands pikaemotion_dummy1: MACRO diff --git a/engine/pikachu_emotions.asm b/engine/pikachu_emotions.asm index fdb17e69..0525d667 100755 --- a/engine/pikachu_emotions.asm +++ b/engine/pikachu_emotions.asm @@ -25,7 +25,7 @@ InitializePikachuTextID: ; fcf20 (3f:4f20) DoStarterPikachuEmotions: ; fcf35 (3f:4f35) ld e, a - ld d, $0 + ld d, 0 add hl, de add hl, de ld e, [hl] @@ -37,7 +37,7 @@ DoStarterPikachuEmotions: ; fcf35 (3f:4f35) cp $ff jr z, .done ld c, a - ld b, $0 + ld b, 0 ld hl, StarterPikachuEmotionsJumptable add hl, bc add hl, bc @@ -46,6 +46,7 @@ DoStarterPikachuEmotions: ; fcf35 (3f:4f35) ld l, a call JumpToAddress jr .loop + .done ret @@ -110,7 +111,7 @@ StarterPikachuEmotionCommand_emote: ; fcf8d (3f:4f8d) ShowPikachuEmoteBubble: ; fcfa2 (3f:4fa2) ld [wWhichEmotionBubble], a - ld a, $f + ld a, $f ; Pikachu ld [wEmotionBubbleSpriteIndex], a predef EmotionBubble ret @@ -142,8 +143,8 @@ StarterPikachuEmotionCommand_subcmd: ; fcfc7 (3f:4fc7) inc de push de ld e, a - ld d, $0 - ld hl, Jumptable_fcfda + ld d, 0 + ld hl, .Subcommands add hl, de add hl, de ld a, [hli] @@ -153,7 +154,7 @@ StarterPikachuEmotionCommand_subcmd: ; fcfc7 (3f:4fc7) pop de ret -Jumptable_fcfda: +.Subcommands: dw LoadPikachuSpriteIntoVRAM dw LoadFontTilePatterns dw Pikachu_LoadCurrentMapViewUpdateSpritesAndDelay3 @@ -250,10 +251,10 @@ MapSpecificPikachuExpression: ; fd05e (3f:505e) ld hl, wd492 bit 7, [hl] ldpikaemotion a, PikachuEmotion29 - jr z, .set_carry + jr z, .play_emotion call CheckPikachuFollowingPlayer ldpikaemotion a, PikachuEmotion30 - jr nz, .set_carry + jr nz, .play_emotion jr .check_pikachu_status .notFanClub @@ -262,46 +263,46 @@ MapSpecificPikachuExpression: ; fd05e (3f:505e) jr nz, .notPewterPokecenter call CheckPikachuFollowingPlayer ldpikaemotion a, PikachuEmotion26 - jr nz, .set_carry + jr nz, .play_emotion jr .check_pikachu_status .notPewterPokecenter callab Func_f24ae ld a, e cp $ff - jr nz, .set_carry + jr nz, .play_emotion jr .check_pikachu_status ; useless .check_pikachu_status call IsPlayerPikachuAsleepInParty ldpikaemotion a, PikachuEmotion11 - jr c, .set_carry + jr c, .play_emotion callab CheckPikachuFaintedOrStatused ; same bank ldpikaemotion a, PikachuEmotion28 - jr c, .set_carry + jr c, .play_emotion ld a, [wCurMap] cp POKEMONTOWER_1 jr c, .notInLavenderTower cp POKEMONTOWER_7 + 1 ldpikaemotion a, PikachuEmotion22 - jr c, .set_carry + jr c, .play_emotion .notInLavenderTower ld a, [wd49c] and a - jr z, .no_carry + jr z, .mood_based_emotion dec a ld c, a ld b, $0 ld hl, .Emotions add hl, bc ld a, [hl] - jr .set_carry + jr .play_emotion -.no_carry +.mood_based_emotion and a ret -.set_carry +.play_emotion scf ret @@ -318,7 +319,7 @@ IsPlayerPikachuAsleepInParty: ; fd0d0 (3f:50d0) .loop ld a, [wWhichPokemon] ld c, a - ld b, $0 + ld b, 0 ld hl, wPartySpecies add hl, bc ld a, [hl] diff --git a/engine/pikachu_movement.asm b/engine/pikachu_movement.asm index fbb71ffd..c08468f2 100755 --- a/engine/pikachu_movement.asm +++ b/engine/pikachu_movement.asm @@ -26,7 +26,7 @@ PikachuSwapSpriteStateData: push de push bc - ld hl, wSpriteStateData1 + ld hl, wPlayerSpriteStateData1 ld de, wPikachuSpriteStateData1 ld c, $10 call SwapBytes3f @@ -61,29 +61,29 @@ LoadPikachuMovementCommandData: ret z ld c, a ld b, 0 - ld hl, Data_fd3b0 + ld hl, PikachuMovementDatabase add hl, bc add hl, bc add hl, bc add hl, bc ld a, [hli] - ld [wPikaPicAnimPointer + 1], a + ld [wCurPikaMovementFunc1], a ld a, [hli] cp $80 jr nz, .no_param call GetPikachuMovementScriptByte .no_param - ld [wPikaPicAnimPointer], a + ld [wCurPikaMovementParam1], a ld a, [hli] - ld [wPikaPicAnimCurGraphicID], a + ld [wCurPikaMovementFunc2], a ld a, [hli] cp $80 jr nz, .no_param2 call GetPikachuMovementScriptByte .no_param2 - ld [wPikaPicAnimPointerSetupFinished], a + ld [wCurPikaMovementParam2], a xor a - ld [wPikaPicAnimTimer], a + ld [wd451], a scf ret @@ -95,15 +95,15 @@ ExecutePikachuMovementCommand: ld a, [wPlayerGrassPriority] push af .loop - ld bc, wSpriteStateData1 - ld a, [wPikaPicAnimPointer + 1] - ld hl, Jumptable_fd4ac + ld bc, wPlayerSpriteStateData1 + ld a, [wCurPikaMovementFunc1] + ld hl, PikaMovementFunc1Jumptable call .JumpTable - ld a, [wPikaPicAnimCurGraphicID] - ld hl, Jumptable_fd65c + ld a, [wCurPikaMovementFunc2] + ld hl, PikaMovementFunc2Jumptable call .JumpTable - call Func_fd36e - call Func_fd39d + call GetCoordsForPikachuShadow + call AnimatePikachuShadow call DelayFrame call DelayFrame ld hl, wd44d @@ -124,34 +124,34 @@ ExecutePikachuMovementCommand: ld l, a jp [hl] -Func_fd36e: - ld hl, 2 +GetCoordsForPikachuShadow: + ld hl, wPlayerSpriteImageIdx - wPlayerSpriteStateData1 add hl, bc - ld a, [wPikaPicAnimTimer + 1] + ld a, [wCurPikaMovementSpriteImageIdx] ld [hl], a ld a, [wPikaSpriteY] ld d, a - ld a, [wd456] + ld a, [wPikachuMovementYOffset] add d - ld hl, 4 + ld hl, wPlayerYPixels - wPlayerSpriteStateData1 add hl, bc ld [hl], a - ld a, [wPikaPicAnimDelay] + ld a, [wPikaSpriteX] ld d, a - ld a, [wPikaPicTextboxStartY] + ld a, [wPikachuMovementXOffset] add d - ld hl, 6 + ld hl, wPlayerXPixels - wPlayerSpriteStateData1 add hl, bc ld [hl], a ld hl, wd44d bit 6, [hl] ret z - ld hl, wPlayerGrassPriority - wSpriteStateData1 + ld hl, wPlayerGrassPriority - wPlayerSpriteStateData1 add hl, bc ld [hl], 0 ret -Func_fd39d: +AnimatePikachuShadow: ld hl, wd44d bit 6, [hl] res 6, [hl] @@ -159,11 +159,12 @@ Func_fd39d: res 6, [hl] ret z set 6, [hl] - call Func_fd7f3 + call LoadPikachuShadowOAMData ret -Data_fd3b0: - db $01, $00, $00, $00 ; $00 +PikachuMovementDatabase: + db $01, $00, $00, $00 ; $00 start + db $03, $80, $01, $00 ; $01 db $04, $80, $01, $00 ; $02 db $05, $80, $01, $00 ; $03 @@ -172,6 +173,7 @@ Data_fd3b0: db $08, $80, $01, $00 ; $06 db $09, $80, $01, $00 ; $07 db $0a, $80, $01, $00 ; $08 + db $03, $80, $06, $00 ; $09 db $04, $80, $06, $00 ; $0a db $05, $80, $06, $00 ; $0b @@ -180,6 +182,7 @@ Data_fd3b0: db $08, $80, $06, $00 ; $0e db $09, $80, $06, $00 ; $0f db $0a, $80, $06, $00 ; $10 + db $03, $80, $03, $80 ; $11 db $04, $80, $03, $80 ; $12 db $05, $80, $03, $80 ; $13 @@ -188,38 +191,44 @@ Data_fd3b0: db $08, $80, $03, $80 ; $16 db $09, $80, $03, $80 ; $17 db $0a, $80, $03, $80 ; $18 + db $03, $80, $07, $80 ; $19 db $04, $80, $07, $80 ; $1a db $05, $80, $07, $80 ; $1b db $06, $80, $07, $80 ; $1c - db $0b, $27, $02, $00 ; $1d step down - db $0c, $27, $02, $00 ; $1e step up - db $0d, $27, $02, $00 ; $1f step left - db $0e, $27, $02, $00 ; $20 step right - db $0f, $27, $02, $00 ; $21 - db $10, $27, $02, $00 ; $22 - db $11, $27, $02, $00 ; $23 - db $12, $27, $02, $00 ; $24 - db $0b, $0f, $02, $00 ; $25 - db $0c, $0f, $02, $00 ; $26 - db $0d, $0f, $02, $00 ; $27 - db $0e, $0f, $02, $00 ; $28 - db $0f, $0f, $02, $00 ; $29 - db $10, $0f, $02, $00 ; $2a - db $11, $0f, $02, $00 ; $2b - db $12, $0f, $02, $00 ; $2c - db $0b, $0f, $08, $17 ; $2d - db $0c, $0f, $08, $17 ; $2e - db $0d, $0f, $08, $17 ; $2f - db $0e, $0f, $08, $17 ; $30 - db $0f, $0f, $08, $17 ; $31 - db $10, $0f, $08, $17 ; $32 - db $11, $0f, $08, $17 ; $33 - db $12, $0f, $08, $17 ; $34 + + db $0b, $20 | $7, $02, $00 ; $1d step down + db $0c, $20 | $7, $02, $00 ; $1e step up + db $0d, $20 | $7, $02, $00 ; $1f step left + db $0e, $20 | $7, $02, $00 ; $20 step right + db $0f, $20 | $7, $02, $00 ; $21 step down left + db $10, $20 | $7, $02, $00 ; $22 step down right + db $11, $20 | $7, $02, $00 ; $23 step up left + db $12, $20 | $7, $02, $00 ; $24 step up right + + db $0b, $0f, $02, $00 ; $25 slide down + db $0c, $0f, $02, $00 ; $26 slide up + db $0d, $0f, $02, $00 ; $27 slide left + db $0e, $0f, $02, $00 ; $28 slide right + db $0f, $0f, $02, $00 ; $29 slide down left + db $10, $0f, $02, $00 ; $2a slide down right + db $11, $0f, $02, $00 ; $2b slide up left + db $12, $0f, $02, $00 ; $2c slide up right + + db $0b, $0f, $08, $10 | $07 ; $2d hop down + db $0c, $0f, $08, $10 | $07 ; $2e hop up + db $0d, $0f, $08, $10 | $07 ; $2f hop left + db $0e, $0f, $08, $10 | $07 ; $30 hop right + db $0f, $0f, $08, $10 | $07 ; $31 hop down left + db $10, $0f, $08, $10 | $07 ; $32 hop down right + db $11, $0f, $08, $10 | $07 ; $33 hop up left + db $12, $0f, $08, $10 | $07 ; $34 hop up right + db $13, $0f, $06, $00 ; $35 look down db $14, $0f, $06, $00 ; $36 look up db $15, $0f, $06, $00 ; $37 look left db $16, $0f, $06, $00 ; $38 look right + db $02, $80, $04, $00 ; $39 db $02, $80, $05, $00 ; $3a db $02, $80, $03, $80 ; $3b @@ -227,251 +236,251 @@ Data_fd3b0: db $02, $80, $09, $80 ; $3d db $02, $80, $06, $00 ; $3e -Jumptable_fd4ac: - dw Func_fd4e5 - dw Func_fd4e9 - dw Func_fd504 - dw Func_fd50c - dw Func_fd511 - dw Func_fd518 - dw Func_fd52c - dw Func_fd540 - dw Func_fd553 - dw Func_fd566 - dw Func_fd579 - dw Func_fd5b1 - dw Func_fd5b5 - dw Func_fd5b9 - dw Func_fd5bd - dw Func_fd5c1 - dw Func_fd5c5 - dw Func_fd5c9 - dw Func_fd5cd - dw Func_fd5ea - dw Func_fd5ee - dw Func_fd5f2 - dw Func_fd5f6 - dw Func_fd4e5 - -Func_fd4dc: +PikaMovementFunc1Jumptable: + dw PikaMovementFunc1_SignalSetCarry_ ; 00 + dw PikaMovementFunc1_CopyPlayerPositionToPika ; 01 + dw PikaMovementFunc1_DelayFrames ; 02 + dw PikaMovementFunc1_WalkInCurrentFacingDirection ; 03 + dw PikaMovementFunc1_WalkInOppositeFacingDirection ; 04 + dw PikaMovementFunc1_StepTurningCounterclockwise ; 05 + dw PikaMovementFunc1_StepTurningClockwise ; 06 + dw PikaMovementFunc1_StepForwardLeft ; 07 + dw PikaMovementFunc1_StepForwardRight ; 08 + dw PikaMovementFunc1_StepBackwardLeft ; 09 + dw PikaMovementFunc1_StepBackwardRight ; 0a + dw PikaMovementFunc1_MoveDown ; 0b + dw PikaMovementFunc1_MoveUp ; 0c + dw PikaMovementFunc1_MoveLeft ; 0d + dw PikaMovementFunc1_MoveRight ; 0e + dw PikaMovementFunc1_MoveDownLeft ; 0f + dw PikaMovementFunc1_MoveDownRight ; 10 + dw PikaMovementFunc1_MoveUpLeft ; 11 + dw PikaMovementFunc1_MoveUpRight ; 12 + dw PikaMovementFunc1_LookDown ; 13 + dw PikaMovementFunc1_LookUp ; 14 + dw PikaMovementFunc1_LookLeft ; 15 + dw PikaMovementFunc1_LookRIght ; 16 + dw PikaMovementFunc1_SignalSetCarry_ ; 17 + +PikaMovementFunc1_SignalSetCarry: ld a, [wd44d] set 7, a ld [wd44d], a ret -Func_fd4e5: - call Func_fd4dc +PikaMovementFunc1_SignalSetCarry_: + call PikaMovementFunc1_SignalSetCarry ret -Func_fd4e9: - ld hl, 4 +PikaMovementFunc1_CopyPlayerPositionToPika: + ld hl, wPlayerYPixels - wPlayerSpriteStateData1 add hl, bc ld a, [hl] ld [wPikaSpriteY], a - ld hl, 6 + ld hl, wPlayerXPixels - wPlayerSpriteStateData1 add hl, bc ld a, [hl] - ld [wPikaPicAnimDelay], a + ld [wPikaSpriteX], a xor a - ld [wd456], a - ld [wPikaPicTextboxStartY], a - call Func_fd4dc + ld [wPikachuMovementYOffset], a + ld [wPikachuMovementXOffset], a + call PikaMovementFunc1_SignalSetCarry ret -Func_fd504: - call Func_fd775 +PikaMovementFunc1_DelayFrames: + call CheckPikachuStepTimer1 ret nz - call Func_fd4dc + call PikaMovementFunc1_SignalSetCarry ret -Func_fd50c: - call GetObjectFacing - jr asm_fd58c +PikaMovementFunc1_WalkInCurrentFacingDirection: + call GetPikachuFacing + jr PikaMovementFunc1_ApplyStepVector -Func_fd511: - call GetObjectFacing +PikaMovementFunc1_WalkInOppositeFacingDirection: + call GetPikachuFacing xor %100 - jr asm_fd58c - -Func_fd518: - call GetObjectFacing - ld hl, Data_fd523 - call Func_fd5a0 - jr asm_fd58c - -Data_fd523: - db SPRITE_FACING_DOWN, SPRITE_FACING_RIGHT - db SPRITE_FACING_UP, SPRITE_FACING_LEFT - db SPRITE_FACING_LEFT, SPRITE_FACING_DOWN - db SPRITE_FACING_RIGHT, SPRITE_FACING_UP + jr PikaMovementFunc1_ApplyStepVector + +PikaMovementFunc1_StepTurningCounterclockwise: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_RIGHT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_LEFT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP << 2 db $ff -Func_fd52c: - call GetObjectFacing - ld hl, Data_fd537 - call Func_fd5a0 - jr asm_fd58c - -Data_fd537: - db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT - db SPRITE_FACING_UP, SPRITE_FACING_RIGHT - db SPRITE_FACING_LEFT, SPRITE_FACING_UP - db SPRITE_FACING_RIGHT, SPRITE_FACING_DOWN +PikaMovementFunc1_StepTurningClockwise: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_LEFT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_RIGHT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_UP << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN << 2 db $ff -Func_fd540: - call GetObjectFacing - ld hl, Data_fd54b - call Func_fd5a0 - jr asm_fd58c - -Data_fd54b: - db SPRITE_FACING_DOWN, SPRITE_FACING_UP | $10 - db SPRITE_FACING_UP, SPRITE_FACING_LEFT | $10 - db SPRITE_FACING_LEFT, SPRITE_FACING_DOWN | $10 - db SPRITE_FACING_RIGHT, SPRITE_FACING_RIGHT | $10 - -Func_fd553: - call GetObjectFacing - ld hl, Data_fd55e - call Func_fd5a0 - jr asm_fd58c - -Data_fd55e: - db SPRITE_FACING_DOWN, SPRITE_FACING_DOWN | $10 - db SPRITE_FACING_UP, SPRITE_FACING_RIGHT | $10 - db SPRITE_FACING_LEFT, SPRITE_FACING_LEFT | $10 - db SPRITE_FACING_RIGHT, SPRITE_FACING_UP | $10 - -Func_fd566: - call GetObjectFacing - ld hl, Data_fd571 - call Func_fd5a0 - jr asm_fd58c - -Data_fd571: - db SPRITE_FACING_DOWN, SPRITE_FACING_RIGHT | $10 - db SPRITE_FACING_UP, SPRITE_FACING_DOWN | $10 - db SPRITE_FACING_LEFT, SPRITE_FACING_UP | $10 - db SPRITE_FACING_RIGHT, SPRITE_FACING_LEFT | $10 - -Func_fd579: - call GetObjectFacing - ld hl, Data_fd584 - call Func_fd5a0 - jr asm_fd58c - -Data_fd584: - db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT | $10 - db SPRITE_FACING_UP, SPRITE_FACING_UP | $10 - db SPRITE_FACING_LEFT, SPRITE_FACING_RIGHT | $10 - db SPRITE_FACING_RIGHT, SPRITE_FACING_DOWN | $10 - -asm_fd58c +PikaMovementFunc1_StepForwardLeft: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_DOWN_RIGHT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_UP_LEFT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN_LEFT << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP_RIGHT << 2 + +PikaMovementFunc1_StepForwardRight: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_DOWN_LEFT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_UP_RIGHT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_UP_LEFT << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN_RIGHT << 2 + +PikaMovementFunc1_StepBackwardLeft: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_UP_RIGHT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_DOWN_LEFT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN_RIGHT << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP_LEFT << 2 + +PikaMovementFunc1_StepBackwardRight: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_UP_LEFT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_DOWN_RIGHT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_UP_RIGHT << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN_LEFT << 2 + +PikaMovementFunc1_ApplyStepVector: rrca rrca and $7 ld e, a - call Func_fd784 + call GetPikachuStepVectorMagnitude ld d, a call UpdatePikachuPosition - call Func_fd775 + call CheckPikachuStepTimer1 ret nz - call Func_fd4dc + call PikaMovementFunc1_SignalSetCarry ret -Func_fd5a0: +PikaMovementFunc1_GetNextFacing: push de ld d, a -.asm_fd5a2 +.loop ld a, [hli] cp d - jr z, .asm_fd5ad + jr z, .found inc hl cp $ff - jr nz, .asm_fd5a2 + jr nz, .loop pop de ret -.asm_fd5ad +.found ld a, [hl] pop de scf ret -Func_fd5b1: - ld a, SPRITE_FACING_DOWN >> 2 - jr asm_fd5d1 +PikaMovementFunc1_MoveDown: + ld a, PIKASTEPDIR_DOWN + jr PikaMovementFunc1_ApplyFacingAndMove -Func_fd5b5: - ld a, SPRITE_FACING_UP >> 2 - jr asm_fd5d1 +PikaMovementFunc1_MoveUp: + ld a, PIKASTEPDIR_UP + jr PikaMovementFunc1_ApplyFacingAndMove -Func_fd5b9: - ld a, SPRITE_FACING_LEFT >> 2 - jr asm_fd5d1 +PikaMovementFunc1_MoveLeft: + ld a, PIKASTEPDIR_LEFT + jr PikaMovementFunc1_ApplyFacingAndMove -Func_fd5bd: - ld a, SPRITE_FACING_RIGHT >> 2 - jr asm_fd5d1 +PikaMovementFunc1_MoveRight: + ld a, PIKASTEPDIR_RIGHT + jr PikaMovementFunc1_ApplyFacingAndMove -Func_fd5c1: - ld e, 4 - jr asm_fd5d5 +PikaMovementFunc1_MoveDownLeft: + ld e, PIKASTEPDIR_DOWN_LEFT + jr PikaMovementFunc1_MoveDiagonally -Func_fd5c5: - ld e, 5 - jr asm_fd5d5 +PikaMovementFunc1_MoveDownRight: + ld e, PIKASTEPDIR_DOWN_RIGHT + jr PikaMovementFunc1_MoveDiagonally -Func_fd5c9: - ld e, 6 - jr asm_fd5d5 +PikaMovementFunc1_MoveUpLeft: + ld e, PIKASTEPDIR_UP_LEFT + jr PikaMovementFunc1_MoveDiagonally -Func_fd5cd: - ld e, 7 - jr asm_fd5d5 +PikaMovementFunc1_MoveUpRight: + ld e, PIKASTEPDIR_UP_RIGHT + jr PikaMovementFunc1_MoveDiagonally -asm_fd5d1 +PikaMovementFunc1_ApplyFacingAndMove: ld e, a - call SetObjectFacing -asm_fd5d5 - call Func_fd784 + call SetPikachuFacing +PikaMovementFunc1_MoveDiagonally: + call GetPikachuStepVectorMagnitude ld d, a push de call UpdatePikachuPosition pop de - call Func_fd775 + call CheckPikachuStepTimer1 ret nz ld a, e - call Func_fd7cb - call Func_fd4dc + call ApplyPikachuStepVector + call PikaMovementFunc1_SignalSetCarry ret -Func_fd5ea: - ld a, SPRITE_FACING_DOWN >> 2 - jr asm_fd5fa +PikaMovementFunc1_LookDown: + ld a, PIKASTEPDIR_DOWN + jr PikaMovementFunc1_ApplyFacing -Func_fd5ee: - ld a, SPRITE_FACING_UP >> 2 - jr asm_fd5fa +PikaMovementFunc1_LookUp: + ld a, PIKASTEPDIR_UP + jr PikaMovementFunc1_ApplyFacing -Func_fd5f2: - ld a, SPRITE_FACING_LEFT >> 2 - jr asm_fd5fa +PikaMovementFunc1_LookLeft: + ld a, PIKASTEPDIR_LEFT + jr PikaMovementFunc1_ApplyFacing -Func_fd5f6: - ld a, SPRITE_FACING_RIGHT >> 2 - jr asm_fd5fa +PikaMovementFunc1_LookRIght: + ld a, PIKASTEPDIR_RIGHT + jr PikaMovementFunc1_ApplyFacing -asm_fd5fa - call SetObjectFacing - call Func_fd4dc +PikaMovementFunc1_ApplyFacing: + call SetPikachuFacing + call PikaMovementFunc1_SignalSetCarry ret UpdatePikachuPosition: push de ld d, 0 - ld hl, Jumptable_fd60f + ld hl, .Jumptable add hl, de add hl, de ld a, [hli] @@ -481,217 +490,217 @@ UpdatePikachuPosition: ld a, d jp [hl] -Jumptable_fd60f: - dw MovePikachuSpriteDown - dw MovePikachuSpriteUp - dw MovePikachuSpriteLeft - dw MovePikachuSpriteRight - dw MovePikachuSpriteDownLeft - dw MovePikachuSpriteDownRight - dw MovePikachuSpriteUpLeft - dw MovePikachuSpriteUpRight - -MovePikachuSpriteDown: +.Jumptable: + dw .Down + dw .Up + dw .Left + dw .Right + dw .DownLeft + dw .DownRight + dw .UpLeft + dw .UpRight + +.Down: ld d, 0 ld e, a - jr asm_fd64d + jr .ApplyVector -MovePikachuSpriteUp: +.Up: ld d, 0 cpl inc a ld e, a - jr asm_fd64d + jr .ApplyVector -MovePikachuSpriteLeft: +.Left: cpl inc a ld d, a ld e, 0 - jr asm_fd64d + jr .ApplyVector -MovePikachuSpriteRight: +.Right: ld d, a ld e, 0 - jr asm_fd64d + jr .ApplyVector -MovePikachuSpriteDownLeft: +.DownLeft: ld e, a cpl inc a ld d, a - jr asm_fd64d + jr .ApplyVector -MovePikachuSpriteDownRight: +.DownRight: ld e, a ld d, a - jr asm_fd64d + jr .ApplyVector -MovePikachuSpriteUpLeft: +.UpLeft: cpl inc a ld e, a ld d, a - jr asm_fd64d + jr .ApplyVector -MovePikachuSpriteUpRight: +.UpRight: ld d, a cpl inc a ld e, a - jr asm_fd64d + jr .ApplyVector -asm_fd64d - ld a, [wPikaPicAnimDelay] +.ApplyVector: + ld a, [wPikaSpriteX] add d - ld [wPikaPicAnimDelay], a + ld [wPikaSpriteX], a ld a, [wPikaSpriteY] add e ld [wPikaSpriteY], a ret -Jumptable_fd65c: - dw Func_fd678 - dw Func_fd6a3 - dw Func_fd698 - dw Func_fd6f4 - dw Func_fd6ff - dw Func_fd718 - dw Func_fd68c - dw Func_fd6c6 - dw Func_fd6c0 - dw Func_fd6e2 - dw Func_fd68b - -Func_fd672: +PikaMovementFunc2Jumptable: + dw PikaMovementFunc2_ResetFrameCounterAndFaceCurrent ; 0 + dw PikaMovementFunc2_UpdateSpriteImageIdxWithPreviousImageIdxDirection ; 1 + dw PikaMovementFunc2_UpdateSpriteImageIdxWithFacing ; 2 + dw PikaMovementFunc2_TurnParameter ; 3 + dw PikaMovementFunc2_TurnClockwise ; 4 + dw PikaMovementFunc2_TurnCounterClockwise ; 5 + dw PikaMovementFunc2_CopySpriteImageIdxDirectionToSpriteImageIdx ; 6 + dw PikaMovementFunc2_UpdateJumpWithPreviousImageIdxDirection ; 7 + dw PikaMovementFunc2_UpdateJumpWithFacing ; 8 + dw PikaMovementFunc2_CopyFacingToJump ; 9 + dw PikaMovementFunc2_nop ; 10 + +PikaMovement_SetSpawnShadow: ld hl, wd44d set 6, [hl] ret -Func_fd678: - ld hl, 7 +PikaMovementFunc2_ResetFrameCounterAndFaceCurrent: + ld hl, wPlayerIntraAnimFrameCounter - wPlayerSpriteStateData1 add hl, bc xor a ld [hli], a ld [hl], a - call Func_fd74a + call PikaMovementFunc2_GetImageBaseOffset ld d, a - call GetObjectFacing + call GetPikachuFacing or d - ld [wPikaPicAnimTimer + 1], a + ld [wCurPikaMovementSpriteImageIdx], a ret -Func_fd68b: +PikaMovementFunc2_nop: ret -Func_fd68c: - call Func_fd74a +PikaMovementFunc2_CopySpriteImageIdxDirectionToSpriteImageIdx: + call PikaMovementFunc2_GetImageBaseOffset ld d, a - call Func_fd755 + call PikaMovementFunc2_GetSpriteImageIdxDirection or d - ld [wPikaPicAnimTimer + 1], a + ld [wCurPikaMovementSpriteImageIdx], a ret -Func_fd698: - call Func_fd74a +PikaMovementFunc2_UpdateSpriteImageIdxWithFacing: + call PikaMovementFunc2_GetImageBaseOffset ld d, a - call GetObjectFacing + call GetPikachuFacing or d ld d, a - jr asm_fd6ac + jr PikaMovementFunc2_UpdateSpriteImageIdx -Func_fd6a3: - call Func_fd74a +PikaMovementFunc2_UpdateSpriteImageIdxWithPreviousImageIdxDirection: + call PikaMovementFunc2_GetImageBaseOffset ld d, a - call Func_fd755 + call PikaMovementFunc2_GetSpriteImageIdxDirection or d ld d, a -asm_fd6ac - ld hl, 8 +PikaMovementFunc2_UpdateSpriteImageIdx: + ld hl, wPlayerAnimFrameCounter - wPlayerSpriteStateData1 add hl, bc - call Func_fd78e - jr nz, .asm_fd6b6 + call CheckPikachuStepTimer2 + jr nz, .skip inc [hl] -.asm_fd6b6 +.skip ld a, [hl] rrca rrca and 3 or d - ld [wPikaPicAnimTimer + 1], a + ld [wCurPikaMovementSpriteImageIdx], a ret -Func_fd6c0: - call GetObjectFacing +PikaMovementFunc2_UpdateJumpWithFacing: + call GetPikachuFacing ld d, a - jr asm_fd6ca + jr PikaMovementFunc2_UpdateJump -Func_fd6c6: - call Func_fd755 +PikaMovementFunc2_UpdateJumpWithPreviousImageIdxDirection: + call PikaMovementFunc2_GetSpriteImageIdxDirection ld d, a -asm_fd6ca - call Func_fd74a +PikaMovementFunc2_UpdateJump: + call PikaMovementFunc2_GetImageBaseOffset or d ld d, a - call Func_fd736 + call PikaMovementFunc2_Timer or d - ld [wPikaPicAnimTimer + 1], a - call Func_fd79d - ld [wd456], a + ld [wCurPikaMovementSpriteImageIdx], a + call PikaMovementFunc_Sine + ld [wPikachuMovementYOffset], a and a ret z - call Func_fd672 + call PikaMovement_SetSpawnShadow ret -Func_fd6e2: - call GetObjectFacing +PikaMovementFunc2_CopyFacingToJump: + call GetPikachuFacing ld d, a - call Func_fd74a + call PikaMovementFunc2_GetImageBaseOffset or d - ld [wPikaPicAnimTimer + 1], a - call Func_fd79d - ld [wd456], a + ld [wCurPikaMovementSpriteImageIdx], a + call PikaMovementFunc_Sine + ld [wPikachuMovementYOffset], a ret -Func_fd6f4: - ld a, [wPikaPicAnimPointerSetupFinished] +PikaMovementFunc2_TurnParameter: + ld a, [wCurPikaMovementParam2] and $40 cp $40 - jr z, Func_fd6ff - jr Func_fd718 + jr z, PikaMovementFunc2_TurnClockwise + jr PikaMovementFunc2_TurnCounterClockwise -Func_fd6ff: - call Func_fd755 +PikaMovementFunc2_TurnClockwise: + call PikaMovementFunc2_GetSpriteImageIdxDirection ld d, a - call Func_fd78e - jr nz, .asm_fd710 + call CheckPikachuStepTimer2 + jr nz, .skip ld hl, Data_fd731 -.asm_fd70b +.loop ld a, [hli] cp d - jr nz, .asm_fd70b + jr nz, .loop ld d, [hl] -.asm_fd710 - call Func_fd74a +.skip + call PikaMovementFunc2_GetImageBaseOffset or d - ld [wPikaPicAnimTimer + 1], a + ld [wCurPikaMovementSpriteImageIdx], a ret -Func_fd718: - call Func_fd755 +PikaMovementFunc2_TurnCounterClockwise: + call PikaMovementFunc2_GetSpriteImageIdxDirection ld d, a - call Func_fd78e - jr nz, .asm_fd529 + call CheckPikachuStepTimer2 + jr nz, .skip ld hl, Data_fd731End -.asm_fd524 +.loop ld a, [hld] cp d - jr nz, .asm_fd524 + jr nz, .loop ld d, [hl] -.asm_fd529 - call Func_fd74a +.skip + call PikaMovementFunc2_GetImageBaseOffset or d - ld [wPikaPicAnimTimer + 1], a + ld [wCurPikaMovementSpriteImageIdx], a ret Data_fd731: @@ -702,27 +711,27 @@ Data_fd731: db SPRITE_FACING_DOWN Data_fd731End: -Func_fd736: +PikaMovementFunc2_Timer: push hl - ld hl, 7 + ld hl, wPlayerIntraAnimFrameCounter - wPlayerSpriteStateData1 add hl, bc ld a, [hl] inc a and $3 ld [hli], a - jr nz, .asm_fd747 + jr nz, .load_pop ld a, [hl] inc a and $3 ld [hl], a -.asm_fd747 +.load_pop ld a, [hl] pop hl ret -Func_fd74a: +PikaMovementFunc2_GetImageBaseOffset: push hl - ld hl, wSpriteStateData2 - wSpriteStateData1 + 14 + ld hl, wPlayerSpriteImageBaseOffset - wPlayerSpriteStateData1 add hl, bc ld a, [hl] dec a @@ -730,27 +739,27 @@ Func_fd74a: pop hl ret -Func_fd755: +PikaMovementFunc2_GetSpriteImageIdxDirection: push hl - ld hl, 2 + ld hl, wPlayerSpriteImageIdx - wPlayerSpriteStateData1 add hl, bc ld a, [hl] and $c pop hl ret -GetObjectFacing: +GetPikachuFacing: push hl - ld hl, 9 + ld hl, wPlayerFacingDirection - wPlayerSpriteStateData1 add hl, bc ld a, [hl] and $c pop hl ret -SetObjectFacing: +SetPikachuFacing: push hl - ld hl, 9 + ld hl, wPlayerFacingDirection - wPlayerSpriteStateData1 add hl, bc add a add a @@ -759,10 +768,10 @@ SetObjectFacing: pop hl ret -Func_fd775: +CheckPikachuStepTimer1: ld hl, wd457 inc [hl] - ld a, [wPikaPicAnimPointer] + ld a, [wCurPikaMovementParam1] and $1f inc a cp [hl] @@ -770,18 +779,19 @@ Func_fd775: ld [hl], 0 ret -Func_fd784: - ld a, [wPikaPicAnimPointer] +GetPikachuStepVectorMagnitude: + ; *XX***** + ld a, [wCurPikaMovementParam1] swap a rrca and $3 inc a ret -Func_fd78e: +CheckPikachuStepTimer2: ld hl, wd458 inc [hl] - ld a, [wPikaPicAnimPointerSetupFinished] + ld a, [wCurPikaMovementParam2] and $f inc a cp [hl] @@ -789,8 +799,8 @@ Func_fd78e: ld [hl], 0 ret -Func_fd79d: - call Func_fd7b2 +PikaMovementFunc_Sine: + call .GetArgument ld a, [wd458] add e ld [wd458], a @@ -803,37 +813,37 @@ Func_fd79d: pop hl ret -Func_fd7b2: - ld a, [wPikaPicAnimPointerSetupFinished] +.GetArgument: + ld a, [wCurPikaMovementParam2] and $f inc a ld d, a - ld a, [wPikaPicAnimPointerSetupFinished] + ld a, [wCurPikaMovementParam2] swap a and $7 ld e, a ld a, 1 - jr z, .asm_fd7c9 -.asm_fd7c5 + jr z, .okay +.loop add a dec e - jr nz, .asm_fd7c5 -.asm_fd7c9 + jr nz, .loop +.okay ld e, a ret -Func_fd7cb: +ApplyPikachuStepVector: push bc ld c, a ld b, 0 - ld hl, Data_fd7e3 + ld hl, .StepVectors add hl, bc add hl, bc ld d, [hl] inc hl ld e, [hl] pop bc - ld hl, wSpriteStateData2 - wSpriteStateData1 + 4 + ld hl, wPlayerMapY - wPlayerSpriteStateData1 add hl, bc ld a, [hl] add e @@ -843,7 +853,7 @@ Func_fd7cb: ld [hl], a ret -Data_fd7e3: +.StepVectors: db 0, 1 db 0, -1 db -1, 0 @@ -853,7 +863,7 @@ Data_fd7e3: db -1, -1 db 1, -1 -Func_fd7f3: +LoadPikachuShadowOAMData: push bc push de push hl @@ -861,22 +871,22 @@ Func_fd7f3: ld bc, wOAMBuffer + 4 * 36 ld a, [wPikaSpriteY] ld e, a - ld a, [wPikaPicAnimDelay] + ld a, [wPikaSpriteX] ld d, a - ld hl, Data_fd80b - call Func_fd814 + ld hl, .OAMData + call .LoadOAMData pop hl pop de pop bc ret -Data_fd80b: - db $02 +.OAMData: + db 2 db $0c, $00, $ff, 0 db $0c, $08, $ff, 1 << OAM_X_FLIP -Func_fd814: +.LoadOAMData: ld a, e add $10 ld e, a @@ -884,7 +894,7 @@ Func_fd814: add $8 ld d, a ld a, [hli] -.asm_fd81d +.loop push af ld a, [hli] add e @@ -902,7 +912,7 @@ Func_fd814: inc bc pop af dec a - jr nz, .asm_fd81d + jr nz, .loop ret LoadPikachuShadowIntoVRAM: @@ -924,7 +934,7 @@ LoadPikachuBallIconIntoVRAM: Func_fd851: ld hl, vNPCSprites + $c * $10 ld a, 3 -.asm_fd856 +.loop push af push hl ld de, GFX_fd86b @@ -935,7 +945,7 @@ Func_fd851: add hl, de pop af dec a - jr nz, .asm_fd856 + jr nz, .loop ret GFX_fd86b: @@ -230,16 +230,16 @@ wSpriteStateData1:: ; c100 ; C1xF spritestatedata1: MACRO w\1SpriteStateData1:: -w\1PictureID:: db -w\1MovementStatus:: db -w\1SpriteImageIdx:: db -w\1YStepVector:: db -w\1YPixels:: db -w\1XStepVector:: db -w\1XPixels:: db -w\1IntraAnimFrameCounter:: db -w\1AnimFrameCounter:: db -w\1FacingDirection:: db +w\1PictureID:: db ; 0 +w\1MovementStatus:: db ; 1 +w\1SpriteImageIdx:: db ; 2 +w\1YStepVector:: db ; 3 +w\1YPixels:: db ; 4 +w\1XStepVector:: db ; 5 +w\1XPixels:: db ; 6 +w\1IntraAnimFrameCounter:: db ; 7 +w\1AnimFrameCounter:: db ; 8 +w\1FacingDirection:: db ; 9 ds 6 w\1SpriteStateData1End:: endm @@ -287,17 +287,17 @@ wSpriteStateData2:: ; c200 ; C2xF spritestatedata2: MACRO w\1SpriteStateData2:: -w\1WalkAnimationCounter:: db - ds 1 -w\1YDisplacement:: db -w\1XDisplacement:: db -w\1MapY:: db -w\1MapX:: db -w\1MovementByte1:: db -w\1GrassPriority:: db -w\1MovementDelay:: db +w\1WalkAnimationCounter:: db ; 0 + ds 1 +w\1YDisplacement:: db ; 2 +w\1XDisplacement:: db ; 3 +w\1MapY:: db ; 4 +w\1MapX:: db ; 5 +w\1MovementByte1:: db ; 6 +w\1GrassPriority:: db ; 7 +w\1MovementDelay:: db ; 8 ds 5 -w\1SpriteImageBaseOffset:: db +w\1SpriteImageBaseOffset:: db ; e ds 1 w\1SpriteStateData2End:: endm @@ -2835,15 +2835,27 @@ wPikachuMovementScriptBank:: ds 1 ; d449 wPikachuMovementScriptAddress:: dw ; d44a wd44d:: ds 1 ; d44c -wCurPikaMovementData:: ; +wCurPikaMovementData:: ; d44d +wCurPikaMovementParam1:: ds 1 ; d44d +wCurPikaMovementFunc1:: ds 1 ; d44e +wCurPikaMovementParam2:: ds 1 ; d44f +wCurPikaMovementFunc2:: ds 1 ; d450 +wd451:: ds 1 ; d451 +wCurPikaMovementSpriteImageIdx:: ds 1 ; d452 +wPikaSpriteX:: ds 1 ; d453 +wPikaSpriteY:: ds 1 ; d454 +wPikachuMovementXOffset:: ds 1 ; d455 +wPikachuMovementYOffset:: ds 1 ; d456 + ds wCurPikaMovementData - @ + + wPikaPicAnimPointer:: dw ; d44d wPikaPicAnimPointerSetupFinished:: ds 1 ; d44f wPikaPicAnimCurGraphicID:: ds 1 wPikaPicAnimTimer:: ds 2 ; d451 wPikaPicAnimDelay:: -wPikaSpriteX:: ds 1 -wPikaPicTextboxStartX:: -wPikaSpriteY:: ds 1 ; d454 +wPikaPicTextboxStartX:: ds 1 ; d453 +wd454:: ds 1 ; d454 wPikaPicTextboxStartY:: ds 1 ; d455 wd456:: ds 1 ; d456 wd457:: ds 1 ; d457 |