You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-04-09 05:44:44 -07:00
Split up banks 1-3 of main.asm
This commit is contained in:
@@ -980,7 +980,7 @@ BattleAnimCmd_RaiseSub: ; cc640 (33:4640)
|
||||
GetSubstitutePic: ; cc64c
|
||||
|
||||
ld hl, sScratch
|
||||
ld bc, $310
|
||||
ld bc, (7 * 7) tiles
|
||||
.loop
|
||||
xor a
|
||||
ld [hli], a
|
||||
@@ -994,16 +994,16 @@ GetSubstitutePic: ; cc64c
|
||||
jr z, .player
|
||||
|
||||
ld hl, MonsterSpriteGFX + 0 tiles
|
||||
ld de, sScratch + $13 tiles
|
||||
ld de, sScratch + (2 * 7 + 5) tiles
|
||||
call .CopyTile
|
||||
ld hl, MonsterSpriteGFX + 1 tiles
|
||||
ld de, sScratch + $1a tiles
|
||||
ld de, sScratch + (3 * 7 + 5) tiles
|
||||
call .CopyTile
|
||||
ld hl, MonsterSpriteGFX + 2 tiles
|
||||
ld de, sScratch + $14 tiles
|
||||
ld de, sScratch + (2 * 7 + 6) tiles
|
||||
call .CopyTile
|
||||
ld hl, MonsterSpriteGFX + 3 tiles
|
||||
ld de, sScratch + $1b tiles
|
||||
ld de, sScratch + (3 * 7 + 6) tiles
|
||||
call .CopyTile
|
||||
|
||||
ld hl, VTiles2 tile $00
|
||||
@@ -1014,16 +1014,16 @@ GetSubstitutePic: ; cc64c
|
||||
|
||||
.player
|
||||
ld hl, MonsterSpriteGFX + 4 tiles
|
||||
ld de, sScratch + $10 tiles
|
||||
ld de, sScratch + (2 * 6 + 4) tiles
|
||||
call .CopyTile
|
||||
ld hl, MonsterSpriteGFX + 5 tiles
|
||||
ld de, sScratch + $16 tiles
|
||||
ld de, sScratch + (3 * 6 + 4) tiles
|
||||
call .CopyTile
|
||||
ld hl, MonsterSpriteGFX + 6 tiles
|
||||
ld de, sScratch + $11 tiles
|
||||
ld de, sScratch + (2 * 6 + 5) tiles
|
||||
call .CopyTile
|
||||
ld hl, MonsterSpriteGFX + 7 tiles
|
||||
ld de, sScratch + $17 tiles
|
||||
ld de, sScratch + (3 * 6 + 5) tiles
|
||||
call .CopyTile
|
||||
|
||||
ld hl, VTiles2 tile $31
|
||||
|
@@ -7873,7 +7873,7 @@ BattleCommand_Substitute: ; 36e7c
|
||||
ld [hl], a
|
||||
ld [de], a
|
||||
call _CheckBattleScene
|
||||
jr c, .mobile
|
||||
jr c, .no_anim
|
||||
|
||||
xor a
|
||||
ld [wNumHits], a
|
||||
@@ -7883,7 +7883,7 @@ BattleCommand_Substitute: ; 36e7c
|
||||
call LoadAnim
|
||||
jr .finish
|
||||
|
||||
.mobile
|
||||
.no_anim
|
||||
call BattleCommand_RaiseSubNoAnim
|
||||
.finish
|
||||
ld hl, MadeSubstituteText
|
||||
|
@@ -19,8 +19,8 @@
|
||||
const BATTLETOWERACTION_11 ; store 0 in 5:aa8d
|
||||
const BATTLETOWERACTION_12 ; store 1 in 5:aa8d
|
||||
const BATTLETOWERACTION_13 ; check 5:aa8d
|
||||
const BATTLETOWERACTION_14 ; if save file is yours: bit 0, [sbe4f]
|
||||
const BATTLETOWERACTION_15 ; set 0, [sbe4f]
|
||||
const BATTLETOWERACTION_14 ; if save file is yours: bit 0, [s1_be4f]
|
||||
const BATTLETOWERACTION_15 ; set 0, [s1_be4f]
|
||||
const BATTLETOWERACTION_16 ; update time in SRAM bank 5
|
||||
const BATTLETOWERACTION_17 ; check time in SRAM bank 5
|
||||
const BATTLETOWERACTION_18 ; level check
|
||||
|
388
engine/billspctop.asm
Executable file
388
engine/billspctop.asm
Executable file
@@ -0,0 +1,388 @@
|
||||
_BillsPC: ; e3fd
|
||||
call .CheckCanUsePC
|
||||
ret c
|
||||
call .LogIn
|
||||
call .UseBillsPC
|
||||
jp .LogOut
|
||||
|
||||
.CheckCanUsePC: ; e40a (3:640a)
|
||||
ld a, [PartyCount]
|
||||
and a
|
||||
ret nz
|
||||
ld hl, .Text_GottaHavePokemon
|
||||
call MenuTextBoxBackup
|
||||
scf
|
||||
ret
|
||||
|
||||
.Text_GottaHavePokemon: ; 0xe417
|
||||
; You gotta have #MON to call!
|
||||
text_jump UnknownText_0x1c1006
|
||||
db "@"
|
||||
|
||||
.LogIn: ; e41c (3:641c)
|
||||
xor a
|
||||
ld [hBGMapMode], a
|
||||
call LoadStandardMenuDataHeader
|
||||
call ClearPCItemScreen
|
||||
ld hl, Options
|
||||
ld a, [hl]
|
||||
push af
|
||||
set NO_TEXT_SCROLL, [hl]
|
||||
ld hl, .Text_What
|
||||
call PrintText
|
||||
pop af
|
||||
ld [Options], a
|
||||
call LoadFontsBattleExtra
|
||||
ret
|
||||
|
||||
.Text_What: ; 0xe43a
|
||||
; What?
|
||||
text_jump UnknownText_0x1c1024
|
||||
db "@"
|
||||
|
||||
.LogOut: ; e43f (3:643f)
|
||||
call CloseSubmenu
|
||||
ret
|
||||
|
||||
.UseBillsPC: ; e443 (3:6443)
|
||||
ld hl, .MenuDataHeader
|
||||
call LoadMenuDataHeader
|
||||
ld a, $1
|
||||
.loop
|
||||
ld [wMenuCursorBuffer], a
|
||||
call SetPalettes
|
||||
xor a
|
||||
ld [wWhichIndexSet], a
|
||||
ld [hBGMapMode], a
|
||||
call DoNthMenu
|
||||
jr c, .cancel
|
||||
ld a, [wMenuCursorBuffer]
|
||||
push af
|
||||
ld a, [MenuSelection]
|
||||
ld hl, .Jumptable
|
||||
rst JumpTable
|
||||
pop bc
|
||||
ld a, b
|
||||
jr nc, .loop
|
||||
.cancel
|
||||
call CloseWindow
|
||||
ret
|
||||
|
||||
.MenuDataHeader: ; 0xe46f
|
||||
db $40 ; flags
|
||||
db 00, 00 ; start coords
|
||||
db 17, 19 ; end coords
|
||||
dw .MenuData2
|
||||
db 1 ; default option
|
||||
|
||||
.MenuData2: ; 0xe477
|
||||
db $80 ; flags
|
||||
db 0 ; items
|
||||
dw .items
|
||||
dw PlaceMenuStrings
|
||||
dw .strings
|
||||
|
||||
.strings: ; e47f
|
||||
db "WITHDRAW <PK><MN>@"
|
||||
db "DEPOSIT <PK><MN>@"
|
||||
db "CHANGE BOX@"
|
||||
db "MOVE <PK><MN> W/O MAIL@"
|
||||
db "SEE YA!@"
|
||||
|
||||
.Jumptable: ; e4ba (3:64ba)
|
||||
dw BillsPC_WithdrawMenu
|
||||
dw BillsPC_DepositMenu
|
||||
dw BillsPC_ChangeBoxMenu
|
||||
dw BillsPC_MovePKMNMenu
|
||||
dw BillsPC_SeeYa
|
||||
|
||||
.items: ; e4c4
|
||||
db 5
|
||||
db 0 ; WITHDRAW
|
||||
db 1; DEPOSIT
|
||||
db 2 ; CHANGE BOX
|
||||
db 3 ; MOVE PKMN
|
||||
db 4 ; SEE YA!
|
||||
db -1
|
||||
|
||||
BillsPC_SeeYa: ; e4cb
|
||||
scf
|
||||
ret
|
||||
|
||||
BillsPC_MovePKMNMenu: ; e4cd
|
||||
call LoadStandardMenuDataHeader
|
||||
callba IsAnyMonHoldingMail
|
||||
jr nc, .no_mail
|
||||
ld hl, .Text_MonHoldingMail
|
||||
call PrintText
|
||||
jr .quit
|
||||
|
||||
.no_mail
|
||||
callba StartMovePkmnWOMail_SaveGame
|
||||
jr c, .quit
|
||||
callba _MovePKMNWithoutMail
|
||||
call ReturnToMapFromSubmenu
|
||||
call ClearPCItemScreen
|
||||
|
||||
.quit
|
||||
call CloseWindow
|
||||
and a
|
||||
ret
|
||||
|
||||
.Text_MonHoldingMail: ; 0xe4f9
|
||||
; There is a #MON holding MAIL. Please remove the MAIL.
|
||||
text_jump UnknownText_0x1c102b
|
||||
db "@"
|
||||
|
||||
BillsPC_DepositMenu: ; e4fe (3:64fe)
|
||||
call LoadStandardMenuDataHeader
|
||||
callba _DepositPKMN
|
||||
call ReturnToMapFromSubmenu
|
||||
call ClearPCItemScreen
|
||||
call CloseWindow
|
||||
and a
|
||||
ret
|
||||
|
||||
Functione512: ; unused
|
||||
ld a, [PartyCount]
|
||||
and a
|
||||
jr z, .no_pkmn
|
||||
cp 2
|
||||
jr c, .only_one_pkmn
|
||||
and a
|
||||
ret
|
||||
|
||||
.no_pkmn
|
||||
ld hl, .Text_NoPKMN
|
||||
call MenuTextBoxBackup
|
||||
scf
|
||||
ret
|
||||
|
||||
.only_one_pkmn
|
||||
ld hl, .Text_ItsYourLastPKMN
|
||||
call MenuTextBoxBackup
|
||||
scf
|
||||
ret
|
||||
|
||||
.Text_NoPKMN: ; 0xe52e
|
||||
; You don't have a single #MON!
|
||||
text_jump UnknownText_0x1c1062
|
||||
db "@"
|
||||
|
||||
.Text_ItsYourLastPKMN: ; 0xe533
|
||||
; You can't deposit your last #MON!
|
||||
text_jump UnknownText_0x1c1080
|
||||
db "@"
|
||||
|
||||
CheckCurPartyMonFainted: ; e538
|
||||
ld hl, PartyMon1HP
|
||||
ld de, PARTYMON_STRUCT_LENGTH
|
||||
ld b, $0
|
||||
.loop
|
||||
ld a, [CurPartyMon]
|
||||
cp b
|
||||
jr z, .skip
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
jr nz, .notfainted
|
||||
dec hl
|
||||
|
||||
.skip
|
||||
inc b
|
||||
ld a, [PartyCount]
|
||||
cp b
|
||||
jr z, .done
|
||||
add hl, de
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
scf
|
||||
ret
|
||||
|
||||
.notfainted
|
||||
and a
|
||||
ret
|
||||
|
||||
BillsPC_WithdrawMenu: ; e559 (3:6559)
|
||||
call LoadStandardMenuDataHeader
|
||||
callba _WithdrawPKMN
|
||||
call ReturnToMapFromSubmenu
|
||||
call ClearPCItemScreen
|
||||
call CloseWindow
|
||||
and a
|
||||
ret
|
||||
|
||||
Functione56d: ; unused
|
||||
ld a, [PartyCount]
|
||||
cp PARTY_LENGTH
|
||||
jr nc, .asm_e576
|
||||
and a
|
||||
ret
|
||||
|
||||
.asm_e576
|
||||
ld hl, UnknownText_0xe57e
|
||||
call MenuTextBoxBackup
|
||||
scf
|
||||
ret
|
||||
|
||||
UnknownText_0xe57e: ; 0xe57e
|
||||
; You can't take any more #MON.
|
||||
text_jump UnknownText_0x1c10a2
|
||||
db "@"
|
||||
|
||||
BillsPC_ChangeBoxMenu: ; e583 (3:6583)
|
||||
callba _ChangeBox
|
||||
and a
|
||||
ret
|
||||
|
||||
ClearPCItemScreen: ; e58b
|
||||
call DisableSpriteUpdates
|
||||
xor a
|
||||
ld [hBGMapMode], a
|
||||
call ClearBGPalettes
|
||||
call ClearSprites
|
||||
hlcoord 0, 0
|
||||
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
|
||||
ld a, " "
|
||||
call ByteFill
|
||||
hlcoord 0,0
|
||||
lb bc, 10, 18
|
||||
call TextBox
|
||||
hlcoord 0,12
|
||||
lb bc, 4, 18
|
||||
call TextBox
|
||||
call WaitBGMap2
|
||||
call SetPalettes ; load regular palettes?
|
||||
ret
|
||||
|
||||
CopyBoxmonToTempMon: ; e5bb
|
||||
ld a, [CurPartyMon]
|
||||
ld hl, sBoxMon1Species
|
||||
ld bc, BOXMON_STRUCT_LENGTH
|
||||
call AddNTimes
|
||||
ld de, TempMonSpecies
|
||||
ld bc, BOXMON_STRUCT_LENGTH
|
||||
ld a, BANK(sBoxMon1Species)
|
||||
call GetSRAMBank
|
||||
call CopyBytes
|
||||
call CloseSRAM
|
||||
ret
|
||||
|
||||
Functione5d9: ; unreferenced
|
||||
ld a, [wCurBox]
|
||||
cp b
|
||||
jr z, .same_box
|
||||
ld a, b
|
||||
ld hl, .BoxAddrs
|
||||
ld bc, 3
|
||||
call AddNTimes
|
||||
ld a, [hli]
|
||||
push af
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
pop af
|
||||
jr .okay
|
||||
|
||||
.same_box
|
||||
ld a, BANK(sBoxCount)
|
||||
ld hl, sBoxCount
|
||||
|
||||
.okay
|
||||
call GetSRAMBank
|
||||
ld a, [hl]
|
||||
ld bc, 1 + MONS_PER_BOX + 1
|
||||
add hl, bc
|
||||
ld b, a
|
||||
ld c, $0
|
||||
ld de, wc608
|
||||
ld a, b
|
||||
and a
|
||||
jr z, .empty_box
|
||||
.loop
|
||||
push hl
|
||||
push bc
|
||||
ld a, c
|
||||
ld bc, 0
|
||||
add hl, bc
|
||||
ld bc, BOXMON_STRUCT_LENGTH
|
||||
call AddNTimes
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld [CurSpecies], a
|
||||
call GetBaseData
|
||||
pop bc
|
||||
pop hl
|
||||
|
||||
push hl
|
||||
push bc
|
||||
ld a, c
|
||||
ld bc, MONS_PER_BOX * (BOXMON_STRUCT_LENGTH + NAME_LENGTH)
|
||||
add hl, bc
|
||||
call SkipNames
|
||||
call CopyBytes
|
||||
pop bc
|
||||
pop hl
|
||||
|
||||
push hl
|
||||
push bc
|
||||
ld a, c
|
||||
ld bc, MON_LEVEL
|
||||
add hl, bc
|
||||
ld bc, BOXMON_STRUCT_LENGTH
|
||||
call AddNTimes
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
inc de
|
||||
pop bc
|
||||
pop hl
|
||||
|
||||
push hl
|
||||
push bc
|
||||
ld a, c
|
||||
ld bc, MON_DVS
|
||||
add hl, bc
|
||||
ld bc, BOXMON_STRUCT_LENGTH
|
||||
call AddNTimes
|
||||
ld a, [hli]
|
||||
and $f0
|
||||
ld b, a
|
||||
ld a, [hl]
|
||||
and $f0
|
||||
swap a
|
||||
or b
|
||||
ld b, a
|
||||
ld a, [BaseGender]
|
||||
cp b
|
||||
ld a, $1
|
||||
jr c, .okay2
|
||||
xor a
|
||||
.okay2
|
||||
ld [de], a
|
||||
inc de
|
||||
pop bc
|
||||
pop hl
|
||||
|
||||
inc c
|
||||
dec b
|
||||
jr nz, .loop
|
||||
.empty_box
|
||||
call CloseSRAM
|
||||
ret
|
||||
|
||||
.BoxAddrs: ; e66e
|
||||
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
|
110
engine/health.asm
Executable file
110
engine/health.asm
Executable file
@@ -0,0 +1,110 @@
|
||||
HealParty: ; c658
|
||||
xor a
|
||||
ld [CurPartyMon], a
|
||||
ld hl, PartySpecies
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp -1
|
||||
jr z, .done
|
||||
cp EGG
|
||||
jr z, .next
|
||||
|
||||
push hl
|
||||
call HealPartyMon
|
||||
pop hl
|
||||
|
||||
.next
|
||||
ld a, [CurPartyMon]
|
||||
inc a
|
||||
ld [CurPartyMon], a
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
ret
|
||||
|
||||
HealPartyMon: ; c677
|
||||
ld a, MON_SPECIES
|
||||
call GetPartyParamLocation
|
||||
ld d, h
|
||||
ld e, l
|
||||
|
||||
ld hl, MON_STATUS
|
||||
add hl, de
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
|
||||
ld hl, MON_MAXHP
|
||||
add hl, de
|
||||
|
||||
; bc = MON_HP
|
||||
ld b, h
|
||||
ld c, l
|
||||
dec bc
|
||||
dec bc
|
||||
|
||||
ld a, [hli]
|
||||
ld [bc], a
|
||||
inc bc
|
||||
ld a, [hl]
|
||||
ld [bc], a
|
||||
|
||||
callba RestoreAllPP
|
||||
ret
|
||||
|
||||
ComputeHPBarPixels: ; c699
|
||||
; e = bc * (6 * 8) / de
|
||||
ld a, b
|
||||
or c
|
||||
jr z, .zero
|
||||
push hl
|
||||
xor a
|
||||
ld [hMultiplicand + 0], a
|
||||
ld a, b
|
||||
ld [hMultiplicand + 1], a
|
||||
ld a, c
|
||||
ld [hMultiplicand + 2], a
|
||||
ld a, 6 * 8
|
||||
ld [hMultiplier], a
|
||||
call Multiply
|
||||
; We need de to be under 256 because hDivisor is only 1 byte.
|
||||
ld a, d
|
||||
and a
|
||||
jr z, .divide
|
||||
; divide de and hProduct by 4
|
||||
srl d
|
||||
rr e
|
||||
srl d
|
||||
rr e
|
||||
ld a, [hProduct + 2]
|
||||
ld b, a
|
||||
ld a, [hProduct + 3]
|
||||
srl b
|
||||
rr a
|
||||
srl b
|
||||
rr a
|
||||
ld [hDividend + 3], a
|
||||
ld a, b
|
||||
ld [hDividend + 2], a
|
||||
.divide
|
||||
ld a, e
|
||||
ld [hDivisor], a
|
||||
ld b, 4
|
||||
call Divide
|
||||
ld a, [hQuotient + 2]
|
||||
ld e, a
|
||||
pop hl
|
||||
and a
|
||||
ret nz
|
||||
ld e, 1
|
||||
ret
|
||||
|
||||
.zero
|
||||
ld e, 0
|
||||
ret
|
||||
|
||||
AnimateHPBar: ; c6e0
|
||||
call WaitBGMap
|
||||
call _AnimateHPBar
|
||||
call WaitBGMap
|
||||
ret
|
584
engine/items.asm
Executable file
584
engine/items.asm
Executable file
File diff suppressed because it is too large
Load Diff
@@ -451,22 +451,20 @@ Script_ReceivePhoneCall: ; 0x90241
|
||||
; 0x90255
|
||||
|
||||
Script_SpecialBillCall:: ; 0x90255
|
||||
callasm Function9025c
|
||||
callasm .LoadBillScript
|
||||
jump Script_ReceivePhoneCall
|
||||
; 0x9025c
|
||||
|
||||
Function9025c: ; 9025c
|
||||
.LoadBillScript
|
||||
ld e, PHONE_BILL
|
||||
jp LoadCallerScript
|
||||
; 90261
|
||||
|
||||
UnknownScript_0x90261: ; 0x90261
|
||||
callasm Function9026a
|
||||
callasm .LoadElmScript
|
||||
pause 30
|
||||
jump Script_ReceivePhoneCall
|
||||
; 0x9026a
|
||||
|
||||
Function9026a: ; 9026a
|
||||
.LoadElmScript
|
||||
ld e, PHONE_ELM
|
||||
jp LoadCallerScript
|
||||
; 9026f
|
||||
@@ -494,7 +492,6 @@ Phone_CallerTextboxWithName: ; 90292 (24:4292)
|
||||
call Function90363
|
||||
ret
|
||||
|
||||
|
||||
PhoneCall:: ; 9029a
|
||||
ld a, b
|
||||
ld [PhoneScriptBank], a
|
||||
|
856
engine/player_object.asm
Executable file
856
engine/player_object.asm
Executable file
File diff suppressed because it is too large
Load Diff
300
engine/printnum.asm
Executable file
300
engine/printnum.asm
Executable file
@@ -0,0 +1,300 @@
|
||||
_PrintNum:: ; c4c7
|
||||
; Print c digits of the b-byte value from de to hl.
|
||||
; Allows 2 to 7 digits. For 1-digit numbers, add
|
||||
; the value to char "0" instead of calling PrintNum.
|
||||
; Some extra flags can be given in bits 5-7 of b.
|
||||
; Bit 5: money if set (unless left-aligned without leading zeros)
|
||||
; Bit 6: right-aligned if set
|
||||
; Bit 7: print leading zeros if set
|
||||
|
||||
push bc
|
||||
|
||||
bit 5, b
|
||||
jr z, .main
|
||||
bit 7, b
|
||||
jr nz, .moneyflag
|
||||
bit 6, b
|
||||
jr z, .main
|
||||
|
||||
.moneyflag ; 101xxxxx or 011xxxxx
|
||||
ld a, "¥"
|
||||
ld [hli], a
|
||||
res 5, b ; 100xxxxx or 010xxxxx
|
||||
|
||||
.main
|
||||
xor a
|
||||
ld [hPrintNum1], a
|
||||
ld [hPrintNum2], a
|
||||
ld [hPrintNum3], a
|
||||
ld a, b
|
||||
and $f
|
||||
cp 1
|
||||
jr z, .byte
|
||||
cp 2
|
||||
jr z, .word
|
||||
; maximum 3 bytes
|
||||
.long
|
||||
ld a, [de]
|
||||
ld [hPrintNum2], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hPrintNum3], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hPrintNum4], a
|
||||
jr .start
|
||||
|
||||
.word
|
||||
ld a, [de]
|
||||
ld [hPrintNum3], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hPrintNum4], a
|
||||
jr .start
|
||||
|
||||
.byte
|
||||
ld a, [de]
|
||||
ld [hPrintNum4], a
|
||||
|
||||
.start
|
||||
push de
|
||||
|
||||
ld d, b
|
||||
ld a, c
|
||||
swap a
|
||||
and $f
|
||||
ld e, a
|
||||
ld a, c
|
||||
and $f
|
||||
ld b, a
|
||||
ld c, 0
|
||||
cp 2
|
||||
jr z, .two
|
||||
cp 3
|
||||
jr z, .three
|
||||
cp 4
|
||||
jr z, .four
|
||||
cp 5
|
||||
jr z, .five
|
||||
cp 6
|
||||
jr z, .six
|
||||
|
||||
.seven
|
||||
ld a, 1000000 / $10000 % $100
|
||||
ld [hPrintNum5], a
|
||||
ld a, 1000000 / $100 % $100
|
||||
ld [hPrintNum6], a
|
||||
ld a, 1000000 % $100
|
||||
ld [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.six
|
||||
ld a, 100000 / $10000 % $100
|
||||
ld [hPrintNum5], a
|
||||
ld a, 100000 / $100 % $100
|
||||
ld [hPrintNum6], a
|
||||
ld a, 100000 % $100
|
||||
ld [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.five
|
||||
xor a
|
||||
ld [hPrintNum5], a
|
||||
ld a, 10000 / $100
|
||||
ld [hPrintNum6], a
|
||||
ld a, 10000 % $100
|
||||
ld [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.four
|
||||
xor a
|
||||
ld [hPrintNum5], a
|
||||
ld a, 1000 / $100
|
||||
ld [hPrintNum6], a
|
||||
ld a, 1000 % $100
|
||||
ld [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.three
|
||||
xor a
|
||||
ld [hPrintNum5], a
|
||||
xor a
|
||||
ld [hPrintNum6], a
|
||||
ld a, 100
|
||||
ld [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.two
|
||||
dec e
|
||||
jr nz, .two_skip
|
||||
ld a, "0"
|
||||
ld [hPrintNum1], a
|
||||
.two_skip
|
||||
|
||||
ld c, 0
|
||||
ld a, [hPrintNum4]
|
||||
.mod_10
|
||||
cp 10
|
||||
jr c, .modded_10
|
||||
sub 10
|
||||
inc c
|
||||
jr .mod_10
|
||||
.modded_10
|
||||
|
||||
ld b, a
|
||||
ld a, [hPrintNum1]
|
||||
or c
|
||||
jr nz, .money
|
||||
call .PrintLeadingZero
|
||||
jr .money_leading_zero
|
||||
|
||||
.money
|
||||
call .PrintYen
|
||||
push af
|
||||
ld a, "0"
|
||||
add c
|
||||
ld [hl], a
|
||||
pop af
|
||||
ld [hPrintNum1], a
|
||||
inc e
|
||||
dec e
|
||||
jr nz, .money_leading_zero
|
||||
inc hl
|
||||
ld [hl], $f2 ; XXX
|
||||
|
||||
.money_leading_zero
|
||||
call .AdvancePointer
|
||||
call .PrintYen
|
||||
ld a, "0"
|
||||
add b
|
||||
ld [hli], a
|
||||
|
||||
pop de
|
||||
pop bc
|
||||
ret
|
||||
|
||||
.PrintYen: ; c5ba
|
||||
push af
|
||||
ld a, [hPrintNum1]
|
||||
and a
|
||||
jr nz, .stop
|
||||
bit 5, d
|
||||
jr z, .stop
|
||||
ld a, "¥"
|
||||
ld [hli], a
|
||||
res 5, d
|
||||
|
||||
.stop
|
||||
pop af
|
||||
ret
|
||||
|
||||
.PrintDigit: ; c5cb (3:45cb)
|
||||
dec e
|
||||
jr nz, .ok
|
||||
ld a, "0"
|
||||
ld [hPrintNum1], a
|
||||
.ok
|
||||
ld c, 0
|
||||
.loop
|
||||
ld a, [hPrintNum5]
|
||||
ld b, a
|
||||
ld a, [hPrintNum2]
|
||||
ld [hPrintNum8], a
|
||||
cp b
|
||||
jr c, .skip1
|
||||
sub b
|
||||
ld [hPrintNum2], a
|
||||
ld a, [hPrintNum6]
|
||||
ld b, a
|
||||
ld a, [hPrintNum3]
|
||||
ld [hPrintNum9], a
|
||||
cp b
|
||||
jr nc, .skip2
|
||||
ld a, [hPrintNum2]
|
||||
or 0
|
||||
jr z, .skip3
|
||||
dec a
|
||||
ld [hPrintNum2], a
|
||||
ld a, [hPrintNum3]
|
||||
.skip2
|
||||
sub b
|
||||
ld [hPrintNum3], a
|
||||
ld a, [hPrintNum7]
|
||||
ld b, a
|
||||
ld a, [hPrintNum4]
|
||||
ld [hPrintNum10], a
|
||||
cp b
|
||||
jr nc, .skip4
|
||||
ld a, [hPrintNum3]
|
||||
and a
|
||||
jr nz, .skip5
|
||||
ld a, [hPrintNum2]
|
||||
and a
|
||||
jr z, .skip6
|
||||
dec a
|
||||
ld [hPrintNum2], a
|
||||
xor a
|
||||
.skip5
|
||||
dec a
|
||||
ld [hPrintNum3], a
|
||||
ld a, [hPrintNum4]
|
||||
.skip4
|
||||
sub b
|
||||
ld [hPrintNum4], a
|
||||
inc c
|
||||
jr .loop
|
||||
.skip6
|
||||
ld a, [hPrintNum9]
|
||||
ld [hPrintNum3], a
|
||||
.skip3
|
||||
ld a, [hPrintNum8]
|
||||
ld [hPrintNum2], a
|
||||
.skip1
|
||||
ld a, [hPrintNum1]
|
||||
or c
|
||||
jr z, .PrintLeadingZero
|
||||
ld a, [hPrintNum1]
|
||||
and a
|
||||
jr nz, .done
|
||||
bit 5, d
|
||||
jr z, .done
|
||||
ld a, "¥"
|
||||
ld [hli], a
|
||||
res 5, d
|
||||
.done
|
||||
ld a, "0"
|
||||
add c
|
||||
ld [hl], a
|
||||
ld [hPrintNum1], a
|
||||
inc e
|
||||
dec e
|
||||
ret nz
|
||||
inc hl
|
||||
ld [hl], "·"
|
||||
ret
|
||||
|
||||
.PrintLeadingZero: ; c644
|
||||
; prints a leading zero unless they are turned off in the flags
|
||||
bit 7, d ; print leading zeroes?
|
||||
ret z
|
||||
ld [hl], "0"
|
||||
ret
|
||||
|
||||
.AdvancePointer: ; c64a
|
||||
; increments the pointer unless leading zeroes are not being printed,
|
||||
; the number is left-aligned, and no nonzero digits have been printed yet
|
||||
bit 7, d ; print leading zeroes?
|
||||
jr nz, .inc
|
||||
bit 6, d ; left alignment or right alignment?
|
||||
jr z, .inc
|
||||
ld a, [hPrintNum1]
|
||||
and a
|
||||
ret z
|
||||
.inc
|
||||
inc hl
|
||||
ret
|
50
engine/sine.asm
Executable file
50
engine/sine.asm
Executable file
@@ -0,0 +1,50 @@
|
||||
_Sine:: ; 84d9
|
||||
; A simple sine function.
|
||||
; Return d * sin(e) in hl.
|
||||
|
||||
; e is a signed 6-bit value.
|
||||
ld a, e
|
||||
and %111111
|
||||
cp %100000
|
||||
jr nc, .negative
|
||||
|
||||
call .ApplySineWave
|
||||
ld a, h
|
||||
ret
|
||||
|
||||
.negative
|
||||
and %011111
|
||||
call .ApplySineWave
|
||||
ld a, h
|
||||
xor -1
|
||||
inc a
|
||||
ret
|
||||
|
||||
.ApplySineWave: ; 84ef
|
||||
ld e, a
|
||||
ld a, d
|
||||
ld d, 0
|
||||
ld hl, .sinewave
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
ld hl, 0
|
||||
|
||||
; Factor amplitude
|
||||
.multiply
|
||||
srl a
|
||||
jr nc, .even
|
||||
add hl, de
|
||||
.even
|
||||
sla e
|
||||
rl d
|
||||
and a
|
||||
jr nz, .multiply
|
||||
ret
|
||||
|
||||
.sinewave: ; 850b
|
||||
; A $20-word table representing a sine wave.
|
||||
; 90 degrees is index $10 at a base amplitude of $100.
|
||||
sine_wave $100
|
238
event/happiness_egg.asm
Executable file
238
event/happiness_egg.asm
Executable file
@@ -0,0 +1,238 @@
|
||||
GetFirstPokemonHappiness: ; 718d
|
||||
ld hl, PartyMon1Happiness
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
ld de, PartySpecies
|
||||
.loop
|
||||
ld a, [de]
|
||||
cp EGG
|
||||
jr nz, .done
|
||||
inc de
|
||||
add hl, bc
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
ld [wd265], a
|
||||
ld a, [hl]
|
||||
ld [ScriptVar], a
|
||||
call GetPokemonName
|
||||
jp CopyPokemonName_Buffer1_Buffer3
|
||||
|
||||
CheckFirstMonIsEgg: ; 71ac
|
||||
ld a, [PartySpecies]
|
||||
ld [wd265], a
|
||||
cp EGG
|
||||
ld a, $1
|
||||
jr z, .egg
|
||||
xor a
|
||||
|
||||
.egg
|
||||
ld [ScriptVar], a
|
||||
call GetPokemonName
|
||||
jp CopyPokemonName_Buffer1_Buffer3
|
||||
|
||||
ChangeHappiness: ; 71c2
|
||||
; Perform happiness action c on CurPartyMon
|
||||
|
||||
ld a, [CurPartyMon]
|
||||
inc a
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, PartySpecies - 1
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
cp EGG
|
||||
ret z
|
||||
|
||||
push bc
|
||||
ld hl, PartyMon1Happiness
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
ld a, [CurPartyMon]
|
||||
call AddNTimes
|
||||
pop bc
|
||||
|
||||
ld d, h
|
||||
ld e, l
|
||||
|
||||
push de
|
||||
ld a, [de]
|
||||
cp 100
|
||||
ld e, 0
|
||||
jr c, .ok
|
||||
inc e
|
||||
cp 200
|
||||
jr c, .ok
|
||||
inc e
|
||||
|
||||
.ok
|
||||
dec c
|
||||
ld b, 0
|
||||
ld hl, .Actions
|
||||
rept 3
|
||||
add hl, bc
|
||||
endr
|
||||
ld d, 0
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
cp 100
|
||||
pop de
|
||||
|
||||
ld a, [de]
|
||||
jr nc, .negative
|
||||
add [hl]
|
||||
jr nc, .done
|
||||
ld a, -1
|
||||
jr .done
|
||||
|
||||
.negative
|
||||
add [hl]
|
||||
jr c, .done
|
||||
xor a
|
||||
|
||||
.done
|
||||
ld [de], a
|
||||
ld a, [wBattleMode]
|
||||
and a
|
||||
ret z
|
||||
ld a, [CurPartyMon]
|
||||
ld b, a
|
||||
ld a, [wPartyMenuCursor]
|
||||
cp b
|
||||
ret nz
|
||||
ld a, [de]
|
||||
ld [BattleMonHappiness], a
|
||||
ret
|
||||
|
||||
.Actions
|
||||
db +5, +3, +2 ; Gained a level
|
||||
db +5, +3, +2 ; Vitamin
|
||||
db +1, +1, +0 ; X Item
|
||||
db +3, +2, +1 ; Battled a Gym Leader
|
||||
db +1, +1, +0 ; Learned a move
|
||||
db -1, -1, -1 ; Lost to an enemy
|
||||
db -5, -5, -10 ; Fainted due to poison
|
||||
db -5, -5, -10 ; Lost to a much stronger enemy
|
||||
db +1, +1, +1 ; Haircut (Y1)
|
||||
db +3, +3, +1 ; Haircut (Y2)
|
||||
db +5, +5, +2 ; Haircut (Y3)
|
||||
db +1, +1, +1 ; Haircut (O1)
|
||||
db +3, +3, +1 ; Haircut (O2)
|
||||
db +10, +10, +4 ; Haircut (O3)
|
||||
db -5, -5, -10 ; Used Heal Powder or Energypowder (bitter)
|
||||
db -10, -10, -15 ; Used Energy Root (bitter)
|
||||
db -15, -15, -20 ; Used Revival Herb (bitter)
|
||||
db +3, +3, +1 ; Grooming
|
||||
db +10, +6, +4 ; Gained a level in the place where it was caught
|
||||
|
||||
StepHappiness:: ; 725a
|
||||
; Raise the party's happiness by 1 point every other step cycle.
|
||||
|
||||
ld hl, wHappinessStepCount
|
||||
ld a, [hl]
|
||||
inc a
|
||||
and 1
|
||||
ld [hl], a
|
||||
ret nz
|
||||
|
||||
ld de, PartyCount
|
||||
ld a, [de]
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld c, a
|
||||
ld hl, PartyMon1Happiness
|
||||
.loop
|
||||
inc de
|
||||
ld a, [de]
|
||||
cp EGG
|
||||
jr z, .next
|
||||
inc [hl]
|
||||
jr nz, .next
|
||||
ld [hl], $ff
|
||||
|
||||
.next
|
||||
push de
|
||||
ld de, PARTYMON_STRUCT_LENGTH
|
||||
add hl, de
|
||||
pop de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
DaycareStep:: ; 7282
|
||||
|
||||
ld a, [wDaycareMan]
|
||||
bit 0, a
|
||||
jr z, .daycare_lady
|
||||
|
||||
ld a, [wBreedMon1Level] ; level
|
||||
cp 100
|
||||
jr nc, .daycare_lady
|
||||
ld hl, wBreedMon1Exp + 2 ; exp
|
||||
inc [hl]
|
||||
jr nz, .daycare_lady
|
||||
dec hl
|
||||
inc [hl]
|
||||
jr nz, .daycare_lady
|
||||
dec hl
|
||||
inc [hl]
|
||||
ld a, [hl]
|
||||
cp 5242880 / $10000
|
||||
jr c, .daycare_lady
|
||||
ld a, 5242880 / $10000
|
||||
ld [hl], a
|
||||
|
||||
.daycare_lady
|
||||
ld a, [wDaycareLady]
|
||||
bit 0, a
|
||||
jr z, .check_egg
|
||||
|
||||
ld a, [wBreedMon2Level] ; level
|
||||
cp 100
|
||||
jr nc, .check_egg
|
||||
ld hl, wBreedMon2Exp + 2 ; exp
|
||||
inc [hl]
|
||||
jr nz, .check_egg
|
||||
dec hl
|
||||
inc [hl]
|
||||
jr nz, .check_egg
|
||||
dec hl
|
||||
inc [hl]
|
||||
ld a, [hl]
|
||||
cp 5242880 / $10000
|
||||
jr c, .check_egg
|
||||
ld a, 5242880 / $10000
|
||||
ld [hl], a
|
||||
|
||||
.check_egg
|
||||
ld hl, wDaycareMan
|
||||
bit 5, [hl] ; egg
|
||||
ret z
|
||||
ld hl, wStepsToEgg
|
||||
dec [hl]
|
||||
ret nz
|
||||
|
||||
call Random
|
||||
ld [hl], a
|
||||
callab CheckBreedmonCompatibility
|
||||
ld a, [wd265]
|
||||
cp 230
|
||||
ld b, -1 + 32 percent
|
||||
jr nc, .okay
|
||||
ld a, [wd265]
|
||||
cp 170
|
||||
ld b, 16 percent
|
||||
jr nc, .okay
|
||||
ld a, [wd265]
|
||||
cp 110
|
||||
ld b, 12 percent
|
||||
jr nc, .okay
|
||||
ld b, 4 percent
|
||||
|
||||
.okay
|
||||
call Random
|
||||
cp b
|
||||
ret nc
|
||||
ld hl, wDaycareMan
|
||||
res 5, [hl]
|
||||
set 6, [hl]
|
||||
ret
|
1890
event/overworld.asm
Executable file
1890
event/overworld.asm
Executable file
File diff suppressed because it is too large
Load Diff
231
event/special.asm
Executable file
231
event/special.asm
Executable file
@@ -0,0 +1,231 @@
|
||||
SpecialGiveShuckle: ; 7305
|
||||
|
||||
; Adding to the party.
|
||||
xor a
|
||||
ld [MonType], a
|
||||
|
||||
; Level 15 Shuckle.
|
||||
ld a, SHUCKLE
|
||||
ld [CurPartySpecies], a
|
||||
ld a, 15
|
||||
ld [CurPartyLevel], a
|
||||
|
||||
predef TryAddMonToParty
|
||||
jr nc, .NotGiven
|
||||
|
||||
; Caught data.
|
||||
ld b, 0
|
||||
callba SetGiftPartyMonCaughtData
|
||||
|
||||
; Holding a Berry.
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
ld a, [PartyCount]
|
||||
dec a
|
||||
push af
|
||||
push bc
|
||||
ld hl, PartyMon1Item
|
||||
call AddNTimes
|
||||
ld [hl], BERRY
|
||||
pop bc
|
||||
pop af
|
||||
|
||||
; OT ID.
|
||||
ld hl, PartyMon1ID
|
||||
call AddNTimes
|
||||
ld a, $2
|
||||
ld [hli], a
|
||||
ld [hl], $6
|
||||
|
||||
; Nickname.
|
||||
ld a, [PartyCount]
|
||||
dec a
|
||||
ld hl, PartyMonNicknames
|
||||
call SkipNames
|
||||
ld de, SpecialShuckleNick
|
||||
call CopyName2
|
||||
|
||||
; OT.
|
||||
ld a, [PartyCount]
|
||||
dec a
|
||||
ld hl, PartyMonOT
|
||||
call SkipNames
|
||||
ld de, SpecialShuckleOT
|
||||
call CopyName2
|
||||
|
||||
; Engine flag for this event.
|
||||
ld hl, DailyFlags
|
||||
set 5, [hl]
|
||||
; setflag ENGINE_SHUCKLE_GIVEN
|
||||
ld a, 1
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
.NotGiven
|
||||
xor a
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
SpecialShuckleOT:
|
||||
db "MANIA@"
|
||||
SpecialShuckleNick:
|
||||
db "SHUCKIE@"
|
||||
|
||||
SpecialReturnShuckle: ; 737e
|
||||
callba SelectMonFromParty
|
||||
jr c, .refused
|
||||
|
||||
ld a, [CurPartySpecies]
|
||||
cp SHUCKLE
|
||||
jr nz, .DontReturn
|
||||
|
||||
ld a, [CurPartyMon]
|
||||
ld hl, PartyMon1ID
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
call AddNTimes
|
||||
|
||||
; OT ID
|
||||
ld a, [hli]
|
||||
cp 00518 / $100
|
||||
jr nz, .DontReturn
|
||||
ld a, [hl]
|
||||
cp 00518 % $100
|
||||
jr nz, .DontReturn
|
||||
|
||||
; OT
|
||||
ld a, [CurPartyMon]
|
||||
ld hl, PartyMonOT
|
||||
call SkipNames
|
||||
ld de, SpecialShuckleOT
|
||||
.CheckOT
|
||||
ld a, [de]
|
||||
cp [hl]
|
||||
jr nz, .DontReturn
|
||||
cp "@"
|
||||
jr z, .done
|
||||
inc de
|
||||
inc hl
|
||||
jr .CheckOT
|
||||
|
||||
.done
|
||||
callba CheckCurPartyMonFainted
|
||||
jr c, .fainted
|
||||
ld a, [CurPartyMon]
|
||||
ld hl, PartyMon1Happiness
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
call AddNTimes
|
||||
ld a, [hl]
|
||||
cp 150
|
||||
ld a, $3
|
||||
jr nc, .HappyToStayWithYou
|
||||
xor a ; take from pc
|
||||
ld [wPokemonWithdrawDepositParameter], a
|
||||
callab RemoveMonFromPartyOrBox
|
||||
ld a, $2
|
||||
.HappyToStayWithYou
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
.refused
|
||||
ld a, $1
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
.DontReturn
|
||||
xor a
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
.fainted
|
||||
ld a, $4
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
Special_BillsGrandfather: ; 73f7
|
||||
callba SelectMonFromParty
|
||||
jr c, .cancel
|
||||
ld a, [CurPartySpecies]
|
||||
ld [ScriptVar], a
|
||||
ld [wNamedObjectIndexBuffer], a
|
||||
call GetPokemonName
|
||||
jp CopyPokemonName_Buffer1_Buffer3
|
||||
|
||||
.cancel
|
||||
xor a
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
Special_YoungerHaircutBrother: ; 7413
|
||||
ld hl, Data_YoungerHaircutBrother
|
||||
jr MassageOrHaircut
|
||||
|
||||
Special_OlderHaircutBrother: ; 7418
|
||||
ld hl, Data_OlderHaircutBrother
|
||||
jr MassageOrHaircut
|
||||
|
||||
Special_DaisyMassage: ; 741d
|
||||
ld hl, Data_DaisyMassage
|
||||
|
||||
MassageOrHaircut: ; 7420
|
||||
push hl
|
||||
callba SelectMonFromParty
|
||||
pop hl
|
||||
jr c, .nope
|
||||
ld a, [CurPartySpecies]
|
||||
cp EGG
|
||||
jr z, .egg
|
||||
push hl
|
||||
call GetCurNick
|
||||
call CopyPokemonName_Buffer1_Buffer3
|
||||
pop hl
|
||||
call Random
|
||||
; Bug: Subtracting $ff from $ff fails to set c.
|
||||
; This can result in overflow into the next data array.
|
||||
; In the case of getting a massage from Daisy, we bleed
|
||||
; into CopyPokemonName_Buffer1_Buffer3, which passes
|
||||
; $d0 to ChangeHappiness and returns $73 to the script.
|
||||
; The end result is that there is a 0.4% chance your
|
||||
; Pokemon's happiness will not change at all.
|
||||
.loop
|
||||
sub [hl]
|
||||
jr c, .ok
|
||||
rept 3
|
||||
inc hl
|
||||
endr
|
||||
jr .loop
|
||||
|
||||
.ok
|
||||
inc hl
|
||||
ld a, [hli]
|
||||
ld [ScriptVar], a
|
||||
ld c, [hl]
|
||||
call ChangeHappiness
|
||||
ret
|
||||
|
||||
.nope
|
||||
xor a
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
.egg
|
||||
ld a, 1
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
Data_YoungerHaircutBrother: ; 7459
|
||||
db $4c, 2, HAPPINESS_YOUNGCUT1 ; 30% chance
|
||||
db $80, 3, HAPPINESS_YOUNGCUT2 ; 20% chance
|
||||
db $ff, 4, HAPPINESS_YOUNGCUT3 ; 50% chance
|
||||
|
||||
Data_OlderHaircutBrother: ; 7462
|
||||
db $9a, 2, HAPPINESS_OLDERCUT1 ; 60% chance
|
||||
db $4c, 3, HAPPINESS_OLDERCUT2 ; 10% chance
|
||||
db $ff, 4, HAPPINESS_OLDERCUT3 ; 30% chance
|
||||
|
||||
Data_DaisyMassage: ; 746b
|
||||
db $ff, 2, HAPPINESS_MASSAGE ; 99.6% chance
|
||||
|
||||
CopyPokemonName_Buffer1_Buffer3: ; 746e
|
||||
ld hl, StringBuffer1
|
||||
ld de, StringBuffer3
|
||||
ld bc, PKMN_NAME_LENGTH
|
||||
jp CopyBytes
|
@@ -1812,7 +1812,7 @@ GetBlockLocation:: ; 2a66
|
||||
add 6
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld hl, wc801
|
||||
ld hl, OverworldMap + 1
|
||||
add hl, bc
|
||||
ld a, e
|
||||
srl a
|
||||
|
@@ -338,11 +338,13 @@ endr
|
||||
; catch rate than BRN/PSN/PAR, which in turn provide a higher catch rate than
|
||||
; no status effect at all. But instead, it makes BRN/PSN/PAR provide no
|
||||
; benefit.
|
||||
; Uncomment the line below to fix this.
|
||||
ld b, a
|
||||
ld a, [EnemyMonStatus]
|
||||
and 1 << FRZ | SLP
|
||||
ld c, 10
|
||||
jr nz, .addstatus
|
||||
; ld a, [EnemyMonStatus]
|
||||
and a
|
||||
ld c, 5
|
||||
jr nz, .addstatus
|
||||
@@ -3315,3 +3317,5 @@ GetMthMoveOfCurrentMon: ; f969
|
||||
add hl, bc
|
||||
ret
|
||||
; f971
|
||||
|
||||
INCLUDE "items/pokeball_wobble.asm"
|
||||
|
88
items/pokeball_wobble.asm
Executable file
88
items/pokeball_wobble.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
|
@@ -62,7 +62,7 @@ ReceptionistScript_0x9e3e2:
|
||||
opentext
|
||||
writetext Text_BattleTowerWelcomesYou
|
||||
buttonsound
|
||||
writebyte BATTLETOWERACTION_00 ; if new save file: bit 1, [sbe4f]
|
||||
writebyte BATTLETOWERACTION_00 ; if new save file: bit 1, [s1_be4f]
|
||||
special BattleTowerAction
|
||||
if_not_equal $0, Script_Menu_ChallengeExplanationCancel
|
||||
jump Script_BattleTowerIntroductionYesNo
|
||||
@@ -87,7 +87,7 @@ Script_ChoseChallenge: ; 0x9e40f
|
||||
special Special_TryQuickSave
|
||||
iffalse Script_Menu_ChallengeExplanationCancel
|
||||
dotrigger $1
|
||||
writebyte BATTLETOWERACTION_01 ; set 1, [sbe4f]
|
||||
writebyte BATTLETOWERACTION_01 ; set 1, [s1_be4f]
|
||||
special BattleTowerAction
|
||||
special Function1700b0
|
||||
if_equal $a, Script_Menu_ChallengeExplanationCancel
|
||||
|
@@ -1085,9 +1085,9 @@ Function17075f: ; 17075f (5c:475f) BattleTowerAction $00
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld a, BANK(sbe4f)
|
||||
ld a, BANK(s1_be4f)
|
||||
call GetSRAMBank
|
||||
ld a, [sbe4f]
|
||||
ld a, [s1_be4f]
|
||||
and $2
|
||||
ld [ScriptVar], a
|
||||
call CloseSRAM
|
||||
@@ -1103,11 +1103,11 @@ Function170778: ; 170778 (5c:4778) BattleTowerAction $02
|
||||
ret
|
||||
|
||||
Function170788: ; 170788 (5c:4788) BattleTowerAction $01
|
||||
ld a, BANK(sbe4f)
|
||||
ld a, BANK(s1_be4f)
|
||||
call GetSRAMBank
|
||||
ld a, [sbe4f]
|
||||
ld a, [s1_be4f]
|
||||
or $2
|
||||
ld [sbe4f], a
|
||||
ld [s1_be4f], a
|
||||
call CloseSRAM
|
||||
ret
|
||||
|
||||
@@ -1591,20 +1591,20 @@ Function170abe: ; 170abe (5c:4abe) BattleTowerAction $14
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld a, BANK(sbe4f)
|
||||
ld a, BANK(s1_be4f)
|
||||
call GetSRAMBank
|
||||
ld a, [sbe4f]
|
||||
ld a, [s1_be4f]
|
||||
and $1
|
||||
ld [ScriptVar], a
|
||||
call CloseSRAM
|
||||
ret
|
||||
|
||||
Function170ad7: ; 170ad7 (5c:4ad7) BattleTowerAction $15
|
||||
ld a, BANK(sbe4f)
|
||||
ld a, BANK(s1_be4f)
|
||||
call GetSRAMBank
|
||||
ld a, [sbe4f]
|
||||
ld a, [s1_be4f]
|
||||
or $1
|
||||
ld [sbe4f], a
|
||||
ld [s1_be4f], a
|
||||
call CloseSRAM
|
||||
ret
|
||||
|
||||
|
12
sram.asm
12
sram.asm
@@ -81,7 +81,7 @@ sLuckyIDNumber:: ds 2
|
||||
SECTION "Backup Save", SRAM [$b200], BANK [0]
|
||||
sBackupOptions:: ds OptionsEnd - Options
|
||||
|
||||
s0_b208:: ds 1
|
||||
s0_b208:: ds 1 ; loaded with 99, used to check save corruption
|
||||
|
||||
sBackupGameData::
|
||||
sBackupPlayerData:: ds wPlayerDataEnd - wPlayerData
|
||||
@@ -94,11 +94,11 @@ sBackupGameDataEnd::
|
||||
; bf0d
|
||||
|
||||
sBackupChecksum:: ds 2
|
||||
s0_bf0f:: ds 1
|
||||
s0_bf0f:: ds 1 ; loaded with 0x7f, used to check save corruption
|
||||
sStackTop:: ds 2
|
||||
|
||||
|
||||
SECTION "SRAM Bank 1", SRAM, BANK [1]
|
||||
SECTION "Save", SRAM, BANK [1]
|
||||
|
||||
sOptions:: ds OptionsEnd - Options
|
||||
|
||||
@@ -117,11 +117,13 @@ sGameDataEnd::
|
||||
sChecksum:: ds 2
|
||||
s1_ad0f:: ds 1 ; loaded with 0x7f, used to check save corruption
|
||||
|
||||
SECTION "Active Box", SRAM, BANK [1]
|
||||
; ad10
|
||||
box sBox
|
||||
; b160
|
||||
|
||||
ds $f4
|
||||
SECTION "Link Battle Data", SRAM, BANK [1]
|
||||
sLinkBattleResults:: ds $c
|
||||
|
||||
sLinkBattleStats:: ; b260
|
||||
@@ -143,6 +145,7 @@ sLinkBattleRecord4:: link_battle_record sLinkBattleRecord4
|
||||
sLinkBattleRecord5:: link_battle_record sLinkBattleRecord5
|
||||
sLinkBattleStatsEnd::
|
||||
|
||||
SECTION "SRAM Hall of Fame", SRAM, BANK [1]
|
||||
sHallOfFame:: ; b2c0
|
||||
; temporary until I can find a way to macrofy it
|
||||
hall_of_fame sHallOfFame01
|
||||
@@ -190,6 +193,7 @@ sHallOfFame:: ; b2c0
|
||||
; endr
|
||||
sHallOfFameEnd::
|
||||
|
||||
SECTION "SRAM Crystal Data", SRAM, BANK [1]
|
||||
sMobileEventIndex:: ds 1 ; be3c
|
||||
|
||||
sCrystalData::
|
||||
@@ -208,7 +212,7 @@ sBTChoiceOfLevelGroup:: ds 1
|
||||
; The 7 trainers of the BattleTower are saved here, so nobody appears more than once
|
||||
sBTTrainers:: ; sbe48
|
||||
ds 7
|
||||
sbe4f:: ds 1
|
||||
s1_be4f:: ds 1
|
||||
sBattleTowerReward:: ds 1
|
||||
; Pkmn of previous trainer
|
||||
sBTPkmnOfTrainers:: ; 0xbe51
|
||||
|
Reference in New Issue
Block a user