diff --git a/constants/map_object_constants.asm b/constants/map_object_constants.asm index 6f51767..1e87aad 100644 --- a/constants/map_object_constants.asm +++ b/constants/map_object_constants.asm @@ -32,9 +32,12 @@ DEF OBJECT_1D rb ; 1d DEF OBJECT_1E rb ; 1e DEF OBJECT_1F rb ; 1f DEF OBJECT_RANGE rb ; 20 - rb_skip 7 +DEF OBJECT_21 rb ; 21 + rb_skip 6 DEF OBJECT_LENGTH EQU _RS DEF NUM_OBJECT_STRUCTS EQU 10 +DEF PLAYER_STRUCT EQU 1 +DEF FOLLOWER_STRUCT EQU 2 rsreset DEF CMDQUEUE_UNK0 rb 16 @@ -56,6 +59,7 @@ DEF MAPOBJECT_EVENT_FLAG rw rb_skip 2 DEF MAPOBJECT_LENGTH EQU _RS DEF NUM_OBJECTS EQU 16 +DEF PLAYER_OBJECT EQU 0 DEF MAPOBJECT_SCREEN_WIDTH EQU (SCREEN_WIDTH / 2) + 2 DEF MAPOBJECT_SCREEN_HEIGHT EQU (SCREEN_HEIGHT / 2) + 2 diff --git a/constants/script_constants.asm b/constants/script_constants.asm index 7822754..5a38584 100755 --- a/constants/script_constants.asm +++ b/constants/script_constants.asm @@ -1,3 +1,6 @@ +; object constants +DEF PLAYER EQU 0 +DEF FOLLOWER EQU 1 ; Script IDs const_def diff --git a/engine/debug/field/follow_npc_test.inc b/engine/debug/field/follow_npc_test.inc index 4fee46b..8c2c5cb 100644 --- a/engine/debug/field/follow_npc_test.inc +++ b/engine/debug/field/follow_npc_test.inc @@ -36,7 +36,7 @@ FieldDebug_FollowNPCTest: ret .asm_fc9a5: - callab Function8047 + callab SpawnFollower ld a, 1 call Function15ed ld a, 1 diff --git a/engine/dumps/bank02.asm b/engine/dumps/bank02.asm index 9274758..776c6ff 100755 --- a/engine/dumps/bank02.asm +++ b/engine/dumps/bank02.asm @@ -1,42 +1,42 @@ INCLUDE "constants.asm" -SECTION "engine/dumps/bank02.asm@Function8000", ROMX +SECTION "engine/dumps/bank02.asm@SpawnPlayer", ROMX -Function8000: - ld a, $00 - ld hl, Data8022 - call Function1656 - call Function1668 - ld a, $01 - ldh [hConnectedMapWidth], a - ld de, wPlayerSprite - ld a, $00 - ldh [hConnectionStripLength], a +SpawnPlayer: + ld a, PLAYER + ld hl, PlayerObjectTemplate + call CopyPlayerObjectTemplate + call Spawn_ConvertCoords + ld a, PLAYER_STRUCT + ldh [hObjectStructIndex], a + ld de, wPlayerStruct + ld a, PLAYER_OBJECT + ldh [hMapObjectIndex], a ld bc, wMapObjects - call Function813d - ld a, $00 + call CopyMapObjectToObjectStruct + ld a, PLAYER_OBJECT call Function1908 ret -Data8022: - db $01, $00, $00, $10, $ee, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00 +PlayerObjectTemplate: + object_event -4, -4, SPRITE_GOLD, $10, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0 + db $00, $00 Function8031: - call Function8047 + call SpawnFollower ld a, [wUsedSprites+1] ld [wMap1ObjectSprite], a ld a, $01 call Function1602 - ld b, $00 - ld c, $01 + ld b, PLAYER + ld c, FOLLOWER call StartFollow ret -Function8047: - ld a, $01 - ld hl, Data805d - call Function1656 +SpawnFollower: + ld a, FOLLOWER + ld hl, FollowerObjectTemplate + call CopyPlayerObjectTemplate ld a, [wPlayerMapX] ld [wMap1ObjectXCoord], a ld a, [wPlayerMapY] @@ -44,9 +44,9 @@ Function8047: ld [wMap1ObjectYCoord], a ret -Data805d: - db $4d, $00, $00, $18, $ff, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00 +FollowerObjectTemplate: + object_event -4, -4, SPRITE_RHYDON, $18, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0 + db $00, $00 Function806c: ld a, $01 @@ -60,14 +60,14 @@ Function806c: Function807b: ld a, $01 ld hl, Data8089 - call Function1656 + call CopyPlayerObjectTemplate ld a, $01 - call Function1668 + call Spawn_ConvertCoords ret Data8089: - db $01, $00, $00, $17, $ee, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00 + object_event -4, -4, SPRITE_GOLD, $17, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0 + db $00, $00 _InitializeVisibleSprites: ld bc, wMap2Object @@ -154,7 +154,7 @@ Function80eb: .done ld d, h ld e, l - call Function813d + call CopyMapObjectToObjectStruct ld a, [wVramState] bit 7, a ret z @@ -191,94 +191,109 @@ Function8131: ld [hl], $00 ret -Function813d: - ldh a, [hConnectionStripLength] - ld hl, $0001 +CopyMapObjectToObjectStruct: + ldh a, [hMapObjectIndex] + ld hl, OBJECT_MAP_OBJECT_INDEX add hl, de ld [hl], a - ldh a, [hConnectedMapWidth] - ld hl, $0000 + + ldh a, [hObjectStructIndex] + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld [hl], a - ld hl, $0008 + + ld hl, OBJECT_DIRECTION add hl, de ld [hl], $00 - ld hl, $0002 + + ld hl, MAPOBJECT_Y_COORD add hl, bc ld a, [hl] - ld hl, $0015 + ld hl, OBJECT_INIT_Y add hl, de ld [hl], a - ld hl, $0011 + + ld hl, OBJECT_MAP_Y add hl, de ld [hl], a ld hl, wYCoord sub [hl] - and $0f + and $f swap a - ld hl, $0019 + ld hl, OBJECT_SPRITE_X_OFFSET add hl, de ld [hl], a - ld hl, $0003 + + ld hl, MAPOBJECT_X_COORD add hl, bc ld a, [hl] - ld hl, $0014 + ld hl, OBJECT_INIT_X add hl, de ld [hl], a - ld hl, $0010 + + ld hl, OBJECT_MAP_X add hl, de ld [hl], a ld hl, wXCoord sub [hl] - and $0f + and $f swap a - ld hl, $0018 + ld hl, OBJECT_SPRITE_Y add hl, de ld [hl], a - ld hl, $0004 + + ld hl, MAPOBJECT_MOVEMENT add hl, bc ld a, [hl] - ld hl, $0003 + ld hl, OBJECT_MOVEMENT_TYPE add hl, de ld [hl], a - call Function81ce - ld hl, $000d + + call InitObjectFlags + + ld hl, OBJECT_FACING add hl, de - ld [hl], $ff - ld hl, $000a + ld [hl], -1 + + ld hl, OBJECT_STEP_DURATION add hl, de - ld [hl], $00 - ld hl, $0007 + ld [hl], 0 + + ld hl, OBJECT_WALKING add hl, de - ld [hl], $00 - ld hl, $0001 + ld [hl], 0 + + ld hl, MAPOBJECT_SPRITE add hl, bc ld a, [hl] - ld hl, $0000 + ld hl, OBJECT_SPRITE add hl, de ld [hl], a + call Function820d - ld hl, $0002 + ld hl, OBJECT_SPRITE_TILE add hl, de ld [hl], a - ld hl, $0005 + + ld hl, MAPOBJECT_RADIUS add hl, bc ld a, [hl] call Function81f8 - ld hl, $000b + + ld hl, MAPOBJECT_SCRIPT_POINTER + 1 add hl, bc ld a, [hl] - ld hl, $0021 + ld hl, OBJECT_21 add hl, de ld [hl], a and a ret -Function81ce: - ld hl, $0004 +InitObjectFlags: + ld hl, OBJECT_FLAGS1 add hl, de ld [hl], $70 - ldh a, [hConnectedMapWidth] + ldh a, [hObjectStructIndex] push hl ld hl, wCenteredObject cp [hl] @@ -293,10 +308,10 @@ Function81ce: .sub_81e8 set 1, [hl] .sub_81ea - ld hl, $0005 + ld hl, OBJECT_FLAGS2 add hl, de ld [hl], $00 - ldh a, [hConnectedMapWidth] + ldh a, [hObjectStructIndex] cp $01 ret z set 4, [hl] @@ -307,26 +322,26 @@ Function81f8: swap a and $0f inc a - ld hl, $0016 + ld hl, OBJECT_RADIUS add hl, de ld [hl], a pop af and $0f inc a - ld hl, $0017 + ld hl, OBJECT_SPRITE_X add hl, de ld [hl], a ret Function820d: push af - ldh a, [hConnectionStripLength] - cp $00 - jr nz, .sub_8218 + ldh a, [hMapObjectIndex] + cp PLAYER_OBJECT + jr nz, .not_player pop af ld a, $00 ret -.sub_8218 +.not_player cp $01 jr nz, .sub_8220 pop af diff --git a/engine/overworld/object_collision.asm b/engine/overworld/object_collision.asm index fe47d55..05afeca 100644 --- a/engine/overworld/object_collision.asm +++ b/engine/overworld/object_collision.asm @@ -39,7 +39,7 @@ _CheckObjectCollision: ld bc, wObjectStructs xor a .loop - ldh [hObjectStructIndexBuffer], a + ldh [hObjectStructIndex], a ld hl, OBJECT_SPRITE add hl, bc ld a, [hl] @@ -57,7 +57,7 @@ _CheckObjectCollision: jr nz, .check_last_position ldh a, [hEventCollisionException] ld l, a - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] cp l jr nz, .collision .check_last_position @@ -73,7 +73,7 @@ _CheckObjectCollision: jr nz, .next ldh a, [hEventCollisionException] ld l, a - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] cp l jr nz, .collision .next @@ -81,7 +81,7 @@ _CheckObjectCollision: add hl, bc ld b, h ld c, l - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] inc a cp NUM_OBJECT_STRUCTS jr nz, .loop @@ -104,7 +104,7 @@ _CheckPlayerObjectCollision: xor a .loop - ldh [hObjectStructIndexBuffer], a + ldh [hObjectStructIndex], a ld hl, OBJECT_SPRITE add hl, bc ld a, [hl] @@ -122,7 +122,7 @@ _CheckPlayerObjectCollision: jr nz, .check_last_position ; skip the player sprite - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] cp PLAYER_OBJECT_INDEX jr z, .next jr .collision @@ -145,7 +145,7 @@ _CheckPlayerObjectCollision: add hl, bc ld b, h ld c, l - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] inc a cp NUM_OBJECT_STRUCTS jr nz, .loop diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm index b771116..49bbf8f 100644 --- a/engine/overworld/player_movement.asm +++ b/engine/overworld/player_movement.asm @@ -534,7 +534,7 @@ CheckPlayerObjectCollision:: CheckCompanionObjectCollision:: ; Marks the object struct pointed to by hl ; as having collided with player object. -; If object struct (as identified by hObjectStructIndexBuffer) +; If object struct (as identified by hObjectStructIndex) ; is companion, cancel collision on 5th frames. ; Result: ; nc - no collision @@ -542,7 +542,7 @@ CheckCompanionObjectCollision:: ld hl, OBJECT_FLAGS2 add hl, bc set 1, [hl] ; mark object as having collided with player - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] cp COMPANION_OBJECT_INDEX jr z, .is_companion xor a @@ -1031,7 +1031,7 @@ CheckObjectCollision:: ; Output: ; nc - no collision ; c - collision -; hObjectStructIndexBuffer - Event ID of colliding event +; hObjectStructIndex - Event ID of colliding event ld a, PLAYER_OBJECT_INDEX ldh [hEventCollisionException], a ld a, [wPlayerMapX] diff --git a/home/map_objects.asm b/home/map_objects.asm index 32cdabb..f311dc6 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -3,7 +3,7 @@ INCLUDE "constants.asm" SECTION "home/map_objects.asm", ROM0 Function15b5:: - callab Function8000 + callab SpawnPlayer ret GetMapObject:: @@ -21,39 +21,39 @@ GetMapObjectAttrPtr:: ret Function15d1:: - ldh [hMapObjectIndexBuffer], a + ldh [hMapObjectIndex], a call GetMapObject call Function40eb ret Function15da:: - ldh [hMapObjectIndexBuffer], a + ldh [hMapObjectIndex], a callab Function8131 - ldh a, [hMapObjectIndexBuffer] + ldh a, [hMapObjectIndex] call GetMapObject call Function40eb ret Function15ed:: - ldh [hMapObjectIndexBuffer], a + ldh [hMapObjectIndex], a call GetMapObject ld a, $0 - ldh [hObjectStructIndexBuffer], a + ldh [hObjectStructIndex], a ld de, wObjectStructs - callab Function813d + callab CopyMapObjectToObjectStruct ret Function1602:: - ldh [hMapObjectIndexBuffer], a + ldh [hMapObjectIndex], a call GetMapObject - ld a, $2 - ldh [hObjectStructIndexBuffer], a + ld a, FOLLOWER_STRUCT + ldh [hObjectStructIndex], a ld de, wObject1Struct - callab Function813d + callab CopyMapObjectToObjectStruct ret Function1617:: - ldh [hMapObjectIndexBuffer], a + ldh [hMapObjectIndex], a call GetMapObject ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc @@ -87,12 +87,12 @@ Function164a:: callab Function8125 ret -Function1656:: +CopyPlayerObjectTemplate:: push hl call GetMapObject ld d, b ld e, c - ld a, $ff + ld a, -1 ld [de], a inc de pop hl @@ -100,7 +100,7 @@ Function1656:: call CopyBytes ret -Function1668:: +Spawn_ConvertCoords:: call GetMapObject ld a, [wXCoord] add $4 @@ -123,7 +123,7 @@ Function1680:: ld hl, OBJECT_MAP_Y add hl, bc ld e, [hl] - ldh a, [hMapObjectIndexBuffer] + ldh a, [hMapObjectIndex] call GetMapObject ld hl, MAPOBJECT_X_COORD add hl, bc @@ -207,14 +207,14 @@ Function16fb:: ret CheckObjectVisibility:: - ldh [hMapObjectIndexBuffer], a + ldh [hMapObjectIndex], a call GetMapObject ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld a, [hl] cp -1 jr z, .not_visible - ldh [hObjectStructIndexBuffer], a + ldh [hObjectStructIndex], a call GetObjectStruct and a ret @@ -260,7 +260,7 @@ PushToCmdQueue:: ld hl, $f add hl, bc ld [hl], a - ldh a, [hMapObjectIndexBuffer] + ldh a, [hMapObjectIndex] inc a ld hl, $0 add hl, bc @@ -290,12 +290,12 @@ GetCmdQueueEmptySlot:: ld de, CMDQUEUE_ENTRY_SIZE ld a, 1 .asm_1796: - ldh [hObjectStructIndexBuffer], a + ldh [hObjectStructIndex], a ld a, [hl] and a jr z, .asm_17a6 add hl, de - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] inc a cp 4 + 1 jr nz, .asm_1796 @@ -558,7 +558,7 @@ Function1908:: ld hl, OBJECT_FLAGS1 add hl, bc set 7, [hl] - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] ld [wCenteredObject], a ret @@ -587,7 +587,7 @@ StartFollow:: SetLeaderIfVisible:: call CheckObjectVisibility ret c - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] ld [wObjectFollow_Leader], a ret @@ -608,7 +608,7 @@ SetFollowerIfVisible:: ld hl, OBJECT_DIRECTION add hl, bc ld [hl], $0 - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] ld [wObjectFollow_Follower], a ret diff --git a/home/talk_to_npc.asm b/home/talk_to_npc.asm index cedc420..4c75ffb 100644 --- a/home/talk_to_npc.asm +++ b/home/talk_to_npc.asm @@ -227,7 +227,7 @@ Function318f: TurnNPCTalkingTo:: ; If an NPC is allowed to turn when talked to, turn it. - ldh a, [hObjectStructIndexBuffer] + ldh a, [hObjectStructIndex] call GetObjectStruct ld hl, OBJECT_SPRITE add hl, bc diff --git a/home/tileset.asm b/home/tileset.asm index 51c7bcd..7fb1d0f 100644 --- a/home/tileset.asm +++ b/home/tileset.asm @@ -139,7 +139,7 @@ SaveScreen:: ld de, wScreenSave ld a, [wMapWidth] add 6 - ldh [hMapObjectIndexBuffer], a + ldh [hMapObjectIndex], a ld a, [wPlayerStepDirection] and a jr z, .down @@ -153,7 +153,7 @@ SaveScreen:: .up ld de, wScreenSave + 6 - ldh a, [hMapObjectIndexBuffer] + ldh a, [hMapObjectIndex] ld c, a ld b, 0 add hl, bc diff --git a/layout.link b/layout.link index 382ccd8..6c2f3a0 100644 --- a/layout.link +++ b/layout.link @@ -119,7 +119,7 @@ ROMX $01 "engine/dumps/bank01.asm@SettingsScreen" ROMX $02 - "engine/dumps/bank02.asm@Function8000" + "engine/dumps/bank02.asm@SpawnPlayer" "gfx.asm@Bank 2 Misc GFX" "engine/dumps/bank02.asm@QueueFollowerFirstStep" "gfx.asm@Mon Nest Icon" diff --git a/ram/hram.asm b/ram/hram.asm index 8269616..0a89696 100644 --- a/ram/hram.asm +++ b/ram/hram.asm @@ -101,8 +101,8 @@ hConnectedMapWidth:: db NEXTU -hMapObjectIndexBuffer:: db -hObjectStructIndexBuffer:: db +hMapObjectIndex:: db +hObjectStructIndex:: db ENDU