mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
FarString -> PlaceFarString, and document a BrokenPlaceFarString bug
This commit is contained in:
parent
4ef556cbc8
commit
098903fc97
@ -84,6 +84,7 @@ Fixes in the [multi-player battle engine](#multi-player-battle-engine) category
|
|||||||
- [Magikarp lengths can be miscalculated](#magikarp-lengths-can-be-miscalculated)
|
- [Magikarp lengths can be miscalculated](#magikarp-lengths-can-be-miscalculated)
|
||||||
- [`CheckOwnMon` only checks the first five letters of OT names](#checkownmon-only-checks-the-first-five-letters-of-ot-names)
|
- [`CheckOwnMon` only checks the first five letters of OT names](#checkownmon-only-checks-the-first-five-letters-of-ot-names)
|
||||||
- [`CheckOwnMonAnywhere` does not check the Day-Care](#checkownmonanywhere-does-not-check-the-day-care)
|
- [`CheckOwnMonAnywhere` does not check the Day-Care](#checkownmonanywhere-does-not-check-the-day-care)
|
||||||
|
- [The unused `phonecall` script command may crash](#the-unused-phonecall-script-command-may-crash)
|
||||||
- [Internal engine routines](#internal-engine-routines)
|
- [Internal engine routines](#internal-engine-routines)
|
||||||
- [Saves corrupted by mid-save shutoff are not handled](#saves-corrupted-by-mid-save-shutoff-are-not-handled)
|
- [Saves corrupted by mid-save shutoff are not handled](#saves-corrupted-by-mid-save-shutoff-are-not-handled)
|
||||||
- [`ScriptCall` can overflow `wScriptStack` and crash](#scriptcall-can-overflow-wscriptstack-and-crash)
|
- [`ScriptCall` can overflow `wScriptStack` and crash](#scriptcall-can-overflow-wscriptstack-and-crash)
|
||||||
@ -2026,6 +2027,28 @@ This bug can prevent you from talking to Eusine in Celadon City or encountering
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### The unused `phonecall` script command may crash
|
||||||
|
|
||||||
|
The `phonecall` script command calls the `PhoneCall` routine, which calls the `BrokenPlaceFarString` routine; this switches banks without being in bank 0, so it would start running arbitrary data as code.
|
||||||
|
|
||||||
|
**Fix:** Edit `PhoneCall.CallerTextboxWithName` in [engine/phone/phone.asm](https://github.com/pret/pokecrystal/blob/master/engine/phone/phone.asm):
|
||||||
|
|
||||||
|
```diff
|
||||||
|
- ld a, [wPhoneScriptBank]
|
||||||
|
- ld b, a
|
||||||
|
ld a, [wPhoneCaller]
|
||||||
|
ld e, a
|
||||||
|
ld a, [wPhoneCaller + 1]
|
||||||
|
ld d, a
|
||||||
|
- call BrokenPlaceFarString
|
||||||
|
+ ld a, [wPhoneScriptBank]
|
||||||
|
+ call PlaceFarString
|
||||||
|
ret
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also delete the now-unused `BrokenPlaceFarString` routine.
|
||||||
|
|
||||||
|
|
||||||
## Internal engine routines
|
## Internal engine routines
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,7 +93,8 @@ GetRemainingSpaceInPhoneList:
|
|||||||
|
|
||||||
INCLUDE "data/phone/permanent_numbers.asm"
|
INCLUDE "data/phone/permanent_numbers.asm"
|
||||||
|
|
||||||
FarPlaceString:
|
BrokenPlaceFarString:
|
||||||
|
; This routine is not in bank 0 and will fail or crash if called.
|
||||||
ldh a, [hROMBank]
|
ldh a, [hROMBank]
|
||||||
push af
|
push af
|
||||||
ld a, b
|
ld a, b
|
||||||
@ -455,14 +456,14 @@ RingTwice_StartCall:
|
|||||||
.Ring:
|
.Ring:
|
||||||
call Phone_StartRinging
|
call Phone_StartRinging
|
||||||
call Phone_Wait20Frames
|
call Phone_Wait20Frames
|
||||||
call Phone_CallerTextboxWithName
|
call .CallerTextboxWithName
|
||||||
call Phone_Wait20Frames
|
call Phone_Wait20Frames
|
||||||
call Phone_CallerTextbox
|
call Phone_CallerTextbox
|
||||||
call Phone_Wait20Frames
|
call Phone_Wait20Frames
|
||||||
call Phone_CallerTextboxWithName
|
call .CallerTextboxWithName
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Phone_CallerTextboxWithName:
|
.CallerTextboxWithName:
|
||||||
ld a, [wCurCaller]
|
ld a, [wCurCaller]
|
||||||
ld b, a
|
ld b, a
|
||||||
call Phone_TextboxWithName
|
call Phone_TextboxWithName
|
||||||
@ -475,22 +476,22 @@ PhoneCall::
|
|||||||
ld [wPhoneCaller], a
|
ld [wPhoneCaller], a
|
||||||
ld a, d
|
ld a, d
|
||||||
ld [wPhoneCaller + 1], a
|
ld [wPhoneCaller + 1], a
|
||||||
call Phone_FirstOfTwoRings
|
call .Ring
|
||||||
call Phone_FirstOfTwoRings
|
call .Ring
|
||||||
farcall StubbedTrainerRankings_PhoneCalls
|
farcall StubbedTrainerRankings_PhoneCalls
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Phone_FirstOfTwoRings:
|
.Ring:
|
||||||
call Phone_StartRinging
|
call Phone_StartRinging
|
||||||
call Phone_Wait20Frames
|
call Phone_Wait20Frames
|
||||||
call Phone_CallerTextboxWithName2
|
call .CallerTextboxWithName
|
||||||
call Phone_Wait20Frames
|
call Phone_Wait20Frames
|
||||||
call Phone_CallerTextbox
|
call Phone_CallerTextbox
|
||||||
call Phone_Wait20Frames
|
call Phone_Wait20Frames
|
||||||
call Phone_CallerTextboxWithName2
|
call .CallerTextboxWithName
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Phone_CallerTextboxWithName2:
|
.CallerTextboxWithName:
|
||||||
call Phone_CallerTextbox
|
call Phone_CallerTextbox
|
||||||
hlcoord 1, 2
|
hlcoord 1, 2
|
||||||
ld [hl], "☎"
|
ld [hl], "☎"
|
||||||
@ -502,7 +503,7 @@ Phone_CallerTextboxWithName2:
|
|||||||
ld e, a
|
ld e, a
|
||||||
ld a, [wPhoneCaller + 1]
|
ld a, [wPhoneCaller + 1]
|
||||||
ld d, a
|
ld d, a
|
||||||
call FarPlaceString
|
call BrokenPlaceFarString
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Phone_NoSignal:
|
Phone_NoSignal:
|
||||||
|
@ -86,7 +86,7 @@ DisplayDexEntry:
|
|||||||
ld a, b
|
ld a, b
|
||||||
push af
|
push af
|
||||||
hlcoord 9, 5
|
hlcoord 9, 5
|
||||||
call FarString ; dex species
|
call PlaceFarString ; dex species
|
||||||
ld h, b
|
ld h, b
|
||||||
ld l, c
|
ld l, c
|
||||||
push de
|
push de
|
||||||
@ -182,7 +182,7 @@ DisplayDexEntry:
|
|||||||
pop af
|
pop af
|
||||||
hlcoord 2, 11
|
hlcoord 2, 11
|
||||||
push af
|
push af
|
||||||
call FarString
|
call PlaceFarString
|
||||||
pop bc
|
pop bc
|
||||||
ld a, [wPokedexStatus]
|
ld a, [wPokedexStatus]
|
||||||
or a ; check for page 2
|
or a ; check for page 2
|
||||||
@ -211,7 +211,7 @@ DisplayDexEntry:
|
|||||||
inc de
|
inc de
|
||||||
pop af
|
pop af
|
||||||
hlcoord 2, 11
|
hlcoord 2, 11
|
||||||
call FarString
|
call PlaceFarString
|
||||||
ret
|
ret
|
||||||
|
|
||||||
POKeString: ; unreferenced
|
POKeString: ; unreferenced
|
||||||
|
@ -37,7 +37,7 @@ PrintPage1:
|
|||||||
pop af
|
pop af
|
||||||
ld a, b
|
ld a, b
|
||||||
hlcoord 1, 11, wPrinterTilemapBuffer
|
hlcoord 1, 11, wPrinterTilemapBuffer
|
||||||
call nz, FarString
|
call nz, PlaceFarString
|
||||||
hlcoord 19, 0, wPrinterTilemapBuffer
|
hlcoord 19, 0, wPrinterTilemapBuffer
|
||||||
ld [hl], $35
|
ld [hl], $35
|
||||||
ld de, SCREEN_WIDTH
|
ld de, SCREEN_WIDTH
|
||||||
@ -86,7 +86,7 @@ PrintPage2:
|
|||||||
pop af
|
pop af
|
||||||
hlcoord 1, 1, wPrinterTilemapBuffer
|
hlcoord 1, 1, wPrinterTilemapBuffer
|
||||||
ld a, b
|
ld a, b
|
||||||
call nz, FarString
|
call nz, PlaceFarString
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.FillColumn:
|
.FillColumn:
|
||||||
|
@ -567,7 +567,7 @@ PlacePrinterStatusString:
|
|||||||
ld d, [hl]
|
ld d, [hl]
|
||||||
hlcoord 1, 7
|
hlcoord 1, 7
|
||||||
ld a, BANK(GBPrinterStrings)
|
ld a, BANK(GBPrinterStrings)
|
||||||
call FarString
|
call PlaceFarString
|
||||||
hlcoord 2, 15
|
hlcoord 2, 15
|
||||||
ld de, String_PressBToCancel
|
ld de, String_PressBToCancel
|
||||||
call PlaceString
|
call PlaceString
|
||||||
@ -600,7 +600,7 @@ PlacePrinterStatusStringBorderless: ; unreferenced
|
|||||||
ld d, [hl]
|
ld d, [hl]
|
||||||
hlcoord 4, 7
|
hlcoord 4, 7
|
||||||
ld a, BANK(GBPrinterStrings)
|
ld a, BANK(GBPrinterStrings)
|
||||||
call FarString
|
call PlaceFarString
|
||||||
hlcoord 4, 15
|
hlcoord 4, 15
|
||||||
ld de, String_PressBToCancel
|
ld de, String_PressBToCancel
|
||||||
call PlaceString
|
call PlaceString
|
||||||
|
@ -640,7 +640,7 @@ UnloadBlinkingCursor::
|
|||||||
ldcoord_a 18, 17
|
ldcoord_a 18, 17
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FarString::
|
PlaceFarString::
|
||||||
ld b, a
|
ld b, a
|
||||||
ldh a, [hROMBank]
|
ldh a, [hROMBank]
|
||||||
push af
|
push af
|
||||||
|
Loading…
Reference in New Issue
Block a user