diff options
-rw-r--r-- | asm/field_control_avatar.s | 1780 | ||||
-rw-r--r-- | include/asm.inc.h | 4 | ||||
-rw-r--r-- | include/battle_setup.h | 2 | ||||
-rw-r--r-- | include/field_player_avatar.h | 4 | ||||
-rw-r--r-- | include/global.fieldmap.h | 9 | ||||
-rw-r--r-- | include/global.h | 6 | ||||
-rw-r--r-- | include/metatile_behavior.h | 2 | ||||
-rw-r--r-- | include/rom4.h | 13 | ||||
-rw-r--r-- | include/vars.h | 28 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/field_control_avatar.c | 806 | ||||
-rw-r--r-- | src/field_poison.c | 2 | ||||
-rw-r--r-- | src/metatile_behavior.c | 2 | ||||
-rw-r--r-- | src/rom4.c | 8 |
14 files changed, 801 insertions, 1866 deletions
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s deleted file mode 100644 index c122f7651..000000000 --- a/asm/field_control_avatar.s +++ /dev/null @@ -1,1780 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80682A8 -sub_80682A8: @ 80682A8 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r2, 24 - lsrs r6, r2, 24 - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsCounter - lsls r0, 24 - cmp r0, 0 - bne _080682D0 - ldrh r0, [r4] - ldrh r1, [r4, 0x2] - b _080682EE -_080682D0: - ldr r1, _08068314 @ =gUnknown_0821664C - lsls r2, r6, 3 - adds r0, r2, r1 - ldr r3, [r0] - ldrh r0, [r4] - adds r0, r3 - lsls r0, 16 - lsrs r0, 16 - adds r1, 0x4 - adds r2, r1 - ldr r2, [r2] - ldrh r1, [r4, 0x2] - adds r1, r2 - lsls r1, 16 - lsrs r1, 16 -_080682EE: - ldrb r2, [r4, 0x4] - bl GetFieldObjectIdByXYZ - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x10 - beq _0806830E - ldr r1, _08068318 @ =gMapObjects - lsls r2, r3, 3 - adds r0, r2, r3 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x8] - adds r5, r1, 0 - cmp r0, 0xFF - bne _0806831C -_0806830E: - movs r0, 0 - b _0806834E - .align 2, 0 -_08068314: .4byte gUnknown_0821664C -_08068318: .4byte gMapObjects -_0806831C: - movs r4, 0 - ldr r1, _08068354 @ =gLinkPlayerMapObjects -_08068320: - ldrb r0, [r1] - cmp r0, 0x1 - bne _0806832C - ldrb r0, [r1, 0x2] - cmp r0, r3 - beq _0806830E -_0806832C: - adds r1, 0x4 - adds r4, 0x1 - cmp r4, 0x3 - ble _08068320 - ldr r0, _08068358 @ =gSelectedMapObject - strb r3, [r0] - ldr r1, _0806835C @ =gScriptLastTalked - adds r0, r2, r3 - lsls r0, 2 - adds r0, r5 - ldrb r0, [r0, 0x8] - strh r0, [r1] - ldr r0, _08068360 @ =gScriptFacing - strh r6, [r0] - adds r0, r3, 0 - bl GetFieldObjectScriptPointerByFieldObjectId -_0806834E: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08068354: .4byte gLinkPlayerMapObjects -_08068358: .4byte gSelectedMapObject -_0806835C: .4byte gScriptLastTalked -_08068360: .4byte gScriptFacing - thumb_func_end sub_80682A8 - - thumb_func_start sub_8068364 -sub_8068364: @ 8068364 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r6, r2, 24 - ldrh r0, [r4] - ldrh r1, [r4, 0x2] - ldrb r2, [r4, 0x4] - bl GetFieldObjectIdByXYZ - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x10 - beq _08068392 - ldr r1, _080683E0 @ =gMapObjects - lsls r2, r3, 3 - adds r0, r2, r3 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x8] - cmp r0, 0xFF - bne _080683E8 -_08068392: - adds r0, r5, 0 - bl MetatileBehavior_IsCounter - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080683DC - ldr r1, _080683E4 @ =gUnknown_0821664C - lsls r2, r6, 3 - adds r0, r2, r1 - ldr r3, [r0] - ldrh r0, [r4] - adds r0, r3 - lsls r0, 16 - lsrs r0, 16 - adds r1, 0x4 - adds r2, r1 - ldr r2, [r2] - ldrh r1, [r4, 0x2] - adds r1, r2 - lsls r1, 16 - lsrs r1, 16 - ldrb r2, [r4, 0x4] - bl GetFieldObjectIdByXYZ - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x10 - beq _080683DC - ldr r1, _080683E0 @ =gMapObjects - lsls r2, r3, 3 - adds r0, r2, r3 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x8] - cmp r0, 0xFF - bne _080683E8 -_080683DC: - movs r0, 0 - b _0806840C - .align 2, 0 -_080683E0: .4byte gMapObjects -_080683E4: .4byte gUnknown_0821664C -_080683E8: - ldr r0, _08068414 @ =gSelectedMapObject - strb r3, [r0] - ldr r4, _08068418 @ =gScriptLastTalked - adds r0, r2, r3 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x8] - strh r0, [r4] - ldr r0, _0806841C @ =gScriptFacing - strh r6, [r0] - adds r0, r3, 0 - bl GetFieldObjectScriptPointerByFieldObjectId - adds r1, r0, 0 - ldrb r0, [r4] - bl GetRamScript - adds r1, r0, 0 -_0806840C: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08068414: .4byte gSelectedMapObject -_08068418: .4byte gScriptLastTalked -_0806841C: .4byte gScriptFacing - thumb_func_end sub_8068364 - - thumb_func_start TryGetInvisibleMapObjectScript -TryGetInvisibleMapObjectScript: @ 8068420 - push {r4,r5,lr} - lsls r2, 24 - lsrs r5, r2, 24 - ldr r4, _08068450 @ =gMapHeader - ldrh r1, [r0] - subs r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - ldrh r2, [r0, 0x2] - subs r2, 0x7 - lsls r2, 16 - lsrs r2, 16 - ldrb r3, [r0, 0x4] - adds r0, r4, 0 - bl FindInvisibleMapObjectByPosition - cmp r0, 0 - beq _08068494 - ldr r2, [r0, 0x8] - cmp r2, 0 - bne _08068458 - ldr r0, _08068454 @ =gUnknown_081C6C02 - b _080684FA - .align 2, 0 -_08068450: .4byte gMapHeader -_08068454: .4byte gUnknown_081C6C02 -_08068458: - ldrb r0, [r0, 0x5] - cmp r0, 0x8 - bhi _080684F8 - lsls r0, 2 - ldr r1, _08068468 @ =_0806846C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08068468: .4byte _0806846C - .align 2, 0 -_0806846C: - .4byte _080684F8 - .4byte _08068490 - .4byte _08068498 - .4byte _0806849E - .4byte _080684A4 - .4byte _080684AA - .4byte _080684AA - .4byte _080684AA - .4byte _080684D8 -_08068490: - cmp r5, 0x2 - beq _080684F8 -_08068494: - movs r0, 0 - b _080684FA -_08068498: - cmp r5, 0x1 - beq _080684F8 - b _08068494 -_0806849E: - cmp r5, 0x4 - beq _080684F8 - b _08068494 -_080684A4: - cmp r5, 0x3 - beq _080684F8 - b _08068494 -_080684AA: - ldr r1, _080684CC @ =gSpecialVar_0x8004 - lsrs r0, r2, 16 - movs r3, 0x96 - lsls r3, 2 - adds r0, r3 - strh r0, [r1] - ldr r0, _080684D0 @ =gSpecialVar_0x8005 - strh r2, [r0] - ldrh r0, [r1] - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068494 - ldr r0, _080684D4 @ =HiddenItemScript - b _080684FA - .align 2, 0 -_080684CC: .4byte gSpecialVar_0x8004 -_080684D0: .4byte gSpecialVar_0x8005 -_080684D4: .4byte HiddenItemScript -_080684D8: - cmp r5, 0x2 - bne _08068494 - ldr r0, _080684F0 @ =gSpecialVar_0x8004 - strh r2, [r0] - bl sub_80BC050 - lsls r0, 24 - cmp r0, 0 - beq _08068494 - ldr r0, _080684F4 @ =gUnknown_081A2C51 - b _080684FA - .align 2, 0 -_080684F0: .4byte gSpecialVar_0x8004 -_080684F4: .4byte gUnknown_081A2C51 -_080684F8: - adds r0, r2, 0 -_080684FA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end TryGetInvisibleMapObjectScript - - thumb_func_start sub_8068500 -sub_8068500: @ 8068500 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r2, 0 - bl MetatileBehavior_IsPlayerFacingTVScreen - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068524 - ldr r0, _08068520 @ =Event_TV - b _080686EE - .align 2, 0 -_08068520: .4byte Event_TV -_08068524: - adds r0, r5, 0 - bl MetatileBehavior_IsPC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806853C - ldr r0, _08068538 @ =gUnknown_081A0009 - b _080686EE - .align 2, 0 -_08068538: .4byte gUnknown_081A0009 -_0806853C: - adds r0, r5, 0 - bl MetatileBehavior_IsClosedSootpolisGymDoor - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068554 - ldr r0, _08068550 @ =ClosedSootopolisGymDoorScript - b _080686EE - .align 2, 0 -_08068550: .4byte ClosedSootopolisGymDoorScript -_08068554: - adds r0, r5, 0 - bl is_tile_x84 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806856C - ldr r0, _08068568 @ =gUnknown_081A4363 - b _080686EE - .align 2, 0 -_08068568: .4byte gUnknown_081A4363 -_0806856C: - adds r0, r5, 0 - bl MetatileBehavior_IsPokeblockFeeder - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068584 - ldr r0, _08068580 @ =gUnknown_081C346A - b _080686EE - .align 2, 0 -_08068580: .4byte gUnknown_081C346A -_08068584: - adds r0, r5, 0 - bl MetatileBehavior_IsTrickHousePuzzleDoor - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806859C - ldr r0, _08068598 @ =gUnknown_081616E1 - b _080686EE - .align 2, 0 -_08068598: .4byte gUnknown_081616E1 -_0806859C: - adds r0, r5, 0 - bl MetatileBehavior_IsRegionMap - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080685B4 - ldr r0, _080685B0 @ =Event_WorldMap - b _080686EE - .align 2, 0 -_080685B0: .4byte Event_WorldMap -_080685B4: - adds r0, r5, 0 - bl sub_805791C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080685CC - ldr r0, _080685C8 @ =Event_RunningShoesManual - b _080686EE - .align 2, 0 -_080685C8: .4byte Event_RunningShoesManual -_080685CC: - adds r0, r5, 0 - bl MetatileBehavior_IsPictureBookShelf - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080685E4 - ldr r0, _080685E0 @ =PictureBookShelfScript - b _080686EE - .align 2, 0 -_080685E0: .4byte PictureBookShelfScript -_080685E4: - adds r0, r5, 0 - bl MetatileBehavior_IsBookShelf - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080685FC - ldr r0, _080685F8 @ =BookshelfScript - b _080686EE - .align 2, 0 -_080685F8: .4byte BookshelfScript -_080685FC: - adds r0, r5, 0 - bl MetatileBehavior_IsPokeCenterBookShelf - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068614 - ldr r0, _08068610 @ =PokemonCenterBookshelfScript - b _080686EE - .align 2, 0 -_08068610: .4byte PokemonCenterBookshelfScript -_08068614: - adds r0, r5, 0 - bl MetatileBehavior_IsVase - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806862C - ldr r0, _08068628 @ =VaseScript - b _080686EE - .align 2, 0 -_08068628: .4byte VaseScript -_0806862C: - adds r0, r5, 0 - bl MetatileBehavior_IsTrashCan - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068644 - ldr r0, _08068640 @ =TrashCanScript - b _080686EE - .align 2, 0 -_08068640: .4byte TrashCanScript -_08068644: - adds r0, r5, 0 - bl MetatileBehavior_IsShopShelf - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806865C - ldr r0, _08068658 @ =ShopShelfScript - b _080686EE - .align 2, 0 -_08068658: .4byte ShopShelfScript -_0806865C: - adds r0, r5, 0 - bl MetatileBehavior_IsBlueprint - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068674 - ldr r0, _08068670 @ =BlueprintScript - b _080686EE - .align 2, 0 -_08068670: .4byte BlueprintScript -_08068674: - movs r4, 0x4 - ldrsb r4, [r6, r4] - movs r1, 0 - ldrsh r0, [r6, r1] - movs r2, 0x2 - ldrsh r1, [r6, r2] - bl MapGridGetZCoordAt - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bne _080686EC - adds r0, r5, 0 - bl MetatileBehavior_IsSecretBasePC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080686A4 - ldr r0, _080686A0 @ =gUnknown_0815F36C - b _080686EE - .align 2, 0 -_080686A0: .4byte gUnknown_0815F36C -_080686A4: - adds r0, r5, 0 - bl sub_805724C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080686BC - ldr r0, _080686B8 @ =gUnknown_0815F43A - b _080686EE - .align 2, 0 -_080686B8: .4byte gUnknown_0815F43A -_080686BC: - adds r0, r5, 0 - bl sub_8057364 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080686D4 - ldr r0, _080686D0 @ =gUnknown_0815F523 - b _080686EE - .align 2, 0 -_080686D0: .4byte gUnknown_0815F523 -_080686D4: - adds r0, r5, 0 - bl sub_8057378 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080686EC - ldr r0, _080686E8 @ =gUnknown_0815F528 - b _080686EE - .align 2, 0 -_080686E8: .4byte gUnknown_0815F528 -_080686EC: - movs r0, 0 -_080686EE: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8068500 - - thumb_func_start TryGetFieldMoveScript -TryGetFieldMoveScript: @ 80686F4 - push {r4,lr} - lsls r1, 24 - lsrs r4, r1, 24 - ldr r0, _08068724 @ =0x0000080b - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806872C - bl PartyHasMonWithSurf - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806872C - bl IsPlayerFacingSurfableFishableWater - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806872C - ldr r0, _08068728 @ =UseSurfScript - b _0806876A - .align 2, 0 -_08068724: .4byte 0x0000080b -_08068728: .4byte UseSurfScript -_0806872C: - adds r0, r4, 0 - bl MetatileBehavior_IsWaterfall - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068768 - ldr r0, _08068758 @ =0x0000080e - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068760 - bl IsPlayerSurfingNorth - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068760 - ldr r0, _0806875C @ =UseWaterfallScript - b _0806876A - .align 2, 0 -_08068758: .4byte 0x0000080e -_0806875C: .4byte UseWaterfallScript -_08068760: - ldr r0, _08068764 @ =CannotUseWaterfallScript - b _0806876A - .align 2, 0 -_08068764: .4byte CannotUseWaterfallScript -_08068768: - movs r0, 0 -_0806876A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end TryGetFieldMoveScript - - thumb_func_start sub_8068770 -sub_8068770: @ 8068770 - push {lr} - ldr r0, _08068794 @ =0x0000080d - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _0806879C - bl sub_8068F18 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0806879C - ldr r0, _08068798 @ =UseDiveScript - bl ScriptContext1_SetupScript - movs r0, 0x1 - b _0806879E - .align 2, 0 -_08068794: .4byte 0x0000080d -_08068798: .4byte UseDiveScript -_0806879C: - movs r0, 0 -_0806879E: - pop {r1} - bx r1 - thumb_func_end sub_8068770 - - thumb_func_start sub_80687A4 -sub_80687A4: @ 80687A4 - push {lr} - ldr r0, _080687D0 @ =0x0000080d - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080687DC - ldr r0, _080687D4 @ =gMapHeader - ldrb r0, [r0, 0x17] - cmp r0, 0x5 - bne _080687DC - bl sub_8068F18 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080687DC - ldr r0, _080687D8 @ =UnderwaterUseDiveScript - bl ScriptContext1_SetupScript - movs r0, 0x1 - b _080687DE - .align 2, 0 -_080687D0: .4byte 0x0000080d -_080687D4: .4byte gMapHeader -_080687D8: .4byte UnderwaterUseDiveScript -_080687DC: - movs r0, 0 -_080687DE: - pop {r1} - bx r1 - thumb_func_end sub_80687A4 - - thumb_func_start sub_80687E4 -sub_80687E4: @ 80687E4 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r1, 16 - lsrs r4, r1, 16 - adds r6, r4, 0 - bl mapheader_trigger_activate_at__run_now - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068834 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8068A64 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068834 - adds r0, r6, 0 - bl sub_8068870 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068834 - bl sub_8068894 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068834 - bl UpdateRepelCounter - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068834 - movs r0, 0 - b _08068836 -_08068834: - movs r0, 0x1 -_08068836: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80687E4 - - thumb_func_start mapheader_trigger_activate_at__run_now -mapheader_trigger_activate_at__run_now: @ 806883C - push {r4,lr} - ldr r4, _08068864 @ =gMapHeader - ldrh r1, [r0] - subs r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - ldrh r2, [r0, 0x2] - subs r2, 0x7 - lsls r2, 16 - lsrs r2, 16 - ldrb r3, [r0, 0x4] - adds r0, r4, 0 - bl mapheader_trigger_activate_at - cmp r0, 0 - beq _08068868 - bl ScriptContext1_SetupScript - movs r0, 0x1 - b _0806886A - .align 2, 0 -_08068864: .4byte gMapHeader -_08068868: - movs r0, 0 -_0806886A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end mapheader_trigger_activate_at__run_now - - thumb_func_start sub_8068870 -sub_8068870: @ 8068870 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsCrackedFloorHole - lsls r0, 24 - cmp r0, 0 - bne _08068884 - movs r0, 0 - b _0806888C -_08068884: - ldr r0, _08068890 @ =GraniteCave_B1F_EventScript_1C6BC5 - bl ScriptContext1_SetupScript - movs r0, 0x1 -_0806888C: - pop {r1} - bx r1 - .align 2, 0 -_08068890: .4byte GraniteCave_B1F_EventScript_1C6BC5 - thumb_func_end sub_8068870 - - thumb_func_start sub_8068894 -sub_8068894: @ 8068894 - push {lr} - bl sub_8082B78 - bl happiness_algorithm_step - bl overworld_poison_step - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080688B4 - ldr r0, _080688B0 @ =gUnknown_081A14B8 - b _080688E8 - .align 2, 0 -_080688B0: .4byte gUnknown_081A14B8 -_080688B4: - bl sub_80422A0 - lsls r0, 24 - cmp r0, 0 - beq _080688CC - movs r0, 0xD - bl IncrementGameStat - ldr r0, _080688C8 @ =Event_EggHatch - b _080688E8 - .align 2, 0 -_080688C8: .4byte Event_EggHatch -_080688CC: - bl SafariZoneTakeStep - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080688EC - movs r0, 0x1 - bl sub_810D9B0 - cmp r0, 0x1 - beq _080688E6 - movs r0, 0 - b _080688EE -_080688E6: - ldr r0, _080688F4 @ =gUnknown_0815FD0D -_080688E8: - bl ScriptContext1_SetupScript -_080688EC: - movs r0, 0x1 -_080688EE: - pop {r1} - bx r1 - .align 2, 0 -_080688F4: .4byte gUnknown_0815FD0D - thumb_func_end sub_8068894 - - thumb_func_start unref_sub_80688F8 -unref_sub_80688F8: @ 80688F8 - push {lr} - ldr r0, _08068908 @ =0x0000402a - movs r1, 0 - bl VarSet - pop {r0} - bx r0 - .align 2, 0 -_08068908: .4byte 0x0000402a - thumb_func_end unref_sub_80688F8 - - thumb_func_start happiness_algorithm_step -happiness_algorithm_step: @ 806890C - push {r4,r5,lr} - ldr r0, _08068940 @ =0x0000402a - bl GetVarPointer - ldrh r1, [r0] - adds r1, 0x1 - strh r1, [r0] - ldrh r1, [r0] - movs r2, 0x7F - ands r1, r2 - strh r1, [r0] - cmp r1, 0 - bne _0806893A - ldr r5, _08068944 @ =gPlayerParty - movs r4, 0x5 -_0806892A: - adds r0, r5, 0 - movs r1, 0x5 - bl AdjustFriendship - adds r5, 0x64 - subs r4, 0x1 - cmp r4, 0 - bge _0806892A -_0806893A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08068940: .4byte 0x0000402a -_08068944: .4byte gPlayerParty - thumb_func_end happiness_algorithm_step - - thumb_func_start overworld_poison_timer_set -overworld_poison_timer_set: @ 8068948 - push {lr} - ldr r0, _08068958 @ =0x0000402b - movs r1, 0 - bl VarSet - pop {r0} - bx r0 - .align 2, 0 -_08068958: .4byte 0x0000402b - thumb_func_end overworld_poison_timer_set - - thumb_func_start overworld_poison_step -overworld_poison_step: @ 806895C - push {lr} - ldr r0, _08068994 @ =gMapHeader - ldrb r0, [r0, 0x17] - cmp r0, 0x9 - beq _0806899C - ldr r0, _08068998 @ =0x0000402b - bl GetVarPointer - ldrh r1, [r0] - adds r1, 0x1 - strh r1, [r0] - ldrh r1, [r0] - movs r2, 0x3 - ands r1, r2 - strh r1, [r0] - cmp r1, 0 - bne _0806899C - bl overworld_poison - cmp r0, 0x1 - beq _0806899C - cmp r0, 0x1 - ble _0806899C - cmp r0, 0x2 - bne _0806899C - movs r0, 0x1 - b _0806899E - .align 2, 0 -_08068994: .4byte gMapHeader -_08068998: .4byte 0x0000402b -_0806899C: - movs r0, 0 -_0806899E: - pop {r1} - bx r1 - thumb_func_end overworld_poison_step - - thumb_func_start prev_quest_postbuffer_cursor_backup_reset -prev_quest_postbuffer_cursor_backup_reset: @ 80689A4 - ldr r1, _080689AC @ =gUnknown_0202E8C0 - movs r0, 0 - strb r0, [r1] - bx lr - .align 2, 0 -_080689AC: .4byte gUnknown_0202E8C0 - thumb_func_end prev_quest_postbuffer_cursor_backup_reset - - thumb_func_start is_it_battle_time_3 -is_it_battle_time_3: @ 80689B0 - push {r4-r7,lr} - lsls r0, 16 - lsrs r4, r0, 16 - adds r7, r4, 0 - ldr r6, _080689CC @ =gUnknown_0202E8C0 - ldrb r0, [r6] - cmp r0, 0x3 - bhi _080689D4 - adds r0, 0x1 - strb r0, [r6] - ldr r0, _080689D0 @ =gUnknown_0202E8C2 - strh r4, [r0] - movs r0, 0 - b _080689F8 - .align 2, 0 -_080689CC: .4byte gUnknown_0202E8C0 -_080689D0: .4byte gUnknown_0202E8C2 -_080689D4: - ldr r5, _080689EC @ =gUnknown_0202E8C2 - ldrh r1, [r5] - adds r0, r4, 0 - bl StandardWildEncounter - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080689F0 - strh r4, [r5] - movs r0, 0 - b _080689F8 - .align 2, 0 -_080689EC: .4byte gUnknown_0202E8C2 -_080689F0: - movs r0, 0 - strb r0, [r6] - strh r7, [r5] - movs r0, 0x1 -_080689F8: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end is_it_battle_time_3 - - thumb_func_start mapheader_run_first_tag2_script_list_match_conditionally -mapheader_run_first_tag2_script_list_match_conditionally: @ 8068A00 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _08068A54 @ =gMapHeader - mov r8, r0 - adds r1, r7, 0 - bl map_warp_check_packed - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl is_non_stair_warp_tile - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068A58 - lsls r0, r6, 24 - asrs r4, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - beq _08068A58 - bl walkrun_find_lowest_active_bit_in_bitfield - mov r0, r8 - adds r1, r4, 0 - adds r2, r7, 0 - bl sub_8068C30 - bl sub_8080E88 - movs r0, 0x1 - b _08068A5A - .align 2, 0 -_08068A54: .4byte gMapHeader -_08068A58: - movs r0, 0 -_08068A5A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end mapheader_run_first_tag2_script_list_match_conditionally - - thumb_func_start sub_8068A64 -sub_8068A64: @ 8068A64 - push {r4-r7,lr} - adds r6, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - ldr r7, _08068ABC @ =gMapHeader - adds r0, r7, 0 - adds r1, r6, 0 - bl map_warp_check_packed - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - beq _08068B28 - adds r0, r5, 0 - bl sub_8068B30 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068B28 - bl walkrun_find_lowest_active_bit_in_bitfield - adds r0, r7, 0 - adds r1, r4, 0 - adds r2, r6, 0 - bl sub_8068C30 - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsEscalator - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068AC0 - adds r0, r4, 0 - bl sub_8080F2C - movs r0, 0x1 - b _08068B2A - .align 2, 0 -_08068ABC: .4byte gMapHeader -_08068AC0: - adds r0, r4, 0 - bl MetatileBehavior_IsLavaridgeB1FWarp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068AD6 - bl sub_8080F48 - movs r0, 0x1 - b _08068B2A -_08068AD6: - adds r0, r4, 0 - bl MetatileBehavior_IsLavaridge1FWarp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068AEC - bl sub_8080F58 - movs r0, 0x1 - b _08068B2A -_08068AEC: - adds r0, r4, 0 - bl MetatileBehavior_IsAquaHideoutWarp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068B02 - bl sub_8080F68 - movs r0, 0x1 - b _08068B2A -_08068B02: - adds r0, r4, 0 - bl MetatileBehavior_IsMtPyreHole - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068B20 - ldr r0, _08068B1C @ =gUnknown_081C6BDE - bl ScriptContext1_SetupScript - movs r0, 0x1 - b _08068B2A - .align 2, 0 -_08068B1C: .4byte gUnknown_081C6BDE -_08068B20: - bl sub_8080E88 - movs r0, 0x1 - b _08068B2A -_08068B28: - movs r0, 0 -_08068B2A: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8068A64 - - thumb_func_start sub_8068B30 -sub_8068B30: @ 8068B30 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsWarpDoor - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068BAA - adds r0, r4, 0 - bl MetatileBehavior_IsLadder - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068BAA - adds r0, r4, 0 - bl MetatileBehavior_IsEscalator - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068BAA - adds r0, r4, 0 - bl MetatileBehavior_IsNonAnimDoor - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068BAA - adds r0, r4, 0 - bl MetatileBehavior_IsLavaridgeB1FWarp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068BAA - adds r0, r4, 0 - bl MetatileBehavior_IsLavaridge1FWarp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068BAA - adds r0, r4, 0 - bl MetatileBehavior_IsAquaHideoutWarp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068BAA - adds r0, r4, 0 - bl MetatileBehavior_IsMtPyreHole - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08068BAA - movs r0, 0 - b _08068BAC -_08068BAA: - movs r0, 0x1 -_08068BAC: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8068B30 - - thumb_func_start is_non_stair_warp_tile -is_non_stair_warp_tile: @ 8068BB4 - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 24 - lsrs r1, 24 - adds r2, r1, 0 - cmp r1, 0x2 - beq _08068BD8 - cmp r1, 0x2 - bgt _08068BCE - cmp r1, 0x1 - beq _08068BE2 - b _08068C04 -_08068BCE: - cmp r2, 0x3 - beq _08068BEC - cmp r2, 0x4 - beq _08068BF6 - b _08068C04 -_08068BD8: - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsNorthArrowWarp - b _08068BFE -_08068BE2: - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsSouthArrowWarp - b _08068BFE -_08068BEC: - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsWestArrowWarp - b _08068BFE -_08068BF6: - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsEastArrowWarp -_08068BFE: - lsls r0, 24 - lsrs r0, 24 - b _08068C06 -_08068C04: - movs r0, 0 -_08068C06: - pop {r1} - bx r1 - thumb_func_end is_non_stair_warp_tile - - thumb_func_start map_warp_check_packed -map_warp_check_packed: @ 8068C0C - push {lr} - adds r3, r1, 0 - ldrh r1, [r3] - subs r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - ldrh r2, [r3, 0x2] - subs r2, 0x7 - lsls r2, 16 - lsrs r2, 16 - ldrb r3, [r3, 0x4] - bl map_warp_check - lsls r0, 24 - asrs r0, 24 - pop {r1} - bx r1 - thumb_func_end map_warp_check_packed - - thumb_func_start sub_8068C30 -sub_8068C30: @ 8068C30 - push {r4-r7,lr} - adds r5, r2, 0 - ldr r0, _08068C50 @ =gMapHeader - ldr r0, [r0, 0x4] - lsls r1, 24 - asrs r7, r1, 24 - lsls r6, r7, 3 - ldr r0, [r0, 0x8] - adds r4, r0, r6 - ldrb r0, [r4, 0x6] - cmp r0, 0x7F - bne _08068C54 - ldrb r0, [r4, 0x5] - bl copy_saved_warp2_bank_and_enter_x_to_warp1 - b _08068C9E - .align 2, 0 -_08068C50: .4byte gMapHeader -_08068C54: - movs r0, 0x7 - ldrsb r0, [r4, r0] - movs r1, 0x6 - ldrsb r1, [r4, r1] - movs r2, 0x5 - ldrsb r2, [r4, r2] - bl warp1_set_2 - movs r1, 0 - ldrsh r0, [r5, r1] - movs r2, 0x2 - ldrsh r1, [r5, r2] - bl sub_80535C4 - ldrb r0, [r4, 0x7] - ldrb r1, [r4, 0x6] - bl get_mapheader_by_bank_and_number - ldr r1, [r0, 0x4] - ldrb r0, [r4, 0x5] - ldr r1, [r1, 0x8] - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0, 0x6] - cmp r0, 0x7F - bne _08068C9E - adds r0, r6, r1 - ldrb r0, [r0, 0x5] - ldr r2, _08068CA4 @ =gSaveBlock1 - movs r1, 0x4 - ldrsb r1, [r2, r1] - ldrb r2, [r2, 0x5] - lsls r2, 24 - asrs r2, 24 - adds r3, r7, 0 - bl saved_warp2_set -_08068C9E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08068CA4: .4byte gSaveBlock1 - thumb_func_end sub_8068C30 - - thumb_func_start map_warp_consider_2_to_inside -map_warp_consider_2_to_inside: @ 8068CA8 - push {r4-r7,lr} - adds r5, r0, 0 - lsls r1, 16 - lsrs r0, r1, 16 - adds r7, r0, 0 - lsls r2, 24 - lsrs r2, 24 - cmp r2, 0x2 - bne _08068D2C - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_80571C0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068CE0 - ldr r0, _08068CDC @ =gMapHeader - ldr r1, [r0, 0x4] - adds r0, r5, 0 - bl sub_80BC038 - movs r0, 0x1 - b _08068D2E - .align 2, 0 -_08068CDC: .4byte gMapHeader -_08068CE0: - adds r0, r4, 0 - bl MetatileBehavior_IsWarpDoor - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068D2C - ldr r6, _08068D28 @ =gMapHeader - adds r0, r6, 0 - adds r1, r5, 0 - bl map_warp_check_packed - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - beq _08068D2C - adds r0, r7, 0 - bl sub_8068B30 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068D2C - bl walkrun_find_lowest_active_bit_in_bitfield - adds r0, r6, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_8068C30 - bl sub_8080EF0 - movs r0, 0x1 - b _08068D2E - .align 2, 0 -_08068D28: .4byte gMapHeader -_08068D2C: - movs r0, 0 -_08068D2E: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end map_warp_consider_2_to_inside - - thumb_func_start map_warp_check -map_warp_check: @ 8068D34 - push {r4-r6,lr} - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 16 - lsrs r5, r2, 16 - lsls r3, 24 - lsrs r4, r3, 24 - ldr r0, [r0, 0x4] - ldr r1, [r0, 0x8] - ldrb r3, [r0, 0x1] - movs r2, 0 - cmp r2, r3 - bge _08068D72 -_08068D4E: - ldrh r0, [r1] - cmp r0, r6 - bne _08068D6A - ldrh r0, [r1, 0x2] - cmp r0, r5 - bne _08068D6A - ldrb r0, [r1, 0x4] - cmp r0, r4 - beq _08068D64 - cmp r0, 0 - bne _08068D6A -_08068D64: - lsls r0, r2, 24 - asrs r0, 24 - b _08068D76 -_08068D6A: - adds r2, 0x1 - adds r1, 0x8 - cmp r2, r3 - blt _08068D4E -_08068D72: - movs r0, 0x1 - negs r0, r0 -_08068D76: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end map_warp_check - - thumb_func_start trigger_activate -trigger_activate: @ 8068D7C - push {r4,lr} - adds r4, r0, 0 - cmp r4, 0 - beq _08068DB2 - ldr r1, [r4, 0xC] - cmp r1, 0 - bne _08068D92 - ldrb r0, [r4, 0x6] - bl DoCoordEventWeather - b _08068DB2 -_08068D92: - ldrh r0, [r4, 0x6] - cmp r0, 0 - beq _08068DAC - ldrh r0, [r4, 0x6] - bl VarGet - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r4, 0x8] - cmp r0, r1 - bne _08068DB2 - ldr r0, [r4, 0xC] - b _08068DB4 -_08068DAC: - adds r0, r1, 0 - bl ScriptContext2_RunNewScript -_08068DB2: - movs r0, 0 -_08068DB4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end trigger_activate - - thumb_func_start mapheader_trigger_activate_at -mapheader_trigger_activate_at: @ 8068DBC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r1, 16 - lsrs r1, 16 - mov r10, r1 - lsls r2, 16 - lsrs r2, 16 - mov r9, r2 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - ldr r0, [r0, 0x4] - ldr r1, [r0, 0xC] - ldrb r7, [r0, 0x2] - movs r6, 0 - cmp r6, r7 - bge _08068E12 - adds r5, r1, 0 - adds r4, r5, 0 -_08068DE8: - ldrh r0, [r4] - cmp r0, r10 - bne _08068E08 - ldrh r0, [r4, 0x2] - cmp r0, r9 - bne _08068E08 - ldrb r0, [r4, 0x4] - cmp r0, r8 - beq _08068DFE - cmp r0, 0 - bne _08068E08 -_08068DFE: - adds r0, r5, 0 - bl trigger_activate - cmp r0, 0 - bne _08068E14 -_08068E08: - adds r4, 0x10 - adds r5, 0x10 - adds r6, 0x1 - cmp r6, r7 - blt _08068DE8 -_08068E12: - movs r0, 0 -_08068E14: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end mapheader_trigger_activate_at - - thumb_func_start sub_8068E24 -sub_8068E24: @ 8068E24 - push {r4,lr} - ldr r4, _08068E48 @ =gMapHeader - ldrh r1, [r0] - subs r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - ldrh r2, [r0, 0x2] - subs r2, 0x7 - lsls r2, 16 - lsrs r2, 16 - ldrb r3, [r0, 0x4] - adds r0, r4, 0 - bl mapheader_trigger_activate_at - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08068E48: .4byte gMapHeader - thumb_func_end sub_8068E24 - - thumb_func_start FindInvisibleMapObjectByPosition -FindInvisibleMapObjectByPosition: @ 8068E4C - push {r4-r7,lr} - lsls r1, 16 - lsrs r7, r1, 16 - lsls r2, 16 - lsrs r6, r2, 16 - lsls r3, 24 - lsrs r5, r3, 24 - ldr r0, [r0, 0x4] - ldr r4, [r0, 0x10] - ldrb r3, [r0, 0x3] - movs r2, 0 - cmp r2, r3 - bcs _08068E92 -_08068E66: - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, r0, r4 - ldrh r0, [r1] - cmp r0, r7 - bne _08068E88 - ldrh r0, [r1, 0x2] - cmp r0, r6 - bne _08068E88 - ldrb r0, [r1, 0x4] - cmp r0, r5 - beq _08068E84 - cmp r0, 0 - bne _08068E88 -_08068E84: - adds r0, r1, 0 - b _08068E94 -_08068E88: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r3 - bcc _08068E66 -_08068E92: - movs r0, 0 -_08068E94: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end FindInvisibleMapObjectByPosition - - thumb_func_start dive_warp -dive_warp: @ 8068E9C - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - ldr r0, _08068ED0 @ =gMapHeader - ldrb r0, [r0, 0x17] - cmp r0, 0x5 - bne _08068ED4 - lsls r0, r5, 24 - lsrs r0, 24 - bl sub_805750C - lsls r0, 24 - cmp r0, 0 - bne _08068ED4 - ldrh r0, [r4] - subs r0, 0x7 - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r4, 0x2] - subs r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - bl sub_80538B0 - b _08068EF8 - .align 2, 0 -_08068ED0: .4byte gMapHeader -_08068ED4: - lsls r0, r5, 24 - lsrs r0, 24 - bl sub_80574EC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068F10 - ldrh r0, [r4] - subs r0, 0x7 - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r4, 0x2] - subs r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - bl sub_80538D0 -_08068EF8: - lsls r0, 24 - cmp r0, 0 - beq _08068F10 - bl walkrun_find_lowest_active_bit_in_bitfield - bl sp13E_warp_to_last_warp - movs r0, 0xE9 - bl PlaySE - movs r0, 0x1 - b _08068F12 -_08068F10: - movs r0, 0 -_08068F12: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end dive_warp - - thumb_func_start sub_8068F18 -sub_8068F18: @ 8068F18 - push {r4,r5,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _08068F70 @ =gMapHeader - ldrb r0, [r0, 0x17] - cmp r0, 0x5 - bne _08068F74 - adds r0, r5, 0 - bl sub_805750C - lsls r0, 24 - cmp r0, 0 - bne _08068F74 - mov r0, sp - ldrh r0, [r0] - subs r0, 0x7 - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r4] - subs r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - bl sub_80538B0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068FA4 - movs r0, 0x1 - b _08068FA6 - .align 2, 0 -_08068F70: .4byte gMapHeader -_08068F74: - adds r0, r5, 0 - bl sub_80574EC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068FA4 - mov r0, sp - ldrh r0, [r0] - subs r0, 0x7 - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r4] - subs r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - bl sub_80538D0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08068FA4 - movs r0, 0x2 - b _08068FA6 -_08068FA4: - movs r0, 0 -_08068FA6: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8068F18 - - thumb_func_start GetFieldObjectScriptPointerForComparison -GetFieldObjectScriptPointerForComparison: @ 8068FB0 - push {r4,r5,lr} - sub sp, 0x8 - bl player_get_direction_upper_nybble - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r5, sp - mov r0, sp - bl player_get_next_pos_and_height - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x2 - ldrsh r1, [r5, r2] - bl MapGridGetMetatileBehaviorAt - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r0, sp - adds r2, r4, 0 - bl sub_8068364 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end GetFieldObjectScriptPointerForComparison - - thumb_func_start sub_8068FEC -sub_8068FEC: @ 8068FEC - push {r4,lr} - sub sp, 0x8 - bl player_get_direction_upper_nybble - mov r4, sp - mov r0, sp - bl player_get_pos_to_and_height - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - ldr r4, _0806902C @ =gMapHeader - adds r0, r4, 0 - mov r1, sp - bl map_warp_check_packed - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - adds r0, r4, 0 - mov r2, sp - bl sub_8068C30 - movs r0, 0 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0806902C: .4byte gMapHeader - thumb_func_end sub_8068FEC - - .align 2, 0 @ Don't pad with nop. diff --git a/include/asm.inc.h b/include/asm.inc.h index 44a28b2b5..6f78b2a08 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -148,10 +148,10 @@ void sub_8064990(u8, u8); void sub_8067EEC(struct UnkInputStruct *pStruct); void process_overworld_input(struct UnkInputStruct *pStruct, u16 keys, u16 heldKeys); int sub_8068024(struct UnkInputStruct *pStruct); -u8 *sub_80682A8(void *, u8, u8); +u8 *sub_80682A8(struct MapPosition *, u8, u8); void overworld_poison_timer_set(void); void prev_quest_postbuffer_cursor_backup_reset(void); -u8 *sub_8068E24(struct UnkStruct_8054FF8_Substruct *); +u8 *sub_8068E24(struct MapPosition *); u8 *GetFieldObjectScriptPointerForComparison(); // asm/field_tasks.o diff --git a/include/battle_setup.h b/include/battle_setup.h index 6271a3cc5..2a1a2e717 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -71,7 +71,7 @@ u8 *sub_8082880(void); // sub_8082AE4 // sub_8082B10 // sub_8082B44 -// sub_8082B78 +void sub_8082B78(void); // sub_8082BA4 void sub_8082BD0(u16, u16); // sub_8082C0C diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 9f6f634f7..630d7b19d 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -69,8 +69,8 @@ void sub_80597F4(void); u8 sub_805983C(u8 a, u8 b); u8 GetPlayerAvatarGraphicsIdByStateId(u8 a); // GetPlayerAvatarGenderByGraphicsId -// PartyHasMonWithSurf -// IsPlayerSurfingNorth +bool8 PartyHasMonWithSurf(void); +bool8 IsPlayerSurfingNorth(void); bool8 IsPlayerFacingSurfableFishableWater(void); // ClearPlayerAvatarInfo void SetPlayerAvatarStateMask(u8 a); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 95ccf2614..de465ac95 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -80,14 +80,15 @@ struct WarpEvent { s16 x, y; s8 warpId; - s8 mapGroup; - s8 mapNum; + u8 mapGroup; + u8 mapNum; + u8 unk7; }; struct CoordEvent { s16 x, y; - u8 filler_4; + u8 unk4; u8 filler_5; u16 trigger; u16 index; @@ -98,7 +99,7 @@ struct CoordEvent struct BgEvent { s16 x, y; - u8 filler_4; + u8 unk4; u8 kind; s16 filler_6; u8 *script; diff --git a/include/global.h b/include/global.h index a5932d175..a9056ed55 100644 --- a/include/global.h +++ b/include/global.h @@ -410,11 +410,11 @@ struct SaveBlock2 /* 0x02024EA4 */ /*0xA8*/ struct SaveBlock2_Sub filler_A8; }; -struct UnkStruct_8054FF8_Substruct +struct MapPosition { s16 x; s16 y; - u8 field_8; + u8 height; }; struct UnkStruct_8054FF8 @@ -423,7 +423,7 @@ struct UnkStruct_8054FF8 u8 b; u8 c; u8 d; - struct UnkStruct_8054FF8_Substruct sub; + struct MapPosition sub; u16 field_C; }; diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index e7b4adfbd..2960a1b6f 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -103,7 +103,7 @@ bool8 sub_80576DC(u8); bool8 MetatileBehavior_IsPacifidlogLog(u8); bool8 MetatileBehavior_IsTrickHousePuzzleDoor(u8); bool8 MetatileBehavior_IsRegionMap(u8); -bool8 MetatileBehavior_IsClosedSootpolisGymDoor(u8); +bool8 MetatileBehavior_IsClosedSootopolisGymDoor(u8); bool8 MetatileBehavior_IsRoulette(u8); bool8 MetatileBehavior_IsPokeblockFeeder(u8); bool8 MetatileBehavior_0xBB(u8); diff --git a/include/rom4.h b/include/rom4.h index 44819cbee..215c7ff17 100644 --- a/include/rom4.h +++ b/include/rom4.h @@ -9,7 +9,8 @@ struct UnkPlayerStruct u8 player_field_1; }; -struct LinkPlayerMapObject { +struct LinkPlayerMapObject +{ u8 active; u8 linkPlayerId; u8 mapObjId; @@ -35,21 +36,21 @@ void update_saveblock1_field_object_movement_behavior(u8, u8); // warp_shift // warp_set // warp_data_is_not_neg_1 -// get_mapheader_by_bank_and_number +struct MapHeader * const get_mapheader_by_bank_and_number(u16 mapGroup, u16 mapNum); // warp1_get_mapheader // set_current_map_header_from_sav1_save_old_name // sub_805338C // sub_80533CC void warp_in(void); void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); -// warp1_set_2 +void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId); void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId); void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused); // sub_8053538 void sub_8053570(void); void sub_8053588(u8); -// sub_80535C4 +void sub_80535C4(s16 a1, s16 a2); void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); // sub_8053678 void sub_8053690(s8, s8, s8, s8, s8); @@ -62,8 +63,8 @@ void sub_8053720(s16, s16); void gpu_sync_bg_hide(); // sub_8053818 // sub_8053850 -// sub_80538B0 -// sub_80538D0 +bool8 sub_80538B0(u16 x, u16 y); +bool8 sub_80538D0(u16 x, u16 y); // sub_80538F0 // sub_8053994 void player_avatar_init_params_reset(void); diff --git a/include/vars.h b/include/vars.h index 4661bbd52..e041e33bb 100644 --- a/include/vars.h +++ b/include/vars.h @@ -1,24 +1,26 @@ #ifndef GUARD_VARS_H #define GUARD_VARS_H -#define VAR_RECYCLE_GOODS 0x4020 -#define VAR_REPEL_STEP_COUNT 0x4021 +#define VAR_RECYCLE_GOODS 0x4020 +#define VAR_REPEL_STEP_COUNT 0x4021 -#define VAR_FIRST_POKE 0x4023 -#define VAR_MIRAGE_RND_H 0x4024 -#define VAR_MIRAGE_RND_L 0x4025 +#define VAR_FIRST_POKE 0x4023 +#define VAR_MIRAGE_RND_H 0x4024 +#define VAR_MIRAGE_RND_L 0x4025 -#define VAR_RESET_RTC_ENABLE 0x402C +#define VAR_HAPPINESS_STEP_COUNTER 0x402A +#define VAR_POISON_STEP_COUNTER 0x402B +#define VAR_RESET_RTC_ENABLE 0x402C -#define VAR_DAYS 0x4040 +#define VAR_DAYS 0x4040 -#define VAR_POKELOT_PRIZE 0x4045 -#define VAR_NATIONAL_DEX 0x4046 -#define VAR_SHROOMISH_SIZE_RECORD 0x4047 +#define VAR_POKELOT_PRIZE 0x4045 +#define VAR_NATIONAL_DEX 0x4046 +#define VAR_SHROOMISH_SIZE_RECORD 0x4047 -#define VAR_POKELOT_RND1 0x404B -#define VAR_POKELOT_RND2 0x404C +#define VAR_POKELOT_RND1 0x404B +#define VAR_POKELOT_RND2 0x404C -#define VAR_BARBOACH_SIZE_RECORD 0x404F +#define VAR_BARBOACH_SIZE_RECORD 0x404F #endif // GUARD_VARS_H diff --git a/ld_script.txt b/ld_script.txt index 74d8a75d0..ad2541c74 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -88,7 +88,6 @@ SECTIONS { src/script.o(.text); src/scrcmd.o(.text); src/field_control_avatar.o(.text); - asm/field_control_avatar.o(.text); src/event_data.o(.text); src/coord_event_weather.o(.text); asm/field_tasks.o(.text); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 495327b9b..4b75c7a32 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1,17 +1,116 @@ #include "global.h" #include "asm.h" +#include "battle_setup.h" +#include "event_data.h" #include "field_player_avatar.h" +#include "flags.h" #include "metatile_behavior.h" #include "rom4.h" +#include "safari_zone.h" #include "script.h" +#include "songs.h" #include "sound.h" #include "trainer_see.h" +#include "vars.h" +#include "wild_encounter.h" +struct Coords32 +{ + s32 x; + s32 y; +}; + +extern const struct Coords32 gUnknown_0821664C[]; +extern u16 gScriptLastTalked; +extern u16 gScriptFacing; +extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u8 gUnknown_0202E8C0; +extern u16 gUnknown_0202E8C2; + +//scripts +extern u8 gUnknown_081A2C51[]; extern u8 gUnknown_0815281E[]; extern u8 gUnknown_08152C39[]; extern u8 gUnknown_0815F36C[]; extern u8 gUnknown_0815F43A[]; extern u8 gUnknown_081A0009[]; +extern u8 gUnknown_081C6C02[]; +extern u8 HiddenItemScript[]; +extern u8 Event_TV[]; +extern u8 gUnknown_081A0009[]; +extern u8 ClosedSootopolisGymDoorScript[]; +extern u8 gUnknown_081A4363[]; +extern u8 gUnknown_081C346A[]; +extern u8 gUnknown_081616E1[]; +extern u8 Event_WorldMap[]; +extern u8 Event_RunningShoesManual[]; +extern u8 PictureBookShelfScript[]; +extern u8 BookshelfScript[]; +extern u8 PokemonCenterBookshelfScript[]; +extern u8 VaseScript[]; +extern u8 TrashCanScript[]; +extern u8 ShopShelfScript[]; +extern u8 BlueprintScript[]; +extern u8 gUnknown_0815F36C[]; +extern u8 gUnknown_0815F43A[]; +extern u8 gUnknown_0815F523[]; +extern u8 gUnknown_0815F528[]; +extern u8 UseSurfScript[]; +extern u8 UseWaterfallScript[]; +extern u8 CannotUseWaterfallScript[]; +extern u8 UseDiveScript[]; +extern u8 UnderwaterUseDiveScript[]; +extern u8 GraniteCave_B1F_EventScript_1C6BC5[]; +extern u8 gUnknown_081A14B8[]; +extern u8 Event_EggHatch[]; +extern u8 gUnknown_0815FD0D[]; +extern u8 gUnknown_081C6BDE[]; + +static void player_get_pos_to_and_height(struct MapPosition *); +static void player_get_next_pos_and_height(struct MapPosition *); +static u16 cur_mapdata_block_role_at_player_pos(int); +static bool8 sub_80681F0(struct MapPosition *position, u16 b, u8 c); +static u8 *TryGetScriptOnPressingA(struct MapPosition *position, u8 b, u8 c); +static u8 *sub_8068364(struct MapPosition *, u8, u8); +static u8 *TryGetInvisibleMapObjectScript(struct MapPosition *, u8, u8 c); +static u8 *sub_8068500(struct MapPosition *, u8, u8); +static u8 *TryGetFieldMoveScript(struct MapPosition *, u8, u8); +static bool32 sub_8068770(void); +static bool32 sub_80687A4(void); +static bool8 sub_80687E4(struct MapPosition *, u16, u16); +bool8 mapheader_trigger_activate_at__run_now(struct MapPosition *); +bool8 sub_8068870(u16 a); +bool8 sub_8068894(void); +static void happiness_algorithm_step(void); +static bool8 overworld_poison_step(void); +static bool8 is_it_battle_time_3(u16); +static bool8 mapheader_run_first_tag2_script_list_match_conditionally(struct MapPosition *, u16, u8); +bool8 sub_8068A64(struct MapPosition *, u16); +static bool8 sub_8068B30(u16); +static bool8 is_non_stair_warp_tile(u16, u8); +static s8 map_warp_check_packed(struct MapHeader *, struct MapPosition *); +static void sub_8068C30(struct MapHeader *, s8, struct MapPosition *); +static bool8 map_warp_consider_2_to_inside(struct MapPosition *, u16, u8); +static s8 map_warp_check(struct MapHeader *, u16, u16, u8); +static u8 *mapheader_trigger_activate_at(struct MapHeader *, u16, u16, u8); +static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *, u16, u16, u8); +u8 sub_8068F18(void); + +extern u8 mapheader_run_first_tag2_script_list_match(void); +extern void sub_8071310(void); +extern int sub_80A6D1C(void); +extern u8 sub_80BC050(); +extern u8 sub_80422A0(void); +extern s32 overworld_poison(void); +extern void sub_8080E88(); +extern void walkrun_find_lowest_active_bit_in_bitfield(void); +extern void sub_8080F2C(u8); +extern void sub_8080F48(void); +extern void sub_8080F58(void); +extern void sub_80BC038(); +extern void DoCoordEventWeather(u8); __attribute__((naked)) void sub_8067EEC(struct UnkInputStruct *s) @@ -42,8 +141,6 @@ void sub_8067EEC(struct UnkInputStruct *s) .syntax divided\n"); } -extern u16 cur_mapdata_block_role_at_player_pos(int); - void process_overworld_input(struct UnkInputStruct *pStruct, u16 keys, u16 heldKeys) { u8 r6 = gPlayerAvatar.running1; @@ -86,26 +183,6 @@ void process_overworld_input(struct UnkInputStruct *pStruct, u16 keys, u16 heldK pStruct->input_field_2 = 4; } -struct MapPosition -{ - s16 x; - s16 y; - u8 height; -}; - -void player_get_pos_to_and_height(struct MapPosition *); -extern u8 mapheader_run_first_tag2_script_list_match(void); -extern int sub_80687A4(void); -extern u8 sub_80687E4(); -extern u8 is_it_battle_time_3(); -extern u8 mapheader_run_first_tag2_script_list_match_conditionally(); -void player_get_next_pos_and_height(struct MapPosition *); -u8 sub_80681F0(struct MapPosition *position, u16 b, u8 c); -extern u8 map_warp_consider_2_to_inside(); -extern int sub_8068770(void); -extern void sub_8071310(void); -extern int sub_80A6D1C(void); - int sub_8068024(struct UnkInputStruct *s) { struct MapPosition position; @@ -116,54 +193,53 @@ int sub_8068024(struct UnkInputStruct *s) player_get_pos_to_and_height(&position); r4 = MapGridGetMetatileBehaviorAt(position.x, position.y); if (CheckTrainers() == TRUE) - return 1; + return TRUE; if (mapheader_run_first_tag2_script_list_match() == 1) - return 1; + return TRUE; if (s->input_field_0_7 && sub_80687A4() == 1) - return 1; + return TRUE; if (s->input_field_0_6) { IncrementGameStat(5); if (sub_80687E4(&position, r4, r6) == 1) - return 1; + return TRUE; } if (s->input_field_0_1 && is_it_battle_time_3(r4) == 1) - return 1; + return TRUE; if (s->input_field_0_4 && s->input_field_2 == r6) { if (mapheader_run_first_tag2_script_list_match_conditionally(&position, r4, r6) == 1) - return 1; + return TRUE; } player_get_next_pos_and_height(&position); r4 = MapGridGetMetatileBehaviorAt(position.x, position.y); if (s->input_field_0_0 && sub_80681F0(&position, r4, r6) == 1) - return 1; + return TRUE; if (s->input_field_0_5 && s->input_field_2 == r6) { if (map_warp_consider_2_to_inside(&position, r4, r6) == 1) - return 1; + return TRUE; } if (s->input_field_0_0 && sub_8068770() == 1) - return 1; + return TRUE; if (s->input_field_0_2) { - PlaySE(6); + PlaySE(SE_WIN_OPEN); sub_8071310(); - return 1; + return TRUE; } - //_08068154 if (s->input_field_0_3 && sub_80A6D1C() == 1) - return 1; + return TRUE; return FALSE; } -void player_get_pos_to_and_height(struct MapPosition *position) +static void player_get_pos_to_and_height(struct MapPosition *position) { PlayerGetDestCoords(&position->x, &position->y); position->height = PlayerGetZCoord(); } -void player_get_next_pos_and_height(struct MapPosition *position) +static void player_get_next_pos_and_height(struct MapPosition *position) { s16 x, y; @@ -175,7 +251,7 @@ void player_get_next_pos_and_height(struct MapPosition *position) position->height = 0; } -u16 cur_mapdata_block_role_at_player_pos(int unused) +static u16 cur_mapdata_block_role_at_player_pos(int unused) { s16 x, y; @@ -183,9 +259,7 @@ u16 cur_mapdata_block_role_at_player_pos(int unused) return MapGridGetMetatileBehaviorAt(x, y); } -u8 *TryGetScriptOnPressingA(struct MapPosition *position, u8 b, u8 c); - -u8 sub_80681F0(struct MapPosition *position, u16 b, u8 c) +static bool8 sub_80681F0(struct MapPosition *position, u16 b, u8 c) { u8 *script = TryGetScriptOnPressingA(position, b, c); @@ -203,12 +277,7 @@ u8 sub_80681F0(struct MapPosition *position, u16 b, u8 c) return TRUE; } -u8 *sub_8068364(); -u8 *TryGetInvisibleMapObjectScript(); -u8 *sub_8068500(); -u8 *TryGetFieldMoveScript(); - -u8 *TryGetScriptOnPressingA(struct MapPosition *position, u8 b, u8 c) +static u8 *TryGetScriptOnPressingA(struct MapPosition *position, u8 b, u8 c) { u8 *script; @@ -227,3 +296,646 @@ u8 *TryGetScriptOnPressingA(struct MapPosition *position, u8 b, u8 c) return NULL; } + +u8 *sub_80682A8(struct MapPosition *position, u8 unused, u8 c) +{ + u8 r3; + s32 i; + + if (!MetatileBehavior_IsCounter(MapGridGetMetatileBehaviorAt(position->x, position->y))) + r3 = GetFieldObjectIdByXYZ(position->x, position->y, position->height); + else + r3 = GetFieldObjectIdByXYZ(position->x + gUnknown_0821664C[c].x, position->y + gUnknown_0821664C[c].y, position->height); + if (r3 == 16 || gMapObjects[r3].localId == 0xFF) + return NULL; + for (i = 0; i < 4; i++) + { + if (gLinkPlayerMapObjects[i].active == TRUE && gLinkPlayerMapObjects[i].mapObjId == r3) + return NULL; + } + gSelectedMapObject = r3; + gScriptLastTalked = gMapObjects[r3].localId; + gScriptFacing = c; + return GetFieldObjectScriptPointerByFieldObjectId(r3); +} + +static u8 *sub_8068364(struct MapPosition *position, u8 b, u8 c) +{ + u8 r3; + u8 *script; + + r3 = GetFieldObjectIdByXYZ(position->x, position->y, position->height); + if (r3 == 16 || gMapObjects[r3].localId == 0xFF) + { + if (MetatileBehavior_IsCounter(b) != TRUE) + return NULL; + r3 = GetFieldObjectIdByXYZ(position->x + gUnknown_0821664C[c].x, position->y + gUnknown_0821664C[c].y, position->height); + if (r3 == 16 || gMapObjects[r3].localId == 0xFF) + return NULL; + } + //_080683E8 + gSelectedMapObject = r3; + gScriptLastTalked = gMapObjects[r3].localId; + gScriptFacing = c; + script = GetFieldObjectScriptPointerByFieldObjectId(r3); + script = GetRamScript(gScriptLastTalked, script); + return script; +} + +static u8 *TryGetInvisibleMapObjectScript(struct MapPosition *position, u8 unused, u8 c) +{ + struct BgEvent *bgEvent = FindInvisibleMapObjectByPosition(&gMapHeader, position->x - 7, position->y - 7, position->height); + + if (bgEvent == NULL) + return NULL; + if (bgEvent->script == NULL) + return gUnknown_081C6C02; + switch (bgEvent->kind) + { + case 0: + default: + return bgEvent->script; + case 1: + if (c != 2) + return NULL; + break; + case 2: + if (c != 1) + return NULL; + break; + case 3: + if (c != 4) + return NULL; + break; + case 4: + if (c != 3) + return NULL; + break; + case 5: + case 6: + case 7: + gSpecialVar_0x8004 = ((u32)bgEvent->script >> 16) + 0x258; + gSpecialVar_0x8005 = (u32)bgEvent->script; + if (FlagGet(gSpecialVar_0x8004) == TRUE) + return NULL; + return HiddenItemScript; + case 8: + if (c == 2) + { + gSpecialVar_0x8004 = (u32)bgEvent->script; + if (sub_80BC050()) + return gUnknown_081A2C51; + } + return NULL; + } + return bgEvent->script; +} + +static u8 *sub_8068500(struct MapPosition *position, u8 b, u8 c) +{ + s8 height; + + if (MetatileBehavior_IsPlayerFacingTVScreen(b, c) == TRUE) + return Event_TV; + if (MetatileBehavior_IsPC(b) == TRUE) + return gUnknown_081A0009; + if (MetatileBehavior_IsClosedSootopolisGymDoor(b) == TRUE) + return ClosedSootopolisGymDoorScript; + if (is_tile_x84(b) == TRUE) + return gUnknown_081A4363; + if (MetatileBehavior_IsPokeblockFeeder(b) == TRUE) + return gUnknown_081C346A; + if (MetatileBehavior_IsTrickHousePuzzleDoor(b) == TRUE) + return gUnknown_081616E1; + if (MetatileBehavior_IsRegionMap(b) == TRUE) + return Event_WorldMap; + if (sub_805791C(b) == TRUE) + return Event_RunningShoesManual; + if (MetatileBehavior_IsPictureBookShelf(b) == TRUE) + return PictureBookShelfScript; + if (MetatileBehavior_IsBookShelf(b) == TRUE) + return BookshelfScript; + if (MetatileBehavior_IsPokeCenterBookShelf(b) == TRUE) + return PokemonCenterBookshelfScript; + if (MetatileBehavior_IsVase(b) == TRUE) + return VaseScript; + if (MetatileBehavior_IsTrashCan(b) == TRUE) + return TrashCanScript; + if (MetatileBehavior_IsShopShelf(b) == TRUE) + return ShopShelfScript; + if (MetatileBehavior_IsBlueprint(b) == TRUE) + return BlueprintScript; + height = position->height; + if (height == MapGridGetZCoordAt(position->x, position->y)) + { + if (MetatileBehavior_IsSecretBasePC(b) == TRUE) + return gUnknown_0815F36C; + if (sub_805724C(b) == TRUE) + return gUnknown_0815F43A; + if (sub_8057364(b) == TRUE) + return gUnknown_0815F523; + if (sub_8057378(b) == TRUE) + return gUnknown_0815F528; + } + return NULL; +} + +static u8 *TryGetFieldMoveScript(struct MapPosition *unused1, u8 b, u8 unused2) +{ + if (FlagGet(BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) + return UseSurfScript; + if (MetatileBehavior_IsWaterfall(b) == TRUE) + { + if (FlagGet(BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE) + return UseWaterfallScript; + else + return CannotUseWaterfallScript; + } + return NULL; +} + +static bool32 sub_8068770(void) +{ + if (FlagGet(BADGE07_GET) && sub_8068F18() == 2) + { + ScriptContext1_SetupScript(UseDiveScript); + return TRUE; + } + return FALSE; +} + +static bool32 sub_80687A4(void) +{ + if (FlagGet(BADGE07_GET) && gMapHeader.mapType == 5 && sub_8068F18() == 1) + { + ScriptContext1_SetupScript(UnderwaterUseDiveScript); + return TRUE; + } + return FALSE; +} + +#ifdef NONMATCHING +static bool8 sub_80687E4(struct MapPosition *position, u16 b, u16 unused) +{ + if (mapheader_trigger_activate_at__run_now(position) != TRUE + && sub_8068A64(position, b) != TRUE && sub_8068870(b) != TRUE + && sub_8068894() != TRUE && UpdateRepelCounter() != TRUE) + return FALSE; + return TRUE; +} +#else +__attribute__((naked)) +static bool8 sub_80687E4(struct MapPosition *position, u16 b, u16 unused) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + adds r5, r0, 0\n\ + lsls r1, 16\n\ + lsrs r4, r1, 16\n\ + adds r6, r4, 0\n\ + bl mapheader_trigger_activate_at__run_now\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _08068834\n\ + adds r0, r5, 0\n\ + adds r1, r4, 0\n\ + bl sub_8068A64\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _08068834\n\ + adds r0, r6, 0\n\ + bl sub_8068870\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _08068834\n\ + bl sub_8068894\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _08068834\n\ + bl UpdateRepelCounter\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _08068834\n\ + movs r0, 0\n\ + b _08068836\n\ +_08068834:\n\ + movs r0, 0x1\n\ +_08068836:\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif + +bool8 mapheader_trigger_activate_at__run_now(struct MapPosition *position) +{ + u8 *script = mapheader_trigger_activate_at(&gMapHeader, position->x - 7, position->y - 7, position->height); + + if (script == NULL) + return FALSE; + ScriptContext1_SetupScript(script); + return TRUE; +} + +//can be u8, u16, or u32 +bool8 sub_8068870(u16 a) +{ + if (MetatileBehavior_IsCrackedFloorHole(a)) + { + ScriptContext1_SetupScript(GraniteCave_B1F_EventScript_1C6BC5); + return TRUE; + } + return FALSE; +} + +bool8 sub_8068894(void) +{ + sub_8082B78(); + happiness_algorithm_step(); + if (overworld_poison_step() == TRUE) + { + ScriptContext1_SetupScript(gUnknown_081A14B8); + return TRUE; + } + if (sub_80422A0()) + { + IncrementGameStat(13); + ScriptContext1_SetupScript(Event_EggHatch); + return TRUE; + } + if (SafariZoneTakeStep() == TRUE) + return TRUE; + if (sub_810D9B0(1) == TRUE) + { + ScriptContext1_SetupScript(gUnknown_0815FD0D); + return TRUE; + } + return FALSE; +} + +void unref_sub_80688F8(void) +{ + VarSet(VAR_HAPPINESS_STEP_COUNTER, 0); +} + +static void happiness_algorithm_step(void) +{ + u16 *ptr = GetVarPointer(VAR_HAPPINESS_STEP_COUNTER); + int i; + + (*ptr)++; + (*ptr) %= 128; + if (*ptr == 0) + { + struct Pokemon *pkmn = gPlayerParty; + + for (i = 5; i >= 0; i--) + { + AdjustFriendship(pkmn, 5); + pkmn++; + } + } +} + +void overworld_poison_timer_set(void) +{ + VarSet(VAR_POISON_STEP_COUNTER, 0); +} + +static bool8 overworld_poison_step(void) +{ + u16 *ptr; + + if (gMapHeader.mapType != 9) + { + ptr = GetVarPointer(VAR_POISON_STEP_COUNTER); + (*ptr)++; + (*ptr) %= 4; + if (*ptr == 0) + { + switch (overworld_poison()) + { + case 0: + return FALSE; + case 1: + return FALSE; + case 2: + return TRUE; + } + } + } + return FALSE; +} + +void prev_quest_postbuffer_cursor_backup_reset(void) +{ + gUnknown_0202E8C0 = 0; +} + +static bool8 is_it_battle_time_3(u16 a) +{ + if (gUnknown_0202E8C0 < 4) + { + gUnknown_0202E8C0++; + gUnknown_0202E8C2 = a; + return FALSE; + } + if (StandardWildEncounter(a, gUnknown_0202E8C2) == TRUE) + { + gUnknown_0202E8C0 = 0; + gUnknown_0202E8C2 = a; + return TRUE; + } + else + { + gUnknown_0202E8C2 = a; + return FALSE; + } +} + +static bool8 mapheader_run_first_tag2_script_list_match_conditionally(struct MapPosition *position, u16 b, u8 c) +{ + s8 r6 = map_warp_check_packed(&gMapHeader, position); + + if (is_non_stair_warp_tile(b, c) == TRUE && r6 != -1) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sub_8068C30(&gMapHeader, r6, position); + sub_8080E88(); + return TRUE; + } + return FALSE; +} + +bool8 sub_8068A64(struct MapPosition *position, u16 b) +{ + s8 r4 = map_warp_check_packed(&gMapHeader, position); + + if (r4 != -1 && sub_8068B30(b) == TRUE) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sub_8068C30(&gMapHeader, r4, position); + if (MetatileBehavior_IsEscalator(b) == TRUE) + { + sub_8080F2C(b); + return TRUE; + } + if (MetatileBehavior_IsLavaridgeB1FWarp(b) == TRUE) + { + sub_8080F48(); + return TRUE; + } + if (MetatileBehavior_IsLavaridge1FWarp(b) == TRUE) + { + sub_8080F58(); + return TRUE; + } + if (MetatileBehavior_IsAquaHideoutWarp(b) == TRUE) + { + sub_8080F68(); + return TRUE; + } + if (MetatileBehavior_IsMtPyreHole(b) == TRUE) + { + ScriptContext1_SetupScript(gUnknown_081C6BDE); + return TRUE; + } + sub_8080E88(); + return TRUE; + } + return FALSE; +} + +static bool8 sub_8068B30(u16 a) +{ + if (MetatileBehavior_IsWarpDoor(a) != TRUE + && MetatileBehavior_IsLadder(a) != TRUE + && MetatileBehavior_IsEscalator(a) != TRUE + && MetatileBehavior_IsNonAnimDoor(a) != TRUE + && MetatileBehavior_IsLavaridgeB1FWarp(a) != TRUE + && MetatileBehavior_IsLavaridge1FWarp(a) != TRUE + && MetatileBehavior_IsAquaHideoutWarp(a) != TRUE + && MetatileBehavior_IsMtPyreHole(a) != TRUE) + return FALSE; + return TRUE; +} + +static bool8 is_non_stair_warp_tile(u16 a, u8 b) +{ + switch (b) + { + case 2: + return MetatileBehavior_IsNorthArrowWarp(a); + case 1: + return MetatileBehavior_IsSouthArrowWarp(a); + case 3: + return MetatileBehavior_IsWestArrowWarp(a); + case 4: + return MetatileBehavior_IsEastArrowWarp(a); + } + return FALSE; +} + +static s8 map_warp_check_packed(struct MapHeader *mapHeader, struct MapPosition *position) +{ + return map_warp_check(mapHeader, position->x - 7, position->y - 7, position->height); +} + +static void sub_8068C30(struct MapHeader *unused, s8 b, struct MapPosition *position) +{ + struct WarpEvent *warpEvent = &gMapHeader.events->warps[b]; + + if (warpEvent->mapNum == 0x7F) + { + copy_saved_warp2_bank_and_enter_x_to_warp1(warpEvent->mapGroup); + } + else + { + struct MapHeader *mapHeader; + + warp1_set_2(warpEvent->unk7, warpEvent->mapNum, warpEvent->mapGroup); + sub_80535C4(position->x, position->y); + mapHeader = get_mapheader_by_bank_and_number(warpEvent->unk7, warpEvent->mapNum); + if (mapHeader->events->warps[warpEvent->mapGroup].mapNum == 0x7F) + saved_warp2_set(mapHeader->events->warps[b].mapGroup, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, b); + } +} + +static bool8 map_warp_consider_2_to_inside(struct MapPosition *position, u16 b, u8 c) +{ + s8 r4; + + if (c == 2) + { + if (sub_80571C0(b) == TRUE) + { + sub_80BC038(position, gMapHeader.events); + return TRUE; + } + if (MetatileBehavior_IsWarpDoor(b) == TRUE) + { + r4 = map_warp_check_packed(&gMapHeader, position); + if (r4 != -1 && sub_8068B30(b) == TRUE) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sub_8068C30(&gMapHeader, r4, position); + sub_8080EF0(); + return TRUE; + } + } + } + return FALSE; +} + +static s8 map_warp_check(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) +{ + s32 i; + struct WarpEvent *warpEvent = mapHeader->events->warps; + u8 warpCount = mapHeader->events->warpCount; + + for (i = 0; i < warpCount; i++, warpEvent++) + { + if ((u16)warpEvent->x == b && (u16)warpEvent->y == c) + { + if ((u8)warpEvent->warpId == d || (u8)warpEvent->warpId == 0) + return i; + } + } + return -1; +} + +static u8 *trigger_activate(struct CoordEvent *coordEvent) +{ + if (coordEvent != NULL) + { + if (coordEvent->script == NULL) + { + DoCoordEventWeather(coordEvent->trigger); + return NULL; + } + if (coordEvent->trigger == 0) + { + ScriptContext2_RunNewScript(coordEvent->script); + return NULL; + } + if (VarGet(coordEvent->trigger) == (u8)coordEvent->index) + return coordEvent->script; + } + return NULL; +} + +static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) +{ + s32 i; + struct CoordEvent *coordEvents = mapHeader->events->coordEvents; + u8 coordEventCount = mapHeader->events->coordEventCount; + u8 *script; + + for (i = 0; i < coordEventCount; i++) + { + if ((u16)coordEvents[i].x == b && (u16)coordEvents[i].y == c) + { + if (coordEvents[i].unk4 == d || coordEvents[i].unk4 == 0) + { + script = trigger_activate(&coordEvents[i]); + if (script != NULL) + return script; + } + } + } + return NULL; +} + +u8 *sub_8068E24(struct MapPosition *position) +{ + return mapheader_trigger_activate_at(&gMapHeader, position->x - 7, position->y - 7, position->height); +} + +static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) +{ + u8 i; + struct BgEvent *bgEvents = mapHeader->events->bgEvents; + u8 bgEventCount = mapHeader->events->bgEventCount; + + for (i = 0; i < bgEventCount; i++) + { + if ((u16)bgEvents[i].x == b && (u16)bgEvents[i].y == c) + { + if (bgEvents[i].unk4 == d || bgEvents[i].unk4 == 0) + return &bgEvents[i]; + } + } + return NULL; +} + +int dive_warp(struct MapPosition *position, u16 b) +{ + if (gMapHeader.mapType == 5 && sub_805750C(b) == 0) + { + if (sub_80538B0(position->x - 7, position->y - 7)) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sp13E_warp_to_last_warp(); + PlaySE(SE_W291); + return TRUE; + } + } + else if (sub_80574EC(b) == TRUE) + { + if (sub_80538D0(position->x - 7, position->y - 7)) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sp13E_warp_to_last_warp(); + PlaySE(SE_W291); + return TRUE; + } + } + return FALSE; +} + +u8 sub_8068F18(void) +{ + s16 x, y; + u8 r5; + + PlayerGetDestCoords(&x, &y); + r5 = MapGridGetMetatileBehaviorAt(x, y); + if (gMapHeader.mapType == 5 && sub_805750C(r5) == 0) + { + if (sub_80538B0(x - 7, y - 7) == TRUE) + return 1; + } + else if (sub_80574EC(r5) == TRUE) + { + if (sub_80538D0(x - 7, y - 7) == TRUE) + return 2; + } + return 0; +} + +u8 *GetFieldObjectScriptPointerForComparison(void) +{ + u8 r4; + struct MapPosition position; + + r4 = player_get_direction_upper_nybble(); + player_get_next_pos_and_height(&position); + return sub_8068364(&position, MapGridGetMetatileBehaviorAt(position.x, position.y), r4); +} + +int sub_8068FEC(void) +{ + struct MapPosition position; + + player_get_direction_upper_nybble(); //unnecessary + player_get_pos_to_and_height(&position); + MapGridGetMetatileBehaviorAt(position.x, position.y); //unnecessary + sub_8068C30(&gMapHeader, map_warp_check_packed(&gMapHeader, &position), &position); + return 0; +} diff --git a/src/field_poison.c b/src/field_poison.c index 9b21ac5f3..6a243c280 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -106,7 +106,7 @@ void ExecuteWhiteOut(void) ScriptContext1_Stop(); } -u8 overworld_poison(void) +s32 overworld_poison(void) { struct Pokemon *pkmn = &gPlayerParty[0]; u32 numPoisoned = 0; diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index b78e76e10..1ea4bfa83 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -832,7 +832,7 @@ bool8 MetatileBehavior_IsRegionMap(u8 var) return FALSE; } -bool8 MetatileBehavior_IsClosedSootpolisGymDoor(u8 var) +bool8 MetatileBehavior_IsClosedSootopolisGymDoor(u8 var) { if(var == MB_CLOSED_SOOTOPOLIS_GYM_DOOR) return TRUE; diff --git a/src/rom4.c b/src/rom4.c index 3f383b690..f711a5a0e 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -391,7 +391,7 @@ void sub_8053588(u8 a1) warp_set(&gSaveBlock1.warp3, warp->group, warp->map, -1, warp->x, warp->y); } -void sub_80535C4(u16 a1, u16 a2) +void sub_80535C4(s16 a1, s16 a2) { u8 v4 = sav1_map_get_light_level(); u8 v5 = get_map_light_level_by_bank_and_number(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); @@ -2099,7 +2099,7 @@ void sub_80555B0(int linkPlayerId, int a2, struct UnkStruct_8054FF8 *a3) sub_8055B08(linkPlayerId, &x, &y); a3->sub.x = x; a3->sub.y = y; - a3->sub.field_8 = sub_8055B50(linkPlayerId); + a3->sub.height = sub_8055B50(linkPlayerId); a3->field_C = MapGridGetMetatileBehaviorAt(x, y); } @@ -2141,7 +2141,7 @@ bool32 sub_8055660(struct UnkStruct_8054FF8 *a1) u8 *sub_805568C(struct UnkStruct_8054FF8 *a1) { - struct UnkStruct_8054FF8_Substruct unkStruct; + struct MapPosition unkStruct; u8 linkPlayerId; if (a1->c && a1->c != 2) @@ -2150,7 +2150,7 @@ u8 *sub_805568C(struct UnkStruct_8054FF8 *a1) unkStruct = a1->sub; unkStruct.x += gUnknown_0821664C[a1->d].x; unkStruct.y += gUnknown_0821664C[a1->d].y; - unkStruct.field_8 = 0; + unkStruct.height = 0; linkPlayerId = GetLinkPlayerIdAt(unkStruct.x, unkStruct.y); if (linkPlayerId != 4) |