mirror of
				https://github.com/thornAvery/jep-hack.git
				synced 2025-11-05 05:10:58 +13:00 
			
		
		
		
	Complete Inverse implementation, fix type matchups
Issues occurred resulting from an incomplete implementation of Inverse Battles from Commit #e59cc2b3292f3da336e89ef23b15b234bf469368. Attempts to fix have been made through completing the implementation, which also accounts for proto-Fairy. Additionally, some semi-invulnerable glitches have attempts made to resolve them, involving a generic list and 16bitification of the compare commands. Damage processing seems iffy but this needs more testing. Type matchups function correctly, though.
This commit is contained in:
		
							parent
							
								
									90fe97fcb1
								
							
						
					
					
						commit
						a14e978b98
					
				| 
						 | 
				
			
			@ -96,6 +96,7 @@ DEF SPDSPCDV_SHINY EQU $AA
 | 
			
		|||
	const BATTLETYPE_FORCEITEM
 | 
			
		||||
	const BATTLETYPE_CELEBI
 | 
			
		||||
	const BATTLETYPE_SUICUNE
 | 
			
		||||
	const BATTLETYPE_INVERSE
 | 
			
		||||
 | 
			
		||||
; BattleVarPairs indexes (see home/battle_vars.asm)
 | 
			
		||||
	const_def
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,132 +1,253 @@
 | 
			
		|||
TypeMatchups:
 | 
			
		||||
	;  attacker,     defender,     *=
 | 
			
		||||
	db NORMAL,       ROCK,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db NORMAL,       STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,         FIRE,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,         WATER,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,         GRASS,        SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,         ICE,          SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,         BUG,          SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,         ROCK,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,         DRAGON,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,         STEEL,        SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,         FAIRY,        SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,        FIRE,         SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,        WATER,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db WATER,        GRASS,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db WATER,        GROUND,       SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,        ROCK,         SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,        DRAGON,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,     WATER,        SUPER_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,     ELECTRIC,     NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,     GRASS,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,     GROUND,       NO_EFFECT
 | 
			
		||||
	db ELECTRIC,     FLYING,       SUPER_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,     DRAGON,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,        FIRE,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,        WATER,        SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,        GRASS,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,        POISON,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,        GROUND,       SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,        FLYING,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,        BUG,          NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,        ROCK,         SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,        DRAGON,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,        STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,          WATER,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,          GRASS,        SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,          ICE,          NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,          GROUND,       SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,          FLYING,       SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,          DRAGON,       SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,          STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,          FAIRY,        SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,          FIRE,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,     NORMAL,       SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,     ICE,          SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,     POISON,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,     FLYING,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,     PSYCHIC_TYPE, NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,     BUG,          NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,     ROCK,         SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,     DARK,         SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,     STEEL,        SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	 FAIRY,		   NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,       GRASS,        SUPER_EFFECTIVE
 | 
			
		||||
	db POISON,       POISON,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,       GROUND,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,       ROCK,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,       GHOST,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,       STEEL,        NO_EFFECT
 | 
			
		||||
	db GROUND,       FIRE,         SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,       ELECTRIC,     SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,       GRASS,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GROUND,       POISON,       SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,       FLYING,       NO_EFFECT
 | 
			
		||||
	db GROUND,       BUG,          NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GROUND,       ROCK,         SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,       STEEL,        SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,       ELECTRIC,     NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FLYING,       GRASS,        SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,       FIGHTING,     SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,       BUG,          SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,       ROCK,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FLYING,       STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, FIGHTING,     SUPER_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, POISON,       SUPER_EFFECTIVE
 | 
			
		||||
	;  attacker,	  defender,	  *=
 | 
			
		||||
	db NORMAL,		 ROCK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db NORMAL,		 STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,			FIRE,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,			WATER,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,			GRASS,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,			ICE,			 SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,			BUG,			 SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,			ROCK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,			DRAGON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,			STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,			FAIRY,		  SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,		  FIRE,			SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,		  WATER,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db WATER,		  GRASS,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db WATER,		  GROUND,		 SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,		  ROCK,			SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,		  DRAGON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	  WATER,		  SUPER_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	  ELECTRIC,	  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	  GRASS,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	  GROUND,		 NO_EFFECT
 | 
			
		||||
	db ELECTRIC,	  FLYING,		 SUPER_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	  DRAGON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		  FIRE,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		  WATER,		  SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		  GRASS,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		  POISON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		  GROUND,		 SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		  FLYING,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		  BUG,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		  ROCK,			SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		  DRAGON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		  STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,			 WATER,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,			 GRASS,		  SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,			 ICE,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,			 GROUND,		 SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,			 FLYING,		 SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,			 DRAGON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,			 STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,			 FAIRY,		  SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,			 FIRE,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  NORMAL,		 SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  ICE,			 SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  POISON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  FLYING,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  PSYCHIC_TYPE, NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  BUG,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  ROCK,			SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  DARK,			SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	 FAIRY,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,		 GRASS,		  SUPER_EFFECTIVE
 | 
			
		||||
	db POISON,		 POISON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,		 GROUND,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,		 ROCK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,		 GHOST,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,		 STEEL,		  NO_EFFECT
 | 
			
		||||
	db GROUND,		 FIRE,			SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,		 ELECTRIC,	  SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,		 GRASS,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GROUND,		 POISON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,		 FLYING,		 NO_EFFECT
 | 
			
		||||
	db GROUND,		 BUG,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GROUND,		 ROCK,			SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,		 STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,		 ELECTRIC,	  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FLYING,		 GRASS,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,		 FIGHTING,	  SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,		 BUG,			 SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,		 ROCK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FLYING,		 STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, FIGHTING,	  SUPER_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, POISON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, DARK,         NO_EFFECT
 | 
			
		||||
	db PSYCHIC_TYPE, STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,          FIRE,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,          GRASS,        SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,          FIGHTING,     NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,          POISON,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,          FLYING,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,          PSYCHIC_TYPE, SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,          GHOST,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,          DARK,         SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,          STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 FAIRY,		   NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,         FIRE,         SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,         ICE,          SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,         FIGHTING,     NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,         GROUND,       NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,         FLYING,       SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,         BUG,          SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,         STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GHOST,        NORMAL,       NO_EFFECT
 | 
			
		||||
	db GHOST,        PSYCHIC_TYPE, SUPER_EFFECTIVE
 | 
			
		||||
	db GHOST,        DARK,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GHOST,        STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GHOST,        GHOST,        SUPER_EFFECTIVE
 | 
			
		||||
	db DRAGON,       DRAGON,       SUPER_EFFECTIVE
 | 
			
		||||
	db DRAGON,       STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DRAGON,		 FAIRY,		   NO_EFFECT
 | 
			
		||||
	db DARK,         FIGHTING,     NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DARK,         PSYCHIC_TYPE, SUPER_EFFECTIVE
 | 
			
		||||
	db DARK,         GHOST,        SUPER_EFFECTIVE
 | 
			
		||||
	db DARK,         DARK,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DARK,         STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DARK,		 FAIRY,		   NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,        FIRE,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,        WATER,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,        ELECTRIC,     NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,        ICE,          SUPER_EFFECTIVE
 | 
			
		||||
	db STEEL,        ROCK,         SUPER_EFFECTIVE
 | 
			
		||||
	db STEEL,        STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,     	 FAIRY,        SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,   	 FIRE,         NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FAIRY,        BUG,          SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,	   	 FIGHTING,     SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,        ICE,          NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FAIRY,	  	 DRAGON,       SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,	     DARK,         SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,	  	 STEEL,        NOT_VERY_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, DARK,			NO_EFFECT
 | 
			
		||||
	db PSYCHIC_TYPE, STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 FIRE,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 GRASS,		  SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,			 FIGHTING,	  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 POISON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 FLYING,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 PSYCHIC_TYPE, SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,			 GHOST,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 DARK,			SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,			 STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 FAIRY,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,			FIRE,			SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,			ICE,			 SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,			FIGHTING,	  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,			GROUND,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,			FLYING,		 SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,			BUG,			 SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,			STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GHOST,		  NORMAL,		 NO_EFFECT
 | 
			
		||||
	db GHOST,		  PSYCHIC_TYPE, SUPER_EFFECTIVE
 | 
			
		||||
	db GHOST,		  DARK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GHOST,		  STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GHOST,		  GHOST,		  SUPER_EFFECTIVE
 | 
			
		||||
	db DRAGON,		 DRAGON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db DRAGON,		 STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DRAGON,		 FAIRY,			NO_EFFECT
 | 
			
		||||
	db DARK,			FIGHTING,	  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DARK,			PSYCHIC_TYPE, SUPER_EFFECTIVE
 | 
			
		||||
	db DARK,			GHOST,		  SUPER_EFFECTIVE
 | 
			
		||||
	db DARK,			DARK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DARK,			STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DARK,		 FAIRY,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,		  FIRE,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,		  WATER,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,		  ELECTRIC,	  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,		  ICE,			 SUPER_EFFECTIVE
 | 
			
		||||
	db STEEL,		  ROCK,			SUPER_EFFECTIVE
 | 
			
		||||
	db STEEL,		  STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,	  	 FAIRY,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,		 FIRE,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FAIRY,		  BUG,			 SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,			 FIGHTING,	  SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,		  ICE,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FAIRY,	  	 DRAGON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,		  DARK,			SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,	  	 STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
 | 
			
		||||
	db -2 ; end (with Foresight)
 | 
			
		||||
 | 
			
		||||
; Foresight removes Ghost's immunities.
 | 
			
		||||
	db NORMAL,       GHOST,        NO_EFFECT
 | 
			
		||||
	db FIGHTING,     GHOST,        NO_EFFECT
 | 
			
		||||
	db NORMAL,		 GHOST,		  NO_EFFECT
 | 
			
		||||
	db FIGHTING,	 GHOST,		  NO_EFFECT
 | 
			
		||||
 | 
			
		||||
	db -1 ; end
 | 
			
		||||
 | 
			
		||||
InverseTypeMatchups:
 | 
			
		||||
	;  attacker,	  defender,	  *=
 | 
			
		||||
	db NORMAL,		 ROCK,			SUPER_EFFECTIVE
 | 
			
		||||
	db NORMAL,		 STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,		FIRE,			SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,		WATER,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,		GRASS,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,		ICE,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,		BUG,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIRE,		ROCK,			SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,		DRAGON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db FIRE,		STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db WATER,		FIRE,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db WATER,		WATER,		  SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,		GRASS,		  SUPER_EFFECTIVE
 | 
			
		||||
	db WATER,		GROUND,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db WATER,		ROCK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db WATER,		DRAGON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	WATER,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	ELECTRIC,	  SUPER_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	GRASS,		  SUPER_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	GROUND,		 SUPER_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	FLYING,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ELECTRIC,	DRAGON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		FIRE,			SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		WATER,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		 GRASS,		  SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		 POISON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		 GROUND,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		 FLYING,		 SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		 BUG,			 SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		  ROCK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GRASS,		 DRAGON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db GRASS,		 STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,			 WATER,		  SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,			 GRASS,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,			 ICE,			 SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,			 GROUND,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,			 FLYING,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,			 DRAGON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ICE,			 STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db ICE,			 FIRE,			SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  NORMAL,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  ICE,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  POISON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  FLYING,		 SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  PSYCHIC_TYPE, SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  BUG,			 SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  ROCK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  DARK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,		 GRASS,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db POISON,		 POISON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db POISON,		 GROUND,		 SUPER_EFFECTIVE
 | 
			
		||||
	db POISON,		 ROCK,			SUPER_EFFECTIVE
 | 
			
		||||
	db POISON,		 GHOST,		  SUPER_EFFECTIVE
 | 
			
		||||
	db POISON,		 STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,		 FIRE,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GROUND,		 ELECTRIC,	  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GROUND,		 GRASS,		  SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,		 POISON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GROUND,		 FLYING,		 SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,		 BUG,			 SUPER_EFFECTIVE
 | 
			
		||||
	db GROUND,		 ROCK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GROUND,		 STEEL,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FLYING,		 ELECTRIC,	  SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,		 GRASS,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FLYING,		 FIGHTING,	  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FLYING,		 BUG,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FLYING,		 ROCK,			SUPER_EFFECTIVE
 | 
			
		||||
	db FLYING,		 STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, FIGHTING,	  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, POISON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, PSYCHIC_TYPE, SUPER_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, DARK,			SUPER_EFFECTIVE
 | 
			
		||||
	db PSYCHIC_TYPE, STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,			 FIRE,			SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,			 GRASS,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 FIGHTING,	  SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,			 POISON,		 SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,			 FLYING,		 SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,			 PSYCHIC_TYPE, NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 GHOST,		  SUPER_EFFECTIVE
 | 
			
		||||
	db BUG,			 DARK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db BUG,			 STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,			FIRE,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,			ICE,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,			FIGHTING,	  SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,			GROUND,		 SUPER_EFFECTIVE
 | 
			
		||||
	db ROCK,			FLYING,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,			BUG,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db ROCK,			STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db GHOST,		  NORMAL,		 SUPER_EFFECTIVE
 | 
			
		||||
	db GHOST,		  PSYCHIC_TYPE, NOT_VERY_EFFECTIVE
 | 
			
		||||
	db GHOST,		  DARK,			SUPER_EFFECTIVE
 | 
			
		||||
	db GHOST,		  STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db GHOST,		  GHOST,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DRAGON,		 DRAGON,		 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DRAGON,		 STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db DARK,			FIGHTING,	  SUPER_EFFECTIVE
 | 
			
		||||
	db DARK,			PSYCHIC_TYPE, NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DARK,			GHOST,		  NOT_VERY_EFFECTIVE
 | 
			
		||||
	db DARK,			DARK,			SUPER_EFFECTIVE
 | 
			
		||||
	db DARK,			STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db STEEL,		  FIRE,			SUPER_EFFECTIVE
 | 
			
		||||
	db STEEL,		  WATER,		  SUPER_EFFECTIVE
 | 
			
		||||
	db STEEL,		  ELECTRIC,	  SUPER_EFFECTIVE
 | 
			
		||||
	db STEEL,		  ICE,			 NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,		  ROCK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db STEEL,		  STEEL,		  SUPER_EFFECTIVE
 | 
			
		||||
	db NORMAL,		 GHOST,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FIGHTING,	  GHOST,		  SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,		FIRE,			SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,		BUG,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FAIRY,		FIGHTING,	  	NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FAIRY,		ICE,			SUPER_EFFECTIVE
 | 
			
		||||
	db FAIRY,	  	DRAGON,		 	NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FAIRY,		DARK,			NOT_VERY_EFFECTIVE
 | 
			
		||||
	db FAIRY,	  	STEEL,		  	SUPER_EFFECTIVE
 | 
			
		||||
	db -1 ; end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -359,7 +359,7 @@ CantMove:
 | 
			
		|||
	ld a, BATTLE_VARS_MOVE_ANIM
 | 
			
		||||
	call GetBattleVar
 | 
			
		||||
	push hl
 | 
			
		||||
	ld hl, .fly_dig_moves
 | 
			
		||||
	ld hl, FlyDigMoves
 | 
			
		||||
	call CheckMoveInList
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nc
 | 
			
		||||
| 
						 | 
				
			
			@ -371,13 +371,6 @@ CantMove:
 | 
			
		|||
	res SUBSTATUS_UNDERWATER, [hl]
 | 
			
		||||
	jp AppearUserRaiseSub
 | 
			
		||||
 | 
			
		||||
.fly_dig_moves
 | 
			
		||||
	dw FLY
 | 
			
		||||
	dw DIG
 | 
			
		||||
	dw BOUNCE
 | 
			
		||||
	dw WATER_SPORT
 | 
			
		||||
	dw -1
 | 
			
		||||
 | 
			
		||||
OpponentCantMove:
 | 
			
		||||
	call BattleCommand_SwitchTurn
 | 
			
		||||
	call CantMove
 | 
			
		||||
| 
						 | 
				
			
			@ -1370,7 +1363,13 @@ BattleCommand_Stab:
 | 
			
		|||
	ld a, BATTLE_VARS_MOVE_TYPE
 | 
			
		||||
	call GetBattleVar
 | 
			
		||||
	ld b, a
 | 
			
		||||
	ld a, [wBattleType]
 | 
			
		||||
	cp BATTLETYPE_INVERSE
 | 
			
		||||
	jr z, .inverse
 | 
			
		||||
	ld hl, TypeMatchups
 | 
			
		||||
	jr .TypesLoop
 | 
			
		||||
.inverse
 | 
			
		||||
	ld hl, InverseTypeMatchups
 | 
			
		||||
 | 
			
		||||
.TypesLoop:
 | 
			
		||||
;	ld a, [hli]
 | 
			
		||||
| 
						 | 
				
			
			@ -1497,7 +1496,13 @@ CheckTypeMatchup:
 | 
			
		|||
	ld c, [hl]
 | 
			
		||||
	ld a, EFFECTIVE
 | 
			
		||||
	ld [wTypeMatchup], a
 | 
			
		||||
	ld a, [wBattleType]
 | 
			
		||||
	cp BATTLETYPE_INVERSE
 | 
			
		||||
	jr z, .inverse
 | 
			
		||||
	ld hl, TypeMatchups
 | 
			
		||||
	jr .TypesLoop
 | 
			
		||||
.inverse
 | 
			
		||||
	ld hl, InverseTypeMatchups
 | 
			
		||||
.TypesLoop:
 | 
			
		||||
;	ld a, [hli]
 | 
			
		||||
	call GetNextTypeMatchupsByte
 | 
			
		||||
| 
						 | 
				
			
			@ -1511,7 +1516,6 @@ CheckTypeMatchup:
 | 
			
		|||
	bit SUBSTATUS_IDENTIFIED, a
 | 
			
		||||
	jr nz, .End
 | 
			
		||||
	jr .TypesLoop
 | 
			
		||||
 | 
			
		||||
.Next:
 | 
			
		||||
	cp d
 | 
			
		||||
	jr nz, .Nope
 | 
			
		||||
| 
						 | 
				
			
			@ -1788,6 +1792,7 @@ BattleCommand_CheckHit:
 | 
			
		|||
	call GetBattleVar
 | 
			
		||||
	and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
 | 
			
		||||
	jr nz, .flying_or_underground
 | 
			
		||||
	
 | 
			
		||||
	ld a, BATTLE_VARS_SUBSTATUS4_OPP
 | 
			
		||||
	call GetBattleVar
 | 
			
		||||
	and 1 << SUBSTATUS_UNDERWATER
 | 
			
		||||
| 
						 | 
				
			
			@ -1795,12 +1800,34 @@ BattleCommand_CheckHit:
 | 
			
		|||
	
 | 
			
		||||
	ld a, BATTLE_VARS_MOVE_ANIM
 | 
			
		||||
	call GetBattleVar
 | 
			
		||||
	cp SURF
 | 
			
		||||
	ld hl, SURF
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(SURF)
 | 
			
		||||
		cp HIGH(SURF)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(SURF)
 | 
			
		||||
	ret z
 | 
			
		||||
	cp WHIRLPOOL
 | 
			
		||||
	ld hl, WHIRLPOOL
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(WHIRLPOOL)
 | 
			
		||||
		cp HIGH(WHIRLPOOL)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(WHIRLPOOL)
 | 
			
		||||
	ret
 | 
			
		||||
.flying_or_underground
 | 
			
		||||
 | 
			
		||||
.flying_or_underground
 | 
			
		||||
	bit SUBSTATUS_FLYING, a
 | 
			
		||||
	ld hl, .FlyMoves
 | 
			
		||||
	jr z, .check_move_in_list
 | 
			
		||||
| 
						 | 
				
			
			@ -2071,18 +2098,11 @@ BattleCommand_MoveAnimNoSub:
 | 
			
		|||
 | 
			
		||||
	ld a, BATTLE_VARS_MOVE_ANIM
 | 
			
		||||
	call GetBattleVar
 | 
			
		||||
	ld hl, .fly_dig_moves
 | 
			
		||||
	ld hl, FlyDigMoves
 | 
			
		||||
	call CheckMoveInList
 | 
			
		||||
	ret nc
 | 
			
		||||
	jp AppearUserLowerSub
 | 
			
		||||
 | 
			
		||||
.fly_dig_moves
 | 
			
		||||
	dw FLY
 | 
			
		||||
	dw DIG
 | 
			
		||||
	dw BOUNCE
 | 
			
		||||
	dw WATER_SPORT
 | 
			
		||||
	dw -1
 | 
			
		||||
 | 
			
		||||
.alternate_anim
 | 
			
		||||
	ld a, [wBattleAnimParam]
 | 
			
		||||
	and 1
 | 
			
		||||
| 
						 | 
				
			
			@ -2167,7 +2187,7 @@ BattleCommand_FailureText:
 | 
			
		|||
	call GetBattleVarAddr
 | 
			
		||||
 | 
			
		||||
	push hl
 | 
			
		||||
	ld hl, .fly_dig_moves
 | 
			
		||||
	ld hl, FlyDigMoves
 | 
			
		||||
	call CheckMoveInList
 | 
			
		||||
	pop hl
 | 
			
		||||
	jr c, .fly_dig
 | 
			
		||||
| 
						 | 
				
			
			@ -2200,13 +2220,6 @@ BattleCommand_FailureText:
 | 
			
		|||
	call AppearUserRaiseSub
 | 
			
		||||
	jp EndMoveEffect
 | 
			
		||||
 | 
			
		||||
.fly_dig_moves
 | 
			
		||||
	dw FLY
 | 
			
		||||
	dw DIG
 | 
			
		||||
	dw WATER_SPORT
 | 
			
		||||
	dw BOUNCE
 | 
			
		||||
	dw -1
 | 
			
		||||
 | 
			
		||||
BattleCommand_ApplyDamage:
 | 
			
		||||
	ld a, BATTLE_VARS_SUBSTATUS1_OPP
 | 
			
		||||
	call GetBattleVar
 | 
			
		||||
| 
						 | 
				
			
			@ -5645,26 +5658,134 @@ BattleCommand_Charge:
 | 
			
		|||
	call LoadMoveAnim
 | 
			
		||||
	ld a, BATTLE_VARS_MOVE_ANIM
 | 
			
		||||
	call GetBattleVar
 | 
			
		||||
	
 | 
			
		||||
	ld hl, .fly_dig_moves ; attempt to resolve 16-bit issue with bounce and water sport - this can probably be made more efficient with a farcallable list
 | 
			
		||||
	call CheckMoveInList
 | 
			
		||||
	ld hl, WATER_SPORT
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(WATER_SPORT)
 | 
			
		||||
		cp HIGH(WATER_SPORT)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	jr c, .got_move_type
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(WATER_SPORT)
 | 
			
		||||
	jp z, .set_diving
 | 
			
		||||
	ld hl, FLY
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(FLY)
 | 
			
		||||
		cp HIGH(FLY)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(FLY)
 | 
			
		||||
	jr z, .set_flying
 | 
			
		||||
	ld hl, BOUNCE
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(BOUNCE)
 | 
			
		||||
		cp HIGH(BOUNCE)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(BOUNCE)
 | 
			
		||||
	jr z, .set_flying
 | 
			
		||||
	ld hl, DIG
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(DIG)
 | 
			
		||||
		cp HIGH(DIG)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(DIG)
 | 
			
		||||
	jr z, .set_flying
 | 
			
		||||
	call BattleCommand_RaiseSub
 | 
			
		||||
	xor a
 | 
			
		||||
	jr .not_flying
 | 
			
		||||
 | 
			
		||||
.got_move_type
 | 
			
		||||
	; a will contain the substatus 3 bit to set (1 << bit), or 0 if none (not flying/digging underground)
 | 
			
		||||
	and a
 | 
			
		||||
	ld l, a
 | 
			
		||||
	push hl
 | 
			
		||||
	call nz, DisappearUser
 | 
			
		||||
.flying
 | 
			
		||||
	call DisappearUser
 | 
			
		||||
.not_flying
 | 
			
		||||
	ld a, BATTLE_VARS_SUBSTATUS3
 | 
			
		||||
	call GetBattleVarAddr
 | 
			
		||||
	pop bc
 | 
			
		||||
	ld a, c
 | 
			
		||||
	or [hl]
 | 
			
		||||
	ld [hl], a
 | 
			
		||||
	ld a, BATTLE_VARS_MOVE_ANIM
 | 
			
		||||
	call GetBattleVar
 | 
			
		||||
	ld b, a
 | 
			
		||||
	ld hl, WATER_SPORT
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(WATER_SPORT)
 | 
			
		||||
		cp HIGH(WATER_SPORT)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(WATER_SPORT)
 | 
			
		||||
	jr z, .set_diving
 | 
			
		||||
	ld hl, FLY
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(FLY)
 | 
			
		||||
		cp HIGH(FLY)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(FLY)
 | 
			
		||||
	jr z, .set_flying
 | 
			
		||||
	ld hl, BOUNCE
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(BOUNCE)
 | 
			
		||||
		cp HIGH(BOUNCE)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(BOUNCE)
 | 
			
		||||
	jr z, .set_flying
 | 
			
		||||
	ld hl, DIG
 | 
			
		||||
	call GetMoveIDFromIndex
 | 
			
		||||
	ld a, h
 | 
			
		||||
	if HIGH(DIG)
 | 
			
		||||
		cp HIGH(DIG)
 | 
			
		||||
	else
 | 
			
		||||
		and a
 | 
			
		||||
	endc
 | 
			
		||||
	ld a, l
 | 
			
		||||
	pop hl
 | 
			
		||||
	ret nz
 | 
			
		||||
	cp LOW(DIG)
 | 
			
		||||
	jr z, .set_flying
 | 
			
		||||
	jr nz, .dont_set_digging
 | 
			
		||||
	set SUBSTATUS_UNDERGROUND, [hl]
 | 
			
		||||
	jr .dont_set_digging
 | 
			
		||||
 | 
			
		||||
.set_diving
 | 
			
		||||
	ld a, BATTLE_VARS_SUBSTATUS4
 | 
			
		||||
	call GetBattleVarAddr
 | 
			
		||||
	set SUBSTATUS_UNDERWATER, [hl]
 | 
			
		||||
	jr .dont_set_digging
 | 
			
		||||
.set_flying
 | 
			
		||||
	set SUBSTATUS_FLYING, [hl]
 | 
			
		||||
 | 
			
		||||
.dont_set_digging
 | 
			
		||||
	call CheckUserIsCharging
 | 
			
		||||
	jr nz, .mimic
 | 
			
		||||
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE
 | 
			
		||||
| 
						 | 
				
			
			@ -5750,13 +5871,6 @@ BattleCommand_Charge:
 | 
			
		|||
	text_jump HidUnderwaterText
 | 
			
		||||
	db "@"
 | 
			
		||||
 | 
			
		||||
.fly_dig_moves
 | 
			
		||||
	dw FLY
 | 
			
		||||
	dw DIG
 | 
			
		||||
	dw BOUNCE
 | 
			
		||||
	dw WATER_SPORT
 | 
			
		||||
	dw -1
 | 
			
		||||
 | 
			
		||||
BattleCommand_TrapTarget:
 | 
			
		||||
	ld a, [wAttackMissed]
 | 
			
		||||
	and a
 | 
			
		||||
| 
						 | 
				
			
			@ -6132,6 +6246,7 @@ BattleCommand_DoubleUnderwaterDamage:
 | 
			
		|||
	ld a, BATTLE_VARS_SUBSTATUS4_OPP
 | 
			
		||||
	call GetBattleVar
 | 
			
		||||
	bit SUBSTATUS_UNDERWATER, a
 | 
			
		||||
	ret z
 | 
			
		||||
	; fallthrough
 | 
			
		||||
 | 
			
		||||
DoubleDamage:
 | 
			
		||||
| 
						 | 
				
			
			@ -6952,3 +7067,10 @@ CheckMoveInList:
 | 
			
		|||
	pop de
 | 
			
		||||
	pop bc
 | 
			
		||||
	ret
 | 
			
		||||
 | 
			
		||||
FlyDigMoves:
 | 
			
		||||
	dw FLY
 | 
			
		||||
	dw DIG
 | 
			
		||||
	dw BOUNCE
 | 
			
		||||
	dw WATER_SPORT
 | 
			
		||||
	dw -1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,12 +8,12 @@ DebugRoom_MapScripts:
 | 
			
		|||
 | 
			
		||||
DebugPokemon1Script:
 | 
			
		||||
	opentext
 | 
			
		||||
	getmonname STRING_BUFFER_3, AZUMARILL
 | 
			
		||||
	getmonname STRING_BUFFER_3, BIPULLA
 | 
			
		||||
	writetext ReceivedDebugPokemonText
 | 
			
		||||
	playsound SFX_CAUGHT_MON
 | 
			
		||||
	waitsfx
 | 
			
		||||
	promptbutton
 | 
			
		||||
	givepoke AZUMARILL, 4, HM_WATER_SPORT
 | 
			
		||||
	givepoke BIPULLA, 15, HM_WATER_SPORT
 | 
			
		||||
	closetext
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -39,11 +39,11 @@ DebugPokemon3Script:
 | 
			
		|||
	faceplayer
 | 
			
		||||
	opentext
 | 
			
		||||
	writetext DebugTextA
 | 
			
		||||
	cry STROMEN
 | 
			
		||||
	cry BELLSPROUT
 | 
			
		||||
	pause 15
 | 
			
		||||
	closetext
 | 
			
		||||
	loadvar VAR_BATTLETYPE, BATTLETYPE_SHINY
 | 
			
		||||
	loadwildmon COATL, 75
 | 
			
		||||
	loadvar VAR_BATTLETYPE, BATTLETYPE_INVERSE
 | 
			
		||||
	loadwildmon BELLSPROUT, 10
 | 
			
		||||
	startbattle
 | 
			
		||||
	reloadmapafterbattle
 | 
			
		||||
	end
 | 
			
		||||
| 
						 | 
				
			
			@ -56,11 +56,11 @@ DebugPokemon4Script:
 | 
			
		|||
	faceplayer
 | 
			
		||||
	opentext
 | 
			
		||||
	writetext DebugTextB
 | 
			
		||||
	cry STROMEN
 | 
			
		||||
	cry BELLSPROUT
 | 
			
		||||
	pause 15
 | 
			
		||||
	closetext
 | 
			
		||||
	loadvar VAR_BATTLETYPE, BATTLETYPE_SUICUNE
 | 
			
		||||
	loadwildmon COATL, 75
 | 
			
		||||
	loadwildmon BELLSPROUT, 10
 | 
			
		||||
	startbattle
 | 
			
		||||
	reloadmapafterbattle
 | 
			
		||||
	end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue