pokecrystal/engine/events/battle_tower/rules.asm

309 lines
4.2 KiB
NASM
Raw Normal View History

2018-06-24 14:09:41 +00:00
CheckForMobileBattleRules:
ld de, .PointerTables
call BattleTower_ExecuteJumptable
ret z
call BattleTower_PleaseReturnWhenReady
scf
ret
2018-06-24 14:09:41 +00:00
.PointerTables:
db 2
dw .Functions
dw .TextPointers
2018-06-24 14:09:41 +00:00
.Functions:
dw BattleTower_CheckPartyLengthIs3
dw BattleTower_CheckPartyHasThreeMonsThatAreNotEggs
2018-06-24 14:09:41 +00:00
.TextPointers:
dw .ExcuseMeText
dw JumpText_NeedAtLeastThreeMon
dw JumpText_EggDoesNotQualify
.ExcuseMeText:
; Excuse me!
text_far UnknownText_0x1c5937
db "@"
2018-06-24 14:09:41 +00:00
_CheckForBattleTowerRules:
2018-01-23 22:39:09 +00:00
ld hl, wStringBuffer2
ld [hl], "3"
inc hl
ld [hl], "@"
ld de, .PointerTables
call BattleTower_ExecuteJumptable
ret z
call BattleTower_PleaseReturnWhenReady
scf
ret
2018-06-24 14:09:41 +00:00
.PointerTables:
db 4
dw .Functions
dw .TextPointers
2018-06-24 14:09:41 +00:00
.Functions:
dw Function_PartyCountEq3
dw Function_PartySpeciesAreUnique
dw Function_PartyItemsAreUnique
dw Function_HasPartyAnEgg
2018-06-24 14:09:41 +00:00
.TextPointers:
dw JumpText_ExcuseMeYoureNotReady
dw JumpText_OnlyThreeMonMayBeEntered
dw JumpText_TheMonMustAllBeDifferentKinds
dw JumpText_TheMonMustNotHoldTheSameItems
dw JumpText_YouCantTakeAnEgg
JumpText_ExcuseMeYoureNotReady:
; Excuse me. You're not ready.
text_far Text_ExcuseMeYoureNotReady
db "@"
2018-06-24 14:09:41 +00:00
BattleTower_PleaseReturnWhenReady:
ld hl, .PleaseReturnWhenReady
call PrintText
ret
.PleaseReturnWhenReady:
; Please return when you're ready.
text_far UnknownText_0x1c5962
db "@"
JumpText_NeedAtLeastThreeMon:
; You need at least three #MON.
text_far UnknownText_0x1c5983
db "@"
JumpText_EggDoesNotQualify:
; Sorry, an EGG doesn't qualify.
text_far UnknownText_0x1c59a3
db "@"
JumpText_OnlyThreeMonMayBeEntered:
; Only three #MON may be entered.
text_far Text_OnlyThreeMonMayBeEntered
db "@"
JumpText_TheMonMustAllBeDifferentKinds:
; The @ #MON must all be different kinds.
text_far Text_TheMonMustAllBeDifferentKinds
db "@"
JumpText_TheMonMustNotHoldTheSameItems:
; The @ #MON must not hold the same items.
text_far Text_TheMonMustNotHoldTheSameItems
db "@"
JumpText_YouCantTakeAnEgg:
; You can't take an EGG!
text_far Text_YouCantTakeAnEgg
db "@"
2018-06-24 14:09:41 +00:00
BattleTower_ExecuteJumptable:
ld bc, 0
.loop
call .DoJumptableFunction
call c, .PrintFailureText
call .Next_CheckReachedEnd
jr nz, .loop
ld a, b
and a
ret
2018-06-24 14:09:41 +00:00
.DoJumptableFunction:
push de
push bc
call .GetFunctionPointer
ld a, c
rst JumpTable
pop bc
pop de
ret
2018-06-24 14:09:41 +00:00
.Next_CheckReachedEnd:
inc c
ld a, [de]
cp c
ret
2018-06-24 14:09:41 +00:00
.GetFunctionPointer:
inc de
ld a, [de]
ld l, a
inc de
ld a, [de]
ld h, a
ret
2018-06-24 14:09:41 +00:00
.GetTextPointers:
inc de
inc de
inc de
ld a, [de]
ld l, a
inc de
ld a, [de]
ld h, a
ret
2018-06-24 14:09:41 +00:00
.LoadTextPointer:
ld a, [hli]
ld h, [hl]
ld l, a
ret
2018-06-24 14:09:41 +00:00
.PrintFailureText:
push de
push bc
ld a, b
and a
call z, .PrintFirstText
pop bc
call .PrintNthText
ld b, $1
pop de
ret
2018-06-24 14:09:41 +00:00
.PrintFirstText:
push de
call .GetTextPointers
call .LoadTextPointer
call PrintText
pop de
ret
2018-06-24 14:09:41 +00:00
.PrintNthText:
push bc
call .GetTextPointers
inc hl
inc hl
ld b, $0
add hl, bc
add hl, bc
call .LoadTextPointer
call PrintText
pop bc
ret
2018-06-24 14:09:41 +00:00
BattleTower_CheckPartyLengthIs3:
2018-01-23 22:39:09 +00:00
ld a, [wPartyCount]
2018-01-20 17:25:55 +00:00
cp BATTLETOWER_PARTY_LENGTH
ret
2018-06-24 14:09:41 +00:00
BattleTower_CheckPartyHasThreeMonsThatAreNotEggs:
2018-01-23 22:39:09 +00:00
ld hl, wPartyCount
ld a, [hli]
ld b, $0
ld c, a
.loop
ld a, [hli]
cp EGG
jr z, .egg
inc b
.egg
dec c
jr nz, .loop
2018-01-23 22:39:09 +00:00
ld a, [wPartyCount]
cp b
ret z
ld a, b
2018-01-20 17:25:55 +00:00
cp BATTLETOWER_PARTY_LENGTH
ret
2018-06-24 14:09:41 +00:00
Function_PartyCountEq3:
2018-01-23 22:39:09 +00:00
ld a, [wPartyCount]
2018-01-20 17:25:55 +00:00
cp BATTLETOWER_PARTY_LENGTH
ret z
scf
ret
2018-06-24 14:09:41 +00:00
Function_PartySpeciesAreUnique:
2018-01-23 22:39:09 +00:00
ld hl, wPartyMon1Species
call VerifyUniqueness
ret
2018-06-24 14:09:41 +00:00
VerifyUniqueness:
2018-01-23 22:39:09 +00:00
ld de, wPartyCount
ld a, [de]
inc de
dec a
jr z, .done
ld b, a
.loop
push hl
push de
ld c, b
call .isegg
jr z, .next
ld a, [hl]
and a
jr z, .next
.loop2
call .nextmon
call .isegg
jr z, .next2
cp [hl]
jr z, .gotcha
.next2
dec c
jr nz, .loop2
.next
pop de
pop hl
call .nextmon
dec b
jr nz, .loop
.done
and a
ret
.gotcha
pop de
pop hl
scf
ret
2018-06-24 14:09:41 +00:00
.nextmon
push bc
ld bc, PARTYMON_STRUCT_LENGTH
add hl, bc
inc de
pop bc
ret
2018-06-24 14:09:41 +00:00
.isegg
push bc
ld b, a
ld a, [de]
cp EGG
ld a, b
pop bc
ret
2018-06-24 14:09:41 +00:00
Function_PartyItemsAreUnique:
2018-01-23 22:39:09 +00:00
ld hl, wPartyMon1Item
call VerifyUniqueness
ret
2018-06-24 14:09:41 +00:00
Function_HasPartyAnEgg:
2018-01-23 22:39:09 +00:00
ld hl, wPartyCount
ld a, [hli]
ld c, a
.loop
ld a, [hli]
cp EGG
jr z, .found
dec c
jr nz, .loop
and a
ret
.found
scf
ret