Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct type_effectiveness{
- u8 attacking_type;
- u8 defending_type;
- u8 effect;
- } type_effectiveness_table[] = {
- {TYPE_NORMAL, TYPE_ROCK, 5},
- {TYPE_NORMAL, TYPE_STEEL, 5},
- {TYPE_NORMAL, TYPE_GHOST, 0},
- {TYPE_FIRE, TYPE_FIRE, 5},
- {TYPE_FIRE, TYPE_WATER, 5},
- {TYPE_FIRE, TYPE_GRASS, 20},
- {TYPE_FIRE, TYPE_ICE, 20},
- {TYPE_FIRE, TYPE_BUG, 20},
- {TYPE_FIRE, TYPE_ROCK, 5},
- {TYPE_FIRE, TYPE_DRAGON, 5},
- {TYPE_FIRE, TYPE_STEEL, 20},
- {TYPE_WATER, TYPE_FIRE, 20},
- {TYPE_WATER, TYPE_WATER, 5},
- {TYPE_WATER, TYPE_GRASS, 5},
- {TYPE_WATER, TYPE_GROUND, 20},
- {TYPE_WATER, TYPE_ROCK, 20},
- {TYPE_WATER, TYPE_DRAGON, 5},
- {TYPE_ELECTRIC, TYPE_WATER, 20},
- {TYPE_ELECTRIC, TYPE_ELECTRIC, 5},
- {TYPE_ELECTRIC, TYPE_GRASS, 5},
- {TYPE_ELECTRIC, TYPE_GROUND, 0},
- {TYPE_ELECTRIC, TYPE_FLYING, 20},
- {TYPE_ELECTRIC, TYPE_DRAGON, 5},
- {TYPE_GRASS, TYPE_FIRE, 5},
- {TYPE_GRASS, TYPE_WATER, 20},
- {TYPE_GRASS, TYPE_GRASS, 5},
- {TYPE_GRASS, TYPE_POISON, 5},
- {TYPE_GRASS, TYPE_GROUND, 20},
- {TYPE_GRASS, TYPE_FLYING, 5},
- {TYPE_GRASS, TYPE_BUG, 5},
- {TYPE_GRASS, TYPE_ROCK, 20},
- {TYPE_GRASS, TYPE_DRAGON, 5},
- {TYPE_GRASS, TYPE_STEEL, 5},
- {TYPE_ICE, TYPE_WATER, 5},
- {TYPE_ICE, TYPE_GRASS, 20},
- {TYPE_ICE, TYPE_ICE, 5},
- {TYPE_ICE, TYPE_GROUND, 20},
- {TYPE_ICE, TYPE_FLYING, 20},
- {TYPE_ICE, TYPE_DRAGON, 20},
- {TYPE_ICE, TYPE_STEEL, 5},
- {TYPE_ICE, TYPE_FIRE, 5},
- {TYPE_FIGHTING, TYPE_NORMAL, 20},
- {TYPE_FIGHTING, TYPE_ICE, 20},
- {TYPE_FIGHTING, TYPE_POISON, 5},
- {TYPE_FIGHTING, TYPE_FLYING, 5},
- {TYPE_FIGHTING, TYPE_PSYCHIC, 5},
- {TYPE_FIGHTING, TYPE_BUG, 5},
- {TYPE_FIGHTING, TYPE_ROCK, 20},
- {TYPE_FIGHTING, TYPE_DARK, 20},
- {TYPE_FIGHTING, TYPE_STEEL, 20},
- {TYPE_FIGHTING, TYPE_GHOST, 0},
- {TYPE_POISON, TYPE_GRASS, 20},
- {TYPE_POISON, TYPE_POISON, 5},
- {TYPE_POISON, TYPE_GROUND, 5},
- {TYPE_POISON, TYPE_ROCK, 5},
- {TYPE_POISON, TYPE_GHOST, 5},
- {TYPE_POISON, TYPE_STEEL, 0},
- {TYPE_GROUND, TYPE_FIRE, 20},
- {TYPE_GROUND, TYPE_ELECTRIC, 20},
- {TYPE_GROUND, TYPE_GRASS, 5},
- {TYPE_GROUND, TYPE_POISON, 20},
- {TYPE_GROUND, TYPE_FLYING, 0},
- {TYPE_GROUND, TYPE_BUG, 5},
- {TYPE_GROUND, TYPE_ROCK, 20},
- {TYPE_GROUND, TYPE_STEEL, 20},
- {TYPE_FLYING, TYPE_ELECTRIC, 5},
- {TYPE_FLYING, TYPE_GRASS, 20},
- {TYPE_FLYING, TYPE_FIGHTING, 20},
- {TYPE_FLYING, TYPE_BUG, 20},
- {TYPE_FLYING, TYPE_ROCK, 5},
- {TYPE_FLYING, TYPE_STEEL, 5},
- {TYPE_PSYCHIC, TYPE_FIGHTING, 20},
- {TYPE_PSYCHIC, TYPE_POISON, 20},
- {TYPE_PSYCHIC, TYPE_PSYCHIC, 5},
- {TYPE_PSYCHIC, TYPE_DARK, 0},
- {TYPE_PSYCHIC, TYPE_STEEL, 5},
- {TYPE_BUG, TYPE_FIRE, 5},
- {TYPE_BUG, TYPE_GRASS, 20},
- {TYPE_BUG, TYPE_FIGHTING, 5},
- {TYPE_BUG, TYPE_POISON, 5},
- {TYPE_BUG, TYPE_FLYING, 5},
- {TYPE_BUG, TYPE_PSYCHIC, 20},
- {TYPE_BUG, TYPE_GHOST, 5},
- {TYPE_BUG, TYPE_DARK, 20},
- {TYPE_BUG, TYPE_STEEL, 5},
- {TYPE_ROCK, TYPE_FIRE, 20},
- {TYPE_ROCK, TYPE_ICE, 20},
- {TYPE_ROCK, TYPE_FIGHTING, 5},
- {TYPE_ROCK, TYPE_GROUND, 5},
- {TYPE_ROCK, TYPE_FLYING, 20},
- {TYPE_ROCK, TYPE_BUG, 20},
- {TYPE_ROCK, TYPE_STEEL, 5},
- {TYPE_GHOST, TYPE_NORMAL, 0},
- {TYPE_GHOST, TYPE_PSYCHIC, 20},
- {TYPE_GHOST, TYPE_DARK, 0},
- {TYPE_GHOST, TYPE_GHOST, 20},
- {TYPE_DRAGON, TYPE_DRAGON, 20},
- {TYPE_DRAGON, TYPE_STEEL, 5},
- {TYPE_DARK, TYPE_FIGHTING, 5},
- {TYPE_DARK, TYPE_PSYCHIC, 20},
- {TYPE_DARK, TYPE_GHOST, 20},
- {TYPE_DARK, TYPE_DARK, 5},
- {TYPE_STEEL, TYPE_FIRE, 5},
- {TYPE_STEEL, TYPE_WATER, 5},
- {TYPE_STEEL, TYPE_ELECTRIC, 5},
- {TYPE_STEEL, TYPE_ICE, 20},
- {TYPE_STEEL, TYPE_ROCK, 20},
- {TYPE_STEEL, TYPE_STEEL, 5}, //now fairy type
- {TYPE_STEEL, TYPE_FAIRY, 20},
- {TYPE_POISON, TYPE_FAIRY, 20},
- {TYPE_BUG, TYPE_FAIRY, 5},
- {TYPE_DARK, TYPE_FAIRY, 5},
- {TYPE_FIGHTING, TYPE_FAIRY, 5},
- {TYPE_DRAGON, TYPE_FAIRY, 0},
- {TYPE_FAIRY, TYPE_DRAGON, 20},
- {TYPE_FAIRY, TYPE_POISON, 5},
- {TYPE_FAIRY, TYPE_STEEL, 5},
- {TYPE_FAIRY, TYPE_FIRE, 5},
- {TYPE_FAIRY, TYPE_DARK, 20},
- {TYPE_FAIRY, TYPE_FIGHTING, 20},
- {0xFF, 0xFF, 0xFF}
- };
- u32 apply_type_effectiveness(u32 damage, u8 move_type, u8 target_bank, u8 atk_bank)
- {
- u8 defender_type1 = battle_participants[target_bank].type1;
- u8 defender_type2 = battle_participants[target_bank].type2;
- u8 defender_type3 = new_battlestruct.ptr->bank_affecting[target_bank].type3;
- //set different types
- if (defender_type2 == defender_type1)
- defender_type2 = TYPE_EGG;
- if (defender_type3 == defender_type1 || defender_type3 == defender_type2)
- defender_type3 = TYPE_EGG;
- for (u8 i = 0; type_effectiveness_table[i].attacking_type != 0xFF; i++)
- {
- if (move_type == type_effectiveness_table[i].attacking_type && (defender_type1 == type_effectiveness_table[i].defending_type || defender_type2 == type_effectiveness_table[i].defending_type || defender_type3 == type_effectiveness_table[i].defending_type))
- {
- damage = damage_type_effectiveness_update(type_effectiveness_table[i].attacking_type, type_effectiveness_table[i].defending_type, type_effectiveness_table[i].effect, atk_bank, target_bank, damage);
- }
- }
- return damage;
- }
- u32 damage_type_effectiveness_update (u8 attacking_type, u8 defending_type, u8 effect, u8 atk_bank, u8 def_bank, u32 damage)
- {
- if (new_battlestruct.ptr->various.inverse_battle)
- {
- if (effect == 20)
- {
- effect = 5;
- }
- else if (effect == 5 || effect == 0)
- {
- effect = 20;
- }
- }
- if (((attacking_type == TYPE_NORMAL || attacking_type == TYPE_FIGHTING) && defending_type == TYPE_GHOST && ((battle_participants[atk_bank].status2 & 0x20000000))) || battle_participants[atk_bank].ability_id == ABILITY_SCRAPPY && effect == 0)
- {
- effect = 10;
- }
- else if ((attacking_type == TYPE_PSYCHIC) && defending_type == TYPE_DARK && new_battlestruct.ptr->bank_affecting[atk_bank].miracle_eyed && effect == 0)
- {
- effect = 10;
- }
- else if (effect == 0 && (get_item_effect(def_bank, true) == ITEM_EFFECT_RINGTARGET))
- {
- effect = 10;
- }
- else if (battle_weather.flags.air_current && defending_type == TYPE_FLYING && effect == 20)
- {
- effect = 10;
- }
- else if (attacking_type == TYPE_GROUND)
- {
- if ((new_battlestruct.ptr->field_affecting.gravity || get_item_effect(def_bank, true) == ITEM_EFFECT_IRONBALL) && effect == 0)
- {
- effect = 10;
- }
- else if ((defending_type == TYPE_FLYING && effect == 0) || battle_participants[def_bank].ability_id == ABILITY_LEVITATE || (get_item_effect(def_bank, true) == ITEM_EFFECT_AIRBALLOON && !new_battlestruct.ptr->bank_affecting[def_bank].popped_air_balloon) || new_battlestruct.ptr->bank_affecting[def_bank].magnet_rise || new_battlestruct.ptr->bank_affecting[def_bank].telekinesis)
- {
- if (new_battlestruct.ptr->bank_affecting[def_bank].smacked_down)
- {
- effect = 10;
- }
- else
- {
- effect = 10;
- }
- }
- }
- else if (current_move == MOVE_FREEZEDRY && defending_type == TYPE_WATER)
- {
- effect = 20;
- }
- damage_loc = damage;
- damage_modulate_by_type_effectivity(effect);
- damage = damage_loc;
- return damage;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement