No Description

battle_help.c 3.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "battle_help.h"
  2. //from kds emerald battle engine upgrade
  3. u8 type_effectiveness_table[TYPE_FAIRY-0x4][TYPE_FAIRY-0x4] = {
  4. {10,10,10,10,10,05,10,00,05,10,10,10,10,10,10,10,10,10,10}, //normal
  5. {20,10,05,05,10,20,05,00,20,10,10,10,10,10,05,20,10,20,05}, //fight
  6. {10,20,10,10,10,05,20,10,05,10,10,10,20,05,10,10,10,10,10}, //flying
  7. {10,10,10,05,05,05,10,05,00,10,10,10,20,10,10,10,10,10,20}, //poison
  8. {10,10,00,20,10,20,05,10,20,10,20,10,05,20,10,10,10,10,10}, //ground
  9. {10,05,20,10,05,10,20,10,05,10,20,10,10,10,10,20,10,10,10}, //rock
  10. {10,05,05,05,10,10,10,05,05,10,05,10,20,10,20,10,10,20,05}, //bug
  11. {00,10,10,10,10,10,10,20,10,10,10,10,10,10,20,10,10,05,10}, //ghost
  12. {10,10,10,10,10,20,10,10,05,10,05,05,10,05,10,20,10,10,20}, //steel
  13. {10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10}, //egg
  14. {10,10,10,10,10,05,20,10,20,10,05,05,20,10,10,20,05,10,10}, //fire
  15. {10,10,10,10,20,20,10,10,10,10,20,05,05,10,10,10,05,10,10}, //water
  16. {10,10,05,05,20,20,05,10,05,10,05,20,05,10,10,10,05,10,10}, //grass
  17. {10,10,20,10,00,10,10,10,10,10,10,20,05,05,10,10,05,10,10}, //electric
  18. {10,20,10,20,10,10,10,10,05,10,10,10,10,10,05,10,10,00,10}, //psychic
  19. {10,10,20,10,20,10,10,10,05,10,05,05,20,10,10,05,20,10,10}, //ice
  20. {10,10,10,10,10,10,10,10,05,10,10,10,10,10,10,10,20,10,00}, //dragon
  21. {10,05,10,10,10,10,10,20,10,10,10,10,10,10,20,10,10,05,05}, //dark
  22. {10,20,10,05,10,10,10,10,05,10,05,10,10,10,10,10,20,20,10} //fairy
  23. };
  24. u16 damage_type_effectiveness_update(u8 attacking_type, u8 defending_type, u8 atk_bank, u8 def_bank, u16 chained_effect, u8 airstatus)
  25. {
  26. u8 effect,atype=attacking_type,dtype=defending_type;
  27. if(!chained_effect || atype==TYPE_EGG || dtype==TYPE_EGG)
  28. return chained_effect;
  29. if(atype>=TYPE_FAIRY)
  30. atype=atype-5;
  31. if(dtype>=TYPE_FAIRY)
  32. dtype=dtype-5;
  33. effect=type_effectiveness_table[atype][dtype];
  34. if (custom_battle_struct.ptr->various.inverse_battle)
  35. {
  36. if (effect == 20)
  37. {
  38. effect = 5;
  39. }
  40. else if (effect == 5 || effect == 0)
  41. {
  42. effect = 20;
  43. }
  44. }
  45. //handle normal / fighting on ghost
  46. if ((((attacking_type == TYPE_NORMAL || attacking_type == TYPE_FIGHTING) && defending_type == TYPE_GHOST && ((battle_participants[def_bank].status2.foresight))) || battle_participants[atk_bank].ability_id == ABILITY_SCRAPPY) && effect == 0)
  47. {
  48. effect = 10;
  49. }
  50. //handle other effectiveness changers here
  51. switch(effect)
  52. {
  53. case 0:
  54. chained_effect = 0;
  55. break;
  56. case 5:
  57. chained_effect = chained_effect>>1;
  58. break;
  59. case 20:
  60. chained_effect = chained_effect<<1;
  61. break;
  62. }
  63. return chained_effect;
  64. }
  65. u16 apply_type_effectiveness(u16 chained_effect, u8 move_type, u8 target_bank, u8 atk_bank, u8 airstatus)
  66. {
  67. u8 defender_type1 = battle_participants[target_bank].type1;
  68. u8 defender_type2 = battle_participants[target_bank].type2;
  69. //set different types
  70. if (defender_type2 == defender_type1)
  71. defender_type2 = TYPE_EGG;
  72. chained_effect = damage_type_effectiveness_update(move_type, defender_type1, atk_bank, target_bank, chained_effect, airstatus);
  73. chained_effect = damage_type_effectiveness_update(move_type, defender_type2, atk_bank, target_bank, chained_effect, airstatus);
  74. return chained_effect;
  75. }
  76. u16 type_effectiveness_calc(u16 move, u8 move_type, u8 atk_bank, u8 def_bank, u8 effects_handling_and_recording)
  77. {
  78. u16 chained_effect = 64;
  79. //TODO: double_type moves
  80. //TODO: get air status
  81. chained_effect = apply_type_effectiveness(chained_effect, move_type, def_bank, atk_bank, 2);
  82. //TODO: save into structs
  83. //TODO: effect_handling_and_recoring
  84. return chained_effect;
  85. }