diff options
Diffstat (limited to 'engine/overworld.asm')
-rwxr-xr-x | engine/overworld.asm | 525 |
1 files changed, 525 insertions, 0 deletions
diff --git a/engine/overworld.asm b/engine/overworld.asm new file mode 100755 index 00000000..f564a120 --- /dev/null +++ b/engine/overworld.asm @@ -0,0 +1,525 @@ +FieldMoveBufferReset: ; c72f (3:472f) + xor a + ld hl, wBuffer1 + ld bc, $7 + call ByteFill + ret + +DoFieldMoveAction: ; c73a (3:473a) + ld a, [wBuffer1] + rst JumpTable + ld [wBuffer1], a + bit 7, a + jr nz, .asm_c747 + and a + ret + +.asm_c747 + and $7f + scf + ret + +FieldMoveGetPartyNick: ; c74b (3:474b) + ld hl, wPartyMon1Nickname + ld a, $2 + ld [wce5f], a + ld a, [wd005] + call GetNick + call Function317b + ld de, wStringBuffer2 + ld hl, wStringBuffer3 + call CopyName2 + ret + +FieldMoveEngineFlagCheck: ; c766 (3:4766) + ld b, CHECK_FLAG + callba EngineFlagAction ; same bank + ld a, c + and a + jr nz, .asm_c774 + scf + ret + +.asm_c774 + xor a + ret + +FieldMoveBadgeCheck: ; c776 (3:4776) + call FieldMoveEngineFlagCheck + ret nc + ld hl, .BadgeRequiredText + call MenuTextBoxBackup + scf + ret + +.BadgeRequiredText: + text_jump BadgeRequiredText_ + db "@" + +FieldMovePartyCheck: ; c787 (3:4787) + ld e, $0 + xor a + ld [wd005], a +.asm_c78d + ld c, e + ld b, $0 + ld hl, wPartySpecies + add hl, bc + ld a, [hl] + and a + jr z, .asm_c7bc + cp -1 + jr z, .asm_c7bc + cp EGG + jr z, .asm_c7b3 + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, wPartyMon1Moves + ld a, e + call AddNTimes + ld b, NUM_MOVES +.asm_c7ac + ld a, [hli] + cp d + jr z, .asm_c7b6 + dec b + jr nz, .asm_c7ac +.asm_c7b3 + inc e + jr .asm_c78d + +.asm_c7b6 + ld a, e + ld [wd005], a + xor a + ret + +.asm_c7bc + scf + ret + +FieldMoveFailed: ; c7be (3:47be) + ld hl, .CantUseHereText + call MenuTextBoxBackup + ret + +.CantUseHereText: + text_jump CantUseFieldMoveHereText_ + db "@" + +CutFunction:: + call FieldMoveBufferReset +.asm_c7cd + ld hl, .Jumptable + call DoFieldMoveAction + jr nc, .asm_c7cd + and $7f + ld [wFieldMoveSucceeded], a + ret + +.Jumptable: + dw CheckAbleToCut + dw CutTreeOrGrass + dw FailToCut + +CheckAbleToCut: + ld de, ENGINE_HIVEBADGE + call FieldMoveBadgeCheck + jr c, .asm_c7f1 + call CheckMapForSomethingToCut + jr c, .asm_c7f4 + ld a, $1 + ret + +.asm_c7f1 + ld a, $80 + ret + +.asm_c7f4 + ld a, $2 + ret + +CutTreeOrGrass: + ld hl, Script_CutFromMenu + call QueueScript + ld a, $81 + ret + +FailToCut: + ld hl, Text_NothingToCut + call MenuTextBoxBackup + ld a, $80 + ret + +Text_UsedCut: + text_jump Text_UsedCut_ + db "@" + +Text_NothingToCut: + text_jump Text_NothingToCut_ + db "@" + +CheckMapForSomethingToCut: ; c813 (3:4813) + call GetFacingTileCoord + ld c, a + push de + callba CheckCutCollision + pop de + jr nc, .asm_c841 + call GetBlockLocation + ld c, [hl] + push hl + ld hl, CutTreeBlockPointers + call CheckOverworldTileArrays + pop hl + jr nc, .asm_c841 + ld a, l + ld [wBuffer3], a + ld a, h + ld [wBuffer4], a + ld a, b + ld [wBuffer5], a + ld a, c + ld [wBuffer6], a + xor a + ret + +.asm_c841 + scf + ret + +Script_CutFromMenu: + reloadmappart + special UpdateTimePals +Script_Cut: + callasm FieldMoveGetPartyNick + writetext Text_UsedCut + reloadmappart + callasm CutDownTreeOrGrass + closetext + end + +CutDownTreeOrGrass: + ld hl, wBuffer3 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wBuffer5] + ld [hl], a + xor a + ld [hBGMapMode], a + call OverworldTextModeSwitch + call UpdateSprites + call DelayFrame + ld a, [wBuffer6] + ld e, a + callba OWCutAnimation + call BufferScreen + call GetMovementPermissions + ret + +CheckOverworldTileArrays: ; c87c (3:487c) + push bc + ld a, [wd082] + ld de, $3 + call IsInArray + pop bc + jr nc, .asm_c89c + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $3 + ld a, c + call IsInArray + jr nc, .asm_c89c + inc hl + ld b, [hl] + inc hl + ld c, [hl] + scf + ret + +.asm_c89c + xor a + ret + +CutTreeBlockPointers: + dbw TILESET_JOHTO_1, .johto1 + dbw TILESET_JOHTO_2, .johto2 + dbw TILESET_KANTO, .kanto + dbw TILESET_PARK, .park + dbw TILESET_ILEX_FOREST, .ilex + db -1 + +.johto1 + db $03, $02, $01 ; grass + db $5b, $3c, $00 ; tree + db $5f, $3d, $00 ; tree + db $63, $3f, $00 ; tree + db $67, $3e, $00 ; tree + db -1 + +.johto2 + db $03, $02, $01 ; grass + db -1 + +.kanto + db $0b, $0a, $01 ; grass + db $32, $6d, $00 ; tree + db $33, $6c, $00 ; tree + db $34, $6f, $00 ; tree + db $35, $4c, $00 ; tree + db $60, $6e, $00 ; tree + db -1 + +.park + db $13, $03, $01 ; grass + db $03, $04, $01 ; grass + db -1 + +.ilex + db $0f, $17, $00 + db -1 + +WhirlpoolBlockPointers: + dbw TILESET_JOHTO_1, .johto + db -1 + +.johto + db $07, $36, $00 + db -1 + +FlashFunction: + call CheckUseFlash + and $7f + ld [wFieldMoveSucceeded], a + ret + +CheckUseFlash: ; c8f1 (3:48f1) + ld de, ENGINE_ZEPHYRBADGE + callba FieldMoveBadgeCheck ; same bank + jr c, .asm_c90f + ld a, [wd56e] + cp $ff + jr nz, .asm_c909 + call UseFlash + ld a, $81 + ret + +.asm_c909 + call FieldMoveFailed + ld a, $80 + ret + +.asm_c90f + ld a, $80 + ret + +UseFlash: ; c912 (3:4912) + ld hl, Script_UseFlash + jp QueueScript + +Script_UseFlash: + reloadmappart + special UpdateTimePals + writetext Text_UsedFlash + callasm BlindingFlash + closetext + end + +Text_UsedFlash: + text_jump Text_UsedFlash_ + start_asm + call WaitSFX + ld de, SFX_FLASH + call PlaySFX + call WaitSFX + ld hl, .end + ret +.end db "@" + +SurfFunction: + call FieldMoveBufferReset +.asm_c93e + ld hl, .Jumptable + call DoFieldMoveAction + jr nc, .asm_c93e + and $7f + ld [wFieldMoveSucceeded], a + ret + +.Jumptable: + dw CheckAbleToSurf + dw StartSurfing + dw CantSurf + dw AlreadySurfing + +CheckAbleToSurf: + ld de, ENGINE_FOGBADGE + call FieldMoveBadgeCheck + jr c, .asm_c980 + CheckFlagHL ENGINE_ALWAYS_ON_BIKE + jr nz, .asm_c986 + ld a, [wPlayerBikeSurfState] + cp PLAYER_SURF + jr z, .asm_c983 + cp PLAYER_SURF_PIKA + jr z, .asm_c983 + call GetFacingTileCoord + call GetTileCollision + cp $1 + jr nz, .asm_c986 + call GetSurfDirection + jr c, .asm_c986 + ld a, $1 + ret + +.asm_c980 + ld a, $80 + ret + +.asm_c983 + ld a, $3 + ret + +.asm_c986 + ld a, $2 + ret + +StartSurfing: + call GetSurfType + ld [wBuffer2], a + call FieldMoveGetPartyNick + ld hl, SurfFromMenuScript + call QueueScript + ld a, $81 + ret + +CantSurf: + ld hl, CantSurfText + call MenuTextBoxBackup + ld a, $80 + ret + +AlreadySurfing: + ld hl, AlreadySurfingText + call MenuTextBoxBackup + ld a, $80 + ret + +SurfFromMenuScript: + special UpdateTimePals +UsedSurfScript: + writetext UsedSurfText + waitbutton + closetext + copybytetovar wBuffer2 + writevarcode VAR_MOVEMENT + special ReplacePlayerSprite + special PlayMapMusic + special Special_SurfStartStep + applymovement 0, wMovementBuffer + end + +UsedSurfText: + text_jump UsedSurfText_ + db "@" + +CantSurfText: + text_jump CantSurfText_ + db "@" + +AlreadySurfingText: + text_jump AlreadySurfingText_ + db "@" + +GetSurfType: ; c9d7 (3:49d7) + ld a, [wd005] + ld e, a + ld d, $0 + ld hl, wPartySpecies + add hl, de + ld a, [hl] + cp PIKACHU + ld a, PLAYER_SURF_PIKA + ret z + ld a, PLAYER_SURF + ret + +GetSurfDirection: ; c9ea (3:49ea) + ld a, [wPlayerDirection] + and $c + rrca + rrca + ld e, a + ld d, $0 + ld hl, .Directions + add hl, de + ld a, [wTilePermissions] + and [hl] + jr nz, .asm_ca00 + xor a + ret + +.asm_ca00 + scf + ret + +.Directions: + db FACE_DOWN + db FACE_UP + db FACE_LEFT + db FACE_RIGHT + +TrySurfOW:: + ld a, [wPlayerBikeSurfState] + cp PLAYER_SURF_PIKA + jr z, .quit + cp PLAYER_SURF + jr z, .quit + ld a, [wcf29] + call GetTileCollision + cp $1 + jr nz, .quit + call GetSurfDirection + jr c, .quit + ld de, ENGINE_FOGBADGE + call FieldMoveEngineFlagCheck + jr c, .quit + ld d, SURF + call FieldMovePartyCheck + jr c, .quit + CheckFlagHL ENGINE_ALWAYS_ON_BIKE + jr nz, .quit + call GetSurfType + ld [wBuffer2], a + call FieldMoveGetPartyNick + ld a, BANK(AskSurfScript) + ld hl, AskSurfScript + call CallScript + scf + ret + +.quit + xor a + ret +;ca4b +AskSurfScript: + opentext + writetext AskSurfText + yesorno + iftrue UsedSurfScript + closetext + end + +AskSurfText: + text_jump AskSurfText_ + db "@" + +FlyFunction: +IF DEF(GOLD) + dr $ca5a, $d1e2 +ENDC +IF DEF(SILVER) + dr $ca58, $d1e0 +ENDC |