pokecrystal-board/engine/events/battle_tower/rules.asm

300 lines
3.9 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
CheckForMobileBattleRules:
ld de, .PointerTables
call BattleTower_ExecuteJumptable
ret z
call BattleTower_PleaseReturnWhenReady
scf
ret
2018-06-24 07:09:41 -07:00
.PointerTables:
db 2
dw .Functions
dw .TextPointers
2018-06-24 07:09:41 -07:00
.Functions:
dw BattleTower_CheckPartyLengthIs3
dw BattleTower_CheckPartyHasThreeMonsThatAreNotEggs
2018-06-24 07:09:41 -07:00
.TextPointers:
dw .BTExcuseMeText
2019-04-10 11:46:16 -07:00
dw NeedAtLeastThreeMonText
dw EggDoesNotQualifyText
.BTExcuseMeText:
text_far _BTExcuseMeText
text_end
2018-06-24 07:09:41 -07:00
_CheckForBattleTowerRules:
2018-01-23 14:39:09 -08: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 07:09:41 -07:00
.PointerTables:
db 4
dw .Functions
dw .TextPointers
2018-06-24 07:09:41 -07:00
.Functions:
dw Function_PartyCountEq3
dw Function_PartySpeciesAreUnique
dw Function_PartyItemsAreUnique
dw Function_HasPartyAnEgg
2018-06-24 07:09:41 -07:00
.TextPointers:
dw ExcuseMeYoureNotReadyText
2019-04-10 11:46:16 -07:00
dw OnlyThreeMonMayBeEnteredText
dw TheMonMustAllBeDifferentKindsText
dw TheMonMustNotHoldTheSameItemsText
dw YouCantTakeAnEggText
ExcuseMeYoureNotReadyText:
text_far _ExcuseMeYoureNotReadyText
text_end
2018-06-24 07:09:41 -07:00
BattleTower_PleaseReturnWhenReady:
ld hl, .BattleTowerReturnWhenReadyText
call PrintText
ret
.BattleTowerReturnWhenReadyText:
text_far _BattleTowerReturnWhenReadyText
text_end
2019-04-10 11:46:16 -07:00
NeedAtLeastThreeMonText:
text_far _NeedAtLeastThreeMonText
text_end
2019-04-10 11:46:16 -07:00
EggDoesNotQualifyText:
text_far _EggDoesNotQualifyText
text_end
2019-04-10 11:46:16 -07:00
OnlyThreeMonMayBeEnteredText:
text_far _OnlyThreeMonMayBeEnteredText
text_end
2019-04-10 11:46:16 -07:00
TheMonMustAllBeDifferentKindsText:
text_far _TheMonMustAllBeDifferentKindsText
text_end
2019-04-10 11:46:16 -07:00
TheMonMustNotHoldTheSameItemsText:
text_far _TheMonMustNotHoldTheSameItemsText
text_end
2019-04-10 11:46:16 -07:00
YouCantTakeAnEggText:
text_far _YouCantTakeAnEggText
text_end
2018-06-24 07:09:41 -07: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 07:09:41 -07:00
.DoJumptableFunction:
push de
push bc
call .GetFunctionPointer
ld a, c
rst JumpTable
pop bc
pop de
ret
2018-06-24 07:09:41 -07:00
.Next_CheckReachedEnd:
inc c
ld a, [de]
cp c
ret
2018-06-24 07:09:41 -07:00
.GetFunctionPointer:
inc de
ld a, [de]
ld l, a
inc de
ld a, [de]
ld h, a
ret
2018-06-24 07:09:41 -07: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 07:09:41 -07:00
.LoadTextPointer:
ld a, [hli]
ld h, [hl]
ld l, a
ret
2018-06-24 07:09:41 -07:00
.PrintFailureText:
push de
push bc
ld a, b
and a
call z, .PrintFirstText
pop bc
call .PrintNthText
2019-04-10 11:46:16 -07:00
ld b, 1
pop de
ret
2018-06-24 07:09:41 -07:00
.PrintFirstText:
push de
call .GetTextPointers
call .LoadTextPointer
call PrintText
pop de
ret
2018-06-24 07:09:41 -07:00
.PrintNthText:
push bc
call .GetTextPointers
inc hl
inc hl
2019-04-10 11:46:16 -07:00
ld b, 0
add hl, bc
add hl, bc
call .LoadTextPointer
call PrintText
pop bc
ret
2018-06-24 07:09:41 -07:00
BattleTower_CheckPartyLengthIs3:
2018-01-23 14:39:09 -08:00
ld a, [wPartyCount]
2018-01-20 09:25:55 -08:00
cp BATTLETOWER_PARTY_LENGTH
ret
2018-06-24 07:09:41 -07:00
BattleTower_CheckPartyHasThreeMonsThatAreNotEggs:
2018-01-23 14:39:09 -08:00
ld hl, wPartyCount
ld a, [hli]
2019-04-10 11:46:16 -07:00
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 14:39:09 -08:00
ld a, [wPartyCount]
cp b
ret z
ld a, b
2018-01-20 09:25:55 -08:00
cp BATTLETOWER_PARTY_LENGTH
ret
2018-06-24 07:09:41 -07:00
Function_PartyCountEq3:
2018-01-23 14:39:09 -08:00
ld a, [wPartyCount]
2018-01-20 09:25:55 -08:00
cp BATTLETOWER_PARTY_LENGTH
ret z
scf
ret
2018-06-24 07:09:41 -07:00
Function_PartySpeciesAreUnique:
2018-01-23 14:39:09 -08:00
ld hl, wPartyMon1Species
call VerifyUniqueness
ret
2018-06-24 07:09:41 -07:00
VerifyUniqueness:
2018-01-23 14:39:09 -08: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 07:09:41 -07:00
.nextmon
push bc
ld bc, PARTYMON_STRUCT_LENGTH
add hl, bc
inc de
pop bc
ret
2018-06-24 07:09:41 -07:00
.isegg
push bc
ld b, a
ld a, [de]
cp EGG
ld a, b
pop bc
ret
2018-06-24 07:09:41 -07:00
Function_PartyItemsAreUnique:
2018-01-23 14:39:09 -08:00
ld hl, wPartyMon1Item
call VerifyUniqueness
ret
2018-06-24 07:09:41 -07:00
Function_HasPartyAnEgg:
2018-01-23 14:39:09 -08: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