Overworld input handling

This commit is contained in:
yenatch 2013-06-28 21:51:18 -04:00
parent b9dfd607bb
commit 6597eb7e50

595
main.asm
View File

@ -2155,7 +2155,16 @@ GetTileType: ; 185d
ret
; 1875
INCBIN "baserom.gbc", $1875, $18ac - $1875
INCBIN "baserom.gbc", $1875, $18a0 - $1875
CheckCounterTile: ; 18a0
cp $90
ret z
cp $98
ret
; 18a6
INCBIN "baserom.gbc", $18a6, $18ac - $18a6
CheckIceTile: ; 18ac
cp $23
@ -2803,7 +2812,123 @@ ObjectEventText:
db "@"
; 0x26f7
INCBIN "baserom.gbc", $26f7, $2b74-$26f7
INCBIN "baserom.gbc", $26f7, $2a07 - $26f7
GetFacingTileCoord: ; 2a07
; Return map coordinates in (d, e) and tile id in a
; of the tile the player is facing.
ld a, [PlayerDirection]
and %1100
srl a
srl a
ld l, a
ld h, 0
add hl, hl
add hl, hl
ld de, .Directions
add hl, de
ld d, [hl]
inc hl
ld e, [hl]
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [MapX]
add d
ld d, a
ld a, [MapY]
add e
ld e, a
ld a, [hl]
ret
.Directions
; x, y
db 0, 1
dw TileDown
db 0, -1
dw TileUp
db -1, 0
dw TileLeft
db 1, 0
dw TileRight
; 2a3c
INCBIN "baserom.gbc", $2a3c, $2a8b - $2a3c
CheckFacingSign: ; 2a8b
call GetFacingTileCoord
ld b, a
ld a, d
sub 4
ld d, a
ld a, e
sub 4
ld e, a
ld a, [$dc01]
and a
ret z
ld c, a
ld a, [hROMBank]
push af
call $2c52
call $2aaa
pop hl
ld a, h
rst Bankswitch
ret
; 2aaa
; 2aaa
ld hl, $dc02
ld a, [hli]
ld h, [hl]
ld l, a
.asm_2ab0
push hl
ld a, [hli]
cp e
jr nz, .asm_2abb
ld a, [hli]
cp d
jr nz, .asm_2abb
jr .asm_2ac8
.asm_2abb
pop hl
ld a, 5
add l
ld l, a
jr nc, .asm_2ac3
inc h
.asm_2ac3
dec c
jr nz, .asm_2ab0
xor a
ret
.asm_2ac8
pop hl
ld de, EngineBuffer1
ld bc, 5
call CopyBytes
scf
ret
; 0x2ad4
INCBIN "baserom.gbc", $2ad4, $2b74 - $2ad4
Function2b74: ; 0x2b74
push af
@ -5653,7 +5778,52 @@ DrawGraphic: ; 6eef
; 6f07
INCBIN "baserom.gbc", $6f07, $7305 - $6f07
INCBIN "baserom.gbc", $6f07, $6fd9 - $6f07
CheckFacingObject: ; 6fd9
call GetFacingTileCoord
; Double the distance for counter tiles.
call CheckCounterTile
jr nz, .asm_6ff1
ld a, [MapX]
sub d
cpl
inc a
add d
ld d, a
ld a, [MapY]
sub e
cpl
inc a
add e
ld e, a
.asm_6ff1
ld bc, $d4d6
ld a, 0
ld [hConnectionStripLength], a
call $7041
ret nc
ld hl, $0007
add hl, bc
ld a, [hl]
cp $ff
jr z, .asm_7007
xor a
ret
.asm_7007
scf
ret
; 7009
INCBIN "baserom.gbc", $7009, $7305 - $7009
SpecialGiveShuckle: ; 7305
@ -15810,7 +15980,424 @@ INCLUDE "maps/map_headers.asm"
INCLUDE "maps/second_map_headers.asm"
INCBIN "baserom.gbc", $966b0, $96cb1 - $966b0
INCBIN "baserom.gbc", $966b0, $96974 - $966b0
; 96974
call CheckPlayerMovement
ret c
and a
jr nz, .asm_9698d
; Can't perform button actions while sliding on ice.
callba Function80404
jr c, .asm_9698d
call CheckAPressOW
jr c, .asm_9698f
call CheckMenuOW
jr c, .asm_9698f
.asm_9698d
xor a
ret
.asm_9698f
push af
callba Function80422
pop af
scf
ret
; 96999
CheckAPressOW: ; 96999
ld a, [hJoyPressed]
and BUTTON_A
ret z
call TryObjectEvent
ret c
call TryReadSign
ret c
call $7c5f
ret c
xor a
ret
; 969ac
PlayTalkObject: ; 969ac
push de
ld de, SFX_READ_TEXT_2
call StartSFX
pop de
ret
; 969b5
TryObjectEvent: ; 969b5
callba CheckFacingObject
jr c, .IsObject
xor a
ret
.IsObject
call PlayTalkObject
ld a, [hConnectedMapWidth]
call $1ae5
ld hl, $0001
add hl, bc
ld a, [hl]
ld [$ffe0], a
ld a, [$ffe0]
call $18d2
ld hl, $0008
add hl, bc
ld a, [hl]
and $f
; Bug: If IsInArray returns nc, data at bc will be executed as code.
push bc
ld de, 3
ld hl, .data_969ee
call IsInArray
jr nc, .asm_969ec
pop bc
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
.asm_969ec
xor a
ret
.data_969ee
dbw 0, .zero
dbw 1, .one
dbw 2, .two
dbw 3, .three
dbw 4, .four
dbw 5, .five
dbw 6, .six
db $ff
; 96a04
.zero ; 96a04
ld hl, $000a
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call $2c57
call PushScriptPointer
; ld a, -1
ret
; 96a12
.one ; 96a12
ld hl, $000a
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call $2c57
ld de, EngineBuffer1
ld bc, 2
call FarCopyBytes
ld a, $3
scf
ret
; 96a29
.two ; 96a29
call $3674
ld a, $2
scf
ret
; 96a30
.three ; 96a30
xor a
ret
; 96a32
.four ; 96a32
xor a
ret
; 96a34
.five ; 96a34
xor a
ret
; 96a36
.six ; 96a36
xor a
ret
; 96a38
TryReadSign: ; 96a38
call CheckFacingSign
jr c, .IsSign
xor a
ret
.IsSign
ld a, [$d040]
ld hl, .signs
rst $28
ret
.signs
dw .read
dw .up
dw .down
dw .right
dw .left
dw .ifset
dw .ifnotset
dw .itemifset
dw .asm_96aa2
; 96a59
.up
ld b, UP << 2
jr .checkdir
.down
ld b, DOWN << 2
jr .checkdir
.right
ld b, RIGHT << 2
jr .checkdir
.left
ld b, LEFT << 2
jr .checkdir
.checkdir
ld a, [PlayerDirection]
and %1100
cp b
jp nz, $6ad6
.read
call PlayTalkObject
ld hl, $d041
ld a, [hli]
ld h, [hl]
ld l, a
call $2c57
call PushScriptPointer
scf
ret
.itemifset
call CheckSignFlag
jp nz, $6ad6
call PlayTalkObject
call $2c57
ld de, EngineBuffer1
ld bc, 3
call FarCopyBytes
ld a, $4
ld hl, $7625
call PushScriptPointer
scf
ret
.asm_96aa2
call CheckSignFlag
jr nz, .dontread
call $2c57
ld de, EngineBuffer1
ld bc, 3
call FarCopyBytes
jr .dontread
.ifset
call CheckSignFlag
jr z, .dontread
jr .asm_96ac1
.ifnotset
call CheckSignFlag
jr nz, .dontread
.asm_96ac1
push hl
call PlayTalkObject
pop hl
inc hl
inc hl
call $2c57
call GetFarHalfword
call $2c57
call PushScriptPointer
scf
ret
.dontread
xor a
ret
; 96ad8
CheckSignFlag: ; 96ad8
ld hl, $d041
ld a, [hli]
ld h, [hl]
ld l, a
push hl
call $2c57
call GetFarHalfword
ld e, l
ld d, h
ld b, $2
call BitTable1Func
ld a, c
and a
pop hl
ret
; 96af0
CheckPlayerMovement: ; 96af0
ld a, BANK(DoPlayerMovement)
ld hl, DoPlayerMovement
rst FarCall
ld a, c
ld hl, .pointers
rst $28
ld a, c
ret
; 96afd
.pointers
dw .zero
dw .one
dw .two
dw .three
dw .four
dw .five
dw .six
dw .seven
.zero
.four ; 96b0d
xor a
ld c, a
ret
; 96b10
.seven ; 96b10
call $68d7 ; empty
xor a
ld c, a
ret
; 96b16
.one ; 96b16
ld a, 5
ld c, a
scf
ret
; 96b1b
.two ; 96b1b
ld a, 9
ld c, a
scf
ret
; 96b20
.three ; 96b20
; force the player to move in some direction
ld a, $4
ld hl, $653d
call PushScriptPointer
; ld a, -1
ld c, a
scf
ret
; 96b2b
.five
.six ; 96b2b
ld a, -1
ld c, a
and a
ret
; 96b30
CheckMenuOW: ; 96b30
xor a
ld [$ffa0], a
ld [$ffa1], a
ld a, [hJoyPressed]
bit 2, a ; SELECT
jr nz, .Select
bit 3, a ; START
jr z, .NoMenu
ld a, BANK(StartMenuScript)
ld hl, StartMenuScript
call PushScriptPointer
scf
ret
.NoMenu
xor a
ret
.Select
call PlayTalkObject
ld a, BANK(SelectMenuScript)
ld hl, SelectMenuScript
call PushScriptPointer
scf
ret
; 96b58
StartMenuScript: ; 96b58
3callasm $04, $65cd ; StartMenu
2jump UnknownScript_0x96b66
; 96b5f
SelectMenuScript: ; 96b5f
3callasm $04, $7327 ; SelectMenu
2jump UnknownScript_0x96b66
; 96b66
UnknownScript_0x96b66: ; 96b66
copybytetovar $ffa0
if_equal $80, UnknownScript_0x96b72
if_equal $ff, UnknownScript_0x96b75
end
; 96b72
UnknownScript_0x96b72: ; 96b72
2ptjump $d0e8
; 96b75
UnknownScript_0x96b75: ; 96b75
2ptcallasm $d0e8
end
; 96b79
INCBIN "baserom.gbc", $96b79, $96cb1 - $96b79
INCLUDE "engine/scripting.asm"