diff options
| -rw-r--r-- | src/constants/duel_constants.asm | 2 | ||||
| -rw-r--r-- | src/data/effect_commands.asm | 13 | ||||
| -rw-r--r-- | src/engine/effect_functions.asm | 61 | ||||
| -rwxr-xr-x | src/engine/home.asm | 24 | ||||
| -rwxr-xr-x | src/text/text1.asm | 2 | ||||
| -rwxr-xr-x | src/text/text_offsets.asm | 2 | ||||
| -rwxr-xr-x | src/wram.asm | 4 | 
7 files changed, 81 insertions, 27 deletions
| diff --git a/src/constants/duel_constants.asm b/src/constants/duel_constants.asm index e31bdf5..658798f 100644 --- a/src/constants/duel_constants.asm +++ b/src/constants/duel_constants.asm @@ -60,7 +60,7 @@ PASSIVE_STATUS_MASK  EQU $f ; confused, asleep or paralyzed  SUBSTATUS1_AGILITY      EQU $0c  SUBSTATUS1_FLY          EQU $0d  SUBSTATUS1_HARDEN       EQU $0e -SUBSTATUS1_NO_DAMAGE_F  EQU $0f +SUBSTATUS1_NO_DAMAGE_STIFFEN  EQU $0f  SUBSTATUS1_NO_DAMAGE_10 EQU $10  SUBSTATUS1_NO_DAMAGE_11 EQU $11  SUBSTATUS1_REDUCE_BY_20 EQU $13 diff --git a/src/data/effect_commands.asm b/src/data/effect_commands.asm index 9616ea7..1e9ed69 100644 --- a/src/data/effect_commands.asm +++ b/src/data/effect_commands.asm @@ -2,15 +2,12 @@ EffectCommands: ; 186f7 (6:46f7)  ; Each move has a two-byte effect pointer (move's 7th param) that points to one of these structures.  ; Similarly, trainer cards have a two-byte pointer (7th param) to one of these structures, which determines the card's function.  ; Energy cards also point to one of these, but their data is just $00. -;	db CommandId ($01 - $0a) +;	db CommandType ($01 - $0a)  ;	dw Function  ;	...  ;	db $00 -; Apparently every command has a "time", and a function is called multiple times during a turn -; with an argument identifying the command Id. If said command Id is found in the -; current move effect's array, its assigned function is immediately executed. - +; Commands are associated to a time or a scope (CommandType) that determines when their function is executed during the turn.  ; Similar move effects of different Pokemon cards all point to a different command list,  ; even though in some cases their commands and function pointers match. @@ -64,11 +61,11 @@ GloomPoisonPowderEffectCommands:  	db  $00  GloomFoulOdorEffectCommands: -	dbw $03, $4793 +	dbw $03, FoulOdorEffect  	db  $00  KakunaStiffenEffectCommands: -	dbw $03, $47a0 +	dbw $03, KakunaStiffenEffect  	db  $00  KakunaPoisonPowderEffectCommands: @@ -124,7 +121,7 @@ KoffingFoulGasEffectCommands:  	db  $00  MetapodStiffenEffectCommands: -	dbw $03, $4836 +	dbw $03, MetapodStiffenEffect  	db  $00  MetapodStunSporeEffectCommands: diff --git a/src/engine/effect_functions.asm b/src/engine/effect_functions.asm index a7d44d1..5034151 100644 --- a/src/engine/effect_functions.asm +++ b/src/engine/effect_functions.asm @@ -21,6 +21,8 @@ Confusion50PercentEffect: ; 2c01d (b:401d)  	text_de ConfusionCheckText  	call TossCoin_BankB  	ret nc + +ConfusionEffect: ; 2c024 (b:4024)  	lb bc, $f0, CONFUSED  	jr applyEffect @@ -94,9 +96,26 @@ Func_2c09c: ; 2c09c (b:409c)  	ret  ; 0x2c0a2 -INCBIN "baserom.gbc",$2c0a2,$2c149 - $2c0a2 +Func_2c0a2: ; 2c0a2 (b:40a2) +	ld a, $2 +	ld [wcced], a +	ret +; 0x2c0a8 + +INCBIN "baserom.gbc",$2c0a8,$2c140 - $2c0a8 + +; apply a status condition of type 1 identified by register a to the target +ApplySubstatus1ToDefendingCard: ; 2c140 (b:4140) +	push af +	ld a, DUELVARS_ARENA_CARD_SUBSTATUS1 +	call GetTurnDuelistVariable +	pop af +	ld [hli], a +	ret +; 0x2c149 -; apply a status condition identified by register a to the target if able +; apply a status condition of type 2 identified by register a to the target, +; unless prevented by wNoDamageOrEffect  ApplySubstatus2ToDefendingCard: ; 2c149 (b:4149)  	push af  	call CheckNoDamageOrEffect @@ -143,4 +162,40 @@ AcidEffect: ; 2c77e (b:477e)  	ret  ; 0x2c78b -INCBIN "baserom.gbc",$2c78b,$30000 - $2c78b +INCBIN "baserom.gbc",$2c78b,$2c793 - $2c78b + +; confuses both the target and the user +FoulOdorEffect: ; 2c793 (b:4793) +	call ConfusionEffect +	call SwapTurn +	call ConfusionEffect +	call SwapTurn +	ret +; 0x2c7a0 + +KakunaStiffenEffect: ; 2c7a0 (b:47a0) +	text_de IfHeadsNoDamageNextTurnText +	call TossCoin_BankB +	jp nc, Func_2c0a2 +	ld a, $4f +	ld [wLoadedMoveAnimation], a +	ld a, SUBSTATUS1_NO_DAMAGE_STIFFEN +	call ApplySubstatus1ToDefendingCard +	ret +; 0x2c7b4 + +INCBIN "baserom.gbc",$2c7b4,$2c836 - $2c7b4 + +; an exact copy of KakunaStiffenEffect +MetapodStiffenEffect: ; 2c836 (b:4836) +	text_de IfHeadsNoDamageNextTurnText +	call TossCoin_BankB +	jp nc, Func_2c0a2 +	ld a, $4f +	ld [wLoadedMoveAnimation], a +	ld a, SUBSTATUS1_NO_DAMAGE_STIFFEN +	call ApplySubstatus1ToDefendingCard +	ret +; 0x2c84a + +INCBIN "baserom.gbc",$2c84a,$30000 - $2c84a diff --git a/src/engine/home.asm b/src/engine/home.asm index e4dfde8..5c687db 100755 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -2339,7 +2339,7 @@ CreateHandCardBuffer: ; 123b (0:123b)  .checkNextCardLoop  	ld a, [hld]  	push hl -	ld l, a  +	ld l, a  	bit 6, [hl]  	pop hl  	jr nz, .skipCard @@ -3162,7 +3162,7 @@ ApplyAttachedDefender: ; 1a7e (0:1a7e)  ; hl: address to substract HP from  ; de: how much HP to substract (damage to deal) -; returns carry if the HP does not become 0 as a result	 +; returns carry if the HP does not become 0 as a result  SubstractHP: ; 1a96 (0:1a96)  	push hl  	push de @@ -5726,9 +5726,11 @@ Func_2fcb: ; 2fcb (0:2fcb)  	call BankpopHome  	ret -; Checks if the command ID at a is one of the commands of the move or card effect currently in use, +; Checks if the command type at a is one of the commands of the move or card effect currently in use,  ; and executes its associated function if so. -; input: a = move or trainer card effect command ID +; input: +; a = command type to check +; [wLoadedMoveEffectCommands] = pointer to list of commands of current move or trainer card  TryExecuteEffectCommandFunction: ; 2fd9 (0:2fd9)  	push af  ; grab pointer to command list from wLoadedMoveEffectCommands @@ -5739,7 +5741,7 @@ TryExecuteEffectCommandFunction: ; 2fd9 (0:2fd9)  	pop af  	call CheckMatchingCommand  	jr nc, .executeFunction -; return if input command ID wasn't found +; return if no matching command was found  	or a  	ret @@ -5761,9 +5763,9 @@ TryExecuteEffectCommandFunction: ; 2fd9 (0:2fd9)  	ret  ; input: -  ; a = command ID to check -  ; hl = pointer to current move effect or trainer card effect command list -; return nc if command ID matching a is found, c otherwise +  ; a = command type to check +  ; hl = list of commands of current move or trainer card +; return nc if command type matching a is found, c otherwise  CheckMatchingCommand: ; 2ffe (0:2ffe)  	ld c, a  	ld a, l @@ -6235,7 +6237,7 @@ HandleDamageReductionExceptSubstatus2: ; 3269 (0:3269)  	call GetTurnDuelistVariable  	or a  	jr z, .notAffectedBySubstatus1 -	cp SUBSTATUS1_NO_DAMAGE_F +	cp SUBSTATUS1_NO_DAMAGE_STIFFEN  	jr z, .noDamage  	cp SUBSTATUS1_NO_DAMAGE_10  	jr z, .noDamage @@ -6448,7 +6450,7 @@ HandleNoDamageOrEffectSubstatus: ; 3432 (0:3432)  	jr .noDamageOrEffect  ; if the Pokemon being attacked is Haunter1, and its Transparency is active, -; there is a 50% chance that any damage or effect is prevented  +; there is a 50% chance that any damage or effect is prevented  HandleTransparency: ; 348a (0:348a)  	ld a, [wTempNonTurnDuelistCardId]  	cp HAUNTER1 @@ -7295,7 +7297,7 @@ RunOverworldScript: ; 3aed (0:3aed)  	rlca  	ld c, a  	ld b, $0 -	ld hl, OverworldScriptTable  +	ld hl, OverworldScriptTable  	add hl, bc  	ldh a, [hBankROM]  	push af diff --git a/src/text/text1.asm b/src/text/text1.asm index 5464784..e6b0034 100755 --- a/src/text/text1.asm +++ b/src/text/text1.asm @@ -1127,7 +1127,7 @@ Text00f0: ; 37f24 (d:7f24)  	line "If Heads, 8 cards! If Tails, 1 card!"  	done -Text00f1: ; 37f56 (d:7f56) +IfHeadsNoDamageNextTurnText: ; 37f56 (d:7f56)  	text "If Heads, you will not receive"  	line "damage during opponent's next turn!"  	done diff --git a/src/text/text_offsets.asm b/src/text/text_offsets.asm index 8ed6741..c2b77c2 100755 --- a/src/text/text_offsets.asm +++ b/src/text/text_offsets.asm @@ -243,7 +243,7 @@ TextOffsets:: ; 34000 (d:4000)  	textpointer Text00ee  	textpointer Text00ef  	textpointer Text00f0 -	textpointer Text00f1 +	textpointer IfHeadsNoDamageNextTurnText  	textpointer Text00f2  	textpointer Text00f3  	textpointer Text00f4 diff --git a/src/wram.asm b/src/wram.asm index f498697..3b6543f 100755 --- a/src/wram.asm +++ b/src/wram.asm @@ -765,7 +765,7 @@ wceb5:: ; ceb5  wcecc:: ; cecc  	ds $9c -	 +  wHandCardBuffer:: ; cf68  	ds $51 @@ -1367,7 +1367,7 @@ wMusicChannelStackPointers:: ; ddf3  ; 1 byte for loop count)  wMusicCh1Stack:: ; ddfb  	ds $c -	 +  wMusicCh2Stack:: ; de07  	ds $c | 
