You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-09-08 08:13:02 -07:00
Remove all code from main.asm (some labeled INCBINs, like out-of-context graphics, are still present)
engine/routines/ stores isolated out-of-context routines as individual files. It might be preferable later to append them to their related engine/ files in unique little SECTIONs, relying on the linkerscript to place them appropriately; or some other organization method. In the meantime, they're now easily findable apart from main.asm's other content.
This commit is contained in:
26
engine/routines/applypokerustick.asm
Normal file
26
engine/routines/applypokerustick.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
|
||||
3
engine/routines/battlestart_copytilemapatonce.asm
Normal file
3
engine/routines/battlestart_copytilemapatonce.asm
Normal file
@@ -0,0 +1,3 @@
|
||||
BattleStart_CopyTilemapAtOnce: ; 8cf4f
|
||||
call CGBOnly_CopyTilemapAtOnce
|
||||
ret
|
||||
47
engine/routines/checkbattlescene.asm
Normal file
47
engine/routines/checkbattlescene.asm
Normal file
@@ -0,0 +1,47 @@
|
||||
CheckBattleScene: ; 4ea44
|
||||
; Return carry if battle scene is turned off.
|
||||
|
||||
ld a, 0
|
||||
ld hl, wLinkMode
|
||||
call GetFarWRAMByte
|
||||
cp LINK_MOBILE
|
||||
jr z, .mobile
|
||||
|
||||
ld a, [Options]
|
||||
bit BATTLE_SCENE, a
|
||||
jr nz, .off
|
||||
|
||||
and a
|
||||
ret
|
||||
|
||||
.mobile
|
||||
ld a, [wcd2f]
|
||||
and a
|
||||
jr nz, .from_wram
|
||||
|
||||
ld a, $4
|
||||
call GetSRAMBank
|
||||
ld a, [$a60c]
|
||||
ld c, a
|
||||
call CloseSRAM
|
||||
|
||||
ld a, c
|
||||
bit 0, c
|
||||
jr z, .off
|
||||
|
||||
and a
|
||||
ret
|
||||
|
||||
.from_wram
|
||||
ld a, $5
|
||||
ld hl, w5_dc00
|
||||
call GetFarWRAMByte
|
||||
bit 0, a
|
||||
jr z, .off
|
||||
|
||||
and a
|
||||
ret
|
||||
|
||||
.off
|
||||
scf
|
||||
ret
|
||||
74
engine/routines/checknickerrors.asm
Normal file
74
engine/routines/checknickerrors.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
|
||||
25
engine/routines/checkpokerus.asm
Normal file
25
engine/routines/checkpokerus.asm
Normal file
@@ -0,0 +1,25 @@
|
||||
CheckPokerus: ; 4d860
|
||||
; Return carry if a monster in your party has Pokerus
|
||||
|
||||
; Get number of monsters to iterate over
|
||||
ld a, [PartyCount]
|
||||
and a
|
||||
jr z, .NoPokerus
|
||||
ld b, a
|
||||
; Check each monster in the party for Pokerus
|
||||
ld hl, PartyMon1PokerusStatus
|
||||
ld de, PARTYMON_STRUCT_LENGTH
|
||||
.Check:
|
||||
ld a, [hl]
|
||||
and $0f ; only the bottom nybble is used
|
||||
jr nz, .HasPokerus
|
||||
; Next PartyMon
|
||||
add hl, de
|
||||
dec b
|
||||
jr nz, .Check
|
||||
.NoPokerus:
|
||||
and a
|
||||
ret
|
||||
.HasPokerus:
|
||||
scf
|
||||
ret
|
||||
20
engine/routines/checksave.asm
Normal file
20
engine/routines/checksave.asm
Normal file
@@ -0,0 +1,20 @@
|
||||
CheckSave:: ; 4cffe
|
||||
ld a, BANK(sCheckValue1) ; BANK(sCheckValue2)
|
||||
call GetSRAMBank
|
||||
ld a, [sCheckValue1]
|
||||
ld b, a
|
||||
ld a, [sCheckValue2]
|
||||
ld c, a
|
||||
call CloseSRAM
|
||||
ld a, b
|
||||
cp SAVE_CHECK_VALUE_1
|
||||
jr nz, .ok
|
||||
ld a, c
|
||||
cp SAVE_CHECK_VALUE_2
|
||||
jr nz, .ok
|
||||
ld c, $1
|
||||
ret
|
||||
|
||||
.ok
|
||||
ld c, $0
|
||||
ret
|
||||
19
engine/routines/checktime.asm
Normal file
19
engine/routines/checktime.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
|
||||
80
engine/routines/consumehelditem.asm
Normal file
80
engine/routines/consumehelditem.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
|
||||
farcall 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
|
||||
229
engine/routines/correcterrorsinplayerparty.asm
Normal file
229
engine/routines/correcterrorsinplayerparty.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
|
||||
farcall 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
|
||||
farcall 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
|
||||
20
engine/routines/drawkrispackgfx.asm
Normal file
20
engine/routines/drawkrispackgfx.asm
Normal file
@@ -0,0 +1,20 @@
|
||||
DrawKrisPackGFX: ; 48e81
|
||||
ld hl, PackFGFXPointers
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld d, [hl]
|
||||
ld hl, VTiles2 tile $50
|
||||
lb bc, BANK(PackFGFX), 15
|
||||
call Request2bpp
|
||||
ret
|
||||
|
||||
PackFGFXPointers: ; 48e93
|
||||
dw PackFGFX + (15 tiles) * 1
|
||||
dw PackFGFX + (15 tiles) * 3
|
||||
dw PackFGFX + (15 tiles) * 0
|
||||
dw PackFGFX + (15 tiles) * 2
|
||||
|
||||
PackFGFX: ; 48e9b
|
||||
INCBIN "gfx/pack/pack_f.2bpp"
|
||||
19
engine/routines/emptyallsrambanks.asm
Normal file
19
engine/routines/emptyallsrambanks.asm
Normal file
@@ -0,0 +1,19 @@
|
||||
EmptyAllSRAMBanks: ; 4cf1f
|
||||
ld a, $0
|
||||
call .EmptyBank
|
||||
ld a, $1
|
||||
call .EmptyBank
|
||||
ld a, $2
|
||||
call .EmptyBank
|
||||
ld a, $3
|
||||
call .EmptyBank
|
||||
ret
|
||||
|
||||
.EmptyBank: ; 4cf34
|
||||
call GetSRAMBank
|
||||
ld hl, SRAM_Begin
|
||||
ld bc, SRAM_End - SRAM_Begin
|
||||
xor a
|
||||
call ByteFill
|
||||
call CloseSRAM
|
||||
ret
|
||||
70
engine/routines/flagpredef.asm
Normal file
70
engine/routines/flagpredef.asm
Normal file
@@ -0,0 +1,70 @@
|
||||
FlagPredef: ; 4d7c1
|
||||
; Perform action b on flag c in flag array hl.
|
||||
; If checking a flag, check flag array d:hl unless d is 0.
|
||||
|
||||
; For longer flag arrays, see FlagAction.
|
||||
|
||||
push hl
|
||||
push bc
|
||||
|
||||
; Divide by 8 to get the byte we want.
|
||||
push bc
|
||||
srl c
|
||||
srl c
|
||||
srl c
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
pop bc
|
||||
|
||||
; Which bit we want from the byte
|
||||
ld a, c
|
||||
and 7
|
||||
ld c, a
|
||||
|
||||
; Shift left until we can mask the bit
|
||||
ld a, 1
|
||||
jr z, .shifted
|
||||
.shift
|
||||
add a
|
||||
dec c
|
||||
jr nz, .shift
|
||||
.shifted
|
||||
ld c, a
|
||||
|
||||
; What are we doing to this flag?
|
||||
dec b
|
||||
jr z, .set ; 1
|
||||
dec b
|
||||
jr z, .check ; 2
|
||||
|
||||
.reset
|
||||
ld a, c
|
||||
cpl
|
||||
and [hl]
|
||||
ld [hl], a
|
||||
jr .done
|
||||
|
||||
.set
|
||||
ld a, [hl]
|
||||
or c
|
||||
ld [hl], a
|
||||
jr .done
|
||||
|
||||
.check
|
||||
ld a, d
|
||||
cp 0
|
||||
jr nz, .farcheck
|
||||
|
||||
ld a, [hl]
|
||||
and c
|
||||
jr .done
|
||||
|
||||
.farcheck
|
||||
call GetFarByte
|
||||
and c
|
||||
|
||||
.done
|
||||
pop bc
|
||||
pop hl
|
||||
ld c, a
|
||||
ret
|
||||
27
engine/routines/getbreedmonlevelgrowth.asm
Normal file
27
engine/routines/getbreedmonlevelgrowth.asm
Normal file
@@ -0,0 +1,27 @@
|
||||
GetBreedMon1LevelGrowth: ; e698
|
||||
ld hl, wBreedMon1Stats
|
||||
ld de, TempMon
|
||||
ld bc, BOXMON_STRUCT_LENGTH
|
||||
call CopyBytes
|
||||
callfar CalcLevel
|
||||
ld a, [wBreedMon1Level]
|
||||
ld b, a
|
||||
ld a, d
|
||||
ld e, a
|
||||
sub b
|
||||
ld d, a
|
||||
ret
|
||||
|
||||
GetBreedMon2LevelGrowth: ; e6b3
|
||||
ld hl, wBreedMon2Stats
|
||||
ld de, TempMon
|
||||
ld bc, BOXMON_STRUCT_LENGTH
|
||||
call CopyBytes
|
||||
callfar CalcLevel
|
||||
ld a, [wBreedMon2Level]
|
||||
ld b, a
|
||||
ld a, d
|
||||
ld e, a
|
||||
sub b
|
||||
ld d, a
|
||||
ret
|
||||
88
engine/routines/getpokeballwobble.asm
Executable file
88
engine/routines/getpokeballwobble.asm
Executable file
@@ -0,0 +1,88 @@
|
||||
GetPokeBallWobble: ; f971 (3:7971)
|
||||
; Returns whether a Poke Ball will wobble in the catch animation.
|
||||
; Whether a Pokemon is caught is determined beforehand.
|
||||
|
||||
push de
|
||||
|
||||
ld a, [rSVBK]
|
||||
ld d, a
|
||||
push de
|
||||
|
||||
ld a, 1 ; BANK(Buffer2)
|
||||
ld [rSVBK], a
|
||||
|
||||
ld a, [Buffer2]
|
||||
inc a
|
||||
ld [Buffer2], a
|
||||
|
||||
; Wobble up to 3 times.
|
||||
cp 3 + 1
|
||||
jr z, .finished
|
||||
|
||||
ld a, [wWildMon]
|
||||
and a
|
||||
ld c, 0 ; next
|
||||
jr nz, .done
|
||||
|
||||
ld hl, .WobbleProbabilities
|
||||
ld a, [Buffer1]
|
||||
ld b, a
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr nc, .checkwobble
|
||||
inc hl
|
||||
jr .loop
|
||||
|
||||
.checkwobble
|
||||
ld b, [hl]
|
||||
call Random
|
||||
cp b
|
||||
ld c, 0 ; next
|
||||
jr c, .done
|
||||
ld c, 2 ; escaped
|
||||
jr .done
|
||||
|
||||
.finished
|
||||
ld a, [wWildMon]
|
||||
and a
|
||||
ld c, 1 ; caught
|
||||
jr nz, .done
|
||||
ld c, 2 ; escaped
|
||||
|
||||
.done
|
||||
pop de
|
||||
ld e, a
|
||||
ld a, d
|
||||
ld [rSVBK], a
|
||||
ld a, e
|
||||
pop de
|
||||
ret
|
||||
|
||||
.WobbleProbabilities: ; f9ba
|
||||
; catch rate, chance of wobbling / 255
|
||||
; nLeft/255 = (nRight/255) ** 4
|
||||
db 1, 63
|
||||
db 2, 75
|
||||
db 3, 84
|
||||
db 4, 90
|
||||
db 5, 95
|
||||
db 7, 103
|
||||
db 10, 113
|
||||
db 15, 126
|
||||
db 20, 134
|
||||
db 30, 149
|
||||
db 40, 160
|
||||
db 50, 169
|
||||
db 60, 177
|
||||
db 80, 191
|
||||
db 100, 201
|
||||
db 120, 211
|
||||
db 140, 220
|
||||
db 160, 227
|
||||
db 180, 234
|
||||
db 200, 240
|
||||
db 220, 246
|
||||
db 240, 251
|
||||
db 254, 253
|
||||
db 255, 255
|
||||
30
engine/routines/getsquareroot.asm
Normal file
30
engine/routines/getsquareroot.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
|
||||
54
engine/routines/initlist.asm
Normal file
54
engine/routines/initlist.asm
Normal file
@@ -0,0 +1,54 @@
|
||||
InitList: ; 50db9
|
||||
ld a, [wInitListType]
|
||||
|
||||
cp INIT_ENEMYOT_LIST
|
||||
jr nz, .check_party_ot_name
|
||||
ld hl, OTPartyCount
|
||||
ld de, OTPartyMonOT
|
||||
ld a, ENEMY_OT_NAME
|
||||
jr .done
|
||||
|
||||
.check_party_ot_name
|
||||
cp INIT_PLAYEROT_LIST
|
||||
jr nz, .check_mon_name
|
||||
ld hl, PartyCount
|
||||
ld de, PartyMonOT
|
||||
ld a, PARTY_OT_NAME
|
||||
jr .done
|
||||
|
||||
.check_mon_name
|
||||
cp INIT_MON_LIST
|
||||
jr nz, .check_item_name
|
||||
ld hl, CurMart
|
||||
ld de, PokemonNames
|
||||
ld a, PKMN_NAME
|
||||
jr .done
|
||||
|
||||
.check_item_name
|
||||
cp INIT_BAG_ITEM_LIST
|
||||
jr nz, .check_ob_item_name
|
||||
ld hl, NumItems
|
||||
ld de, ItemNames
|
||||
ld a, ITEM_NAME
|
||||
jr .done
|
||||
|
||||
.check_ob_item_name
|
||||
ld hl, CurMart
|
||||
ld de, ItemNames
|
||||
ld a, ITEM_NAME
|
||||
.done
|
||||
ld [wNamedObjectTypeBuffer], a
|
||||
ld a, l
|
||||
ld [wListPointer], a
|
||||
ld a, h
|
||||
ld [wListPointer + 1], a
|
||||
ld a, e
|
||||
ld [wUnusedD102], a
|
||||
ld a, d
|
||||
ld [wUnusedD102 + 1], a
|
||||
ld bc, ItemAttributes
|
||||
ld a, c
|
||||
ld [wItemAttributesPtr], a
|
||||
ld a, b
|
||||
ld [wItemAttributesPtr + 1], a
|
||||
ret
|
||||
25
engine/routines/knowsmove.asm
Normal file
25
engine/routines/knowsmove.asm
Normal file
@@ -0,0 +1,25 @@
|
||||
KnowsMove: ; f9ea
|
||||
ld a, MON_MOVES
|
||||
call GetPartyParamLocation
|
||||
ld a, [wPutativeTMHMMove]
|
||||
ld b, a
|
||||
ld c, NUM_MOVES
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr z, .knows_move
|
||||
dec c
|
||||
jr nz, .loop
|
||||
and a
|
||||
ret
|
||||
|
||||
.knows_move
|
||||
ld hl, .Text_knows
|
||||
call PrintText
|
||||
scf
|
||||
ret
|
||||
|
||||
.Text_knows: ; 0xfa06
|
||||
; knows @ .
|
||||
text_jump UnknownText_0x1c5ea8
|
||||
db "@"
|
||||
4
engine/routines/kurt_selectquantity_interpretjoypad.asm
Normal file
4
engine/routines/kurt_selectquantity_interpretjoypad.asm
Normal file
@@ -0,0 +1,4 @@
|
||||
Kurt_SelectQuantity_InterpretJoypad: ; 27a28
|
||||
call BuySellToss_InterpretJoypad
|
||||
ld b, a
|
||||
ret
|
||||
20
engine/routines/leveluphappinessmod.asm
Normal file
20
engine/routines/leveluphappinessmod.asm
Normal file
@@ -0,0 +1,20 @@
|
||||
LevelUpHappinessMod: ; 2709e
|
||||
ld a, [CurPartyMon]
|
||||
ld hl, PartyMon1CaughtLocation
|
||||
call GetPartyLocation
|
||||
ld a, [hl]
|
||||
and $7f
|
||||
ld d, a
|
||||
ld a, [MapGroup]
|
||||
ld b, a
|
||||
ld a, [MapNumber]
|
||||
ld c, a
|
||||
call GetWorldMapLocation
|
||||
cp d
|
||||
ld c, HAPPINESS_GAINLEVEL
|
||||
jr nz, .ok
|
||||
ld c, HAPPINESS_GAINLEVELATHOME
|
||||
|
||||
.ok
|
||||
callfar ChangeHappiness
|
||||
ret
|
||||
36
engine/routines/loadmappart.asm
Normal file
36
engine/routines/loadmappart.asm
Normal file
@@ -0,0 +1,36 @@
|
||||
_LoadMapPart:: ; 4d15b
|
||||
ld hl, wMisc
|
||||
ld a, [wMetatileStandingY]
|
||||
and a
|
||||
jr z, .top_row
|
||||
ld bc, WMISC_WIDTH * 2
|
||||
add hl, bc
|
||||
|
||||
.top_row
|
||||
ld a, [wMetatileStandingX]
|
||||
and a
|
||||
jr z, .left_column
|
||||
inc hl
|
||||
inc hl
|
||||
|
||||
.left_column
|
||||
decoord 0, 0
|
||||
ld b, SCREEN_HEIGHT
|
||||
.loop
|
||||
ld c, SCREEN_WIDTH
|
||||
.loop2
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .loop2
|
||||
ld a, l
|
||||
add 4
|
||||
ld l, a
|
||||
jr nc, .carry
|
||||
inc h
|
||||
|
||||
.carry
|
||||
dec b
|
||||
jr nz, .loop
|
||||
ret
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user