Add engine/events/lucky_number.asm

This commit is contained in:
libjet
2020-05-29 19:26:15 +01:00
parent f0212e7fb9
commit d69adefed2
3 changed files with 226 additions and 4 deletions

View File

@@ -108,6 +108,7 @@ PARTY_LENGTH EQU 6
; boxes
MONS_PER_BOX EQU 20
NUM_BOXES EQU 14
NUM_BOXES_JAPANESE EQU 9
; hall of fame
HOF_MON_LENGTH EQU 1 + 2 + 2 + 1 + (MON_NAME_LENGTH - 1) ; species, id, dvs, level, nick

224
engine/events/lucky_number.asm Executable file
View File

@@ -0,0 +1,224 @@
CheckForLuckyNumberWinners:
xor a
ld [wScriptVar], a
ld [wTempByteValue], a
ld a, [wPartyCount]
and a
ret z
ld d, a
ld hl, wPartyMon1ID
ld bc, wPartySpecies
.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 OpenSRAM
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, TRUE
ld [wTempByteValue], 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 OpenSRAM
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 wScriptVar and wCurPartySpecies appropriately
jr nc, .SkipBoxMon
ld a, TRUE
ld [wTempByteValue], 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_JAPANESE
jr c, .BoxesLoop
call CloseSRAM
ld a, [wScriptVar]
and a
ret z ; found nothing
ld a, [wTempByteValue]
and a
push af
ld a, [wCurPartySpecies]
ld [wNamedObjectIndexBuffer], a
call GetPokemonName
ld hl, .LuckyNumberMatchPartyText
pop af
jr z, .print
ld hl, .LuckyNumberMatchPCText
.print
jp PrintText
.CompareLuckyNumberToMonID:
push bc
push de
push hl
ld d, h
ld e, l
ld hl, wBuffer1
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
call PrintNum
ld hl, wLuckyNumberDigitsBuffer
ld de, wLuckyIDNumber
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
call PrintNum
ld b, 5
ld c, 0
ld hl, wLuckyNumberDigitsBuffer + 4
ld de, wBuffer1 + 4
.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, MON_SPECIES - MON_ID
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, [wScriptVar]
and a
jr z, .bettermatch
cp b
jr c, .nomatch
.bettermatch
dec b
ld a, b
ld [wScriptVar], a
pop bc
ld a, b
ld [wCurPartySpecies], a
pop bc
scf
ret
.nomatch
pop bc
pop bc
and a
ret
.BoxBankAddresses:
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
.LuckyNumberMatchPartyText:
text_far _LuckyNumberMatchPartyText
text_end
.LuckyNumberMatchPCText:
text_far _LuckyNumberMatchPCText
text_end
PrintTodaysLuckyNumber:
ld hl, wStringBuffer3
ld de, wLuckyIDNumber
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
call PrintNum
ld a, "@"
ld [wStringBuffer3 + 5], a
ret

View File

@@ -374,11 +374,8 @@ INCLUDE "engine/pokemon/mail_2.asm"
SECTION "bank31_2", ROMX
INCLUDE "engine/events/pokerus/check_pokerus.asm"
INCLUDE "engine/events/lucky_number.asm"
CheckForLuckyNumberWinners::
dr $c7a5a, $c7bad
PrintTodaysLuckyNumber::
dr $c7bad, $c7bbf
CheckPartyFullAfterContest::
dr $c7bbf, $c7cd0
GiveANickname_YesNo::