mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
Move more contiguous related code blocks from main.asm to engine/ and events/
This commit is contained in:
parent
606817f18b
commit
1038ebca5e
@ -1,4 +1,5 @@
|
|||||||
; MoveDescriptions: ; 2cb52
|
MoveDescriptions:: ; 2cb52
|
||||||
|
; entries correspond to move ids (see constants/move_constants.asm)
|
||||||
dw PoundDescription
|
dw PoundDescription
|
||||||
dw KarateChopDescription
|
dw KarateChopDescription
|
||||||
dw DoubleslapDescription
|
dw DoubleslapDescription
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
MoveEffects: ; 2732e
|
||||||
|
|
||||||
NormalHit:
|
NormalHit:
|
||||||
checkobedience
|
checkobedience
|
||||||
usedmovetext
|
usedmovetext
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
MoveEffectsPointers: ; 271f4
|
||||||
; entries correspond to EFFECT_* constants
|
; entries correspond to EFFECT_* constants
|
||||||
dw NormalHit
|
dw NormalHit
|
||||||
dw DoSleep
|
dw DoSleep
|
||||||
|
@ -862,3 +862,12 @@ endm
|
|||||||
jr nz, .row
|
jr nz, .row
|
||||||
ret
|
ret
|
||||||
; 8c7c9 (23:47c9)
|
; 8c7c9 (23:47c9)
|
||||||
|
|
||||||
|
Function8c7c9:
|
||||||
|
; XXX
|
||||||
|
ld a, $1
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
call WaitBGMap
|
||||||
|
xor a
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
ret
|
247
engine/caught_data.asm
Normal file
247
engine/caught_data.asm
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
CheckPartyFullAfterContest: ; 4d9e5
|
||||||
|
ld a, [wContestMon]
|
||||||
|
and a
|
||||||
|
jp z, .DidntCatchAnything
|
||||||
|
ld [CurPartySpecies], a
|
||||||
|
ld [CurSpecies], a
|
||||||
|
call GetBaseData
|
||||||
|
ld hl, PartyCount
|
||||||
|
ld a, [hl]
|
||||||
|
cp 6
|
||||||
|
jp nc, .TryAddToBox
|
||||||
|
inc a
|
||||||
|
ld [hl], a
|
||||||
|
ld c, a
|
||||||
|
ld b, $0
|
||||||
|
add hl, bc
|
||||||
|
ld a, [wContestMon]
|
||||||
|
ld [hli], a
|
||||||
|
ld [CurSpecies], a
|
||||||
|
ld a, $ff
|
||||||
|
ld [hl], a
|
||||||
|
ld hl, PartyMon1Species
|
||||||
|
ld a, [PartyCount]
|
||||||
|
dec a
|
||||||
|
ld bc, PARTYMON_STRUCT_LENGTH
|
||||||
|
call AddNTimes
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
ld hl, wContestMon
|
||||||
|
ld bc, PARTYMON_STRUCT_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
ld a, [PartyCount]
|
||||||
|
dec a
|
||||||
|
ld hl, PartyMonOT
|
||||||
|
call SkipNames
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
ld hl, PlayerName
|
||||||
|
call CopyBytes
|
||||||
|
ld a, [CurPartySpecies]
|
||||||
|
ld [wd265], a
|
||||||
|
call GetPokemonName
|
||||||
|
ld hl, StringBuffer1
|
||||||
|
ld de, wMonOrItemNameBuffer
|
||||||
|
ld bc, PKMN_NAME_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
call GiveANickname_YesNo
|
||||||
|
jr c, .Party_SkipNickname
|
||||||
|
ld a, [PartyCount]
|
||||||
|
dec a
|
||||||
|
ld [CurPartyMon], a
|
||||||
|
xor a
|
||||||
|
ld [MonType], a
|
||||||
|
ld de, wMonOrItemNameBuffer
|
||||||
|
callab InitNickname
|
||||||
|
|
||||||
|
.Party_SkipNickname:
|
||||||
|
ld a, [PartyCount]
|
||||||
|
dec a
|
||||||
|
ld hl, PartyMonNicknames
|
||||||
|
call SkipNames
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
ld hl, wMonOrItemNameBuffer
|
||||||
|
call CopyBytes
|
||||||
|
ld a, [PartyCount]
|
||||||
|
dec a
|
||||||
|
ld hl, PartyMon1Level
|
||||||
|
call GetPartyLocation
|
||||||
|
ld a, [hl]
|
||||||
|
ld [CurPartyLevel], a
|
||||||
|
call SetCaughtData
|
||||||
|
ld a, [PartyCount]
|
||||||
|
dec a
|
||||||
|
ld hl, PartyMon1CaughtLocation
|
||||||
|
call GetPartyLocation
|
||||||
|
ld a, [hl]
|
||||||
|
and $80
|
||||||
|
ld b, $13
|
||||||
|
or b
|
||||||
|
ld [hl], a
|
||||||
|
xor a
|
||||||
|
ld [wContestMon], a
|
||||||
|
and a
|
||||||
|
ld [ScriptVar], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.TryAddToBox: ; 4daa3
|
||||||
|
ld a, BANK(sBoxCount)
|
||||||
|
call GetSRAMBank
|
||||||
|
ld hl, sBoxCount
|
||||||
|
ld a, [hl]
|
||||||
|
cp MONS_PER_BOX
|
||||||
|
call CloseSRAM
|
||||||
|
jr nc, .BoxFull
|
||||||
|
xor a
|
||||||
|
ld [CurPartyMon], a
|
||||||
|
ld hl, wContestMon
|
||||||
|
ld de, wBufferMon
|
||||||
|
ld bc, BOXMON_STRUCT_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
ld hl, PlayerName
|
||||||
|
ld de, wBufferMonOT
|
||||||
|
ld bc, NAME_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
callab InsertPokemonIntoBox
|
||||||
|
ld a, [CurPartySpecies]
|
||||||
|
ld [wd265], a
|
||||||
|
call GetPokemonName
|
||||||
|
call GiveANickname_YesNo
|
||||||
|
ld hl, StringBuffer1
|
||||||
|
jr c, .Box_SkipNickname
|
||||||
|
ld a, BOXMON
|
||||||
|
ld [MonType], a
|
||||||
|
ld de, wMonOrItemNameBuffer
|
||||||
|
callab InitNickname
|
||||||
|
ld hl, wMonOrItemNameBuffer
|
||||||
|
|
||||||
|
.Box_SkipNickname:
|
||||||
|
ld a, BANK(sBoxMonNicknames)
|
||||||
|
call GetSRAMBank
|
||||||
|
ld de, sBoxMonNicknames
|
||||||
|
ld bc, PKMN_NAME_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
call CloseSRAM
|
||||||
|
|
||||||
|
.BoxFull:
|
||||||
|
ld a, BANK(sBoxMon1Level)
|
||||||
|
call GetSRAMBank
|
||||||
|
ld a, [sBoxMon1Level]
|
||||||
|
ld [CurPartyLevel], a
|
||||||
|
call CloseSRAM
|
||||||
|
call SetBoxMonCaughtData
|
||||||
|
ld a, BANK(sBoxMon1CaughtLocation)
|
||||||
|
call GetSRAMBank
|
||||||
|
ld hl, sBoxMon1CaughtLocation
|
||||||
|
ld a, [hl]
|
||||||
|
and $80
|
||||||
|
ld b, $13
|
||||||
|
or b
|
||||||
|
ld [hl], a
|
||||||
|
call CloseSRAM
|
||||||
|
xor a
|
||||||
|
ld [wContestMon], a
|
||||||
|
ld a, $1
|
||||||
|
ld [ScriptVar], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.DidntCatchAnything: ; 4db35
|
||||||
|
ld a, $2
|
||||||
|
ld [ScriptVar], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
GiveANickname_YesNo: ; 4db3b
|
||||||
|
ld hl, TextJump_GiveANickname
|
||||||
|
call PrintText
|
||||||
|
jp YesNoBox
|
||||||
|
|
||||||
|
TextJump_GiveANickname: ; 0x4db44
|
||||||
|
; Give a nickname to the @ you received?
|
||||||
|
text_jump UnknownText_0x1c12fc
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
SetCaughtData: ; 4db49
|
||||||
|
ld a, [PartyCount]
|
||||||
|
dec a
|
||||||
|
ld hl, PartyMon1CaughtLevel
|
||||||
|
call GetPartyLocation
|
||||||
|
SetBoxmonOrEggmonCaughtData: ; 4db53
|
||||||
|
ld a, [TimeOfDay]
|
||||||
|
inc a
|
||||||
|
rrca
|
||||||
|
rrca
|
||||||
|
ld b, a
|
||||||
|
ld a, [CurPartyLevel]
|
||||||
|
or b
|
||||||
|
ld [hli], a
|
||||||
|
ld a, [MapGroup]
|
||||||
|
ld b, a
|
||||||
|
ld a, [MapNumber]
|
||||||
|
ld c, a
|
||||||
|
cp MAP_POKECENTER_2F
|
||||||
|
jr nz, .NotPokecenter2F
|
||||||
|
ld a, b
|
||||||
|
cp GROUP_POKECENTER_2F
|
||||||
|
jr nz, .NotPokecenter2F
|
||||||
|
|
||||||
|
ld a, [BackupMapGroup]
|
||||||
|
ld b, a
|
||||||
|
ld a, [BackupMapNumber]
|
||||||
|
ld c, a
|
||||||
|
|
||||||
|
.NotPokecenter2F:
|
||||||
|
call GetWorldMapLocation
|
||||||
|
ld b, a
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
rrca
|
||||||
|
or b
|
||||||
|
ld [hl], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
SetBoxMonCaughtData: ; 4db83
|
||||||
|
ld a, BANK(sBoxMon1CaughtLevel)
|
||||||
|
call GetSRAMBank
|
||||||
|
ld hl, sBoxMon1CaughtLevel
|
||||||
|
call SetBoxmonOrEggmonCaughtData
|
||||||
|
call CloseSRAM
|
||||||
|
ret
|
||||||
|
|
||||||
|
SetGiftBoxMonCaughtData: ; 4db92
|
||||||
|
push bc
|
||||||
|
ld a, BANK(sBoxMon1CaughtLevel)
|
||||||
|
call GetSRAMBank
|
||||||
|
ld hl, sBoxMon1CaughtLevel
|
||||||
|
pop bc
|
||||||
|
call SetGiftMonCaughtData
|
||||||
|
call CloseSRAM
|
||||||
|
ret
|
||||||
|
|
||||||
|
SetGiftPartyMonCaughtData: ; 4dba3
|
||||||
|
ld a, [PartyCount]
|
||||||
|
dec a
|
||||||
|
ld hl, PartyMon1CaughtLevel
|
||||||
|
push bc
|
||||||
|
call GetPartyLocation
|
||||||
|
pop bc
|
||||||
|
SetGiftMonCaughtData: ; 4dbaf
|
||||||
|
xor a
|
||||||
|
ld [hli], a
|
||||||
|
ld a, $7e
|
||||||
|
rrc b
|
||||||
|
or b
|
||||||
|
ld [hl], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
SetEggMonCaughtData: ; 4dbb8 (13:5bb8)
|
||||||
|
ld a, [CurPartyMon]
|
||||||
|
ld hl, PartyMon1CaughtLevel
|
||||||
|
call GetPartyLocation
|
||||||
|
ld a, [CurPartyLevel]
|
||||||
|
push af
|
||||||
|
ld a, $1
|
||||||
|
ld [CurPartyLevel], a
|
||||||
|
call SetBoxmonOrEggmonCaughtData
|
||||||
|
pop af
|
||||||
|
ld [CurPartyLevel], a
|
||||||
|
ret
|
74
engine/check_nick_errors.asm
Normal file
74
engine/check_nick_errors.asm
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
CheckNickErrors:: ; 669f
|
||||||
|
; error-check monster nick before use
|
||||||
|
; must be a peace offering to gamesharkers
|
||||||
|
|
||||||
|
; input: de = nick location
|
||||||
|
|
||||||
|
push bc
|
||||||
|
push de
|
||||||
|
ld b, PKMN_NAME_LENGTH
|
||||||
|
|
||||||
|
.checkchar
|
||||||
|
; end of nick?
|
||||||
|
ld a, [de]
|
||||||
|
cp "@" ; terminator
|
||||||
|
jr z, .end
|
||||||
|
|
||||||
|
; check if this char is a text command
|
||||||
|
ld hl, .textcommands
|
||||||
|
dec hl
|
||||||
|
.loop
|
||||||
|
; next entry
|
||||||
|
inc hl
|
||||||
|
; reached end of commands table?
|
||||||
|
ld a, [hl]
|
||||||
|
cp -1
|
||||||
|
jr z, .done
|
||||||
|
|
||||||
|
; is the current char between this value (inclusive)...
|
||||||
|
ld a, [de]
|
||||||
|
cp [hl]
|
||||||
|
inc hl
|
||||||
|
jr c, .loop
|
||||||
|
; ...and this one?
|
||||||
|
cp [hl]
|
||||||
|
jr nc, .loop
|
||||||
|
|
||||||
|
; replace it with a "?"
|
||||||
|
ld a, "?"
|
||||||
|
ld [de], a
|
||||||
|
jr .loop
|
||||||
|
|
||||||
|
.done
|
||||||
|
; next char
|
||||||
|
inc de
|
||||||
|
; reached end of nick without finding a terminator?
|
||||||
|
dec b
|
||||||
|
jr nz, .checkchar
|
||||||
|
|
||||||
|
; change nick to "?@"
|
||||||
|
pop de
|
||||||
|
push de
|
||||||
|
ld a, "?"
|
||||||
|
ld [de], a
|
||||||
|
inc de
|
||||||
|
ld a, "@"
|
||||||
|
ld [de], a
|
||||||
|
.end
|
||||||
|
; if the nick has any errors at this point it's out of our hands
|
||||||
|
pop de
|
||||||
|
pop bc
|
||||||
|
ret
|
||||||
|
|
||||||
|
.textcommands ; 66cf
|
||||||
|
; table defining which characters are actually text commands
|
||||||
|
; format:
|
||||||
|
; ≥ <
|
||||||
|
db "<START>", TX_BOX + 1
|
||||||
|
db "<PLAY_G>", $18 + 1
|
||||||
|
db $1d, "%" + 1
|
||||||
|
db $35, "<GREEN>" + 1
|
||||||
|
db "<ENEMY>", "<ENEMY>" + 1
|
||||||
|
db "<MOM>", "<TM>" + 1
|
||||||
|
db "<ROCKET>", "┘" + 1
|
||||||
|
db -1 ; end
|
19
engine/check_time.asm
Normal file
19
engine/check_time.asm
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
CheckTime:: ; c000
|
||||||
|
ld a, [TimeOfDay]
|
||||||
|
ld hl, TimeOfDayTable
|
||||||
|
ld de, 2
|
||||||
|
call IsInArray
|
||||||
|
inc hl
|
||||||
|
ld c, [hl]
|
||||||
|
ret c
|
||||||
|
|
||||||
|
xor a
|
||||||
|
ld c, a
|
||||||
|
ret
|
||||||
|
|
||||||
|
TimeOfDayTable: ; c012
|
||||||
|
db MORN_F, MORN
|
||||||
|
db DAY_F, DAY
|
||||||
|
db NITE_F, NITE
|
||||||
|
db NITE_F, NITE
|
||||||
|
db -1
|
29
engine/collision_stdscripts.asm
Normal file
29
engine/collision_stdscripts.asm
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
CheckFacingTileForStd:: ; 1365b
|
||||||
|
; Checks to see if the tile you're facing has a std script associated with it. If so, executes the script and returns carry.
|
||||||
|
ld a, c
|
||||||
|
ld de, 3
|
||||||
|
ld hl, TileCollisionStdScripts
|
||||||
|
call IsInArray
|
||||||
|
jr nc, .notintable
|
||||||
|
|
||||||
|
ld a, jumpstd_command
|
||||||
|
ld [wJumpStdScriptBuffer], a
|
||||||
|
inc hl
|
||||||
|
ld a, [hli]
|
||||||
|
ld [wJumpStdScriptBuffer + 1], a
|
||||||
|
ld a, [hli]
|
||||||
|
ld [wJumpStdScriptBuffer + 2], a
|
||||||
|
ld a, BANK(Script_JumpStdFromRAM)
|
||||||
|
ld hl, Script_JumpStdFromRAM
|
||||||
|
call CallScript
|
||||||
|
scf
|
||||||
|
ret
|
||||||
|
|
||||||
|
.notintable
|
||||||
|
xor a
|
||||||
|
ret
|
||||||
|
|
||||||
|
INCLUDE "data/collision_stdscripts.asm"
|
||||||
|
|
||||||
|
Script_JumpStdFromRAM: ; 0x1369a
|
||||||
|
jump wJumpStdScriptBuffer
|
80
engine/consume_held_item.asm
Normal file
80
engine/consume_held_item.asm
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
ConsumeHeldItem: ; 27192
|
||||||
|
push hl
|
||||||
|
push de
|
||||||
|
push bc
|
||||||
|
ld a, [hBattleTurn]
|
||||||
|
and a
|
||||||
|
ld hl, OTPartyMon1Item
|
||||||
|
ld de, EnemyMonItem
|
||||||
|
ld a, [CurOTMon]
|
||||||
|
jr z, .theirturn
|
||||||
|
ld hl, PartyMon1Item
|
||||||
|
ld de, BattleMonItem
|
||||||
|
ld a, [CurBattleMon]
|
||||||
|
|
||||||
|
.theirturn
|
||||||
|
push hl
|
||||||
|
push af
|
||||||
|
ld a, [de]
|
||||||
|
ld b, a
|
||||||
|
callba GetItemHeldEffect
|
||||||
|
ld hl, .ConsumableEffects
|
||||||
|
.loop
|
||||||
|
ld a, [hli]
|
||||||
|
cp b
|
||||||
|
jr z, .ok
|
||||||
|
inc a
|
||||||
|
jr nz, .loop
|
||||||
|
pop af
|
||||||
|
pop hl
|
||||||
|
pop bc
|
||||||
|
pop de
|
||||||
|
pop hl
|
||||||
|
ret
|
||||||
|
|
||||||
|
.ok
|
||||||
|
xor a
|
||||||
|
ld [de], a
|
||||||
|
pop af
|
||||||
|
pop hl
|
||||||
|
call GetPartyLocation
|
||||||
|
ld a, [hBattleTurn]
|
||||||
|
and a
|
||||||
|
jr nz, .ourturn
|
||||||
|
ld a, [wBattleMode]
|
||||||
|
dec a
|
||||||
|
jr z, .done
|
||||||
|
|
||||||
|
.ourturn
|
||||||
|
ld [hl], $0
|
||||||
|
|
||||||
|
.done
|
||||||
|
pop bc
|
||||||
|
pop de
|
||||||
|
pop hl
|
||||||
|
ret
|
||||||
|
|
||||||
|
.ConsumableEffects: ; 271de
|
||||||
|
; Consumable items?
|
||||||
|
db HELD_BERRY
|
||||||
|
db HELD_2
|
||||||
|
db HELD_5
|
||||||
|
db HELD_HEAL_POISON
|
||||||
|
db HELD_HEAL_FREEZE
|
||||||
|
db HELD_HEAL_BURN
|
||||||
|
db HELD_HEAL_SLEEP
|
||||||
|
db HELD_HEAL_PARALYZE
|
||||||
|
db HELD_HEAL_STATUS
|
||||||
|
db HELD_30
|
||||||
|
db HELD_ATTACK_UP
|
||||||
|
db HELD_DEFENSE_UP
|
||||||
|
db HELD_SPEED_UP
|
||||||
|
db HELD_SP_ATTACK_UP
|
||||||
|
db HELD_SP_DEFENSE_UP
|
||||||
|
db HELD_ACCURACY_UP
|
||||||
|
db HELD_EVASION_UP
|
||||||
|
db HELD_38
|
||||||
|
db HELD_71
|
||||||
|
db HELD_ESCAPE
|
||||||
|
db HELD_CRITICAL_UP
|
||||||
|
db -1
|
@ -612,3 +612,13 @@ InitMG_Mobile_LinkTradePalMap: ; 49856
|
|||||||
call _InitMG_Mobile_LinkTradePalMap
|
call _InitMG_Mobile_LinkTradePalMap
|
||||||
ret
|
ret
|
||||||
; 4985a
|
; 4985a
|
||||||
|
|
||||||
|
Unknown_4985a: ; unreferenced
|
||||||
|
db $ab, $03, $57, $24, $ac, $0e, $13, $32
|
||||||
|
db $be, $30, $5b, $4c, $47, $60, $ed, $f2
|
||||||
|
db $ab, $03, $55, $26, $aa, $0a, $13, $3a
|
||||||
|
db $be, $28, $33, $24, $6e, $71, $df, $b0
|
||||||
|
db $a8, $00, $e5, $e0, $9a, $fc, $f4, $2c
|
||||||
|
db $fe, $4c, $a3, $5e, $c6, $3a, $ab, $4d
|
||||||
|
db $a8, $00, $b5, $b0, $de, $e8, $fc, $1c
|
||||||
|
db $ba, $66, $f7, $0e, $ba, $5e, $43, $bd
|
||||||
|
129
engine/european_mail.asm
Normal file
129
engine/european_mail.asm
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
IsMailEuropean: ; 1de5c8
|
||||||
|
; return 1 if French
|
||||||
|
; return 2 if German
|
||||||
|
; return 3 if Italian
|
||||||
|
; return 4 if Spanish
|
||||||
|
; return 0 if none of the above
|
||||||
|
ld c, $0
|
||||||
|
ld hl, sPartyMon1MailAuthorNationality - sPartyMon1Mail
|
||||||
|
add hl, de
|
||||||
|
ld a, [hli]
|
||||||
|
cp "E"
|
||||||
|
ret nz
|
||||||
|
ld a, [hli]
|
||||||
|
inc c
|
||||||
|
cp "F"
|
||||||
|
ret z
|
||||||
|
inc c
|
||||||
|
cp "G"
|
||||||
|
ret z
|
||||||
|
inc c
|
||||||
|
cp "I"
|
||||||
|
ret z
|
||||||
|
inc c
|
||||||
|
cp "S"
|
||||||
|
ret z
|
||||||
|
ld c, $0
|
||||||
|
ret
|
||||||
|
|
||||||
|
; The regular font.
|
||||||
|
StandardEnglishFont: ; 1de5e6
|
||||||
|
INCBIN "gfx/font/english.1bpp"
|
||||||
|
|
||||||
|
; An extended font.
|
||||||
|
FrenchGermanFont: ; 1de9e6
|
||||||
|
INCBIN "gfx/font/french_german.1bpp"
|
||||||
|
|
||||||
|
; An even more extended font.
|
||||||
|
SpanishItalianFont: ; 1dede6
|
||||||
|
INCBIN "gfx/font/spanish_italian.1bpp"
|
||||||
|
|
||||||
|
HandleFrenchGermanMail: ; 1df1e6
|
||||||
|
; called if mail is french or german
|
||||||
|
; fix 's 't 'v
|
||||||
|
ld b, sPartyMon1MailAuthor - sPartyMon1Mail
|
||||||
|
ld h, d
|
||||||
|
ld l, e
|
||||||
|
.loop
|
||||||
|
ld a, [hl]
|
||||||
|
cp $dc ; 's in french/german font
|
||||||
|
jr nz, .check_intermediate_chars
|
||||||
|
ld a, "'s"
|
||||||
|
jr .replace
|
||||||
|
|
||||||
|
.check_intermediate_chars
|
||||||
|
sub "'s"
|
||||||
|
jr c, .dont_replace
|
||||||
|
cp "'v" - "'s" + 1
|
||||||
|
jr nc, .dont_replace
|
||||||
|
add $cd
|
||||||
|
|
||||||
|
.replace
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
|
.dont_replace
|
||||||
|
inc hl
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
LireLeCourrierAnglais:
|
||||||
|
DeutenEnglischenPost: ; 1df203
|
||||||
|
; Cette fonction convertit certains des caractères anglais pour
|
||||||
|
; leur équivalent dans le jeu de caractères français.
|
||||||
|
; Diese Funktion wandelt bestimmte englische Zeichen, um ihre
|
||||||
|
; Entsprechung in der Deutschen-Zeichensatz.
|
||||||
|
ld b, sPartyMon1MailAuthor - sPartyMon1Mail
|
||||||
|
ld h, d
|
||||||
|
ld l, e
|
||||||
|
.loop
|
||||||
|
ld a, [hl]
|
||||||
|
cp "'s"
|
||||||
|
jr nz, .check_intermediate_chars
|
||||||
|
ld a, $dc
|
||||||
|
jr .replace
|
||||||
|
|
||||||
|
.check_intermediate_chars
|
||||||
|
sub $cd
|
||||||
|
jr c, .dont_replace
|
||||||
|
cp "'v" - "'s" + 1
|
||||||
|
jr nc, .dont_replace
|
||||||
|
add "'s"
|
||||||
|
|
||||||
|
.replace
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
|
.dont_replace
|
||||||
|
inc hl
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
HandleSpanishItalianMail: ; 1df220
|
||||||
|
LeerCorreosIngleses:
|
||||||
|
LeggiPostaInglese:
|
||||||
|
; This function converts certain characters between
|
||||||
|
; the English and Spanish/Italian character sets.
|
||||||
|
; Esta función convierte ciertos caracteres entre
|
||||||
|
; el juego de caracteres Inglés y Español.
|
||||||
|
; Questa funzione converte alcuni caratteri tra
|
||||||
|
; l'inglese e il set di caratteri italiani.
|
||||||
|
ld b, sPartyMon1MailAuthor - sPartyMon1Mail
|
||||||
|
ld h, d
|
||||||
|
ld l, e
|
||||||
|
.loop
|
||||||
|
ld a, [hl]
|
||||||
|
and $f0
|
||||||
|
cp $d0
|
||||||
|
jr nz, .dont_replace
|
||||||
|
ld a, [hl]
|
||||||
|
add $8
|
||||||
|
and $f
|
||||||
|
or $d0
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
|
.dont_replace
|
||||||
|
inc hl
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
162
engine/experience.asm
Normal file
162
engine/experience.asm
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
CalcLevel: ; 50e1b
|
||||||
|
ld a, [TempMonSpecies]
|
||||||
|
ld [CurSpecies], a
|
||||||
|
call GetBaseData
|
||||||
|
ld d, 1
|
||||||
|
.next_level
|
||||||
|
inc d
|
||||||
|
ld a, d
|
||||||
|
cp (MAX_LEVEL + 1) % $100
|
||||||
|
jr z, .got_level
|
||||||
|
call CalcExpAtLevel
|
||||||
|
push hl
|
||||||
|
ld hl, TempMonExp + 2
|
||||||
|
ld a, [hProduct + 3]
|
||||||
|
ld c, a
|
||||||
|
ld a, [hld]
|
||||||
|
sub c
|
||||||
|
ld a, [hProduct + 2]
|
||||||
|
ld c, a
|
||||||
|
ld a, [hld]
|
||||||
|
sbc c
|
||||||
|
ld a, [hProduct + 1]
|
||||||
|
ld c, a
|
||||||
|
ld a, [hl]
|
||||||
|
sbc c
|
||||||
|
pop hl
|
||||||
|
jr nc, .next_level
|
||||||
|
|
||||||
|
.got_level
|
||||||
|
dec d
|
||||||
|
ret
|
||||||
|
|
||||||
|
CalcExpAtLevel: ; 50e47
|
||||||
|
; (a/b)*n**3 + c*n**2 + d*n - e
|
||||||
|
ld a, [BaseGrowthRate]
|
||||||
|
add a
|
||||||
|
add a
|
||||||
|
ld c, a
|
||||||
|
ld b, 0
|
||||||
|
ld hl, GrowthRates
|
||||||
|
add hl, bc
|
||||||
|
; Cube the level
|
||||||
|
call .LevelSquared
|
||||||
|
ld a, d
|
||||||
|
ld [hMultiplier], a
|
||||||
|
call Multiply
|
||||||
|
|
||||||
|
; Multiply by a
|
||||||
|
ld a, [hl]
|
||||||
|
and $f0
|
||||||
|
swap a
|
||||||
|
ld [hMultiplier], a
|
||||||
|
call Multiply
|
||||||
|
; Divide by b
|
||||||
|
ld a, [hli]
|
||||||
|
and $f
|
||||||
|
ld [hDivisor], a
|
||||||
|
ld b, 4
|
||||||
|
call Divide
|
||||||
|
; Push the cubic term to the stack
|
||||||
|
ld a, [hQuotient + 0]
|
||||||
|
push af
|
||||||
|
ld a, [hQuotient + 1]
|
||||||
|
push af
|
||||||
|
ld a, [hQuotient + 2]
|
||||||
|
push af
|
||||||
|
; Square the level and multiply by the lower 7 bits of c
|
||||||
|
call .LevelSquared
|
||||||
|
ld a, [hl]
|
||||||
|
and $7f
|
||||||
|
ld [hMultiplier], a
|
||||||
|
call Multiply
|
||||||
|
; Push the absolute value of the quadratic term to the stack
|
||||||
|
ld a, [hProduct + 1]
|
||||||
|
push af
|
||||||
|
ld a, [hProduct + 2]
|
||||||
|
push af
|
||||||
|
ld a, [hProduct + 3]
|
||||||
|
push af
|
||||||
|
ld a, [hli]
|
||||||
|
push af
|
||||||
|
; Multiply the level by d
|
||||||
|
xor a
|
||||||
|
ld [hMultiplicand + 0], a
|
||||||
|
ld [hMultiplicand + 1], a
|
||||||
|
ld a, d
|
||||||
|
ld [hMultiplicand + 2], a
|
||||||
|
ld a, [hli]
|
||||||
|
ld [hMultiplier], a
|
||||||
|
call Multiply
|
||||||
|
; Subtract e
|
||||||
|
ld b, [hl]
|
||||||
|
ld a, [hProduct + 3]
|
||||||
|
sub b
|
||||||
|
ld [hMultiplicand + 2], a
|
||||||
|
ld b, $0
|
||||||
|
ld a, [hProduct + 2]
|
||||||
|
sbc b
|
||||||
|
ld [hMultiplicand + 1], a
|
||||||
|
ld a, [hProduct + 1]
|
||||||
|
sbc b
|
||||||
|
ld [hMultiplicand], a
|
||||||
|
; If bit 7 of c is set, c is negative; otherwise, it's positive
|
||||||
|
pop af
|
||||||
|
and $80
|
||||||
|
jr nz, .subtract
|
||||||
|
; Add c*n**2 to (d*n - e)
|
||||||
|
pop bc
|
||||||
|
ld a, [hProduct + 3]
|
||||||
|
add b
|
||||||
|
ld [hMultiplicand + 2], a
|
||||||
|
pop bc
|
||||||
|
ld a, [hProduct + 2]
|
||||||
|
adc b
|
||||||
|
ld [hMultiplicand + 1], a
|
||||||
|
pop bc
|
||||||
|
ld a, [hProduct + 1]
|
||||||
|
adc b
|
||||||
|
ld [hMultiplicand], a
|
||||||
|
jr .done_quadratic
|
||||||
|
|
||||||
|
.subtract
|
||||||
|
; Subtract c*n**2 from (d*n - e)
|
||||||
|
pop bc
|
||||||
|
ld a, [hProduct + 3]
|
||||||
|
sub b
|
||||||
|
ld [hMultiplicand + 2], a
|
||||||
|
pop bc
|
||||||
|
ld a, [hProduct + 2]
|
||||||
|
sbc b
|
||||||
|
ld [hMultiplicand + 1], a
|
||||||
|
pop bc
|
||||||
|
ld a, [hProduct + 1]
|
||||||
|
sbc b
|
||||||
|
ld [hMultiplicand], a
|
||||||
|
|
||||||
|
.done_quadratic
|
||||||
|
; Add (a/b)*n**3 to (d*n - e +/- c*n**2)
|
||||||
|
pop bc
|
||||||
|
ld a, [hProduct + 3]
|
||||||
|
add b
|
||||||
|
ld [hMultiplicand + 2], a
|
||||||
|
pop bc
|
||||||
|
ld a, [hProduct + 2]
|
||||||
|
adc b
|
||||||
|
ld [hMultiplicand + 1], a
|
||||||
|
pop bc
|
||||||
|
ld a, [hProduct + 1]
|
||||||
|
adc b
|
||||||
|
ld [hMultiplicand], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.LevelSquared: ; 50eed
|
||||||
|
xor a
|
||||||
|
ld [hMultiplicand + 0], a
|
||||||
|
ld [hMultiplicand + 1], a
|
||||||
|
ld a, d
|
||||||
|
ld [hMultiplicand + 2], a
|
||||||
|
ld [hMultiplier], a
|
||||||
|
jp Multiply
|
||||||
|
|
||||||
|
INCLUDE "data/growth_rates.asm"
|
103
engine/init_map.asm
Normal file
103
engine/init_map.asm
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
ReanchorBGMap_NoOAMUpdate:: ; 6454
|
||||||
|
call DelayFrame
|
||||||
|
ld a, [hOAMUpdate]
|
||||||
|
push af
|
||||||
|
|
||||||
|
ld a, $1
|
||||||
|
ld [hOAMUpdate], a
|
||||||
|
ld a, [hBGMapMode]
|
||||||
|
push af
|
||||||
|
xor a
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
|
||||||
|
call .ReanchorBGMap
|
||||||
|
|
||||||
|
pop af
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
pop af
|
||||||
|
ld [hOAMUpdate], a
|
||||||
|
ld hl, VramState
|
||||||
|
set 6, [hl]
|
||||||
|
ret
|
||||||
|
|
||||||
|
.ReanchorBGMap:
|
||||||
|
xor a
|
||||||
|
ld [hLCDCPointer], a
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
ld a, $90
|
||||||
|
ld [hWY], a
|
||||||
|
call OverworldTextModeSwitch
|
||||||
|
ld a, VBGMap1 / $100
|
||||||
|
call .LoadBGMapAddrIntoHRAM
|
||||||
|
call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap
|
||||||
|
callba LoadOW_BGPal7
|
||||||
|
callba ApplyPals
|
||||||
|
ld a, $1
|
||||||
|
ld [hCGBPalUpdate], a
|
||||||
|
xor a
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
ld [hWY], a
|
||||||
|
callba HDMATransfer_FillBGMap0WithBlack ; no need to farcall
|
||||||
|
ld a, VBGMap0 / $100
|
||||||
|
call .LoadBGMapAddrIntoHRAM
|
||||||
|
xor a
|
||||||
|
ld [wBGMapAnchor], a
|
||||||
|
ld a, VBGMap0 / $100
|
||||||
|
ld [wBGMapAnchor + 1], a
|
||||||
|
xor a
|
||||||
|
ld [hSCX], a
|
||||||
|
ld [hSCY], a
|
||||||
|
call ApplyBGMapAnchorToObjects
|
||||||
|
ret
|
||||||
|
|
||||||
|
.LoadBGMapAddrIntoHRAM: ; 64b9
|
||||||
|
ld [hBGMapAddress + 1], a
|
||||||
|
xor a
|
||||||
|
ld [hBGMapAddress], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
LoadFonts_NoOAMUpdate:: ; 64bf
|
||||||
|
ld a, [hOAMUpdate]
|
||||||
|
push af
|
||||||
|
ld a, $1
|
||||||
|
ld [hOAMUpdate], a
|
||||||
|
|
||||||
|
call .LoadGFX
|
||||||
|
|
||||||
|
pop af
|
||||||
|
ld [hOAMUpdate], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.LoadGFX:
|
||||||
|
call LoadFontsExtra
|
||||||
|
ld a, $90
|
||||||
|
ld [hWY], a
|
||||||
|
call SafeUpdateSprites
|
||||||
|
call LoadStandardFont
|
||||||
|
ret
|
||||||
|
|
||||||
|
HDMATransfer_FillBGMap0WithBlack: ; 64db
|
||||||
|
ld a, [rSVBK]
|
||||||
|
push af
|
||||||
|
ld a, $6
|
||||||
|
ld [rSVBK], a
|
||||||
|
|
||||||
|
ld a, "<BLACK>" ; $60
|
||||||
|
ld hl, wDecompressScratch
|
||||||
|
ld bc, wScratchAttrMap - wDecompressScratch
|
||||||
|
call ByteFill
|
||||||
|
ld a, wDecompressScratch / $100
|
||||||
|
ld [rHDMA1], a
|
||||||
|
ld a, wDecompressScratch % $100
|
||||||
|
ld [rHDMA2], a
|
||||||
|
ld a, (VBGMap0 % $8000) / $100
|
||||||
|
ld [rHDMA3], a
|
||||||
|
ld a, (VBGMap0 % $8000) % $100
|
||||||
|
ld [rHDMA4], a
|
||||||
|
ld a, $3f
|
||||||
|
ld [hDMATransfer], a
|
||||||
|
call DelayFrame
|
||||||
|
|
||||||
|
pop af
|
||||||
|
ld [rSVBK], a
|
||||||
|
ret
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
INCLUDE "data/facings.asm"
|
INCLUDE "data/facings.asm"
|
||||||
|
|
||||||
|
|
||||||
INCLUDE "data/map_objects.asm"
|
INCLUDE "data/map_objects.asm"
|
||||||
|
|
||||||
|
|
||||||
|
70
engine/map_objects_2.asm
Normal file
70
engine/map_objects_2.asm
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
LoadObjectMasks: ; 2454f
|
||||||
|
ld hl, wObjectMasks
|
||||||
|
xor a
|
||||||
|
ld bc, NUM_OBJECTS
|
||||||
|
call ByteFill
|
||||||
|
nop
|
||||||
|
ld bc, MapObjects
|
||||||
|
ld de, wObjectMasks
|
||||||
|
xor a
|
||||||
|
.loop
|
||||||
|
push af
|
||||||
|
push bc
|
||||||
|
push de
|
||||||
|
call GetObjectTimeMask
|
||||||
|
jr c, .next
|
||||||
|
call CheckObjectFlag
|
||||||
|
.next
|
||||||
|
pop de
|
||||||
|
ld [de], a
|
||||||
|
inc de
|
||||||
|
pop bc
|
||||||
|
ld hl, OBJECT_LENGTH
|
||||||
|
add hl, bc
|
||||||
|
ld b, h
|
||||||
|
ld c, l
|
||||||
|
pop af
|
||||||
|
inc a
|
||||||
|
cp NUM_OBJECTS
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
CheckObjectFlag: ; 2457d (9:457d)
|
||||||
|
ld hl, MAPOBJECT_SPRITE
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hl]
|
||||||
|
and a
|
||||||
|
jr z, .masked
|
||||||
|
ld hl, MAPOBJECT_EVENT_FLAG
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hli]
|
||||||
|
ld e, a
|
||||||
|
ld a, [hl]
|
||||||
|
ld d, a
|
||||||
|
cp -1
|
||||||
|
jr nz, .check
|
||||||
|
ld a, e
|
||||||
|
cp -1
|
||||||
|
jr z, .unmasked
|
||||||
|
jr .masked
|
||||||
|
.check
|
||||||
|
ld b, CHECK_FLAG
|
||||||
|
call EventFlagAction
|
||||||
|
ld a, c
|
||||||
|
and a
|
||||||
|
jr nz, .masked
|
||||||
|
.unmasked
|
||||||
|
xor a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.masked
|
||||||
|
ld a, -1
|
||||||
|
scf
|
||||||
|
ret
|
||||||
|
|
||||||
|
GetObjectTimeMask: ; 245a7 (9:45a7)
|
||||||
|
call CheckObjectTime
|
||||||
|
ld a, -1
|
||||||
|
ret c
|
||||||
|
xor a
|
||||||
|
ret
|
86
engine/map_palettes.asm
Normal file
86
engine/map_palettes.asm
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
SwapTextboxPalettes:: ; 4c000
|
||||||
|
hlcoord 0, 0
|
||||||
|
decoord 0, 0, AttrMap
|
||||||
|
ld b, SCREEN_HEIGHT
|
||||||
|
.loop
|
||||||
|
push bc
|
||||||
|
ld c, SCREEN_WIDTH
|
||||||
|
.innerloop
|
||||||
|
ld a, [hl]
|
||||||
|
push hl
|
||||||
|
srl a
|
||||||
|
jr c, .UpperNybble
|
||||||
|
ld hl, TilesetPalettes
|
||||||
|
add [hl]
|
||||||
|
ld l, a
|
||||||
|
ld a, [TilesetPalettes + 1]
|
||||||
|
adc $0
|
||||||
|
ld h, a
|
||||||
|
ld a, [hl]
|
||||||
|
and $f
|
||||||
|
jr .next
|
||||||
|
|
||||||
|
.UpperNybble:
|
||||||
|
ld hl, TilesetPalettes
|
||||||
|
add [hl]
|
||||||
|
ld l, a
|
||||||
|
ld a, [TilesetPalettes + 1]
|
||||||
|
adc $0
|
||||||
|
ld h, a
|
||||||
|
ld a, [hl]
|
||||||
|
swap a
|
||||||
|
and $f
|
||||||
|
|
||||||
|
.next
|
||||||
|
pop hl
|
||||||
|
ld [de], a
|
||||||
|
res 7, [hl]
|
||||||
|
inc hl
|
||||||
|
inc de
|
||||||
|
dec c
|
||||||
|
jr nz, .innerloop
|
||||||
|
pop bc
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
ScrollBGMapPalettes:: ; 4c03f
|
||||||
|
ld hl, BGMapBuffer
|
||||||
|
ld de, BGMapPalBuffer
|
||||||
|
.loop
|
||||||
|
ld a, [hl]
|
||||||
|
push hl
|
||||||
|
srl a
|
||||||
|
jr c, .UpperNybble
|
||||||
|
|
||||||
|
; .LowerNybble
|
||||||
|
ld hl, TilesetPalettes
|
||||||
|
add [hl]
|
||||||
|
ld l, a
|
||||||
|
ld a, [TilesetPalettes + 1]
|
||||||
|
adc $0
|
||||||
|
ld h, a
|
||||||
|
ld a, [hl]
|
||||||
|
and $f
|
||||||
|
jr .next
|
||||||
|
|
||||||
|
.UpperNybble:
|
||||||
|
ld hl, TilesetPalettes
|
||||||
|
add [hl]
|
||||||
|
ld l, a
|
||||||
|
ld a, [TilesetPalettes + 1]
|
||||||
|
adc $0
|
||||||
|
ld h, a
|
||||||
|
ld a, [hl]
|
||||||
|
swap a
|
||||||
|
and $f
|
||||||
|
|
||||||
|
.next
|
||||||
|
pop hl
|
||||||
|
ld [de], a
|
||||||
|
res 7, [hl]
|
||||||
|
inc hl
|
||||||
|
inc de
|
||||||
|
dec c
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
263
engine/menu_2.asm
Normal file
263
engine/menu_2.asm
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
PlaceMenuItemName: ; 0x24ab4
|
||||||
|
push de
|
||||||
|
ld a, [MenuSelection]
|
||||||
|
ld [wNamedObjectIndexBuffer], a
|
||||||
|
call GetItemName
|
||||||
|
pop hl
|
||||||
|
call PlaceString
|
||||||
|
ret
|
||||||
|
|
||||||
|
PlaceMenuItemQuantity: ; 0x24ac3
|
||||||
|
push de
|
||||||
|
ld a, [MenuSelection]
|
||||||
|
ld [CurItem], a
|
||||||
|
callba _CheckTossableItem
|
||||||
|
ld a, [wItemAttributeParamBuffer]
|
||||||
|
pop hl
|
||||||
|
and a
|
||||||
|
jr nz, .done
|
||||||
|
ld de, $15
|
||||||
|
add hl, de
|
||||||
|
ld [hl], "×"
|
||||||
|
inc hl
|
||||||
|
ld de, MenuSelectionQuantity
|
||||||
|
lb bc, 1, 2
|
||||||
|
call PrintNum
|
||||||
|
|
||||||
|
.done
|
||||||
|
ret
|
||||||
|
|
||||||
|
PlaceMoneyTopRight: ; 24ae8
|
||||||
|
ld hl, MenuDataHeader_0x24b15
|
||||||
|
call CopyMenuDataHeader
|
||||||
|
jr PlaceMoneyDataHeader
|
||||||
|
|
||||||
|
PlaceMoneyBottomLeft: ; 24af0
|
||||||
|
ld hl, MenuDataHeader_0x24b1d
|
||||||
|
call CopyMenuDataHeader
|
||||||
|
jr PlaceMoneyDataHeader
|
||||||
|
|
||||||
|
PlaceMoneyAtTopLeftOfTextbox: ; 24af8
|
||||||
|
ld hl, MenuDataHeader_0x24b15
|
||||||
|
lb de, 0, 11
|
||||||
|
call OffsetMenuDataHeader
|
||||||
|
|
||||||
|
PlaceMoneyDataHeader: ; 24b01
|
||||||
|
call MenuBox
|
||||||
|
call MenuBoxCoord2Tile
|
||||||
|
ld de, SCREEN_WIDTH + 1
|
||||||
|
add hl, de
|
||||||
|
ld de, Money
|
||||||
|
lb bc, PRINTNUM_MONEY | 3, 6
|
||||||
|
call PrintNum
|
||||||
|
ret
|
||||||
|
|
||||||
|
MenuDataHeader_0x24b15: ; 0x24b15
|
||||||
|
db $40 ; flags
|
||||||
|
db 00, 11 ; start coords
|
||||||
|
db 02, 19 ; end coords
|
||||||
|
dw NULL
|
||||||
|
db 1 ; default option
|
||||||
|
|
||||||
|
MenuDataHeader_0x24b1d: ; 0x24b1d
|
||||||
|
db $40 ; flags
|
||||||
|
db 11, 00 ; start coords
|
||||||
|
db 13, 08 ; end coords
|
||||||
|
dw NULL
|
||||||
|
db 1 ; default option
|
||||||
|
|
||||||
|
Special_DisplayCoinCaseBalance: ; 24b25
|
||||||
|
; Place a text box of size 1x7 at 11, 0.
|
||||||
|
hlcoord 11, 0
|
||||||
|
ld b, 1
|
||||||
|
ld c, 7
|
||||||
|
call TextBox
|
||||||
|
hlcoord 12, 0
|
||||||
|
ld de, CoinString
|
||||||
|
call PlaceString
|
||||||
|
hlcoord 17, 1
|
||||||
|
ld de, ShowMoney_TerminatorString
|
||||||
|
call PlaceString
|
||||||
|
ld de, Coins
|
||||||
|
lb bc, 2, 4
|
||||||
|
hlcoord 13, 1
|
||||||
|
call PrintNum
|
||||||
|
ret
|
||||||
|
|
||||||
|
Special_DisplayMoneyAndCoinBalance: ; 24b4e
|
||||||
|
hlcoord 5, 0
|
||||||
|
ld b, 3
|
||||||
|
ld c, 13
|
||||||
|
call TextBox
|
||||||
|
hlcoord 6, 1
|
||||||
|
ld de, MoneyString
|
||||||
|
call PlaceString
|
||||||
|
hlcoord 12, 1
|
||||||
|
ld de, Money
|
||||||
|
lb bc, PRINTNUM_MONEY | 3, 6
|
||||||
|
call PrintNum
|
||||||
|
hlcoord 6, 3
|
||||||
|
ld de, CoinString
|
||||||
|
call PlaceString
|
||||||
|
hlcoord 15, 3
|
||||||
|
ld de, Coins
|
||||||
|
lb bc, 2, 4
|
||||||
|
call PrintNum
|
||||||
|
ret
|
||||||
|
|
||||||
|
MoneyString: ; 24b83
|
||||||
|
db "MONEY@"
|
||||||
|
CoinString: ; 24b89
|
||||||
|
db "COIN@"
|
||||||
|
ShowMoney_TerminatorString: ; 24b8e
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
Function24b8f: ; 24b8f
|
||||||
|
; unreferenced, related to safari?
|
||||||
|
ld hl, Options
|
||||||
|
ld a, [hl]
|
||||||
|
push af
|
||||||
|
set NO_TEXT_SCROLL, [hl]
|
||||||
|
hlcoord 0, 0
|
||||||
|
ld b, 3
|
||||||
|
ld c, 7
|
||||||
|
call TextBox
|
||||||
|
hlcoord 1, 1
|
||||||
|
ld de, wSafariTimeRemaining
|
||||||
|
lb bc, 2, 3
|
||||||
|
call PrintNum
|
||||||
|
hlcoord 4, 1
|
||||||
|
ld de, .slash_500
|
||||||
|
call PlaceString
|
||||||
|
hlcoord 1, 3
|
||||||
|
ld de, .booru_ko
|
||||||
|
call PlaceString
|
||||||
|
hlcoord 5, 3
|
||||||
|
ld de, wSafariBallsRemaining
|
||||||
|
lb bc, 1, 2
|
||||||
|
call PrintNum
|
||||||
|
pop af
|
||||||
|
ld [Options], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.slash_500 ; 24bcf
|
||||||
|
db "/500@"
|
||||||
|
.booru_ko ; 24bd4
|
||||||
|
db "ボール こ@"
|
||||||
|
|
||||||
|
StartMenu_DrawBugContestStatusBox: ; 24bdc
|
||||||
|
hlcoord 0, 0
|
||||||
|
ld b, 5
|
||||||
|
ld c, 17
|
||||||
|
call TextBox
|
||||||
|
ret
|
||||||
|
|
||||||
|
StartMenu_PrintBugContestStatus: ; 24be7
|
||||||
|
ld hl, Options
|
||||||
|
ld a, [hl]
|
||||||
|
push af
|
||||||
|
set NO_TEXT_SCROLL, [hl]
|
||||||
|
call StartMenu_DrawBugContestStatusBox
|
||||||
|
hlcoord 1, 5
|
||||||
|
ld de, .Balls_EN
|
||||||
|
call PlaceString
|
||||||
|
hlcoord 8, 5
|
||||||
|
ld de, wParkBallsRemaining
|
||||||
|
lb bc, PRINTNUM_RIGHTALIGN | 1, 2
|
||||||
|
call PrintNum
|
||||||
|
hlcoord 1, 1
|
||||||
|
ld de, .CAUGHT
|
||||||
|
call PlaceString
|
||||||
|
ld a, [wContestMon]
|
||||||
|
and a
|
||||||
|
ld de, .None
|
||||||
|
jr z, .no_contest_mon
|
||||||
|
ld [wd265], a
|
||||||
|
call GetPokemonName
|
||||||
|
|
||||||
|
.no_contest_mon
|
||||||
|
hlcoord 8, 1
|
||||||
|
call PlaceString
|
||||||
|
ld a, [wContestMon]
|
||||||
|
and a
|
||||||
|
jr z, .skip_level
|
||||||
|
hlcoord 1, 3
|
||||||
|
ld de, .LEVEL
|
||||||
|
call PlaceString
|
||||||
|
ld a, [wContestMonLevel]
|
||||||
|
ld h, b
|
||||||
|
ld l, c
|
||||||
|
inc hl
|
||||||
|
ld c, 3
|
||||||
|
call Print8BitNumRightAlign
|
||||||
|
|
||||||
|
.skip_level
|
||||||
|
pop af
|
||||||
|
ld [Options], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Balls_JP: ; 24c43
|
||||||
|
db "ボール こ@"
|
||||||
|
.CAUGHT: ; 24c4b
|
||||||
|
db "CAUGHT@"
|
||||||
|
.Balls_EN: ; 24c52
|
||||||
|
db "BALLS:@"
|
||||||
|
.None: ; 24c59
|
||||||
|
db "None@"
|
||||||
|
.LEVEL: ; 24c5e
|
||||||
|
db "LEVEL@"
|
||||||
|
|
||||||
|
FindApricornsInBag: ; 24c64
|
||||||
|
; Checks the bag for Apricorns.
|
||||||
|
ld hl, Buffer1
|
||||||
|
xor a
|
||||||
|
ld [hli], a
|
||||||
|
dec a
|
||||||
|
ld bc, 10
|
||||||
|
call ByteFill
|
||||||
|
|
||||||
|
ld hl, .ApricornBalls
|
||||||
|
.loop
|
||||||
|
ld a, [hl]
|
||||||
|
cp -1
|
||||||
|
jr z, .done
|
||||||
|
push hl
|
||||||
|
ld [CurItem], a
|
||||||
|
ld hl, NumItems
|
||||||
|
call CheckItem
|
||||||
|
pop hl
|
||||||
|
jr nc, .nope
|
||||||
|
ld a, [hl]
|
||||||
|
call .addtobuffer
|
||||||
|
.nope
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
jr .loop
|
||||||
|
|
||||||
|
.done
|
||||||
|
ld a, [Buffer1]
|
||||||
|
and a
|
||||||
|
ret nz
|
||||||
|
scf
|
||||||
|
ret
|
||||||
|
|
||||||
|
.addtobuffer ; 24c94
|
||||||
|
push hl
|
||||||
|
ld hl, Buffer1
|
||||||
|
inc [hl]
|
||||||
|
ld e, [hl]
|
||||||
|
ld d, 0
|
||||||
|
add hl, de
|
||||||
|
ld [hl], a
|
||||||
|
pop hl
|
||||||
|
ret
|
||||||
|
|
||||||
|
.ApricornBalls: ; 24ca0
|
||||||
|
db RED_APRICORN, LEVEL_BALL
|
||||||
|
db BLU_APRICORN, LURE_BALL
|
||||||
|
db YLW_APRICORN, MOON_BALL
|
||||||
|
db GRN_APRICORN, FRIEND_BALL
|
||||||
|
db WHT_APRICORN, FAST_BALL
|
||||||
|
db BLK_APRICORN, HEAVY_BALL
|
||||||
|
db PNK_APRICORN, LOVE_BALL
|
||||||
|
db -1
|
486
engine/mon_stats.asm
Normal file
486
engine/mon_stats.asm
Normal file
@ -0,0 +1,486 @@
|
|||||||
|
DrawPlayerHP: ; 50b0a
|
||||||
|
ld a, $1
|
||||||
|
jr DrawHP
|
||||||
|
|
||||||
|
DrawEnemyHP: ; 50b0e
|
||||||
|
ld a, $2
|
||||||
|
|
||||||
|
DrawHP: ; 50b10
|
||||||
|
ld [wWhichHPBar], a
|
||||||
|
push hl
|
||||||
|
push bc
|
||||||
|
; box mons have full HP
|
||||||
|
ld a, [MonType]
|
||||||
|
cp BOXMON
|
||||||
|
jr z, .at_least_1_hp
|
||||||
|
|
||||||
|
ld a, [TempMonHP]
|
||||||
|
ld b, a
|
||||||
|
ld a, [TempMonHP + 1]
|
||||||
|
ld c, a
|
||||||
|
|
||||||
|
; Any HP?
|
||||||
|
or b
|
||||||
|
jr nz, .at_least_1_hp
|
||||||
|
|
||||||
|
xor a
|
||||||
|
ld c, a
|
||||||
|
ld e, a
|
||||||
|
ld a, 6
|
||||||
|
ld d, a
|
||||||
|
jp .fainted
|
||||||
|
|
||||||
|
.at_least_1_hp
|
||||||
|
ld a, [TempMonMaxHP]
|
||||||
|
ld d, a
|
||||||
|
ld a, [TempMonMaxHP + 1]
|
||||||
|
ld e, a
|
||||||
|
ld a, [MonType]
|
||||||
|
cp BOXMON
|
||||||
|
jr nz, .not_boxmon
|
||||||
|
|
||||||
|
ld b, d
|
||||||
|
ld c, e
|
||||||
|
|
||||||
|
.not_boxmon
|
||||||
|
predef ComputeHPBarPixels
|
||||||
|
ld a, 6
|
||||||
|
ld d, a
|
||||||
|
ld c, a
|
||||||
|
|
||||||
|
.fainted
|
||||||
|
ld a, c
|
||||||
|
pop bc
|
||||||
|
ld c, a
|
||||||
|
pop hl
|
||||||
|
push de
|
||||||
|
push hl
|
||||||
|
push hl
|
||||||
|
call DrawBattleHPBar
|
||||||
|
pop hl
|
||||||
|
|
||||||
|
; Print HP
|
||||||
|
bccoord 1, 1, 0
|
||||||
|
add hl, bc
|
||||||
|
ld de, TempMonHP
|
||||||
|
ld a, [MonType]
|
||||||
|
cp BOXMON
|
||||||
|
jr nz, .not_boxmon_2
|
||||||
|
ld de, TempMonMaxHP
|
||||||
|
.not_boxmon_2
|
||||||
|
lb bc, 2, 3
|
||||||
|
call PrintNum
|
||||||
|
|
||||||
|
ld a, "/"
|
||||||
|
ld [hli], a
|
||||||
|
|
||||||
|
; Print max HP
|
||||||
|
ld de, TempMonMaxHP
|
||||||
|
lb bc, 2, 3
|
||||||
|
call PrintNum
|
||||||
|
pop hl
|
||||||
|
pop de
|
||||||
|
ret
|
||||||
|
|
||||||
|
PrintTempMonStats: ; 50b7b
|
||||||
|
; Print TempMon's stats at hl, with spacing bc.
|
||||||
|
push bc
|
||||||
|
push hl
|
||||||
|
ld de, .StatNames
|
||||||
|
call PlaceString
|
||||||
|
pop hl
|
||||||
|
pop bc
|
||||||
|
add hl, bc
|
||||||
|
ld bc, SCREEN_WIDTH
|
||||||
|
add hl, bc
|
||||||
|
ld de, TempMonAttack
|
||||||
|
lb bc, 2, 3
|
||||||
|
call .PrintStat
|
||||||
|
ld de, TempMonDefense
|
||||||
|
call .PrintStat
|
||||||
|
ld de, TempMonSpclAtk
|
||||||
|
call .PrintStat
|
||||||
|
ld de, TempMonSpclDef
|
||||||
|
call .PrintStat
|
||||||
|
ld de, TempMonSpeed
|
||||||
|
jp PrintNum
|
||||||
|
|
||||||
|
.PrintStat: ; 50bab
|
||||||
|
push hl
|
||||||
|
call PrintNum
|
||||||
|
pop hl
|
||||||
|
ld de, SCREEN_WIDTH * 2
|
||||||
|
add hl, de
|
||||||
|
ret
|
||||||
|
|
||||||
|
.StatNames: ; 50bb5
|
||||||
|
db "ATTACK"
|
||||||
|
next "DEFENSE"
|
||||||
|
next "SPCL.ATK"
|
||||||
|
next "SPCL.DEF"
|
||||||
|
next "SPEED"
|
||||||
|
next "@"
|
||||||
|
|
||||||
|
GetGender: ; 50bdd
|
||||||
|
; Return the gender of a given monster (CurPartyMon/CurOTMon/CurWildMon).
|
||||||
|
; When calling this function, a should be set to an appropriate MonType value.
|
||||||
|
|
||||||
|
; return values:
|
||||||
|
; a = 1: f = nc|nz; male
|
||||||
|
; a = 0: f = nc|z; female
|
||||||
|
; f = c: genderless
|
||||||
|
|
||||||
|
; This is determined by comparing the Attack and Speed DVs
|
||||||
|
; with the species' gender ratio.
|
||||||
|
|
||||||
|
; Figure out what type of monster struct we're looking at.
|
||||||
|
|
||||||
|
; 0: PartyMon
|
||||||
|
ld hl, PartyMon1DVs
|
||||||
|
ld bc, PARTYMON_STRUCT_LENGTH
|
||||||
|
ld a, [MonType]
|
||||||
|
and a
|
||||||
|
jr z, .PartyMon
|
||||||
|
|
||||||
|
; 1: OTPartyMon
|
||||||
|
ld hl, OTPartyMon1DVs
|
||||||
|
dec a
|
||||||
|
jr z, .PartyMon
|
||||||
|
|
||||||
|
; 2: sBoxMon
|
||||||
|
ld hl, sBoxMon1DVs
|
||||||
|
ld bc, BOXMON_STRUCT_LENGTH
|
||||||
|
dec a
|
||||||
|
jr z, .sBoxMon
|
||||||
|
|
||||||
|
; 3: Unknown
|
||||||
|
ld hl, TempMonDVs
|
||||||
|
dec a
|
||||||
|
jr z, .DVs
|
||||||
|
|
||||||
|
; else: WildMon
|
||||||
|
ld hl, EnemyMonDVs
|
||||||
|
jr .DVs
|
||||||
|
|
||||||
|
; Get our place in the party/box.
|
||||||
|
|
||||||
|
.PartyMon:
|
||||||
|
.sBoxMon
|
||||||
|
ld a, [CurPartyMon]
|
||||||
|
call AddNTimes
|
||||||
|
|
||||||
|
.DVs:
|
||||||
|
|
||||||
|
; sBoxMon data is read directly from SRAM.
|
||||||
|
ld a, [MonType]
|
||||||
|
cp BOXMON
|
||||||
|
ld a, 1
|
||||||
|
call z, GetSRAMBank
|
||||||
|
|
||||||
|
; Attack DV
|
||||||
|
ld a, [hli]
|
||||||
|
and $f0
|
||||||
|
ld b, a
|
||||||
|
; Speed DV
|
||||||
|
ld a, [hl]
|
||||||
|
and $f0
|
||||||
|
swap a
|
||||||
|
|
||||||
|
; Put our DVs together.
|
||||||
|
or b
|
||||||
|
ld b, a
|
||||||
|
|
||||||
|
; Close SRAM if we were dealing with a sBoxMon.
|
||||||
|
ld a, [MonType]
|
||||||
|
cp BOXMON
|
||||||
|
call z, CloseSRAM
|
||||||
|
|
||||||
|
; We need the gender ratio to do anything with this.
|
||||||
|
push bc
|
||||||
|
ld a, [CurPartySpecies]
|
||||||
|
dec a
|
||||||
|
ld hl, BaseData + BASE_GENDER
|
||||||
|
ld bc, BASE_DATA_SIZE
|
||||||
|
call AddNTimes
|
||||||
|
pop bc
|
||||||
|
|
||||||
|
ld a, BANK(BaseData)
|
||||||
|
call GetFarByte
|
||||||
|
|
||||||
|
; The higher the ratio, the more likely the monster is to be female.
|
||||||
|
|
||||||
|
cp GENDERLESS
|
||||||
|
jr z, .Genderless
|
||||||
|
|
||||||
|
and a ; GENDER_F0?
|
||||||
|
jr z, .Male
|
||||||
|
|
||||||
|
cp GENDER_F100
|
||||||
|
jr z, .Female
|
||||||
|
|
||||||
|
; Values below the ratio are male, and vice versa.
|
||||||
|
cp b
|
||||||
|
jr c, .Male
|
||||||
|
|
||||||
|
.Female:
|
||||||
|
xor a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Male:
|
||||||
|
ld a, 1
|
||||||
|
and a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Genderless:
|
||||||
|
scf
|
||||||
|
ret
|
||||||
|
|
||||||
|
ListMovePP: ; 50c50
|
||||||
|
ld a, [wNumMoves]
|
||||||
|
inc a
|
||||||
|
ld c, a
|
||||||
|
ld a, NUM_MOVES
|
||||||
|
sub c
|
||||||
|
ld b, a
|
||||||
|
push hl
|
||||||
|
ld a, [Buffer1]
|
||||||
|
ld e, a
|
||||||
|
ld d, $0
|
||||||
|
ld a, $3e ; P
|
||||||
|
call .load_loop
|
||||||
|
ld a, b
|
||||||
|
and a
|
||||||
|
jr z, .skip
|
||||||
|
ld c, a
|
||||||
|
ld a, "-"
|
||||||
|
call .load_loop
|
||||||
|
|
||||||
|
.skip
|
||||||
|
pop hl
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
inc hl
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
ld hl, TempMonMoves
|
||||||
|
ld b, 0
|
||||||
|
.loop
|
||||||
|
ld a, [hli]
|
||||||
|
and a
|
||||||
|
jr z, .done
|
||||||
|
push bc
|
||||||
|
push hl
|
||||||
|
push de
|
||||||
|
ld hl, wMenuCursorY
|
||||||
|
ld a, [hl]
|
||||||
|
push af
|
||||||
|
ld [hl], b
|
||||||
|
push hl
|
||||||
|
callab GetMaxPPOfMove
|
||||||
|
pop hl
|
||||||
|
pop af
|
||||||
|
ld [hl], a
|
||||||
|
pop de
|
||||||
|
pop hl
|
||||||
|
push hl
|
||||||
|
ld bc, TempMonPP - (TempMonMoves + 1)
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hl]
|
||||||
|
and $3f
|
||||||
|
ld [StringBuffer1 + 4], a
|
||||||
|
ld h, d
|
||||||
|
ld l, e
|
||||||
|
push hl
|
||||||
|
ld de, StringBuffer1 + 4
|
||||||
|
lb bc, 1, 2
|
||||||
|
call PrintNum
|
||||||
|
ld a, "/"
|
||||||
|
ld [hli], a
|
||||||
|
ld de, wd265
|
||||||
|
lb bc, 1, 2
|
||||||
|
call PrintNum
|
||||||
|
pop hl
|
||||||
|
ld a, [Buffer1]
|
||||||
|
ld e, a
|
||||||
|
ld d, 0
|
||||||
|
add hl, de
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
pop hl
|
||||||
|
pop bc
|
||||||
|
inc b
|
||||||
|
ld a, b
|
||||||
|
cp NUM_MOVES
|
||||||
|
jr nz, .loop
|
||||||
|
|
||||||
|
.done
|
||||||
|
ret
|
||||||
|
|
||||||
|
.load_loop ; 50cc9
|
||||||
|
ld [hli], a
|
||||||
|
ld [hld], a
|
||||||
|
add hl, de
|
||||||
|
dec c
|
||||||
|
jr nz, .load_loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
Function50cd0: ; 50cd0
|
||||||
|
; XXX
|
||||||
|
.loop
|
||||||
|
ld [hl], $32
|
||||||
|
inc hl
|
||||||
|
ld [hl], $3e
|
||||||
|
dec hl
|
||||||
|
add hl, de
|
||||||
|
dec c
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
Predef22: ; unreferenced predef
|
||||||
|
push hl
|
||||||
|
push hl
|
||||||
|
ld hl, PartyMonNicknames
|
||||||
|
ld a, [CurPartyMon]
|
||||||
|
call GetNick
|
||||||
|
pop hl
|
||||||
|
call PlaceString
|
||||||
|
call CopyPkmnToTempMon
|
||||||
|
pop hl
|
||||||
|
ld a, [CurPartySpecies]
|
||||||
|
cp EGG
|
||||||
|
jr z, .egg
|
||||||
|
push hl
|
||||||
|
ld bc, -12
|
||||||
|
add hl, bc
|
||||||
|
ld b, $0
|
||||||
|
call DrawEnemyHP
|
||||||
|
pop hl
|
||||||
|
ld bc, 5
|
||||||
|
add hl, bc
|
||||||
|
push de
|
||||||
|
call PrintLevel
|
||||||
|
pop de
|
||||||
|
|
||||||
|
.egg
|
||||||
|
ret
|
||||||
|
|
||||||
|
PlaceStatusString: ; 50d0a
|
||||||
|
push de
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
ld a, [de]
|
||||||
|
ld b, a
|
||||||
|
inc de
|
||||||
|
ld a, [de]
|
||||||
|
or b
|
||||||
|
pop de
|
||||||
|
jr nz, PlaceNonFaintStatus
|
||||||
|
push de
|
||||||
|
ld de, FntString
|
||||||
|
call CopyStatusString
|
||||||
|
pop de
|
||||||
|
ld a, $1
|
||||||
|
and a
|
||||||
|
ret
|
||||||
|
|
||||||
|
FntString: ; 50d22
|
||||||
|
db "FNT@"
|
||||||
|
|
||||||
|
CopyStatusString: ; 50d25
|
||||||
|
ld a, [de]
|
||||||
|
inc de
|
||||||
|
ld [hli], a
|
||||||
|
ld a, [de]
|
||||||
|
inc de
|
||||||
|
ld [hli], a
|
||||||
|
ld a, [de]
|
||||||
|
ld [hl], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
PlaceNonFaintStatus: ; 50d2e
|
||||||
|
push de
|
||||||
|
ld a, [de]
|
||||||
|
ld de, PsnString
|
||||||
|
bit PSN, a
|
||||||
|
jr nz, .place
|
||||||
|
ld de, BrnString
|
||||||
|
bit BRN, a
|
||||||
|
jr nz, .place
|
||||||
|
ld de, FrzString
|
||||||
|
bit FRZ, a
|
||||||
|
jr nz, .place
|
||||||
|
ld de, ParString
|
||||||
|
bit PAR, a
|
||||||
|
jr nz, .place
|
||||||
|
ld de, SlpString
|
||||||
|
and SLP
|
||||||
|
jr z, .no_status
|
||||||
|
|
||||||
|
.place
|
||||||
|
call CopyStatusString
|
||||||
|
ld a, $1
|
||||||
|
and a
|
||||||
|
|
||||||
|
.no_status
|
||||||
|
pop de
|
||||||
|
ret
|
||||||
|
|
||||||
|
SlpString: db "SLP@"
|
||||||
|
PsnString: db "PSN@"
|
||||||
|
BrnString: db "BRN@"
|
||||||
|
FrzString: db "FRZ@"
|
||||||
|
ParString: db "PAR@"
|
||||||
|
|
||||||
|
ListMoves: ; 50d6f
|
||||||
|
; List moves at hl, spaced every [Buffer1] tiles.
|
||||||
|
ld de, wListMoves_MoveIndicesBuffer
|
||||||
|
ld b, $0
|
||||||
|
.moves_loop
|
||||||
|
ld a, [de]
|
||||||
|
inc de
|
||||||
|
and a
|
||||||
|
jr z, .no_more_moves
|
||||||
|
push de
|
||||||
|
push hl
|
||||||
|
push hl
|
||||||
|
ld [CurSpecies], a
|
||||||
|
ld a, MOVE_NAME
|
||||||
|
ld [wNamedObjectTypeBuffer], a
|
||||||
|
call GetName
|
||||||
|
ld de, StringBuffer1
|
||||||
|
pop hl
|
||||||
|
push bc
|
||||||
|
call PlaceString
|
||||||
|
pop bc
|
||||||
|
ld a, b
|
||||||
|
ld [wNumMoves], a
|
||||||
|
inc b
|
||||||
|
pop hl
|
||||||
|
push bc
|
||||||
|
ld a, [Buffer1]
|
||||||
|
ld c, a
|
||||||
|
ld b, 0
|
||||||
|
add hl, bc
|
||||||
|
pop bc
|
||||||
|
pop de
|
||||||
|
ld a, b
|
||||||
|
cp NUM_MOVES
|
||||||
|
jr z, .done
|
||||||
|
jr .moves_loop
|
||||||
|
|
||||||
|
.no_more_moves
|
||||||
|
ld a, b
|
||||||
|
.nonmove_loop
|
||||||
|
push af
|
||||||
|
ld [hl], "-"
|
||||||
|
ld a, [Buffer1]
|
||||||
|
ld c, a
|
||||||
|
ld b, 0
|
||||||
|
add hl, bc
|
||||||
|
pop af
|
||||||
|
inc a
|
||||||
|
cp NUM_MOVES
|
||||||
|
jr nz, .nonmove_loop
|
||||||
|
|
||||||
|
.done
|
||||||
|
ret
|
263
engine/player_gfx.asm
Normal file
263
engine/player_gfx.asm
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
Function88248: ; 88248
|
||||||
|
; XXX
|
||||||
|
ld c, CAL
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .okay
|
||||||
|
ld c, KAREN
|
||||||
|
|
||||||
|
.okay
|
||||||
|
ld a, c
|
||||||
|
ld [TrainerClass], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
MovePlayerPicRight: ; 88258
|
||||||
|
hlcoord 6, 4
|
||||||
|
ld de, 1
|
||||||
|
jr MovePlayerPic
|
||||||
|
|
||||||
|
MovePlayerPicLeft: ; 88260
|
||||||
|
hlcoord 13, 4
|
||||||
|
ld de, -1
|
||||||
|
; fallthrough
|
||||||
|
|
||||||
|
MovePlayerPic: ; 88266
|
||||||
|
; Move player pic at hl by de * 7 tiles.
|
||||||
|
ld c, $8
|
||||||
|
.loop
|
||||||
|
push bc
|
||||||
|
push hl
|
||||||
|
push de
|
||||||
|
xor a
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
lb bc, 7, 7
|
||||||
|
predef PlaceGraphic
|
||||||
|
xor a
|
||||||
|
ld [hBGMapThird], a
|
||||||
|
call WaitBGMap
|
||||||
|
call DelayFrame
|
||||||
|
pop de
|
||||||
|
pop hl
|
||||||
|
add hl, de
|
||||||
|
pop bc
|
||||||
|
dec c
|
||||||
|
ret z
|
||||||
|
push hl
|
||||||
|
push bc
|
||||||
|
ld a, l
|
||||||
|
sub e
|
||||||
|
ld l, a
|
||||||
|
ld a, h
|
||||||
|
sbc d
|
||||||
|
ld h, a
|
||||||
|
lb bc, 7, 7
|
||||||
|
call ClearBox
|
||||||
|
pop bc
|
||||||
|
pop hl
|
||||||
|
jr .loop
|
||||||
|
|
||||||
|
ShowPlayerNamingChoices: ; 88297
|
||||||
|
ld hl, ChrisNameMenuHeader
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .GotGender
|
||||||
|
ld hl, KrisNameMenuHeader
|
||||||
|
.GotGender:
|
||||||
|
call LoadMenuDataHeader
|
||||||
|
call VerticalMenu
|
||||||
|
ld a, [wMenuCursorY]
|
||||||
|
dec a
|
||||||
|
call CopyNameFromMenu
|
||||||
|
call CloseWindow
|
||||||
|
ret
|
||||||
|
|
||||||
|
ChrisNameMenuHeader: ; 882b5
|
||||||
|
db $40 ; flags
|
||||||
|
db 00, 00 ; start coords
|
||||||
|
db 11, 10 ; end coords
|
||||||
|
dw .MaleNames
|
||||||
|
db 1 ; ????
|
||||||
|
db 0 ; default option
|
||||||
|
|
||||||
|
.MaleNames: ; 882be
|
||||||
|
db $91 ; flags
|
||||||
|
db 5 ; items
|
||||||
|
db "NEW NAME@"
|
||||||
|
MalePlayerNameArray: ; 882c9
|
||||||
|
db "CHRIS@"
|
||||||
|
db "MAT@"
|
||||||
|
db "ALLAN@"
|
||||||
|
db "JON@"
|
||||||
|
db 2 ; displacement
|
||||||
|
db " NAME @" ; title
|
||||||
|
|
||||||
|
KrisNameMenuHeader: ; 882e5
|
||||||
|
db $40 ; flags
|
||||||
|
db 00, 00 ; start coords
|
||||||
|
db 11, 10 ; end coords
|
||||||
|
dw .FemaleNames
|
||||||
|
db 1 ; ????
|
||||||
|
db 0 ; default option
|
||||||
|
|
||||||
|
.FemaleNames: ; 882ee
|
||||||
|
db $91 ; flags
|
||||||
|
db 5 ; items
|
||||||
|
db "NEW NAME@"
|
||||||
|
FemalePlayerNameArray: ; 882f9
|
||||||
|
db "KRIS@"
|
||||||
|
db "AMANDA@"
|
||||||
|
db "JUANA@"
|
||||||
|
db "JODI@"
|
||||||
|
db 2 ; displacement
|
||||||
|
db " NAME @" ; title
|
||||||
|
|
||||||
|
GetPlayerNameArray: ; 88318 This Function is never called
|
||||||
|
ld hl, PlayerName
|
||||||
|
ld de, MalePlayerNameArray
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .done
|
||||||
|
ld de, FemalePlayerNameArray
|
||||||
|
|
||||||
|
.done
|
||||||
|
call InitName
|
||||||
|
ret
|
||||||
|
|
||||||
|
GetPlayerIcon: ; 8832c
|
||||||
|
; Get the player icon corresponding to gender
|
||||||
|
|
||||||
|
; Male
|
||||||
|
ld de, ChrisSpriteGFX
|
||||||
|
ld b, BANK(ChrisSpriteGFX)
|
||||||
|
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .done
|
||||||
|
|
||||||
|
; Female
|
||||||
|
ld de, KrisSpriteGFX
|
||||||
|
ld b, BANK(KrisSpriteGFX)
|
||||||
|
|
||||||
|
.done
|
||||||
|
ret
|
||||||
|
|
||||||
|
GetCardPic: ; 8833e
|
||||||
|
ld hl, ChrisCardPic
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .GotClass
|
||||||
|
ld hl, KrisCardPic
|
||||||
|
.GotClass:
|
||||||
|
ld de, VTiles2 tile $00
|
||||||
|
ld bc, $23 tiles
|
||||||
|
ld a, BANK(ChrisCardPic) ; BANK(KrisCardPic)
|
||||||
|
call FarCopyBytes
|
||||||
|
ld hl, CardGFX
|
||||||
|
ld de, VTiles2 tile $23
|
||||||
|
ld bc, 6 tiles
|
||||||
|
ld a, BANK(CardGFX)
|
||||||
|
call FarCopyBytes
|
||||||
|
ret
|
||||||
|
|
||||||
|
ChrisCardPic: ; 88365
|
||||||
|
INCBIN "gfx/trainer_card/chris_card.2bpp"
|
||||||
|
|
||||||
|
KrisCardPic: ; 88595
|
||||||
|
INCBIN "gfx/trainer_card/kris_card.2bpp"
|
||||||
|
|
||||||
|
CardGFX: ; 887c5
|
||||||
|
INCBIN "gfx/trainer_card/trainer_card.2bpp"
|
||||||
|
|
||||||
|
GetPlayerBackpic: ; 88825
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, GetChrisBackpic
|
||||||
|
call GetKrisBackpic
|
||||||
|
ret
|
||||||
|
|
||||||
|
GetChrisBackpic: ; 88830
|
||||||
|
ld hl, ChrisBackpic
|
||||||
|
ld b, BANK(ChrisBackpic)
|
||||||
|
ld de, VTiles2 tile $31
|
||||||
|
ld c, 7 * 7
|
||||||
|
predef DecompressPredef
|
||||||
|
ret
|
||||||
|
|
||||||
|
HOF_LoadTrainerFrontpic: ; 88840
|
||||||
|
call WaitBGMap
|
||||||
|
xor a
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
ld e, 0
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .GotClass
|
||||||
|
ld e, 1
|
||||||
|
|
||||||
|
.GotClass:
|
||||||
|
ld a, e
|
||||||
|
ld [TrainerClass], a
|
||||||
|
ld de, ChrisPic
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .GotPic
|
||||||
|
ld de, KrisPic
|
||||||
|
|
||||||
|
.GotPic:
|
||||||
|
ld hl, VTiles2
|
||||||
|
ld b, BANK(ChrisPic) ; BANK(KrisPic)
|
||||||
|
ld c, 7 * 7
|
||||||
|
call Get2bpp
|
||||||
|
call WaitBGMap
|
||||||
|
ld a, $1
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
DrawIntroPlayerPic: ; 88874
|
||||||
|
; Draw the player pic at (6,4).
|
||||||
|
|
||||||
|
; Get class
|
||||||
|
ld e, CHRIS
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .GotClass
|
||||||
|
ld e, KRIS
|
||||||
|
.GotClass:
|
||||||
|
ld a, e
|
||||||
|
ld [TrainerClass], a
|
||||||
|
|
||||||
|
; Load pic
|
||||||
|
ld de, ChrisPic
|
||||||
|
ld a, [PlayerGender]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .GotPic
|
||||||
|
ld de, KrisPic
|
||||||
|
.GotPic:
|
||||||
|
ld hl, VTiles2
|
||||||
|
ld b, BANK(ChrisPic) ; BANK(KrisPic)
|
||||||
|
ld c, 7 * 7 ; dimensions
|
||||||
|
call Get2bpp
|
||||||
|
|
||||||
|
; Draw
|
||||||
|
xor a
|
||||||
|
ld [hGraphicStartTile], a
|
||||||
|
hlcoord 6, 4
|
||||||
|
lb bc, 7, 7
|
||||||
|
predef PlaceGraphic
|
||||||
|
ret
|
||||||
|
|
||||||
|
ChrisPic: ; 888a9
|
||||||
|
INCBIN "gfx/player/chris.2bpp"
|
||||||
|
|
||||||
|
KrisPic: ; 88bb9
|
||||||
|
INCBIN "gfx/player/kris.2bpp"
|
||||||
|
|
||||||
|
GetKrisBackpic: ; 88ec9
|
||||||
|
; Kris's backpic is uncompressed.
|
||||||
|
ld de, KrisBackpic
|
||||||
|
ld hl, VTiles2 tile $31
|
||||||
|
lb bc, BANK(KrisBackpic), 7 * 7 ; dimensions
|
||||||
|
call Get2bpp
|
||||||
|
ret
|
||||||
|
|
||||||
|
KrisBackpic: ; 88ed6
|
||||||
|
INCBIN "gfx/player/kris_back.2bpp"
|
162
engine/pokedex_3.asm
Normal file
162
engine/pokedex_3.asm
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
LoadSGBPokedexGFX: ; 1ddf1c
|
||||||
|
ld hl, SGBPokedexGFX_LZ
|
||||||
|
ld de, VTiles2 tile $31
|
||||||
|
call Decompress
|
||||||
|
ret
|
||||||
|
|
||||||
|
LoadSGBPokedexGFX2: ; 1ddf26 (77:5f26)
|
||||||
|
ld hl, SGBPokedexGFX_LZ
|
||||||
|
ld de, VTiles2 tile $31
|
||||||
|
lb bc, BANK(SGBPokedexGFX_LZ), $3a
|
||||||
|
call DecompressRequest2bpp
|
||||||
|
ret
|
||||||
|
|
||||||
|
SGBPokedexGFX_LZ: ; 1ddf33
|
||||||
|
INCBIN "gfx/pokedex/sgb.2bpp.lz"
|
||||||
|
|
||||||
|
LoadQuestionMarkPic: ; 1de0d7
|
||||||
|
ld hl, .QuestionMarkLZ
|
||||||
|
ld de, sScratch
|
||||||
|
call Decompress
|
||||||
|
ret
|
||||||
|
|
||||||
|
.QuestionMarkLZ: ; 1de0e1
|
||||||
|
INCBIN "gfx/pics/questionmark/front.2bpp.lz"
|
||||||
|
|
||||||
|
DrawPokedexListWindow: ; 1de171 (77:6171)
|
||||||
|
ld a, $32
|
||||||
|
hlcoord 0, 17
|
||||||
|
ld bc, 12
|
||||||
|
call ByteFill
|
||||||
|
hlcoord 0, 1
|
||||||
|
lb bc, 15, 11
|
||||||
|
call ClearBox
|
||||||
|
ld a, $34
|
||||||
|
hlcoord 0, 0
|
||||||
|
ld bc, 11
|
||||||
|
call ByteFill
|
||||||
|
ld a, $39
|
||||||
|
hlcoord 0, 16
|
||||||
|
ld bc, 11
|
||||||
|
call ByteFill
|
||||||
|
hlcoord 5, 0
|
||||||
|
ld [hl], $3f
|
||||||
|
hlcoord 5, 16
|
||||||
|
ld [hl], $40
|
||||||
|
ld a, [wCurrentDexMode]
|
||||||
|
cp DEXMODE_OLD
|
||||||
|
jr z, .OldMode
|
||||||
|
; scroll bar
|
||||||
|
hlcoord 11, 0
|
||||||
|
ld [hl], $50
|
||||||
|
ld a, $51
|
||||||
|
hlcoord 11, 1
|
||||||
|
ld b, SCREEN_HEIGHT - 3
|
||||||
|
call Bank77_FillColumn
|
||||||
|
ld [hl], $52
|
||||||
|
jr .Done
|
||||||
|
|
||||||
|
.OldMode:
|
||||||
|
; no scroll bar
|
||||||
|
hlcoord 11, 0
|
||||||
|
ld [hl], $66
|
||||||
|
ld a, $67
|
||||||
|
hlcoord 11, 1
|
||||||
|
ld b, SCREEN_HEIGHT - 3
|
||||||
|
call Bank77_FillColumn
|
||||||
|
ld [hl], $68
|
||||||
|
.Done:
|
||||||
|
ret
|
||||||
|
|
||||||
|
DrawPokedexSearchResultsWindow: ; 1de1d1 (77:61d1)
|
||||||
|
ld a, $34
|
||||||
|
hlcoord 0, 0
|
||||||
|
ld bc, 11
|
||||||
|
call ByteFill
|
||||||
|
ld a, $39
|
||||||
|
hlcoord 0, 10
|
||||||
|
ld bc, 11
|
||||||
|
call ByteFill
|
||||||
|
hlcoord 5, 0
|
||||||
|
ld [hl], $3f
|
||||||
|
hlcoord 5, 10
|
||||||
|
ld [hl], $40
|
||||||
|
hlcoord 11, 0
|
||||||
|
ld [hl], $66
|
||||||
|
ld a, $67
|
||||||
|
hlcoord 11, 1
|
||||||
|
ld b, SCREEN_HEIGHT / 2
|
||||||
|
call Bank77_FillColumn
|
||||||
|
ld [hl], $68
|
||||||
|
ld a, $34
|
||||||
|
hlcoord 0, 11
|
||||||
|
ld bc, 11
|
||||||
|
call ByteFill
|
||||||
|
ld a, $39
|
||||||
|
hlcoord 0, 17
|
||||||
|
ld bc, 11
|
||||||
|
call ByteFill
|
||||||
|
hlcoord 11, 11
|
||||||
|
ld [hl], $66
|
||||||
|
ld a, $67
|
||||||
|
hlcoord 11, 12
|
||||||
|
ld b, 5
|
||||||
|
call Bank77_FillColumn
|
||||||
|
ld [hl], $68
|
||||||
|
hlcoord 0, 12
|
||||||
|
lb bc, 5, 11
|
||||||
|
call ClearBox
|
||||||
|
ld de, .esults_D
|
||||||
|
hlcoord 0, 12
|
||||||
|
call PlaceString
|
||||||
|
ret
|
||||||
|
|
||||||
|
.esults_D ; 1de23c
|
||||||
|
; (SEARCH R)
|
||||||
|
db "ESULTS"
|
||||||
|
next ""
|
||||||
|
; (### FOUN)
|
||||||
|
next "D!@"
|
||||||
|
|
||||||
|
DrawDexEntryScreenRightEdge: ; 1de247
|
||||||
|
ld a, [hBGMapAddress]
|
||||||
|
ld l, a
|
||||||
|
ld a, [hBGMapAddress + 1]
|
||||||
|
ld h, a
|
||||||
|
push hl
|
||||||
|
inc hl
|
||||||
|
ld a, l
|
||||||
|
ld [hBGMapAddress], a
|
||||||
|
ld a, h
|
||||||
|
ld [hBGMapAddress + 1], a
|
||||||
|
hlcoord 19, 0
|
||||||
|
ld [hl], $66
|
||||||
|
hlcoord 19, 1
|
||||||
|
ld a, $67
|
||||||
|
ld b, 15
|
||||||
|
call Bank77_FillColumn
|
||||||
|
ld [hl], $68
|
||||||
|
hlcoord 19, 17
|
||||||
|
ld [hl], $3c
|
||||||
|
xor a
|
||||||
|
ld b, SCREEN_HEIGHT
|
||||||
|
hlcoord 19, 0, AttrMap
|
||||||
|
call Bank77_FillColumn
|
||||||
|
call WaitBGMap2
|
||||||
|
pop hl
|
||||||
|
ld a, l
|
||||||
|
ld [hBGMapAddress], a
|
||||||
|
ld a, h
|
||||||
|
ld [hBGMapAddress + 1], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
Bank77_FillColumn: ; 1de27f
|
||||||
|
push de
|
||||||
|
ld de, SCREEN_WIDTH
|
||||||
|
.loop
|
||||||
|
ld [hl], a
|
||||||
|
add hl, de
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
pop de
|
||||||
|
ret
|
160
engine/pokerus.asm
Normal file
160
engine/pokerus.asm
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
GivePokerusAndConvertBerries: ; 2ed44
|
||||||
|
call ConvertBerriesToBerryJuice
|
||||||
|
ld hl, PartyMon1PokerusStatus
|
||||||
|
ld a, [PartyCount]
|
||||||
|
ld b, a
|
||||||
|
ld de, PARTYMON_STRUCT_LENGTH
|
||||||
|
; Check to see if any of your Pokemon already has Pokerus.
|
||||||
|
; If so, sample its spread through your party.
|
||||||
|
; This means that you cannot get Pokerus de novo while
|
||||||
|
; a party member has an active infection.
|
||||||
|
.loopMons
|
||||||
|
ld a, [hl]
|
||||||
|
and $f
|
||||||
|
jr nz, .TrySpreadPokerus
|
||||||
|
add hl, de
|
||||||
|
dec b
|
||||||
|
jr nz, .loopMons
|
||||||
|
|
||||||
|
; If we haven't been to Goldenrod City at least once,
|
||||||
|
; prevent the contraction of Pokerus.
|
||||||
|
ld hl, StatusFlags2
|
||||||
|
bit 6, [hl]
|
||||||
|
ret z
|
||||||
|
call Random
|
||||||
|
ld a, [hRandomAdd]
|
||||||
|
and a
|
||||||
|
ret nz
|
||||||
|
ld a, [hRandomSub]
|
||||||
|
cp $3
|
||||||
|
ret nc ; 3/65536 chance (00 00, 00 01 or 00 02)
|
||||||
|
ld a, [PartyCount]
|
||||||
|
ld b, a
|
||||||
|
.randomMonSelectLoop
|
||||||
|
call Random
|
||||||
|
and $7
|
||||||
|
cp b
|
||||||
|
jr nc, .randomMonSelectLoop
|
||||||
|
ld hl, PartyMon1PokerusStatus
|
||||||
|
call GetPartyLocation ; get pokerus byte of random mon
|
||||||
|
ld a, [hl]
|
||||||
|
and $f0
|
||||||
|
ret nz ; if it already has pokerus, do nothing
|
||||||
|
.randomPokerusLoop ; Simultaneously sample the strain and duration
|
||||||
|
call Random
|
||||||
|
and a
|
||||||
|
jr z, .randomPokerusLoop
|
||||||
|
ld b, a
|
||||||
|
and $f0
|
||||||
|
jr z, .load_pkrs
|
||||||
|
ld a, b
|
||||||
|
and $7
|
||||||
|
inc a
|
||||||
|
.load_pkrs
|
||||||
|
ld b, a ; this should come before the label
|
||||||
|
swap b
|
||||||
|
and $3
|
||||||
|
inc a
|
||||||
|
add b
|
||||||
|
ld [hl], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.TrySpreadPokerus:
|
||||||
|
call Random
|
||||||
|
cp 1 + 33 percent
|
||||||
|
ret nc ; 1/3 chance
|
||||||
|
|
||||||
|
ld a, [PartyCount]
|
||||||
|
cp 1
|
||||||
|
ret z ; only one mon, nothing to do
|
||||||
|
|
||||||
|
ld c, [hl]
|
||||||
|
ld a, b
|
||||||
|
cp 2
|
||||||
|
jr c, .checkPreviousMonsLoop ; no more mons after this one, go backwards
|
||||||
|
|
||||||
|
call Random
|
||||||
|
cp 1 + 50 percent
|
||||||
|
jr c, .checkPreviousMonsLoop ; 1/2 chance, go backwards
|
||||||
|
.checkFollowingMonsLoop
|
||||||
|
add hl, de
|
||||||
|
ld a, [hl]
|
||||||
|
and a
|
||||||
|
jr z, .infectMon
|
||||||
|
ld c, a
|
||||||
|
and $3
|
||||||
|
ret z ; if mon has cured pokerus, stop searching
|
||||||
|
dec b ; go on to next mon
|
||||||
|
ld a, b
|
||||||
|
cp 1
|
||||||
|
jr nz, .checkFollowingMonsLoop ; no more mons left
|
||||||
|
ret
|
||||||
|
|
||||||
|
.checkPreviousMonsLoop
|
||||||
|
ld a, [PartyCount]
|
||||||
|
cp b
|
||||||
|
ret z ; no more mons
|
||||||
|
ld a, l
|
||||||
|
sub e
|
||||||
|
ld l, a
|
||||||
|
ld a, h
|
||||||
|
sbc d
|
||||||
|
ld h, a
|
||||||
|
ld a, [hl]
|
||||||
|
and a
|
||||||
|
jr z, .infectMon
|
||||||
|
ld c, a
|
||||||
|
and $3
|
||||||
|
ret z ; if mon has cured pokerus, stop searching
|
||||||
|
inc b ; go on to next mon
|
||||||
|
jr .checkPreviousMonsLoop
|
||||||
|
|
||||||
|
.infectMon
|
||||||
|
ld a, c
|
||||||
|
and $f0
|
||||||
|
ld b, a
|
||||||
|
ld a, c
|
||||||
|
swap a
|
||||||
|
and $3
|
||||||
|
inc a
|
||||||
|
add b
|
||||||
|
ld [hl], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
; any berry held by a Shuckle may be converted to berry juice
|
||||||
|
ConvertBerriesToBerryJuice: ; 2ede6
|
||||||
|
ld hl, StatusFlags2
|
||||||
|
bit 6, [hl]
|
||||||
|
ret z
|
||||||
|
call Random
|
||||||
|
cp $10
|
||||||
|
ret nc ; 1/16 chance
|
||||||
|
ld hl, PartyMons
|
||||||
|
ld a, [PartyCount]
|
||||||
|
.partyMonLoop
|
||||||
|
push af
|
||||||
|
push hl
|
||||||
|
ld a, [hl]
|
||||||
|
cp SHUCKLE
|
||||||
|
jr nz, .loopMon
|
||||||
|
ld bc, MON_ITEM
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hl]
|
||||||
|
cp BERRY
|
||||||
|
jr z, .convertToJuice
|
||||||
|
|
||||||
|
.loopMon
|
||||||
|
pop hl
|
||||||
|
ld bc, PARTYMON_STRUCT_LENGTH
|
||||||
|
add hl, bc
|
||||||
|
pop af
|
||||||
|
dec a
|
||||||
|
jr nz, .partyMonLoop
|
||||||
|
ret
|
||||||
|
|
||||||
|
.convertToJuice
|
||||||
|
ld a, BERRY_JUICE
|
||||||
|
ld [hl], a
|
||||||
|
pop hl
|
||||||
|
pop af
|
||||||
|
ret
|
26
engine/pokerus_tick.asm
Normal file
26
engine/pokerus_tick.asm
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
ApplyPokerusTick: ; 13988
|
||||||
|
; decreases all pokemon's pokerus counter by b. if the lower nybble reaches zero, the pokerus is cured.
|
||||||
|
ld hl, PartyMon1PokerusStatus ; PartyMon1 + MON_PKRS
|
||||||
|
ld a, [PartyCount]
|
||||||
|
and a
|
||||||
|
ret z ; make sure it's not wasting time on an empty party
|
||||||
|
ld c, a
|
||||||
|
.loop
|
||||||
|
ld a, [hl]
|
||||||
|
and $f ; lower nybble is the number of days remaining
|
||||||
|
jr z, .next ; if already 0, skip
|
||||||
|
sub b ; subtract the number of days
|
||||||
|
jr nc, .ok ; max(result, 0)
|
||||||
|
xor a
|
||||||
|
.ok
|
||||||
|
ld d, a ; back up this value because we need to preserve the strain (upper nybble)
|
||||||
|
ld a, [hl]
|
||||||
|
and $f0
|
||||||
|
add d
|
||||||
|
ld [hl], a ; this prevents a cured pokemon from recontracting pokerus
|
||||||
|
.next
|
||||||
|
ld de, PARTYMON_STRUCT_LENGTH
|
||||||
|
add hl, de
|
||||||
|
dec c
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
30
engine/square_root.asm
Normal file
30
engine/square_root.asm
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
GetSquareRoot: ; 13b87
|
||||||
|
; Return the square root of de in b.
|
||||||
|
|
||||||
|
; Rather than calculating the result, we take the index of the
|
||||||
|
; first value in a table of squares that isn't lower than de.
|
||||||
|
|
||||||
|
ld hl, Squares
|
||||||
|
ld b, 0
|
||||||
|
.loop
|
||||||
|
; Make sure we don't go past the end of the table.
|
||||||
|
inc b
|
||||||
|
ld a, b
|
||||||
|
cp $ff
|
||||||
|
ret z
|
||||||
|
|
||||||
|
; Iterate over the table until b**2 >= de.
|
||||||
|
ld a, [hli]
|
||||||
|
sub e
|
||||||
|
ld a, [hli]
|
||||||
|
sbc d
|
||||||
|
|
||||||
|
jr c, .loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
Squares: ; 13b98
|
||||||
|
root set 1
|
||||||
|
rept $ff
|
||||||
|
dw root*root
|
||||||
|
root set root+1
|
||||||
|
endr
|
197
engine/start_battle.asm
Normal file
197
engine/start_battle.asm
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
ShowLinkBattleParticipants: ; 2ee18
|
||||||
|
; If we're not in a communications room,
|
||||||
|
; we don't need to be here.
|
||||||
|
ld a, [wLinkMode]
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
|
||||||
|
callba _ShowLinkBattleParticipants
|
||||||
|
ld c, 150
|
||||||
|
call DelayFrames
|
||||||
|
call ClearTileMap
|
||||||
|
call ClearSprites
|
||||||
|
ret
|
||||||
|
|
||||||
|
FindFirstAliveMonAndStartBattle: ; 2ee2f
|
||||||
|
xor a
|
||||||
|
ld [hMapAnims], a
|
||||||
|
call DelayFrame
|
||||||
|
ld b, 6
|
||||||
|
ld hl, PartyMon1HP
|
||||||
|
ld de, PARTYMON_STRUCT_LENGTH - 1
|
||||||
|
|
||||||
|
.loop
|
||||||
|
ld a, [hli]
|
||||||
|
or [hl]
|
||||||
|
jr nz, .okay
|
||||||
|
add hl, de
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
|
||||||
|
.okay
|
||||||
|
ld de, MON_LEVEL - MON_HP
|
||||||
|
add hl, de
|
||||||
|
ld a, [hl]
|
||||||
|
ld [BattleMonLevel], a
|
||||||
|
predef Predef_StartBattle
|
||||||
|
callba _LoadBattleFontsHPBar
|
||||||
|
ld a, 1
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
call ClearSprites
|
||||||
|
call ClearTileMap
|
||||||
|
xor a
|
||||||
|
ld [hBGMapMode], a
|
||||||
|
ld [hWY], a
|
||||||
|
ld [rWY], a
|
||||||
|
ld [hMapAnims], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
PlayBattleMusic: ; 2ee6c
|
||||||
|
push hl
|
||||||
|
push de
|
||||||
|
push bc
|
||||||
|
|
||||||
|
xor a
|
||||||
|
ld [MusicFade], a
|
||||||
|
ld de, MUSIC_NONE
|
||||||
|
call PlayMusic
|
||||||
|
call DelayFrame
|
||||||
|
call MaxVolume
|
||||||
|
|
||||||
|
ld a, [BattleType]
|
||||||
|
cp BATTLETYPE_SUICUNE
|
||||||
|
ld de, MUSIC_SUICUNE_BATTLE
|
||||||
|
jp z, .done
|
||||||
|
cp BATTLETYPE_ROAMING
|
||||||
|
jp z, .done
|
||||||
|
|
||||||
|
; Are we fighting a trainer?
|
||||||
|
ld a, [OtherTrainerClass]
|
||||||
|
and a
|
||||||
|
jr nz, .trainermusic
|
||||||
|
|
||||||
|
callba RegionCheck
|
||||||
|
ld a, e
|
||||||
|
and a
|
||||||
|
jr nz, .kantowild
|
||||||
|
|
||||||
|
ld de, MUSIC_JOHTO_WILD_BATTLE
|
||||||
|
ld a, [TimeOfDay]
|
||||||
|
cp NITE_F
|
||||||
|
jr nz, .done
|
||||||
|
ld de, MUSIC_JOHTO_WILD_BATTLE_NIGHT
|
||||||
|
jr .done
|
||||||
|
|
||||||
|
.kantowild
|
||||||
|
ld de, MUSIC_KANTO_WILD_BATTLE
|
||||||
|
jr .done
|
||||||
|
|
||||||
|
.trainermusic
|
||||||
|
ld de, MUSIC_CHAMPION_BATTLE
|
||||||
|
cp CHAMPION
|
||||||
|
jr z, .done
|
||||||
|
cp RED
|
||||||
|
jr z, .done
|
||||||
|
|
||||||
|
; really, they should have included admins and scientists here too...
|
||||||
|
ld de, MUSIC_ROCKET_BATTLE
|
||||||
|
cp GRUNTM
|
||||||
|
jr z, .done
|
||||||
|
cp GRUNTF
|
||||||
|
jr z, .done
|
||||||
|
|
||||||
|
ld de, MUSIC_KANTO_GYM_LEADER_BATTLE
|
||||||
|
callba IsKantoGymLeader
|
||||||
|
jr c, .done
|
||||||
|
|
||||||
|
ld de, MUSIC_JOHTO_GYM_LEADER_BATTLE
|
||||||
|
callba IsJohtoGymLeader
|
||||||
|
jr c, .done
|
||||||
|
|
||||||
|
ld de, MUSIC_RIVAL_BATTLE
|
||||||
|
ld a, [OtherTrainerClass]
|
||||||
|
cp RIVAL1
|
||||||
|
jr z, .done
|
||||||
|
cp RIVAL2
|
||||||
|
jr nz, .othertrainer
|
||||||
|
|
||||||
|
ld a, [OtherTrainerID]
|
||||||
|
cp RIVAL2_2_CHIKORITA ; Rival in Indigo Plateau
|
||||||
|
jr c, .done
|
||||||
|
ld de, MUSIC_CHAMPION_BATTLE
|
||||||
|
jr .done
|
||||||
|
|
||||||
|
.othertrainer
|
||||||
|
ld a, [wLinkMode]
|
||||||
|
and a
|
||||||
|
jr nz, .johtotrainer
|
||||||
|
|
||||||
|
callba RegionCheck
|
||||||
|
ld a, e
|
||||||
|
and a
|
||||||
|
jr nz, .kantotrainer
|
||||||
|
|
||||||
|
.johtotrainer
|
||||||
|
ld de, MUSIC_JOHTO_TRAINER_BATTLE
|
||||||
|
jr .done
|
||||||
|
|
||||||
|
.kantotrainer
|
||||||
|
ld de, MUSIC_KANTO_TRAINER_BATTLE
|
||||||
|
|
||||||
|
.done
|
||||||
|
call PlayMusic
|
||||||
|
|
||||||
|
pop bc
|
||||||
|
pop de
|
||||||
|
pop hl
|
||||||
|
ret
|
||||||
|
|
||||||
|
ClearBattleRAM: ; 2ef18
|
||||||
|
xor a
|
||||||
|
ld [wPlayerAction], a
|
||||||
|
ld [wBattleResult], a
|
||||||
|
|
||||||
|
ld hl, wPartyMenuCursor
|
||||||
|
ld [hli], a
|
||||||
|
ld [hli], a
|
||||||
|
ld [hli], a
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
|
ld [wMenuScrollPosition], a
|
||||||
|
ld [CriticalHit], a
|
||||||
|
ld [BattleMonSpecies], a
|
||||||
|
ld [wBattleParticipantsNotFainted], a
|
||||||
|
ld [CurBattleMon], a
|
||||||
|
ld [wForcedSwitch], a
|
||||||
|
ld [TimeOfDayPal], a
|
||||||
|
ld [PlayerTurnsTaken], a
|
||||||
|
ld [EnemyTurnsTaken], a
|
||||||
|
ld [EvolvableFlags], a
|
||||||
|
|
||||||
|
ld hl, PlayerHPPal
|
||||||
|
ld [hli], a
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
|
ld hl, BattleMonDVs
|
||||||
|
ld [hli], a
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
|
ld hl, EnemyMonDVs
|
||||||
|
ld [hli], a
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
|
; Clear the entire BattleMons area
|
||||||
|
ld hl, wBattle
|
||||||
|
ld bc, wBattleEnd - wBattle
|
||||||
|
xor a
|
||||||
|
call ByteFill
|
||||||
|
|
||||||
|
callab ResetEnemyStatLevels
|
||||||
|
|
||||||
|
call ClearWindowData
|
||||||
|
|
||||||
|
ld hl, hBGMapAddress
|
||||||
|
xor a
|
||||||
|
ld [hli], a
|
||||||
|
ld [hl], VBGMap0 / $100
|
||||||
|
ret
|
@ -1,3 +1,7 @@
|
|||||||
|
Predef35: ; 8c000
|
||||||
|
Predef36:
|
||||||
|
ret
|
||||||
|
|
||||||
UpdateTimeOfDayPal:: ; 8c001
|
UpdateTimeOfDayPal:: ; 8c001
|
||||||
call UpdateTime
|
call UpdateTime
|
||||||
ld a, [TimeOfDay]
|
ld a, [TimeOfDay]
|
||||||
|
31
engine/trainer_scripts.asm
Normal file
31
engine/trainer_scripts.asm
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
TalkToTrainerScript:: ; 0xbe66a
|
||||||
|
faceplayer
|
||||||
|
trainerflagaction CHECK_FLAG
|
||||||
|
iftrue AlreadyBeatenTrainerScript
|
||||||
|
loadmemtrainer
|
||||||
|
encountermusic
|
||||||
|
jump StartBattleWithMapTrainerScript
|
||||||
|
|
||||||
|
SeenByTrainerScript:: ; 0xbe675
|
||||||
|
loadmemtrainer
|
||||||
|
encountermusic
|
||||||
|
showemote EMOTE_SHOCK, LAST_TALKED, 30
|
||||||
|
callasm TrainerWalkToPlayer
|
||||||
|
applymovement2 MovementBuffer
|
||||||
|
writepersonxy LAST_TALKED
|
||||||
|
faceperson PLAYER, LAST_TALKED
|
||||||
|
jump StartBattleWithMapTrainerScript
|
||||||
|
|
||||||
|
StartBattleWithMapTrainerScript: ; 0xbe68a
|
||||||
|
opentext
|
||||||
|
trainertext $0
|
||||||
|
waitbutton
|
||||||
|
closetext
|
||||||
|
loadmemtrainer
|
||||||
|
startbattle
|
||||||
|
reloadmapafterbattle
|
||||||
|
trainerflagaction SET_FLAG
|
||||||
|
loadvar wRunningTrainerBattleScript, -1
|
||||||
|
|
||||||
|
AlreadyBeatenTrainerScript:
|
||||||
|
scripttalkafter
|
229
engine/unused_correct_party.asm
Normal file
229
engine/unused_correct_party.asm
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
CorrectErrorsInPlayerParty: ; unreferenced
|
||||||
|
ld hl, PartyCount
|
||||||
|
ld a, [hl]
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
|
||||||
|
cp PARTY_LENGTH + 1
|
||||||
|
jr c, .party_length_okay
|
||||||
|
ld a, PARTY_LENGTH
|
||||||
|
ld [hl], a
|
||||||
|
.party_length_okay
|
||||||
|
inc hl
|
||||||
|
|
||||||
|
ld b, a
|
||||||
|
ld c, 0
|
||||||
|
.loop1
|
||||||
|
ld a, [hl]
|
||||||
|
and a
|
||||||
|
jr z, .invalid_species
|
||||||
|
cp NUM_POKEMON + 1
|
||||||
|
jr z, .invalid_species
|
||||||
|
cp EGG + 1
|
||||||
|
jr c, .next_species
|
||||||
|
|
||||||
|
.invalid_species
|
||||||
|
ld [hl], SMEARGLE
|
||||||
|
push hl
|
||||||
|
push bc
|
||||||
|
ld a, c
|
||||||
|
ld hl, PartyMon1Species
|
||||||
|
call GetPartyLocation
|
||||||
|
ld [hl], SMEARGLE
|
||||||
|
pop bc
|
||||||
|
pop hl
|
||||||
|
|
||||||
|
.next_species
|
||||||
|
inc hl
|
||||||
|
inc c
|
||||||
|
dec b
|
||||||
|
jr nz, .loop1
|
||||||
|
ld [hl], $ff
|
||||||
|
|
||||||
|
ld hl, PartyMon1
|
||||||
|
ld a, [PartyCount]
|
||||||
|
ld d, a
|
||||||
|
ld e, 0
|
||||||
|
.loop2
|
||||||
|
push de
|
||||||
|
push hl
|
||||||
|
ld b, h
|
||||||
|
ld c, l
|
||||||
|
ld a, [hl]
|
||||||
|
and a
|
||||||
|
jr z, .invalid_species_2
|
||||||
|
cp NUM_POKEMON + 1
|
||||||
|
jr c, .check_level
|
||||||
|
|
||||||
|
.invalid_species_2
|
||||||
|
ld [hl], SMEARGLE
|
||||||
|
push de
|
||||||
|
ld d, 0
|
||||||
|
ld hl, PartySpecies
|
||||||
|
add hl, de
|
||||||
|
pop de
|
||||||
|
ld a, SMEARGLE
|
||||||
|
ld [hl], a
|
||||||
|
|
||||||
|
.check_level
|
||||||
|
ld [CurSpecies], a
|
||||||
|
call GetBaseData
|
||||||
|
ld hl, MON_LEVEL
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hl]
|
||||||
|
cp MIN_LEVEL
|
||||||
|
ld a, MIN_LEVEL
|
||||||
|
jr c, .invalid_level
|
||||||
|
ld a, [hl]
|
||||||
|
cp MAX_LEVEL
|
||||||
|
jr c, .load_level
|
||||||
|
ld a, MAX_LEVEL
|
||||||
|
.invalid_level
|
||||||
|
ld [hl], a
|
||||||
|
.load_level
|
||||||
|
ld [CurPartyLevel], a
|
||||||
|
|
||||||
|
ld hl, MON_MAXHP
|
||||||
|
add hl, bc
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
ld hl, MON_STAT_EXP - 1
|
||||||
|
add hl, bc
|
||||||
|
ld b, $1
|
||||||
|
predef CalcPkmnStats
|
||||||
|
pop hl
|
||||||
|
ld bc, PARTYMON_STRUCT_LENGTH
|
||||||
|
add hl, bc
|
||||||
|
pop de
|
||||||
|
inc e
|
||||||
|
dec d
|
||||||
|
jr nz, .loop2
|
||||||
|
|
||||||
|
ld de, PartyMonNicknames
|
||||||
|
ld a, [PartyCount]
|
||||||
|
ld b, a
|
||||||
|
ld c, 0
|
||||||
|
.loop3
|
||||||
|
push bc
|
||||||
|
call .GetLengthOfStringWith6CharCap
|
||||||
|
push de
|
||||||
|
callba CheckStringForErrors
|
||||||
|
pop hl
|
||||||
|
pop bc
|
||||||
|
jr nc, .valid_nickname
|
||||||
|
|
||||||
|
push bc
|
||||||
|
push hl
|
||||||
|
ld hl, PartySpecies
|
||||||
|
push bc
|
||||||
|
ld b, 0
|
||||||
|
add hl, bc
|
||||||
|
pop bc
|
||||||
|
ld a, [hl]
|
||||||
|
cp EGG
|
||||||
|
ld hl, .TAMAGO
|
||||||
|
jr z, .got_nickname
|
||||||
|
ld [wd265], a
|
||||||
|
call GetPokemonName
|
||||||
|
ld hl, StringBuffer1
|
||||||
|
.got_nickname
|
||||||
|
pop de
|
||||||
|
ld bc, PKMN_NAME_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
pop bc
|
||||||
|
|
||||||
|
.valid_nickname
|
||||||
|
inc c
|
||||||
|
dec b
|
||||||
|
jr nz, .loop3
|
||||||
|
|
||||||
|
ld de, PartyMonOT
|
||||||
|
ld a, [PartyCount]
|
||||||
|
ld b, a
|
||||||
|
ld c, 0
|
||||||
|
.loop4
|
||||||
|
push bc
|
||||||
|
call .GetLengthOfStringWith6CharCap
|
||||||
|
push de
|
||||||
|
callba CheckStringForErrors
|
||||||
|
pop hl
|
||||||
|
jr nc, .valid_ot_name
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
ld hl, PlayerName
|
||||||
|
ld bc, NAME_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
.valid_ot_name
|
||||||
|
pop bc
|
||||||
|
inc c
|
||||||
|
dec b
|
||||||
|
jr nz, .loop4
|
||||||
|
|
||||||
|
ld hl, PartyMon1Moves
|
||||||
|
ld a, [PartyCount]
|
||||||
|
ld b, a
|
||||||
|
.loop5
|
||||||
|
push hl
|
||||||
|
ld c, NUM_MOVES
|
||||||
|
ld a, [hl]
|
||||||
|
and a
|
||||||
|
jr z, .invalid_move
|
||||||
|
cp NUM_ATTACKS + 1
|
||||||
|
jr c, .moves_loop
|
||||||
|
.invalid_move
|
||||||
|
ld [hl], POUND
|
||||||
|
|
||||||
|
.moves_loop
|
||||||
|
ld a, [hl]
|
||||||
|
and a
|
||||||
|
jr z, .fill_invalid_moves
|
||||||
|
cp NUM_ATTACKS + 1
|
||||||
|
jr c, .next_move
|
||||||
|
|
||||||
|
.fill_invalid_moves
|
||||||
|
xor a
|
||||||
|
ld [hli], a
|
||||||
|
dec c
|
||||||
|
jr nz, .fill_invalid_moves
|
||||||
|
jr .next_pokemon
|
||||||
|
|
||||||
|
.next_move
|
||||||
|
inc hl
|
||||||
|
dec c
|
||||||
|
jr nz, .moves_loop
|
||||||
|
|
||||||
|
.next_pokemon
|
||||||
|
pop hl
|
||||||
|
push bc
|
||||||
|
ld bc, PARTYMON_STRUCT_LENGTH
|
||||||
|
add hl, bc
|
||||||
|
pop bc
|
||||||
|
dec b
|
||||||
|
jr nz, .loop5
|
||||||
|
ret
|
||||||
|
; 13b6b
|
||||||
|
|
||||||
|
.TAMAGO: ; 13b6b
|
||||||
|
db "タマゴ@@@"
|
||||||
|
; 13b71
|
||||||
|
|
||||||
|
.GetLengthOfStringWith6CharCap: ; 13b71
|
||||||
|
push de
|
||||||
|
ld c, 1
|
||||||
|
ld b, NAME_LENGTH_JAPANESE
|
||||||
|
.search_loop
|
||||||
|
ld a, [de]
|
||||||
|
cp "@"
|
||||||
|
jr z, .done
|
||||||
|
inc de
|
||||||
|
inc c
|
||||||
|
dec b
|
||||||
|
jr nz, .search_loop
|
||||||
|
dec c
|
||||||
|
dec de
|
||||||
|
ld a, "@"
|
||||||
|
ld [de], a
|
||||||
|
.done
|
||||||
|
pop de
|
||||||
|
ret
|
||||||
|
; 13b87
|
43
event/bug_contest.asm
Normal file
43
event/bug_contest.asm
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
Special_GiveParkBalls: ; 135db
|
||||||
|
xor a
|
||||||
|
ld [wContestMon], a
|
||||||
|
ld a, 20
|
||||||
|
ld [wParkBallsRemaining], a
|
||||||
|
callba StartBugContestTimer
|
||||||
|
ret
|
||||||
|
|
||||||
|
BugCatchingContestBattleScript:: ; 0x135eb
|
||||||
|
writecode VAR_BATTLETYPE, BATTLETYPE_CONTEST
|
||||||
|
randomwildmon
|
||||||
|
startbattle
|
||||||
|
reloadmapafterbattle
|
||||||
|
copybytetovar wParkBallsRemaining
|
||||||
|
iffalse BugCatchingContestOutOfBallsScript
|
||||||
|
end
|
||||||
|
|
||||||
|
BugCatchingContestOverScript:: ; 0x135f8
|
||||||
|
playsound SFX_ELEVATOR_END
|
||||||
|
opentext
|
||||||
|
writetext BugCatchingContestText_BeeepTimesUp
|
||||||
|
waitbutton
|
||||||
|
jump BugCatchingContestReturnToGateScript
|
||||||
|
|
||||||
|
BugCatchingContestOutOfBallsScript: ; 0x13603
|
||||||
|
playsound SFX_ELEVATOR_END
|
||||||
|
opentext
|
||||||
|
writetext BugCatchingContestText_ContestIsOver
|
||||||
|
waitbutton
|
||||||
|
|
||||||
|
BugCatchingContestReturnToGateScript: ; 0x1360b
|
||||||
|
closetext
|
||||||
|
jumpstd bugcontestresultswarp
|
||||||
|
|
||||||
|
BugCatchingContestText_BeeepTimesUp: ; 0x1360f
|
||||||
|
; ANNOUNCER: BEEEP! Time's up!
|
||||||
|
text_jump UnknownText_0x1bd2ca
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
BugCatchingContestText_ContestIsOver: ; 0x13614
|
||||||
|
; ANNOUNCER: The Contest is over!
|
||||||
|
text_jump UnknownText_0x1bd2e7
|
||||||
|
db "@"
|
107
event/bug_contest_mon_stats.asm
Normal file
107
event/bug_contest_mon_stats.asm
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
DisplayCaughtContestMonStats: ; cc000
|
||||||
|
call ClearBGPalettes
|
||||||
|
call ClearTileMap
|
||||||
|
call ClearSprites
|
||||||
|
call LoadFontsBattleExtra
|
||||||
|
|
||||||
|
ld hl, Options
|
||||||
|
ld a, [hl]
|
||||||
|
push af
|
||||||
|
set 4, [hl]
|
||||||
|
|
||||||
|
hlcoord 0, 0
|
||||||
|
ld b, 4
|
||||||
|
ld c, 13
|
||||||
|
call TextBox
|
||||||
|
|
||||||
|
hlcoord 0, 6
|
||||||
|
ld b, 4
|
||||||
|
ld c, 13
|
||||||
|
call TextBox
|
||||||
|
|
||||||
|
hlcoord 2, 0
|
||||||
|
ld de, .Stock
|
||||||
|
call PlaceString
|
||||||
|
|
||||||
|
hlcoord 2, 6
|
||||||
|
ld de, .This
|
||||||
|
call PlaceString
|
||||||
|
|
||||||
|
hlcoord 5, 4
|
||||||
|
ld de, .Health
|
||||||
|
call PlaceString
|
||||||
|
|
||||||
|
hlcoord 5, 10
|
||||||
|
ld de, .Health
|
||||||
|
call PlaceString
|
||||||
|
|
||||||
|
ld a, [wContestMon]
|
||||||
|
ld [wd265], a
|
||||||
|
call GetPokemonName
|
||||||
|
ld de, StringBuffer1
|
||||||
|
hlcoord 1, 2
|
||||||
|
call PlaceString
|
||||||
|
|
||||||
|
ld h, b
|
||||||
|
ld l, c
|
||||||
|
ld a, [wContestMonLevel]
|
||||||
|
ld [TempMonLevel], a
|
||||||
|
call PrintLevel
|
||||||
|
|
||||||
|
ld de, EnemyMonNick
|
||||||
|
hlcoord 1, 8
|
||||||
|
call PlaceString
|
||||||
|
|
||||||
|
ld h, b
|
||||||
|
ld l, c
|
||||||
|
ld a, [EnemyMonLevel]
|
||||||
|
ld [TempMonLevel], a
|
||||||
|
call PrintLevel
|
||||||
|
|
||||||
|
hlcoord 11, 4
|
||||||
|
ld de, wContestMonMaxHP
|
||||||
|
lb bc, 2, 3
|
||||||
|
call PrintNum
|
||||||
|
|
||||||
|
hlcoord 11, 10
|
||||||
|
ld de, EnemyMonMaxHP
|
||||||
|
call PrintNum
|
||||||
|
|
||||||
|
ld hl, SwitchMonText
|
||||||
|
call PrintText
|
||||||
|
|
||||||
|
pop af
|
||||||
|
ld [Options], a
|
||||||
|
|
||||||
|
call WaitBGMap
|
||||||
|
ld b, SCGB_DIPLOMA
|
||||||
|
call GetSGBLayout
|
||||||
|
call SetPalettes
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Health:
|
||||||
|
db "HEALTH@"
|
||||||
|
.Stock:
|
||||||
|
db " STOCK ", $4a, " @"
|
||||||
|
.This:
|
||||||
|
db " THIS ", $4a, " @"
|
||||||
|
|
||||||
|
SwitchMonText: ; cc0c2
|
||||||
|
; Switch #MON?
|
||||||
|
text_jump UnknownText_0x1c10cf
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
DisplayAlreadyCaughtText: ; cc0c7
|
||||||
|
call GetPokemonName
|
||||||
|
ld hl, .AlreadyCaughtText
|
||||||
|
jp PrintText
|
||||||
|
|
||||||
|
.AlreadyCaughtText: ; 0xcc0d0
|
||||||
|
; You already caught a @ .
|
||||||
|
text_jump UnknownText_0x1c10dd
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
Predef2F:
|
||||||
|
Predef38:
|
||||||
|
Predef39: ; cc0d5
|
||||||
|
ret
|
81
event/catch_tutorial.asm
Normal file
81
event/catch_tutorial.asm
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
CatchTutorial:: ; 4e554
|
||||||
|
ld a, [BattleType]
|
||||||
|
dec a
|
||||||
|
ld c, a
|
||||||
|
ld hl, .dw
|
||||||
|
ld b, 0
|
||||||
|
add hl, bc
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hli]
|
||||||
|
ld h, [hl]
|
||||||
|
ld l, a
|
||||||
|
jp hl
|
||||||
|
|
||||||
|
.dw ; 4e564 (13:6564)
|
||||||
|
dw .DudeTutorial
|
||||||
|
dw .DudeTutorial
|
||||||
|
dw .DudeTutorial
|
||||||
|
|
||||||
|
.DudeTutorial: ; 4e56a (13:656a)
|
||||||
|
; Back up your name to your Mom's name.
|
||||||
|
ld hl, PlayerName
|
||||||
|
ld de, MomsName
|
||||||
|
ld bc, NAME_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
; Copy Dude's name to your name
|
||||||
|
ld hl, .Dude
|
||||||
|
ld de, PlayerName
|
||||||
|
ld bc, NAME_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
|
||||||
|
call .LoadDudeData
|
||||||
|
|
||||||
|
xor a
|
||||||
|
ld [hJoyDown], a
|
||||||
|
ld [hJoyPressed], a
|
||||||
|
ld a, [Options]
|
||||||
|
push af
|
||||||
|
and $f8
|
||||||
|
add $3
|
||||||
|
ld [Options], a
|
||||||
|
ld hl, .AutoInput
|
||||||
|
ld a, BANK(.AutoInput)
|
||||||
|
call StartAutoInput
|
||||||
|
callab StartBattle
|
||||||
|
call StopAutoInput
|
||||||
|
pop af
|
||||||
|
|
||||||
|
ld [Options], a
|
||||||
|
ld hl, MomsName
|
||||||
|
ld de, PlayerName
|
||||||
|
ld bc, NAME_LENGTH
|
||||||
|
call CopyBytes
|
||||||
|
ret
|
||||||
|
|
||||||
|
.LoadDudeData: ; 4e5b7 (13:65b7)
|
||||||
|
ld hl, wDudeNumItems
|
||||||
|
ld [hl], 1
|
||||||
|
inc hl
|
||||||
|
ld [hl], POTION
|
||||||
|
inc hl
|
||||||
|
ld [hl], 1
|
||||||
|
inc hl
|
||||||
|
ld [hl], -1
|
||||||
|
ld hl, wDudeNumKeyItems
|
||||||
|
ld [hl], 0
|
||||||
|
inc hl
|
||||||
|
ld [hl], -1
|
||||||
|
ld hl, wDudeNumBalls
|
||||||
|
ld a, 1
|
||||||
|
ld [hli], a
|
||||||
|
ld a, POKE_BALL ; 5
|
||||||
|
ld [hli], a
|
||||||
|
ld [hli], a
|
||||||
|
ld [hl], -1
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Dude: ; 4e5da
|
||||||
|
db "DUDE@"
|
||||||
|
|
||||||
|
.AutoInput: ; 4e5df
|
||||||
|
db NO_INPUT, $ff ; end
|
43
event/catch_tutorial_input.asm
Normal file
43
event/catch_tutorial_input.asm
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
_DudeAutoInput_A:: ; 1de28a
|
||||||
|
ld hl, DudeAutoInput_A
|
||||||
|
jr _DudeAutoInput
|
||||||
|
|
||||||
|
_DudeAutoInput_RightA: ; 1de28f
|
||||||
|
ld hl, DudeAutoInput_RightA
|
||||||
|
jr _DudeAutoInput
|
||||||
|
|
||||||
|
_DudeAutoInput_DownA: ; 1de294
|
||||||
|
ld hl, DudeAutoInput_DownA
|
||||||
|
jr _DudeAutoInput
|
||||||
|
|
||||||
|
_DudeAutoInput: ; 1de299
|
||||||
|
ld a, BANK(DudeAutoInputs)
|
||||||
|
call StartAutoInput
|
||||||
|
ret
|
||||||
|
|
||||||
|
DudeAutoInputs:
|
||||||
|
|
||||||
|
DudeAutoInput_A: ; 1de29f
|
||||||
|
db NO_INPUT, $50
|
||||||
|
db A_BUTTON, $00
|
||||||
|
db NO_INPUT, $ff ; end
|
||||||
|
|
||||||
|
DudeAutoInput_RightA: ; 1de2a5
|
||||||
|
db NO_INPUT, $08
|
||||||
|
db D_RIGHT, $00
|
||||||
|
db NO_INPUT, $08
|
||||||
|
db A_BUTTON, $00
|
||||||
|
db NO_INPUT, $ff ; end
|
||||||
|
|
||||||
|
DudeAutoInput_DownA: ; 1de2af
|
||||||
|
db NO_INPUT, $fe
|
||||||
|
db NO_INPUT, $fe
|
||||||
|
db NO_INPUT, $fe
|
||||||
|
db NO_INPUT, $fe
|
||||||
|
db D_DOWN, $00
|
||||||
|
db NO_INPUT, $fe
|
||||||
|
db NO_INPUT, $fe
|
||||||
|
db NO_INPUT, $fe
|
||||||
|
db NO_INPUT, $fe
|
||||||
|
db A_BUTTON, $00
|
||||||
|
db NO_INPUT, $ff ; end
|
51
event/hidden_items.asm
Normal file
51
event/hidden_items.asm
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
RepelWoreOffScript:: ; 0x13619
|
||||||
|
opentext
|
||||||
|
writetext .text
|
||||||
|
waitbutton
|
||||||
|
closetext
|
||||||
|
end
|
||||||
|
|
||||||
|
.text ; 0x13620
|
||||||
|
; REPEL's effect wore off.
|
||||||
|
text_jump UnknownText_0x1bd308
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
HiddenItemScript:: ; 0x13625
|
||||||
|
opentext
|
||||||
|
copybytetovar EngineBuffer3
|
||||||
|
itemtotext 0, 0
|
||||||
|
writetext .found_text
|
||||||
|
giveitem ITEM_FROM_MEM
|
||||||
|
iffalse .bag_full
|
||||||
|
callasm SetMemEvent
|
||||||
|
specialsound
|
||||||
|
itemnotify
|
||||||
|
jump .finish
|
||||||
|
|
||||||
|
.bag_full ; 0x1363e
|
||||||
|
buttonsound
|
||||||
|
writetext .no_room_text
|
||||||
|
waitbutton
|
||||||
|
|
||||||
|
.finish ; 13643
|
||||||
|
closetext
|
||||||
|
end
|
||||||
|
|
||||||
|
.found_text ; 0x13645
|
||||||
|
; found @ !
|
||||||
|
text_jump UnknownText_0x1bd321
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
.no_room_text ; 0x1364a
|
||||||
|
; But has no space left…
|
||||||
|
text_jump UnknownText_0x1bd331
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
SetMemEvent: ; 1364f
|
||||||
|
ld hl, EngineBuffer1
|
||||||
|
ld a, [hli]
|
||||||
|
ld d, [hl]
|
||||||
|
ld e, a
|
||||||
|
ld b, SET_FLAG
|
||||||
|
call EventFlagAction
|
||||||
|
ret
|
226
event/lucky_number.asm
Normal file
226
event/lucky_number.asm
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
Special_CheckForLuckyNumberWinners: ; 4d87a
|
||||||
|
xor a
|
||||||
|
ld [ScriptVar], a
|
||||||
|
ld [wFoundMatchingIDInParty], a
|
||||||
|
ld a, [PartyCount]
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
ld d, a
|
||||||
|
ld hl, PartyMon1ID
|
||||||
|
ld bc, PartySpecies
|
||||||
|
.PartyLoop:
|
||||||
|
ld a, [bc]
|
||||||
|
inc bc
|
||||||
|
cp EGG
|
||||||
|
call nz, .CompareLuckyNumberToMonID
|
||||||
|
push bc
|
||||||
|
ld bc, PARTYMON_STRUCT_LENGTH
|
||||||
|
add hl, bc
|
||||||
|
pop bc
|
||||||
|
dec d
|
||||||
|
jr nz, .PartyLoop
|
||||||
|
ld a, BANK(sBox)
|
||||||
|
call GetSRAMBank
|
||||||
|
ld a, [sBoxCount]
|
||||||
|
and a
|
||||||
|
jr z, .SkipOpenBox
|
||||||
|
ld d, a
|
||||||
|
ld hl, sBoxMon1ID
|
||||||
|
ld bc, sBoxSpecies
|
||||||
|
.OpenBoxLoop:
|
||||||
|
ld a, [bc]
|
||||||
|
inc bc
|
||||||
|
cp EGG
|
||||||
|
jr z, .SkipOpenBoxMon
|
||||||
|
call .CompareLuckyNumberToMonID
|
||||||
|
jr nc, .SkipOpenBoxMon
|
||||||
|
ld a, 1
|
||||||
|
ld [wFoundMatchingIDInParty], a
|
||||||
|
|
||||||
|
.SkipOpenBoxMon:
|
||||||
|
push bc
|
||||||
|
ld bc, BOXMON_STRUCT_LENGTH
|
||||||
|
add hl, bc
|
||||||
|
pop bc
|
||||||
|
dec d
|
||||||
|
jr nz, .OpenBoxLoop
|
||||||
|
|
||||||
|
.SkipOpenBox:
|
||||||
|
call CloseSRAM
|
||||||
|
ld c, $0
|
||||||
|
.BoxesLoop:
|
||||||
|
ld a, [wCurBox]
|
||||||
|
and $f
|
||||||
|
cp c
|
||||||
|
jr z, .SkipBox
|
||||||
|
ld hl, .BoxBankAddresses
|
||||||
|
ld b, 0
|
||||||
|
add hl, bc
|
||||||
|
add hl, bc
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hli]
|
||||||
|
call GetSRAMBank
|
||||||
|
ld a, [hli]
|
||||||
|
ld h, [hl]
|
||||||
|
ld l, a ; hl now contains the address of the loaded box in SRAM
|
||||||
|
ld a, [hl]
|
||||||
|
and a
|
||||||
|
jr z, .SkipBox ; no mons in this box
|
||||||
|
push bc
|
||||||
|
ld b, h
|
||||||
|
ld c, l
|
||||||
|
inc bc
|
||||||
|
ld de, sBoxMon1ID - sBox
|
||||||
|
add hl, de
|
||||||
|
ld d, a
|
||||||
|
.BoxNLoop:
|
||||||
|
ld a, [bc]
|
||||||
|
inc bc
|
||||||
|
cp EGG
|
||||||
|
jr z, .SkipBoxMon
|
||||||
|
|
||||||
|
call .CompareLuckyNumberToMonID ; sets ScriptVar and CurPartySpecies appropriately
|
||||||
|
jr nc, .SkipBoxMon
|
||||||
|
ld a, 1
|
||||||
|
ld [wFoundMatchingIDInParty], a
|
||||||
|
|
||||||
|
.SkipBoxMon:
|
||||||
|
push bc
|
||||||
|
ld bc, BOXMON_STRUCT_LENGTH
|
||||||
|
add hl, bc
|
||||||
|
pop bc
|
||||||
|
dec d
|
||||||
|
jr nz, .BoxNLoop
|
||||||
|
pop bc
|
||||||
|
|
||||||
|
.SkipBox:
|
||||||
|
inc c
|
||||||
|
ld a, c
|
||||||
|
cp NUM_BOXES
|
||||||
|
jr c, .BoxesLoop
|
||||||
|
|
||||||
|
call CloseSRAM
|
||||||
|
ld a, [ScriptVar]
|
||||||
|
and a
|
||||||
|
ret z ; found nothing
|
||||||
|
callba TrainerRankings_LuckyNumberShow
|
||||||
|
ld a, [wFoundMatchingIDInParty]
|
||||||
|
and a
|
||||||
|
push af
|
||||||
|
ld a, [CurPartySpecies]
|
||||||
|
ld [wNamedObjectIndexBuffer], a
|
||||||
|
call GetPokemonName
|
||||||
|
ld hl, .FoundPartymonText
|
||||||
|
pop af
|
||||||
|
jr z, .print
|
||||||
|
ld hl, .FoundBoxmonText
|
||||||
|
|
||||||
|
.print
|
||||||
|
jp PrintText
|
||||||
|
|
||||||
|
.CompareLuckyNumberToMonID: ; 4d939
|
||||||
|
push bc
|
||||||
|
push de
|
||||||
|
push hl
|
||||||
|
ld d, h
|
||||||
|
ld e, l
|
||||||
|
ld hl, Buffer1
|
||||||
|
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
|
||||||
|
call PrintNum
|
||||||
|
ld hl, LuckyNumberDigit1Buffer
|
||||||
|
ld de, wLuckyIDNumber
|
||||||
|
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
|
||||||
|
call PrintNum
|
||||||
|
ld b, 5
|
||||||
|
ld c, 0
|
||||||
|
ld hl, LuckyNumberDigit5Buffer
|
||||||
|
ld de, Buffer5
|
||||||
|
.loop
|
||||||
|
ld a, [de]
|
||||||
|
cp [hl]
|
||||||
|
jr nz, .done
|
||||||
|
dec de
|
||||||
|
dec hl
|
||||||
|
inc c
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
|
||||||
|
.done
|
||||||
|
pop hl
|
||||||
|
push hl
|
||||||
|
ld de, -6
|
||||||
|
add hl, de
|
||||||
|
ld a, [hl]
|
||||||
|
pop hl
|
||||||
|
pop de
|
||||||
|
push af
|
||||||
|
ld a, c
|
||||||
|
ld b, 1
|
||||||
|
cp 5
|
||||||
|
jr z, .okay
|
||||||
|
ld b, 2
|
||||||
|
cp 3
|
||||||
|
jr nc, .okay
|
||||||
|
ld b, 3
|
||||||
|
cp 2
|
||||||
|
jr nz, .nomatch
|
||||||
|
|
||||||
|
.okay
|
||||||
|
inc b
|
||||||
|
ld a, [ScriptVar]
|
||||||
|
and a
|
||||||
|
jr z, .bettermatch
|
||||||
|
cp b
|
||||||
|
jr c, .nomatch
|
||||||
|
|
||||||
|
.bettermatch
|
||||||
|
dec b
|
||||||
|
ld a, b
|
||||||
|
ld [ScriptVar], a
|
||||||
|
pop bc
|
||||||
|
ld a, b
|
||||||
|
ld [CurPartySpecies], a
|
||||||
|
pop bc
|
||||||
|
scf
|
||||||
|
ret
|
||||||
|
|
||||||
|
.nomatch
|
||||||
|
pop bc
|
||||||
|
pop bc
|
||||||
|
and a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.BoxBankAddresses: ; 4d99f
|
||||||
|
dba sBox1
|
||||||
|
dba sBox2
|
||||||
|
dba sBox3
|
||||||
|
dba sBox4
|
||||||
|
dba sBox5
|
||||||
|
dba sBox6
|
||||||
|
dba sBox7
|
||||||
|
dba sBox8
|
||||||
|
dba sBox9
|
||||||
|
dba sBox10
|
||||||
|
dba sBox11
|
||||||
|
dba sBox12
|
||||||
|
dba sBox13
|
||||||
|
dba sBox14
|
||||||
|
|
||||||
|
.FoundPartymonText: ; 0x4d9c9
|
||||||
|
; Congratulations! We have a match with the ID number of @ in your party.
|
||||||
|
text_jump UnknownText_0x1c1261
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
.FoundBoxmonText: ; 0x4d9ce
|
||||||
|
; Congratulations! We have a match with the ID number of @ in your PC BOX.
|
||||||
|
text_jump UnknownText_0x1c12ae
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
Special_PrintTodaysLuckyNumber: ; 4d9d3
|
||||||
|
ld hl, StringBuffer3
|
||||||
|
ld de, wLuckyIDNumber
|
||||||
|
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
|
||||||
|
call PrintNum
|
||||||
|
ld a, "@"
|
||||||
|
ld [StringBuffer3 + 5], a
|
||||||
|
ret
|
103
event/move_tutor.asm
Normal file
103
event/move_tutor.asm
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
Special_MoveTutor: ; 4925b
|
||||||
|
call FadeToMenu
|
||||||
|
call ClearBGPalettes
|
||||||
|
call ClearScreen
|
||||||
|
call DelayFrame
|
||||||
|
ld b, SCGB_PACKPALS
|
||||||
|
call GetSGBLayout
|
||||||
|
xor a
|
||||||
|
ld [wItemAttributeParamBuffer], a
|
||||||
|
call .GetMoveTutorMove
|
||||||
|
ld [wd265], a
|
||||||
|
ld [wPutativeTMHMMove], a
|
||||||
|
call GetMoveName
|
||||||
|
call CopyName1
|
||||||
|
callba ChooseMonToLearnTMHM
|
||||||
|
jr c, .cancel
|
||||||
|
jr .enter_loop
|
||||||
|
|
||||||
|
.loop
|
||||||
|
callba ChooseMonToLearnTMHM_NoRefresh
|
||||||
|
jr c, .cancel
|
||||||
|
.enter_loop
|
||||||
|
call CheckCanLearnMoveTutorMove
|
||||||
|
jr nc, .loop
|
||||||
|
xor a
|
||||||
|
ld [ScriptVar], a
|
||||||
|
jr .quit
|
||||||
|
|
||||||
|
.cancel
|
||||||
|
ld a, -1
|
||||||
|
ld [ScriptVar], a
|
||||||
|
.quit
|
||||||
|
call CloseSubmenu
|
||||||
|
ret
|
||||||
|
|
||||||
|
.GetMoveTutorMove: ; 492a5
|
||||||
|
ld a, [ScriptVar]
|
||||||
|
cp 1
|
||||||
|
jr z, .flamethrower
|
||||||
|
cp 2
|
||||||
|
jr z, .thunderbolt
|
||||||
|
ld a, ICE_BEAM
|
||||||
|
ret
|
||||||
|
|
||||||
|
.flamethrower
|
||||||
|
ld a, FLAMETHROWER
|
||||||
|
ret
|
||||||
|
|
||||||
|
.thunderbolt
|
||||||
|
ld a, THUNDERBOLT
|
||||||
|
ret
|
||||||
|
|
||||||
|
CheckCanLearnMoveTutorMove: ; 492b9
|
||||||
|
ld hl, .MenuDataHeader
|
||||||
|
call LoadMenuDataHeader
|
||||||
|
|
||||||
|
predef CanLearnTMHMMove
|
||||||
|
|
||||||
|
push bc
|
||||||
|
ld a, [CurPartyMon]
|
||||||
|
ld hl, PartyMonNicknames
|
||||||
|
call GetNick
|
||||||
|
pop bc
|
||||||
|
|
||||||
|
ld a, c
|
||||||
|
and a
|
||||||
|
jr nz, .can_learn
|
||||||
|
push de
|
||||||
|
ld de, SFX_WRONG
|
||||||
|
call PlaySFX
|
||||||
|
pop de
|
||||||
|
ld a, BANK(Text_TMHMNotCompatible)
|
||||||
|
ld hl, Text_TMHMNotCompatible
|
||||||
|
call FarPrintText
|
||||||
|
jr .didnt_learn
|
||||||
|
|
||||||
|
.can_learn
|
||||||
|
callab KnowsMove
|
||||||
|
jr c, .didnt_learn
|
||||||
|
|
||||||
|
predef LearnMove
|
||||||
|
ld a, b
|
||||||
|
and a
|
||||||
|
jr z, .didnt_learn
|
||||||
|
|
||||||
|
ld c, HAPPINESS_LEARNMOVE
|
||||||
|
callab ChangeHappiness
|
||||||
|
jr .learned
|
||||||
|
|
||||||
|
.didnt_learn
|
||||||
|
call ExitMenu
|
||||||
|
and a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.learned
|
||||||
|
call ExitMenu
|
||||||
|
scf
|
||||||
|
ret
|
||||||
|
|
||||||
|
.MenuDataHeader: ; 0x4930a
|
||||||
|
db $40 ; flags
|
||||||
|
db 12, 00 ; start coords
|
||||||
|
db 17, 19 ; end coords
|
@ -229,3 +229,7 @@ CopyPokemonName_Buffer1_Buffer3: ; 746e
|
|||||||
ld de, StringBuffer3
|
ld de, StringBuffer3
|
||||||
ld bc, PKMN_NAME_LENGTH
|
ld bc, PKMN_NAME_LENGTH
|
||||||
jp CopyBytes
|
jp CopyBytes
|
||||||
|
|
||||||
|
Predef1: ; 747a
|
||||||
|
; not used
|
||||||
|
ret
|
||||||
|
17
gfx/overworld_font.asm
Normal file
17
gfx/overworld_font.asm
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
LoadOverworldFont:: ; 106594
|
||||||
|
ld de, .font
|
||||||
|
ld hl, VTiles1
|
||||||
|
lb bc, BANK(.font), $80
|
||||||
|
call Get2bpp
|
||||||
|
ld de, .space
|
||||||
|
ld hl, VTiles2 tile $7f
|
||||||
|
lb bc, BANK(.space), 1
|
||||||
|
call Get2bpp
|
||||||
|
ret
|
||||||
|
; 1065ad
|
||||||
|
|
||||||
|
.font
|
||||||
|
INCBIN "gfx/font/overworld.2bpp"
|
||||||
|
|
||||||
|
.space
|
||||||
|
INCBIN "gfx/font/space.2bpp"
|
@ -22,7 +22,7 @@ GoldenrodNameRaterBookshelf:
|
|||||||
GoldenrodNameRaterRadio:
|
GoldenrodNameRaterRadio:
|
||||||
jumpstd radio2
|
jumpstd radio2
|
||||||
|
|
||||||
INCLUDE "text/sweethoney.asm"
|
INCLUDE "text/unused_sweet_honey.asm"
|
||||||
|
|
||||||
GoldenrodNameRater_MapEventHeader:
|
GoldenrodNameRater_MapEventHeader:
|
||||||
; filler
|
; filler
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
String_89116:
|
||||||
|
db "-----@"
|
||||||
|
|
||||||
String_8911c: ; 8911c
|
String_8911c: ; 8911c
|
||||||
db "でんわばんごうが ただしく" ; Phone number is not
|
db "でんわばんごうが ただしく" ; Phone number is not
|
||||||
|
92
text/unused_gen_1_trainers.asm
Normal file
92
text/unused_gen_1_trainers.asm
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
GetGen1TrainerClassName: ; 50a28
|
||||||
|
; XXX
|
||||||
|
ld hl, .Strings
|
||||||
|
ld a, [TrainerClass]
|
||||||
|
dec a
|
||||||
|
ld c, a
|
||||||
|
ld b, 0
|
||||||
|
add hl, bc
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hli]
|
||||||
|
ld h, [hl]
|
||||||
|
ld l, a
|
||||||
|
ld de, StringBuffer1
|
||||||
|
.copy
|
||||||
|
ld a, [hli]
|
||||||
|
ld [de], a
|
||||||
|
inc de
|
||||||
|
cp "@"
|
||||||
|
jr nz, .copy
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Strings: ; 50a42
|
||||||
|
; Untranslated trainer class names from Red.
|
||||||
|
dw .Youngster
|
||||||
|
dw .BugCatcher
|
||||||
|
dw .Lass
|
||||||
|
dw OTClassName
|
||||||
|
dw .JrTrainerM
|
||||||
|
dw .JrTrainerF
|
||||||
|
dw .Pokemaniac
|
||||||
|
dw .SuperNerd
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw .Burglar
|
||||||
|
dw .Engineer
|
||||||
|
dw .Jack
|
||||||
|
dw OTClassName
|
||||||
|
dw .Swimmer
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw .Beauty
|
||||||
|
dw OTClassName
|
||||||
|
dw .Rocker
|
||||||
|
dw .Juggler
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw .Blackbelt
|
||||||
|
dw OTClassName
|
||||||
|
dw .ProfOak
|
||||||
|
dw .Chief
|
||||||
|
dw .Scientist
|
||||||
|
dw OTClassName
|
||||||
|
dw .Rocket
|
||||||
|
dw .CooltrainerM
|
||||||
|
dw .CooltrainerF
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
dw OTClassName
|
||||||
|
|
||||||
|
.Youngster: db "たんパン@"
|
||||||
|
.BugCatcher: db "むしとり@"
|
||||||
|
.Lass: db "ミニスカ@"
|
||||||
|
.JrTrainerM: db "ボーイ@"
|
||||||
|
.JrTrainerF: db "ガール@"
|
||||||
|
.Pokemaniac: db "マニア@"
|
||||||
|
.SuperNerd: db "りかけい@"
|
||||||
|
.Burglar: db "どろぼう@"
|
||||||
|
.Engineer: db "ォヤジ@"
|
||||||
|
.Jack: db "ジャック@"
|
||||||
|
.Swimmer: db "かいパン@"
|
||||||
|
.Beauty: db "おねえさん@"
|
||||||
|
.Rocker: db "グループ@"
|
||||||
|
.Juggler: db "ジャグラー@"
|
||||||
|
.Blackbelt: db "からて@"
|
||||||
|
.ProfOak: db "ォーキド@"
|
||||||
|
.Chief: db "チーフ@"
|
||||||
|
.Scientist: db "けんきゅういん@"
|
||||||
|
.Rocket: db "だんいん@"
|
||||||
|
.CooltrainerM: db "エりート♂@"
|
||||||
|
.CooltrainerF: db "エりート♀@"
|
Loading…
x
Reference in New Issue
Block a user