diff options
author | pikalaxalt <PikalaxALT@gmail.com> | 2016-06-20 09:38:59 -0400 |
---|---|---|
committer | pikalaxalt <PikalaxALT@gmail.com> | 2016-06-20 09:38:59 -0400 |
commit | 1b4991c001c8621364c397e2e3ffceb5690278f1 (patch) | |
tree | 832012a603fab1e6bc2edbf421a8722e455ef857 | |
parent | 25cec8486a08716b840d4dc20fb5c7099c1ef568 (diff) |
continue disassembling bank 2
-rwxr-xr-x | engine/player_object.asm | 786 | ||||
-rwxr-xr-x | engine/specials.asm | 2 | ||||
-rw-r--r-- | main.asm | 126 | ||||
-rw-r--r-- | wram.asm | 3 |
4 files changed, 899 insertions, 18 deletions
diff --git a/engine/player_object.asm b/engine/player_object.asm new file mode 100755 index 00000000..45562e8e --- /dev/null +++ b/engine/player_object.asm @@ -0,0 +1,786 @@ +BlankScreen: + call DisableSpriteUpdates + xor a + ld [hBGMapMode], a + call ClearBGPalettes + call ClearSprites + ld hl, wTileMap + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, " " + call ByteFill + ld hl, wAttrMap + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, $7 + call ByteFill + call Function3456 + call SetPalettes + ret + +SpawnPlayer: ; 861a (2:461a) + ld a, $ff + ld [wObjectFollow_Leader], a + ld [wObjectFollow_Follower], a + ld a, $0 + ld hl, .PlayerObjectTemplate + call CopyPlayerObjectTemplate + ld b, $0 + call PlayerSpawn_ConvertCoords + ld a, $0 + ld [hObjectStructIndexBuffer], a + ld de, wObjectStructs + ld a, $0 + ld [hMapObjectIndexBuffer], a + ld bc, wMapObjects + call CopyMapObjectToObjectStruct + ld a, $0 + ld [wCenteredObject], a + ret + +.PlayerObjectTemplate + person_event SPRITE_CHRIS, -4, -4, SPRITEMOVEDATA_PLAYER, 15, 15, -1, -1, 0, PERSONTYPE_SCRIPT, 0, 0, -1 + +CopyDECoordsToMapObject: ; 8653 (2:4653) + push de + ld a, b + call GetMapObject + pop de + ld hl, $3 + add hl, bc + ld [hl], d + ld hl, $2 + add hl, bc + ld [hl], e + ret + +PlayerSpawn_ConvertCoords: ; 8664 (2:4664) + push bc + ld a, [wXCoord] + add $4 + ld d, a + ld a, [wYCoord] + add $4 + ld e, a + pop bc + call CopyDECoordsToMapObject + ret + +WritePersonXY: + ld a, b + call CheckObjectVisibility + ret c + ld hl, $10 + add hl, bc + ld d, [hl] + ld hl, $11 + add hl, bc + ld e, [hl] + ld a, [hConnectionStripLength] + ld b, a + call CopyDECoordsToMapObject + and a + ret + +RefreshPlayerCoords: + ld a, [wXCoord] + add $4 + ld d, a + ld hl, wPlayerStandingMapX + sub [hl] + ld [hl], d + ld hl, wPlayerObjectXCoord + ld [hl], d + ld hl, wPlayerLastMapX + ld [hl], d + ld d, a + ld a, [wYCoord] + add $4 + ld e, a + ld hl, wPlayerStandingMapY + sub [hl] + ld [hl], e + ld hl, wPlayerObjectYCoord + ld [hl], e + ld hl, wPlayerLastMapY + ld [hl], e + ld e, a + ld a, [wObjectFollow_Leader] + cp $0 + ret nz + ret + +SpawnPlayer2: + ld a, $1 + ld hl, .PlayerObjectTemplate + call CopyPlayerObjectTemplate + ld b, $1 + call PlayerSpawn_ConvertCoords + ret + +.PlayerObjectTemplate: + person_event SPRITE_CHRIS, -4, -4, SPRITEMOVEDATA_12, 15, 15, -1, -1, 0, PERSONTYPE_SCRIPT, 0, 0, -1 + +CopyObjectStruct_:: ; 86d7 (2:46d7) + call CheckObjectMask + and a + ret nz + ld hl, wPlayerStructEnd + ld a, $1 + ld de, $28 +.asm_86e4 + ld [hObjectStructIndexBuffer], a + ld a, [hl] + and a + jr z, .asm_86f4 + add hl, de + ld a, [hConnectedMapWidth] + inc a + cp $d + jr nz, .asm_86e4 + scf + ret + +.asm_86f4 + ld d, h + ld e, l + call CopyMapObjectToObjectStruct + ld a, [wVramState] + bit 7, a + ret z + ld hl, $5 + add hl, de + set 5, [hl] + ret + +CopyMapObjectToObjectStruct: ; 8706 (2:4706) + call CopyMapObjectToTempObject + call CopyTempObjectToObjectStruct + ret + +CopyMapObjectToTempObject: ; 870d (2:470d) + ld a, [hConnectedMapWidth] + ld hl, $0 + add hl, bc + ld [hl], a + ld a, [hMapObjectIndexBuffer] + ld [wce99], a + ld hl, $1 + add hl, bc + ld a, [hl] + ld [wce9a], a + call GetSpriteVTile + ld [wce9b], a + ld a, [hl] + call GetSpritePalette + ld [wce9c], a + ld hl, $8 + add hl, bc + ld a, [hl] + and $f0 + jr z, .asm_873e + swap a + and $7 + ld [wce9c], a +.asm_873e + ld hl, $4 + add hl, bc + ld a, [hl] + ld [wce9d], a + ld hl, $9 + add hl, bc + ld a, [hl] + ld [wce9e], a + ld hl, $3 + add hl, bc + ld a, [hl] + ld [wce9f], a + ld hl, $2 + add hl, bc + ld a, [hl] + ld [wcea0], a + ld hl, $5 + add hl, bc + ld a, [hl] + ld [wcea1], a + ret + +InitializeVariableSprites: + ld bc, wMap2Object + ld a, $2 +.asm_876c + ld [hConnectionStripLength], a + ld hl, $1 + add hl, bc + ld a, [hl] + and a + jr z, .asm_87ab + ld hl, $0 + add hl, bc + ld a, [hl] + cp $ff + jr nz, .asm_87ab + ld a, [wXCoord] + ld d, a + ld a, [wYCoord] + ld e, a + ld hl, $3 + add hl, bc + ld a, [hl] + add $1 + sub d + jr c, .asm_87ab + cp $c + jr nc, .asm_87ab + ld hl, $2 + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_87ab + cp $b + jr nc, .asm_87ab + push bc + call CopyObjectStruct_ + pop bc + jp c, Function87b9 +.asm_87ab + ld hl, $10 + add hl, bc + ld b, h + ld c, l + ld a, [hMapObjectIndexBuffer] + inc a + cp $10 + jr nz, .asm_876c + ret + +Function87b9: ; 87b9 (2:47b9) + ret + +CheckObjectEnteringVisibleRange: + nop + ld a, [wPlayerStepDirection] + cp $ff + ret z + ld hl, .Jumptable + rst JumpTable + ret + +.Jumptable: + dw Function87d5 + dw Function87ce + dw Function8822 + dw Function8829 + +Function87ce: + ld a, [wYCoord] + sub $1 + jr asm_87da + +Function87d5: + ld a, [wYCoord] + add $9 +asm_87da + ld d, a + ld a, [wXCoord] + ld e, a + ld bc, wMap2Object + ld a, $2 +.asm_87e4 + ld [hConnectionStripLength], a + ld hl, $1 + add hl, bc + ld a, [hl] + and a + jr z, .asm_8814 + ld hl, $2 + add hl, bc + ld a, d + cp [hl] + jr nz, .asm_8814 + ld hl, $0 + add hl, bc + ld a, [hl] + cp $ff + jr nz, .asm_8814 + ld hl, $3 + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_8814 + cp $c + jr nc, .asm_8814 + push de + push bc + call CopyObjectStruct_ + pop bc + pop de +.asm_8814 + ld hl, $10 + add hl, bc + ld b, h + ld c, l + ld a, [hMapObjectIndexBuffer] + inc a + cp $10 + jr nz, .asm_87e4 + ret + +Function8822: + ld a, [wXCoord] + sub $1 + jr asm_882e + +Function8829: + ld a, [wXCoord] + add $a +asm_882e + ld e, a + ld a, [wYCoord] + ld d, a + ld bc, wMap2Object + ld a, $2 +.asm_8838 + ld [hConnectionStripLength], a + ld hl, $1 + add hl, bc + ld a, [hl] + and a + jr z, .asm_8868 + ld hl, $3 + add hl, bc + ld a, e + cp [hl] + jr nz, .asm_8868 + ld hl, $0 + add hl, bc + ld a, [hl] + cp $ff + jr nz, .asm_8868 + ld hl, $2 + add hl, bc + ld a, [hl] + add $1 + sub d + jr c, .asm_8868 + cp $b + jr nc, .asm_8868 + push de + push bc + call CopyObjectStruct_ + pop bc + pop de +.asm_8868 + ld hl, $10 + add hl, bc + ld b, h + ld c, l + ld a, [hConnectionStripLength] + inc a + cp $10 + jr nz, .asm_8838 + ret + +CopyTempObjectToObjectStruct: ; 8876 (2:4876) + ld a, [wce99] + ld hl, $1 + add hl, de + ld [hl], a + ld a, [wce9d] + call CopySpriteMovementData + ld a, [wce9c] + ld hl, $6 + add hl, de + or [hl] + ld [hl], a + ld a, [wcea0] + call InitTempObjectYCoord + ld a, [wce9f] + call InitTempObjectXCoord + ld a, [wce9a] + ld hl, $0 + add hl, de + ld [hl], a + ld a, [wce9b] + ld hl, $2 + add hl, de + ld [hl], a + ld hl, $9 + add hl, de + ld [hl], $0 + ld hl, $d + add hl, de + ld [hl], $ff + ld a, [wcea1] + call InitTempObjectRadius + ld a, [wce9e] + ld hl, $20 + add hl, de + ld [hl], a + and a + ret + +InitTempObjectYCoord: ; 88c5 (2:48c5) + ld hl, $15 + add hl, de + ld [hl], a + ld hl, $11 + add hl, de + ld [hl], a + ld hl, wYCoord + sub [hl] + and $f + swap a + ld hl, wce82 + sub [hl] + ld hl, $18 + add hl, de + ld [hl], a + ret + +InitTempObjectXCoord: ; 88e1 (2:48e1) + ld hl, $14 + add hl, de + ld [hl], a + ld hl, $10 + add hl, de + ld [hl], a + ld hl, wXCoord + sub [hl] + and $f + swap a + ld hl, wce81 + sub [hl] + ld hl, $17 + add hl, de + ld [hl], a + ret + +InitTempObjectRadius: ; 88fd (2:48fd) + ld h, a + inc a + and $f + ld l, a + ld a, h + add $10 + and $f0 + or l + ld hl, $16 + add hl, de + ld [hl], a + ret + +TrainerWalkToPlayer: + ld a, [hLastTalked] + call InitMovementBuffer + ld a, movement_step_sleep + call AppendToMovementBuffer + ld a, [wcf2a] + dec a + jr z, .asm_892b + ld a, [hLastTalked] + ld b, a + ld c, PLAYER + ld d, $1 + call GetTrainerPathToPlayer + call DecrementMovementBufferCount +.asm_892b + ld a, movement_step_end + call AppendToMovementBuffer + ret + +GetTrainerPathToPlayer: ; 8931 (2:4931) + push de + push bc + ld a, c + call GetMapObject + ld hl, $0 + add hl, bc + ld a, [hl] + call GetObjectStruct + ld d, b + ld e, c + pop bc + ld a, b + call GetMapObject + ld hl, $0 + add hl, bc + ld a, [hl] + call GetObjectStruct + ld hl, $10 + add hl, bc + ld a, [hl] + ld hl, $11 + add hl, bc + ld c, [hl] + ld b, a + ld hl, $10 + add hl, de + ld a, [hl] + ld hl, $11 + add hl, de + ld e, [hl] + ld d, a + pop af + call ComputePathToWalkToPlayer + ret + +Special_SurfStartStep: ; 8969 (2:4969) + call InitMovementBuffer + call GetInitialSurfStep + call AppendToMovementBuffer + ld a, movement_step_end + call AppendToMovementBuffer + ret + +GetInitialSurfStep: ; 8978 (2:4978) + ld a, [wPlayerDirection] + srl a + srl a + and $3 + ld e, a + ld d, $0 + ld hl, .Data ; $498a + add hl, de + ld a, [hl] + ret + +.Data + slow_step DOWN + slow_step UP + slow_step LEFT + slow_step RIGHT + +FollowNotExact: + push bc + ld a, c + call CheckObjectVisibility + ld d, b + ld e, c + pop bc + ret c + ld a, b + call CheckObjectVisibility + ret c + ld hl, $10 + add hl, bc + ld a, [hl] + ld hl, $11 + add hl, bc + ld c, [hl] + ld b, a + ld hl, $10 + add hl, de + ld a, [hl] + cp b + jr z, .asm_89b7 + jr c, .asm_89b4 + inc b + jr .asm_89c5 + +.asm_89b4 + dec b + jr .asm_89c5 + +.asm_89b7 + ld hl, $11 + add hl, de + ld a, [hl] + cp c + jr z, .asm_89c5 + jr c, .asm_89c4 + inc c + jr .asm_89c5 + +.asm_89c4 + dec c +.asm_89c5 + ld hl, $10 + add hl, de + ld [hl], b + ld a, b + ld hl, wXCoord + sub [hl] + and $f + swap a + ld hl, wce81 + sub [hl] + ld hl, $17 + add hl, de + ld [hl], a + ld hl, $11 + add hl, de + ld [hl], c + ld a, c + ld hl, wYCoord + sub [hl] + and $f + swap a + ld hl, wce82 + sub [hl] + ld hl, $18 + add hl, de + ld [hl], a + ld a, [hObjectStructIndexBuffer] + ld hl, $20 + add hl, de + ld [hl], a + ld hl, $3 + add hl, de + ld [hl], $1a + ld hl, $9 + add hl, de + ld [hl], $0 + ret + +GetRelativeFacing: + ld a, d + call GetMapObject + ld hl, $0 + add hl, bc + ld a, [hl] + cp $d + jr nc, .asm_8a27 + ld d, a + ld a, e + call GetMapObject + ld hl, $0 + add hl, bc + ld a, [hl] + cp $d + jr nc, .asm_8a27 + ld e, a + call GetFacing_e_relativeto_d + ret + +.asm_8a27 + scf + ret + +GetFacing_e_relativeto_d: ; 8a29 (2:4a29) + ld a, d + call GetObjectStruct + ld hl, $10 + add hl, bc + ld a, [hl] + ld hl, $11 + add hl, bc + ld c, [hl] + ld b, a + push bc + ld a, e + call GetObjectStruct + ld hl, $10 + add hl, bc + ld d, [hl] + ld hl, $11 + add hl, bc + ld e, [hl] + pop bc + ld a, b + sub d + jr z, .asm_8a5c + jr nc, .asm_8a50 + cpl + inc a +.asm_8a50 + ld h, a + ld a, c + sub e + jr z, .asm_8a6a + jr nc, .asm_8a59 + cpl + inc a +.asm_8a59 + sub h + jr c, .asm_8a6a +.asm_8a5c + ld a, c + cp e + jr z, .asm_8a78 + jr c, .asm_8a66 + ld d, $0 + and a + ret + +.asm_8a66 + ld d, $1 + and a + ret + +.asm_8a6a + ld a, b + cp d + jr z, .asm_8a78 + jr c, .asm_8a74 + ld d, $3 + and a + ret + +.asm_8a74 + ld d, $2 + and a + ret + +.asm_8a78 + scf + ret + +QueueFollowerFirstStep: ; 8a7a (2:4a7a) + call Function8a8d + jr c, .asm_8a87 + ld [wFollowMovementQueue], a + xor a + ld [wFollowerMovementQueueLength], a + ret + +.asm_8a87 + ld a, $ff + ld [wFollowerMovementQueueLength], a + ret + +Function8a8d: ; 8a8d (2:4a8d) + ld a, [wObjectFollow_Leader] + call GetObjectStruct + ld hl, $10 + add hl, bc + ld d, [hl] + ld hl, $11 + add hl, bc + ld e, [hl] + ld a, [wObjectFollow_Follower] + call GetObjectStruct + ld hl, $10 + add hl, bc + ld a, d + cp [hl] + jr z, .asm_8ab5 + jr c, .asm_8ab1 + and a + ld a, $f + ret + +.asm_8ab1 + and a + ld a, $e + ret + +.asm_8ab5 + ld hl, $11 + add hl, bc + ld a, e + cp [hl] + jr z, .asm_8ac7 + jr c, .asm_8ac3 + and a + ld a, $c + ret + +.asm_8ac3 + and a + ld a, $d + ret + +.asm_8ac7 + scf + ret diff --git a/engine/specials.asm b/engine/specials.asm index 09f9dfdb..d620c3bd 100755 --- a/engine/specials.asm +++ b/engine/specials.asm @@ -75,7 +75,7 @@ SpecialsPointers: add_special PlayMapMusic add_special RestartMapMusic add_special Function126fd - add_special Function8969 + add_special Special_SurfStartStep add_special Special_FindGreaterThanThatLevel add_special Special_FindAtLeastThatHappy add_special Special_FindThatSpecies @@ -207,21 +207,117 @@ INCLUDE "event/special.asm" SECTION "bank2", ROMX, BANK[$2] SwapTextboxPalettes:: - dr $8000, $804f -ScrollBGMapPalettes:: - dr $804f, $861a -SpawnPlayer: - dr $861a, $8653 -CopyDECoordsToMapObject: - dr $8653, $86d7 -CopyObjectStruct_:: - dr $86d7, $8876 -CopyTempObjectToObjectStruct: - dr $8876, $8969 -Function8969: - dr $8969, $8a7a -QueueFollowerFirstStep: - dr $8a7a, $8ac9 + ld hl, wTileMap + ld de, wAttrMap + ld b, $12 +.asm_8008 + ld c, $14 +.asm_800a + ld a, [hli] + push hl + srl a + jr c, .asm_8024 + ld hl, wTilesetPalettes + add [hl] + ld l, a + ld a, [wTilesetPalettes + 1] + adc $0 + ld h, a + ld a, [hl] + and $f + bit 3, a + jr z, .asm_8045 + jr .asm_8038 + +.asm_8024 + ld hl, wTilesetPalettes + add [hl] + ld l, a + ld a, [wTilesetPalettes + 1] + adc $0 + ld h, a + ld a, [hl] + swap a + and $f + bit 3, a + jr z, .asm_8045 +.asm_8038 + ld a, [wMapGroup] + dec a + ld hl, Unknown85d7 + add l + ld l, a + jr nc, .asm_8044 + inc h +.asm_8044 + ld a, [hl] +.asm_8045 + pop hl + ld [de], a + inc de + dec c + jr nz, .asm_800a + dec b + jr nz, .asm_8008 + ret + +ScrollBGMapPalettes:: ; 804f (2:404f) + ld hl, wBGMapBuffer + ld de, wBGMapPalBuffer +.asm_8055 + ld a, [hli] + push hl + srl a + jr c, .asm_806f + ld hl, wTilesetPalettes + add [hl] + ld l, a + ld a, [wTilesetPalettes + 1] + adc $0 + ld h, a + ld a, [hl] + and $f + bit 3, a + jr z, .asm_8090 + jr .asm_8083 + +.asm_806f + ld hl, wTilesetPalettes + add [hl] + ld l, a + ld a, [wTilesetPalettes + 1] + adc $0 + ld h, a + ld a, [hl] + swap a + and $f + bit 3, a + jr z, .asm_8090 +.asm_8083 + ld a, [wMapGroup] + dec a + ld hl, Unknown85d7 + add l + ld l, a + jr nc, .asm_808f + inc h +.asm_808f + ld a, [hl] +.asm_8090 + pop hl + ld [de], a + inc de + dec c + jr nz, .asm_8055 + ret + +Unknown8097: + dr $8097, $85d7 +Unknown85d7: + dr $85d7, $85f1 + +INCLUDE "engine/player_object.asm" + Sine_e:: dr $8ac9, $8b3b @@ -2518,8 +2518,7 @@ wd0cb:: ds 1 ; d0cb wd0cc:: ds 1 ; d0cc wd0cd:: ds 1 ; d0cd wd0ce:: ds 1 ; d0ce -wd0cf:: ds 1 ; d0cf -wd0d0:: ds 1 ; d0d0 +wTilesetPalettes:: dw ; d0cf wd0d1:: ds 1 ; d0d1 wd0d2:: ds 1 ; d0d2 wd0d3:: ds 1 ; d0d3 |