Advertisement
Guest User

Pokemon_Battle_Core 2

a guest
Jan 8th, 2016
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 130.45 KB | None | 0 0
  1. #==============================================================================
  2. # ■ Pokemon_Battle_Core
  3. # Pokemon Script Project - Krosk
  4. # 26/07/07
  5. #-----------------------------------------------------------------------------
  6. # Corrigé par RhenaudTheLukark
  7. #-----------------------------------------------------------------------------
  8. # Scène à ne pas modifier de préférence
  9. #-----------------------------------------------------------------------------
  10. # Système de Combat - Pokémon Sauvage
  11. #   Composantes de programmation des attaques
  12. #   Attaque
  13. #-----------------------------------------------------------------------------
  14.  
  15. #-----------------------------------------------------------------------------
  16. # 0: Normal, 1: Poison, 2: Paralysé, 3: Brulé, 4:Sommeil, 5:Gelé, 8: Toxic
  17. # @confuse (6), @flinch (7)
  18. #-----------------------------------------------------------------------------
  19. # 1 Normal  2 Feu  3 Eau 4 Electrique 5 Plante 6 Glace 7 Combat 8 Poison 9 Sol
  20. # 10 Vol 11 Psy 12 Insecte 13 Roche 14 Spectre 15 Dragon 16 Acier 17 Tenebres
  21. #-----------------------------------------------------------------------------
  22.  
  23. module POKEMON_S
  24.   #------------------------------------------------------------  
  25.   # Pokemon_Battle_Core
  26.   # scene
  27.   #------------------------------------------------------------  
  28.   class Pokemon_Battle_Core
  29.     #------------------------------------------------------------  
  30.     # Détail du déroulement - Actions pré-round
  31.     #------------------------------------------------------------    
  32.     # Vérification saut de phase
  33.     #     Force l'utilisateur à continuer à attaquer
  34.     #     0x27 # Two_turn attack
  35.     #     0x2A # Multi-turn attack
  36.     #     0x4B # Two_turn attack
  37.     #     0x50 # Two_turn reverse
  38.     #     0x75 # Roulade
  39.     #     0x9F # Brouhaha / Uproar
  40.     #     0x1A # Patience / Bide
  41.     #     0x1B # Mania / Thrash
  42.     #------------------------------------------------------------            
  43.     def phase_jump(enemy = false)
  44.       @last_skill = $battle_var.last_used
  45.       list = [0x27, 0x2A, 0x4B, 0x50, 0x75, 0x9F, 0x1A, 0x1B, 0x91, 0x97, 0x9B0, 0x9B1, 0x9B2, 0x9B3]
  46.       if not(enemy) # Actor
  47.         for effect in @actor.effect_list
  48.           if list.include?(effect)
  49.             @actor_skill = $battle_var.actor_last_used
  50.             @phase = 2
  51.             return true
  52.           end
  53.         end
  54.         return false
  55.       elsif enemy
  56.         for effect in @enemy.effect_list
  57.           if list.include?(effect)
  58.             @enemy_skill = $battle_var.enemy_last_used
  59.             return false
  60.           end
  61.         end
  62.         return true
  63.       end
  64.     end
  65.    
  66.     #------------------------------------------------------------    
  67.     # Interdictions de switcher
  68.     #------------------------------------------------------------        
  69.     def switch_able(actor, enemy)
  70.       # Arena Trap / Piege (ab)
  71.       if enemy.ability == 71 and not (enemy.effect_list.include?(0xEF) or enemy.effect_list.include?(0xF7))
  72.         return false
  73.       end
  74.       # Effets appliqués au user empêchant la fuite
  75.       list = [0x1A, 0x1B, 0x6A, 0x9F, 0xB5]
  76.       for effect in actor.effect_list
  77.         if list.include?(effect)
  78.           return false
  79.         end
  80.       end
  81.       # Effets appliqués à l'ennemi empêchant la fuite
  82.       list = [0x2A]
  83.       for effect in enemy.effect_list
  84.         if list.include?(effect)
  85.           return false
  86.         end
  87.       end
  88.       # Shadow Tag / Marque Ombre (ab) // Magnepiece / Magnet Pull (ab)
  89.       if ((enemy.ability == 23 or enemy.ability == 42) and not
  90.           (enemy.effect_list.include?(0xEF) or enemy.effect_list.include?(0xF7))) and
  91.           enemy.type_steel?
  92.         draw_text("#{enemy.ability_name} de #{enemy.given_name}", "empêche le changement!")
  93.         wait(40)
  94.         return false
  95.       end
  96.       return true
  97.     end
  98.    
  99.     #------------------------------------------------------------  
  100.     # Capacité de fuite
  101.     #------------------------------------------------------------          
  102.     def run_able?(runner, opponent)
  103.       x = (Integer(opponent.spd/4) / 255.0)
  104.       rate = Integer(runner.spd*32/x)+(30*($battle_var.run_count))
  105.       if not(flee_able(runner, opponent))
  106.         return false
  107.       end
  108.       if opponent.spd <= runner.spd
  109.         return true
  110.       elsif x == 0
  111.         return true
  112.       elsif rate > 255
  113.         return true
  114.       elsif rand(256) <= rate
  115.         return true
  116.       else
  117.         return false
  118.       end
  119.     end
  120.    
  121.     #------------------------------------------------------------    
  122.     # Interdictions de fuire
  123.     #------------------------------------------------------------    
  124.     def flee_able(actor, enemy)
  125.       # Run away / Fuite (ab)
  126.       if actor.ability == 50 and not (actor.effect_list.include?(0xEF) or actor.effect_list.include?(0xF7))
  127.         return true
  128.       end
  129.       # Arena Trap / Piege (ab)
  130.       if enemy.ability == 71 and not (enemy.effect_list.include?(0xEF) or enemy.effect_list.include?(0xF7))
  131.         return false
  132.       end
  133.       list = [0x6A, 0xB5]
  134.       for effect in actor.effect_list
  135.         if list.include?(effect)
  136.           return false
  137.         end
  138.       end
  139.       # Shadow Tag / Marque Ombre (ab) // Magnepiece / Magnet Pull (ab)
  140.       if ((enemy.ability == 23 or enemy.ability == 42) and not
  141.           (enemy.effect_list.include?(0xEF) or enemy.effect_list.include?(0xF7))) and
  142.           enemy.type_steel?
  143.         wait(40)
  144.         return false
  145.       end
  146.       return true
  147.     end
  148.  
  149.     #------------------------------------------------------------    
  150.     # Vérification saut de phase de sélection d'attaque
  151.     #     Force l'utilisateur à utiliser la même attaque
  152.     #------------------------------------------------------------        
  153.     def attack_selection_jump
  154.       for effect in @actor.effect_list
  155.         case effect
  156.         when 0x5A # Encore
  157.           return true
  158.         when 0x1A # Patience / Bide
  159.           return true
  160.         when 0x1B # Mania / Thrash
  161.           return true
  162.         end
  163.       end
  164.       return false
  165.     end
  166.    
  167.     #------------------------------------------------------------  
  168.     # Détail du déroulement - Round
  169.     #------------------------------------------------------------    
  170.     # Pré-actions , Actions
  171.     #------------------------------------------------------------
  172.     def attack_action(user, user_skill, enemy)
  173.       #------------------------------------------------------------
  174.       # Target , Sprite definition
  175.       #------------------------------------------------------------
  176.       # Target
  177.       target_id = user_skill.target
  178.       if target_id == 0 or target_id == 4 or target_id == 8 or target_id == 20 #Opposants
  179.         target = enemy
  180.       elsif target_id == 10
  181.         target = user # Défini la cible comme l'acteur
  182.       end
  183.      
  184.       # Assignation sprite et informations
  185.       if user == @actor
  186.         user_sprite = @actor_sprite
  187.         user_status = @actor_status
  188.         user_last_skill = $battle_var.actor_last_used
  189.         user_last_taken_damage = $battle_var.actor_last_taken_damage
  190.       elsif user == @enemy
  191.         user_sprite = @enemy_sprite
  192.         user_status = @enemy_status
  193.         user_last_skill = $battle_var.enemy_last_used
  194.         user_last_taken_damage = $battle_var.enemy_last_taken_damage
  195.       end
  196.       if target == @actor
  197.         target_sprite = @actor_sprite
  198.         target_status = @actor_status
  199.         target_last_skill = $battle_var.actor_last_used
  200.         target_last_taken_damage = $battle_var.actor_last_taken_damage
  201.       elsif target == @enemy
  202.         target_sprite = @enemy_sprite
  203.         target_status = @enemy_status
  204.         target_last_skill = $battle_var.enemy_last_used
  205.         target_last_taken_damage = $battle_var.enemy_last_taken_damage
  206.       end
  207.       last_skill = $battle_var.last_used
  208.      
  209.       #------------------------------------------------------------
  210.       # Status Check
  211.       #------------------------------------------------------------
  212.       # Sommeil
  213.       if user.asleep?
  214.         if user.sleep_check and not(user.effect_list.include?(0x9F)) # Uproar
  215.           draw_text("#{user.given_name}", "dort!")
  216.           status_animation(user_sprite, user.status)
  217.           wait(40)
  218.           # Attaques actives au sommeil
  219.           # Sleep Talk - Blabla Dodo / Snore - Baillement non affecté par le sommeil
  220.           if not(user_skill.effect == 0x61 or user_skill.effect == 0x5C)
  221.             return
  222.           end
  223.         else
  224.           user_status.refresh
  225.           draw_text("#{user.given_name}", "se réveille!")
  226.           wait(40)
  227.         end
  228.       end
  229.      
  230.       # Frozen
  231.       if user.frozen?
  232.         if user.froze_check
  233.           if user_skill.effect == 0x7D # Defrost move
  234.             user.cure
  235.             user_status.refresh
  236.             draw_text("#{user.given_name}", "dégèle!")
  237.             wait(40)
  238.           else
  239.             draw_text("#{user.given_name}", "est gelé!")
  240.             status_animation(user_sprite, user.status)
  241.             wait(40)
  242.             return
  243.           end
  244.         else
  245.           user_status.refresh
  246.           draw_text("#{user.given_name}", "dégèle!")
  247.           wait(40)
  248.         end
  249.       end
  250.      
  251.       # Two turn reverse
  252.       case user_skill.effect
  253.       when 0x50 # Two turn reverse
  254.         if user.effect_list.include?(0x50) # Déjà attaqué
  255.           draw_text("#{user.given_name}", "doit recharger!")
  256.           wait(40)
  257.           return
  258.         end
  259.       end
  260.      
  261.       # Truant / Absentéisme (ab)
  262.       if user.ability == 54 and not (user.effect_list.include?(0xEF) or user.effect_list.include?(0xF7))
  263.         if user.ability_token == nil
  264.           user.ability_token = false
  265.         end
  266.         if user.ability_token == true
  267.           draw_text("#{user.given_name}", "paresse!")
  268.           wait(40)
  269.           return
  270.         end
  271.       end
  272.      
  273.       # Flinch
  274.       if user.flinch?
  275.         draw_text("#{user.given_name}", "est apeuré!")
  276.         status_animation(user_sprite, 7)
  277.         user.flinch_check
  278.         wait(40)
  279.         return
  280.       end
  281.      
  282.       # Confuse
  283.       if user.confused?
  284.         if user.state_count > 0
  285.           draw_text("#{user.given_name}", "est confus!")
  286.           status_animation(user_sprite, 6)
  287.           condition = user.confuse_check
  288.           if condition == true
  289.             draw_text("#{user.given_name}" +  "se blesse", "dans sa confusion.")
  290.             damage = user.confuse_damage
  291.             self_damage(user, user_sprite, user_status, damage)
  292.             wait(40)
  293.             return
  294.           end
  295.         elsif user.state_count == 0
  296.           draw_text("#{user.given_name}", "n'est plus confus!")
  297.           user.cure_state
  298.           wait(40)
  299.         end
  300.       end
  301.      
  302.       # Paralyze
  303.       if user.paralyzed?
  304.         if user.paralysis_check
  305.           draw_text("#{user.given_name} est paralysé!", "Il ne peut pas attaquer!")
  306.           status_animation(user_sprite, user.status)
  307.           wait(40)
  308.           return
  309.         end
  310.       end
  311.      
  312.       #------------------------------------------------------------
  313.       # Effets pré-accuracy_check et programmation des attaques
  314.       #------------------------------------------------------------  
  315.       pp_use = true
  316.       jumper_end = false
  317.       case user_skill.effect
  318.       when 0x1A # Bide / Patience
  319.         index = user.effect_list.index(0x1A)
  320.         if user.effect_list.include?(0x1A) and [4,5].include?(user.status)
  321.           user.effect.delete_at(index) # Supprime si endormi ou gelé
  322.         end
  323.         if not(user.effect_list.include?(0x1A))
  324.           draw_text("#{user.given_name}", "patiente...")
  325.           wait(40)
  326.           turn = rand(2) + 3
  327.           user.skill_effect(0x1A, turn, 0)
  328.           jumper_end = true
  329.         elsif user.effect[index][1] >= 2 # Encore en charge
  330.           draw_text("#{user.given_name} patiente...")
  331.           wait(40)
  332.           pp_use = false
  333.           jumper_end = true
  334.         else
  335.           pp_use = false
  336.           # Changement de cible!
  337.           if user == @actor
  338.             target = @enemy
  339.             target_sprite = @enemy_sprite
  340.             target_status = @enemy_status
  341.           elsif user == @enemy
  342.             target = @actor
  343.             target_sprite = @actor_sprite
  344.             target_status = @actor_status
  345.           end
  346.         end
  347.       when 0x1B # Thrash / Mania
  348.         index = user.effect_list.index(0x1B)
  349.         if user.effect_list.include?(0x1B) and [4,5].include?(user.status)
  350.           user.effect.delete_at(index) # Supprime si endormi ou gelé
  351.         end
  352.         if not(user.effect_list.include?(0x1B))
  353.           turn = rand(2) + 2
  354.           user.skill_effect(0x1B, turn)
  355.           pp_use = true
  356.         else
  357.           pp_use = false
  358.         end
  359.       when 0x27 # Razor wind / Coupe-Vent / Two turn atk
  360.         if not(user.effect_list.include?(0x27)) # not(Déjà préparé)
  361.           user.skill_effect(0x27, 2)
  362.           draw_text("#{user.given_name} se prépare!")
  363.           jumper_end = true
  364.           wait(40)
  365.         elsif user.effect_list.include?(0x27)
  366.           pp_use = false
  367.           index = user.effect_list.index(0x27)
  368.           user.effect.delete_at(index)
  369.         end
  370.       when 0x4B # Pique/Sky attack / TTA
  371.         if not(user.effect_list.include?(0x4B)) # not(Déjà préparé)
  372.           user.skill_effect(0x4B, 2)
  373.           draw_text("#{user.given_name} se concentre!")
  374.           wait(40)
  375.           jumper_end = true
  376.         elsif user.effect_list.include?(0x4B)
  377.           index = user.effect_list.index(0x4B)
  378.           user.effect.delete_at(index)
  379.           pp_use = false
  380.         end
  381.       when 0x91 # Skull Bash / Coud krane / TTA
  382.         if not(user.effect_list.include?(0x91))
  383.           user.skill_effect(0x91, 2)
  384.           draw_text("#{user.given_name} se prépare!")
  385.           wait(40)
  386.           n = user.change_dfe(+1)
  387.           raise_stat("DFE", user, n)
  388.           jumper_end = true
  389.         elsif user.effect_list.include?(0x91)
  390.           index = user.effect_list.index(0x91)
  391.           user.effect.delete_at(index)
  392.           pp_use = false
  393.         end
  394.       when 0x97 # Solarbeam / Lance-Soleil
  395.         if $battle_var.sunny? and not(user.effect_list.include?(0x97)) # Sunny
  396.           # Continue et lance l'attaque
  397.         elsif not(user.effect_list.include?(0x97))
  398.           user.skill_effect(0x97, 2)
  399.           draw_text("#{user.given_name} se charge!")
  400.           wait(40)
  401.           jumper_end = true
  402.         elsif user.effect_list.include?(0x97)
  403.           pp_use = false
  404.           index = user.effect_list.index(0x97)
  405.           user.effect.delete_at(index)
  406.         end
  407.       when 0x9B0 # Tunnel / Dig
  408.         if not(user.effect_list.include?(0x9B0)) # not(Déjà préparé)
  409.           user.skill_effect(0x9B0, 2)
  410.           draw_text("#{user.given_name} creuse!")
  411.           wait(40)
  412.           jumper_end = true
  413.         else
  414.           index = user.effect_list.index(0x9B0)
  415.           user.effect.delete_at(index)
  416.           pp_use = false
  417.         end
  418.       when 0x9B1 # Fly / Vol
  419.         if not(user.effect_list.include?(0x9B1)) # not(Déjà préparé)
  420.           user.skill_effect(0x9B1, 2)
  421.           draw_text("#{user.given_name} s'envole!")
  422.           wait(40)
  423.           jumper_end = true
  424.         else
  425.           index = user.effect_list.index(0x9B1)
  426.           user.effect.delete_at(index)
  427.           pp_use = false
  428.         end
  429.       when 0x9B2 # Rebond / Bounce
  430.         if not(user.effect_list.include?(0x9B2)) # not(Déjà préparé)
  431.           user.skill_effect(0x9B2, 2)
  432.           draw_text("#{user.given_name} saute!")
  433.           wait(40)
  434.           jumper_end = true
  435.         else
  436.           index = user.effect_list.index(0x9B2)
  437.           user.effect.delete_at(index)
  438.           pp_use = false
  439.         end
  440.       when 0x9B3 # Dive / Plongée
  441.         if not(user.effect_list.include?(0x9B3)) # not(Déjà préparé)
  442.           user.skill_effect(0x9B3, 2)
  443.           draw_text("#{user.given_name} plonge!")
  444.           wait(40)
  445.           jumper_end = true
  446.         else
  447.           pp_use = false
  448.           index = user.effect_list.index(0x9B3)
  449.           user.effect.delete_at(index)
  450.         end
  451.       when 0x108 # Revenant
  452.         if not(user.effect_list.include?(0x108)) # not(Déjà préparé)
  453.           user.skill_effect(0x108, 2)
  454.           draw_text("#{user.given_name} disparaît!")
  455.           wait(40)
  456.           jumper_end = true
  457.         else
  458.           pp_use = false
  459.           index = user.effect_list.index(0x108)
  460.           user.effect.delete_at(index)
  461.         end
  462.       end
  463.      
  464.       # Spécial dernier skill utilisé
  465.       if user_last_skill != nil
  466.         case user_last_skill.effect
  467.         when 0xB3 # Wish / Souhait
  468.           user.skill_effect(0xB3, 1)
  469.         end
  470.       end
  471.      
  472.       for effect in user.effect
  473.         case effect[0]
  474.         when 0x51 # Rage / Frénésie # Fin du bonus
  475.           if user_skill.effect != 0x51
  476.             user.change_atk(-effect[2])
  477.             user.effect.delete(effect)
  478.           end
  479.         when 0x5A # Encore
  480.           user_skill = user.skills_set[effect[2]]
  481.         when 0x62 # Prélevement destin / Destiny Bond # Suppression état
  482.           index = user.effect.index(effect)
  483.           user.effect.delete_at(index)
  484.         when 0x75 # Rollout/roulade
  485.           pp_use = false
  486.         when 0x9F # Uproar / Brouhaha
  487.           pp_use = false
  488.         when 0x78 # Attract
  489.           if rand(2) == 1
  490.             draw_text("#{user.given_name} est amoureux!")
  491.             wait(40)
  492.             return
  493.           end
  494.         when 0xC2 # Grudge
  495.           index = user.effect.index(effect)
  496.           user.effect.delete_at(index)
  497.         end
  498.       end
  499.  
  500.       #------------------------------------------------------------
  501.       # Utilisation de l'attaque
  502.       #------------------------------------------------------------
  503.       # PP spent
  504.       if pp_use
  505.         user_skill.use
  506.         if user == @actor
  507.           $battle_var.actor_last_used = user_skill
  508.           user_last_skill = $battle_var.actor_last_used
  509.         elsif user == @enemy
  510.           $battle_var.enemy_last_used = user_skill
  511.           user_last_skill = $battle_var.enemy_last_used
  512.         end
  513.         $battle_var.last_used = user_skill
  514.         last_skill = $battle_var.last_used
  515.       end
  516.      
  517.       # Pressure / Pression
  518.       if pp_use and target.ability == 46 and not (target.effect_list.include?(0xEF) or
  519.           target.effect_list.include?(0xF7)) and target == enemy and user_skill.pp > 0
  520.         user_skill.use
  521.       end
  522.      
  523.       if jumper_end
  524.         return
  525.       end
  526.      
  527.       # Text
  528.       draw_text("#{user.given_name} utilise", "#{user_skill.name}!")
  529.       wait(10)
  530.      
  531.       # Redéfinition des derniers skills utilisés
  532.       user_last_skill = user_skill
  533.      
  534.       #------------------------------------------------------------
  535.       # Décision Hit Miss
  536.       #------------------------------------------------------------      
  537.       # Accuracy check
  538.       n = accuracy_check(user_skill, user, target) #weather, status...
  539.       # Accuracy stage
  540.       # si la cible n'est pas soi meme (10), ou OHKO (0x26), pas de vérif
  541.       if user_skill.target != 10 or user.effect != 0x26
  542.         n = Integer(n*accuracy_stage(user, target))
  543.       end
  544.       # Hit or miss
  545.       if rand(100) < n
  546.         hit = true
  547.       else
  548.         hit = false
  549.       end
  550.      
  551.       multi_hit = 1 # Nombre de coups
  552.       total_hit = 1
  553.      
  554.       # miss: indicateur que l'attaque touche l'adversaire mais inefficace
  555.       #       "Mais cela échoue!"
  556.       miss = false
  557.      
  558.       #------------------------------------------------------------
  559.       # Effets pré-attaque et programmation des attaques
  560.       #------------------------------------------------------------
  561.       #    ( zone détermination de la précision / touche ou pas )
  562.       #------------------------------------------------------------
  563.       # Comparaison préliminaire pour les skills "copieurs"
  564.      
  565.       case user_skill.effect
  566.       when 0x09 # Mirror move / Mimique / Condition de validité
  567.         unlist = [0x52,0x09,0x39,0x53,0x5F,0x61,0x6D,0x70,0xC7,0xB4,0x8F,0x94,0xAA,0xAD,0xB2]
  568.         if target_last_skill == nil or user_last_taken_damage == 0
  569.           miss = true
  570.         elsif target_last_skill.target == 10 or unlist.include?(target_last_skill.effect)
  571.           miss = true
  572.         else
  573.           user_skill = target_last_skill.clone
  574.           user_skill.enable
  575.           user_skill.refill
  576.         end
  577.       when 0x52 # Copie / Mimic
  578.         list = [102, 166, 118, 165]
  579.         for skill in user.skills_set
  580.           list.push(skill.id)
  581.         end
  582.         # Conditions de validité: ne copie pas la luste ni lorsqu'il y a Morphing
  583.         if target_last_skill == nil
  584.           miss = true
  585.         elsif list.include?(target_last_skill.id) or user.effect_list.include?(0x39)
  586.           miss = true
  587.         end
  588.       when 0x53 # Metronome / Condition de validité
  589.         list = [0x53,0x52,0x59,0x90,0x6F,0x74,0x62,0x61,0x69,0xAC,0xC3,0xB0,0xB1,0xAA]
  590.         until not(list.include?(user_skill.effect) or user_skill.id == 165) # Tant que le skill copié est interdit
  591.           user_skill = POKEMON_S::Skill.new(rand($data_skills_pokemon.length)+1)
  592.         end
  593.       when 0x61 # Sleep talk
  594.         unless user.asleep?
  595.           miss = true
  596.         else
  597.           list = []
  598.           for i in 0..user.skills_set.size - 1
  599.             list.push(i)
  600.           end
  601.           list.shuffle!
  602.          
  603.           copied_skill = user.skills_set[list.shift]
  604.           while !(copied_skill.usable? and not copied_skill.effect == [0x1A, 0x61, 0xB4, 0x09, 0x52, 0xAA, 0x9F, 0x27, 0x4B, 0x91, 0x97, 0x9B])
  605.             copied_skill = user.skills_set[list.shift]
  606.           end
  607.           draw_text("#{user.given_name} utilise","#{copied_skill.name}!")
  608.           user_skill = copied_skill
  609.         end
  610.       when 0xB4 # Assist / Assitance
  611.         no = [0x53,0x52,0x59,0x90,0x6F,0x74,0x62,0x61,0x69,0xAC,0xC3,0xB0,0xB1,0xAA,0xB4]
  612.         list = []
  613.         copied_skill = user_skill
  614.         if user == @actor
  615.           for pokemon in @party.actors
  616.             for skill in pokemon.skills_set
  617.               list.push(skill.clone)
  618.             end
  619.           end
  620.           list.shuffle!
  621.           copied_skill = list.shift
  622.           until not(no.include?(copied_skill)) # Jusqu'a que le skill copié est interdit
  623.             copied_skill = list.shift
  624.           end
  625.         elsif user == @enemy
  626.           for skill in user.skills_set
  627.             list.push(skill.clone)
  628.           end
  629.           list.shuffle!
  630.           copied_skill = list.shift
  631.           until not(no.include?(copied_skill)) # Jusqu'à que le skill copié est interdit
  632.             copied_skill = list.shift
  633.           end
  634.         end
  635.         user_skill = copied_skill
  636.       end
  637.  
  638.       case user_skill.effect
  639.       # --------- ---------- --------
  640.       #    Conditions de touche
  641.       # --------- ---------- --------
  642.       when 0x11 # Hit without fail
  643.         hit = true
  644.       when 0x4D # Fatal Throw / Corps perdu (Hit without fail)
  645.         hit = true
  646.       when 0x98 # Thunder / Fatal Foudre
  647.         if $battle_var.rain?
  648.           hit = true
  649.         end
  650.       when 0x1D # Random Multi_hit
  651.         number = rand(8)
  652.         case number
  653.         when 0
  654.           multi_hit = 5
  655.         when 1
  656.           multi_hit = 4
  657.         end
  658.         if [2,3,4].include?(number)
  659.           multi_hit = 3
  660.         elsif [5,6,7].include?(number)
  661.           multi_hit = 2
  662.         end
  663.         total_hit = multi_hit
  664.       when 0x2C # Double Strike
  665.         multi_hit = 2
  666.         total_hit = 2
  667.       when 0x4D # Twineedle / Double Dard
  668.         multi_hit = 2
  669.         total_hit = 2
  670.       when 0x68 # Triple pied / Triple Kick
  671.         multi_hit = 3
  672.         total_hit = 3
  673.       # --------- ---------- --------
  674.       #    Conditions de foirage
  675.       # --------- ---------- --------
  676.       when 0x07 # Self destruct et Damp / Moiteur (ab)
  677.         if target.ability == 6 and not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7))
  678.           draw_text("#{target.ability_name} de #{target.given_name}", "empêche l'auto-destruction.")
  679.           wait(40)
  680.           return
  681.         end
  682.         if user.ability == 6 and not (user.effect_list.include?(0xEF) or user.effect_list.include?(0xF7))
  683.           draw_text("#{user.ability_name} de #{user.given_name}", "empêche l'auto-destruction.")
  684.           wait(40)
  685.           return
  686.         end
  687.       when 0x20 # Heal 1/2
  688.         if user.hp == user.max_hp
  689.           miss = true
  690.         end
  691.       when 0x23 # Light screen / Mur Lumière
  692.         if user.effect_list.include?(0x23)
  693.           miss = true
  694.         end
  695.       when 0x25
  696.         if user.asleep? # or user.hp == user.max_hp
  697.           miss = true
  698.         end
  699.       when 0x2E # Mist / Brume
  700.         if user.effect_list.include?(0x2E)
  701.           miss = true
  702.         end
  703.       when 0x41 # Protection / Reflet
  704.         if user.effect_list.include?(0x41)
  705.           miss = true
  706.         end
  707.       when 0x5C # Ronflement / Snore
  708.         if not(user.asleep?)
  709.           miss = true
  710.         end
  711.       when 0x7C # Rune Protect / Safeguard
  712.         if user.effect_list.include?(0x7C)
  713.           miss = true
  714.         end
  715.       when 0x39 # Transform / Morphing
  716.         if target.effect_list.include?(0x39)
  717.           miss = true
  718.         end
  719.       when 0x54 # Vampigraine / Leech seed # Fail if grass or already infected
  720.         if [target.type1, target.type2].include?(5)
  721.           miss = true
  722.         end
  723.         if user.effect_list.include?(0x54)
  724.           miss = true
  725.         end
  726.       when 0x56 # Entrave / Disable # Conditions de miss
  727.         # Skill invalide ou non possédé
  728.         if target_last_skill == nil or target.skills_set.index(target_last_skill) == nil
  729.           miss = true
  730.         elsif target.effect_list.include?(0x56) or target_last_skill.pp == 0
  731.           miss = true
  732.         end
  733.       when 0x59 # Riposte / Counter # Conditions de miss
  734.         if target_last_skill == nil or user_last_taken_damage == 0
  735.           miss = true
  736.         elsif not(target_last_skill.physical)
  737.           miss = true
  738.         end
  739.       when 0x64 # Depit / Spite
  740.         if target_last_skill != nil
  741.           if target_last_skill.pp <= 1 or target.skills_set.include?(target_last_skill)
  742.             miss = true
  743.           end
  744.         else
  745.           miss = true
  746.         end
  747.       when 0x6A # Regard noir / Mean Look
  748.         if target.effect_list.include?(0x6A)
  749.           miss = true
  750.         end
  751.       when 0x6B # Nightmare / Cauchemar
  752.         if not(target.asleep?) or target.effect_list.include?(0x6B)
  753.           miss = true
  754.         end
  755.       when 0x6D # Curse / Malédiction
  756.         if target.effect_list.include?(0x6D)
  757.           miss = true
  758.         end
  759.       when 0x6F # Abri / Detection
  760.         if user.effect_list.include?(0x6F)
  761.           index = user.effect_list.index(0x6F)
  762.           used = user.effect[index][2] + 1
  763.           rate = rand(2**16)
  764.           if rate > (2**16) / used
  765.             miss = true
  766.           end
  767.         end
  768.       when 0x74 # Endure / Tenacité
  769.         if user.effect_list.include?(0x74)
  770.           index = user.effect_list.index(0x74)
  771.           used = user.effect[index][2] + 1
  772.           rate = rand(2**16)
  773.           if rate > (2**16) / used
  774.             miss = true
  775.           end
  776.         end
  777.       when 0x78 # Attract / Attraction
  778.         if target.effect_list.include?(0x78) or (target.gender + user.gender) != 3
  779.           miss = true
  780.         end
  781.         # Benet / Oblivious (ab)
  782.         if target.ability == 12 and not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7))
  783.           draw_text("#{target.ability_name} de #{target.given_name}", "l'empêche d'être amoureux.")
  784.           wait(40)
  785.           return
  786.         end
  787.       when 0x90 # Voile miroir / Mirror Coat # Conditions de miss
  788.         if not(target_last_skill.special) or user_last_taken_damage == 0
  789.           miss = true
  790.         end  
  791.       when 0x5A # Encore
  792.         if target_last_skill == nil
  793.           miss = true
  794.         elsif target_last_skill.pp == 0 or
  795.             not(target.skills_set.include?(target_last_skill)) or
  796.             [165, 227, 119].include?(target_last_skill.id)
  797.           miss = true
  798.         elsif target.effect_list.include?(0x5A) or user.effect_list.include?(0x5A)
  799.           miss = true
  800.         end
  801.       when 0x5F # Gribouille / Sketch
  802.         if [166, 165].include?(target_last_skill.id) or
  803.             user.skills.include?(target_last_skill.id)
  804.           miss = true
  805.         end
  806.       when 0x8E # Cognobidon / Belly drum
  807.         if user.hp <= (user.max_hp / 2) or user.atk_stage >= 6
  808.           miss = true
  809.         end
  810.       when 0xA5 # Torment / Tourmente
  811.         index = target.skills_set.index(target_last_skill)
  812.         if index == nil
  813.           miss = true
  814.         end
  815.       when 0xAA # Mitra-Poing
  816.         if user_last_taken_damage != 0
  817.           miss = true
  818.         end
  819.       when 0xBA # Brick Break / Casse-Brique
  820.         if hit
  821.           target.effect.delete(target.effect.rassoc("0x41"))
  822.           target.effect.delete(target.effect.rassoc("0x23"))
  823.         end
  824.       when 0xBB # Yawn / Baillement
  825.         if target.status != 0 or target.effect_list.include?(0x7C)
  826.           miss = true
  827.         end
  828.       when 0xB5
  829.         if user.effect_list.include?(0xB5)
  830.           miss = true
  831.         end
  832.       when 0xB1 # Trick / Passe-Passe
  833.         if user.item_hold == 0 and target.item_hold == 0
  834.           miss = true
  835.         end
  836.       when 0x1E # Conversion / Adaptation
  837.         # Si il existe un skill qui est valide
  838.         list = []
  839.         for skill in user.skills_set
  840.           list.push(skill.type)
  841.         end
  842.         list.delete(user.type1)
  843.         list.delete(user.type2)
  844.         list.delete(0) # Curse / Malédiction
  845.         if list.length == 0
  846.           miss = true
  847.         end
  848.       when 0xB3 # Wish / Souhait
  849.         if user.effect_list.include?(0xB3)
  850.           miss = true
  851.         end
  852.       when 0xC9 # Mud Sport / Lance-Boue
  853.         if user.effect_list.include?(0xC9)
  854.           miss = true
  855.         end
  856.       when 0xD2 # Water Sport / Tourniquet
  857.         if user.effect_list.include?(0xD2)
  858.           miss = true
  859.         end
  860.       when 0xD8 # Oeil Miracle
  861.         target.eva_stage = 0
  862.         draw_text("#{user.given_name} sait", "où est #{target.given_name}!")
  863.         target.skill_effect(0xD8)
  864.       when 0xDC # Voeu Soin (+ effet)
  865.         if $pokemon_party.number_alive == 1
  866.           miss = true
  867.         else
  868.           user.effect_list(0xDC)
  869.           rec_damage = user.hp
  870.           self_damage(user, user_sprite, user_status, rec_damage)
  871.           draw_text("#{user.given_name}", "se sacrifie pour son allié!")
  872.           wait(40)
  873.         end
  874.       when 0xE1  # Vent Arrière
  875.         if user.effect_list.include?(0xE1)
  876.           miss = true
  877.         end
  878.       when 0xE2 # Acupression
  879.         random_stat = rand(7).to_i
  880.         case random_stat
  881.         when 0
  882.           n = user.change_atk(+2)
  883.           raise_stat("ATK", user, n)
  884.         when 1
  885.           n = user.change_dfe(+2)
  886.           raise_stat("DFE", user, n)
  887.         when 2
  888.           n = user.change_spd(+2)
  889.           raise_stat("SPD", user, n)
  890.         when 3
  891.           n = user.change_ats(+2)
  892.           raise_stat("ATS", user, n)
  893.         when 4
  894.           n = user.change_dfs(+2)
  895.           raise_stat("DFS", user, n)
  896.         when 5
  897.           n = user.change_acc(+2)
  898.           raise_stat("ACC", user, n)
  899.         when 6
  900.           n = user.change_eva(+2)
  901.           raise_stat("EVA", user, n)
  902.         end
  903.       when 0xE3 # Fulmifer
  904.         if @strike_first or user_last_taken_damage == 0
  905.           miss = true        
  906.         end
  907.       when 0xE5 # Close Combat
  908.         n = user.change_dfe(-1)
  909.         reduce_stat("DFE", user, n)
  910.         n = user.change_dfs(-1)
  911.         reduce_stat("DFS", user, n)
  912.       when 0xE8 # Embargo
  913.         if target.effect_list.include?(0xE8)
  914.           miss = true
  915.         end
  916.       when 0xE9 # Dégommage
  917.         if user.item_hold == [0..12, 176, 193..204, 253..260, 277..329, 332..350] or
  918.           (user.item_hold == [261..276] and user.id == 493)
  919.           miss = true
  920.         end
  921.       when 0xEA # Echange Psy (+ effet)
  922.         if target.status != 0
  923.           miss = true
  924.         else
  925.           if user.poisoned?
  926.             status_check(target, 1)
  927.           elsif user.paralyzed?
  928.             status_check(target, 2)
  929.           elsif user.burn?
  930.             status_check(target, 3)
  931.           elsif user.asleep?
  932.             status_check(target, 4)
  933.           elsif user.frozen?
  934.             status_check(target, 5)
  935.           elsif user.confused?
  936.             status_check(target, 6)
  937.           elsif user.toxic?
  938.             status_check(target, 8)
  939.           else
  940.             miss = true
  941.           end
  942.           target_status.refresh
  943.         end
  944.       when 0xF1 # Moi d'Abord (+ effet)
  945.         actor_user = true
  946.         if user == enemy
  947.           @target_skill = @enemy_skill
  948.           actor_user = false
  949.         else
  950.           @target_skill = @actor_skill
  951.         end
  952.         if !@strike_first or @target_skill.power == 0
  953.           miss = true
  954.         else
  955.           @me_first = true
  956.           if actor_user
  957.             @enemy_skill = @actor_skill
  958.             attack_action(@enemy, @enemy_skill, @actor)
  959.           else
  960.             @actor_skill = @enemy_skill
  961.             attack_action(@actor, @actor_skill, @enemy)
  962.           end
  963.         end
  964.       when 0xF2 # Photocopie (+ effet)
  965.         if $battle_var.last_used != nil
  966.           if user == @actor
  967.             attack_action(@actor, $battle_var.last_used, @enemy)
  968.           else
  969.             attack_action(@enemy, $battle_var.last_used, @actor)
  970.           end
  971.         else
  972.           miss = true
  973.         end
  974.       when 0xF3 # Permuforce (effet)
  975.         temp_atk_stage = user.atk_stage
  976.         temp_ats_stage = user.ats_stage
  977.         user.atk_stage = target.atk_stage
  978.         user.ats_stage = target.ats_stage
  979.         target.atk_stage = temp_atk_stage
  980.         target.ats_stage = temp_ats_stage
  981.         draw_text("Les changements d'attaque", "des Pokémon ont été échangés!")
  982.         wait(40)
  983.       when 0xF4 # Permugarde (effet)
  984.         temp_dfe_stage = user.dfe_stage
  985.         temp_dfs_stage = user.dfs_stage
  986.         user.dfe_stage = target.dfe_stage
  987.         user.dfs_stage = target.dfs_stage
  988.         target.dfe_stage = temp_dfe_stage
  989.         target.dfs_stage = temp_dfs_stage
  990.         draw_text("Les changements de défense", "des Pokémon ont été échangés!")
  991.         wait(40)
  992.       when 0xF6 # Dernierecour
  993.         for skill in user.skills_set
  994.           if skill.pp == skill.maxpp and skill.name != "DERNIERECOUR"
  995.             miss = true
  996.             break
  997.           end
  998.         end
  999.       when 0xF7 # Soucigraine
  1000.         if target.effect_list.include?(0xF7)
  1001.           miss = true
  1002.         end
  1003.       when 0xF8 # Coup Bas
  1004.         if !@strike_first or @target_skill.power == 0
  1005.           miss = true
  1006.         end
  1007.       when 0xFA # Permucoeur (effet)
  1008.         temp_atk_stage = user.atk_stage
  1009.         temp_ats_stage = user.ats_stage
  1010.         temp_dfe_stage = user.dfe_stage
  1011.         temp_dfs_stage = user.dfs_stage
  1012.         temp_acc_stage = user.acc_stage
  1013.         temp_eva_stage = user.eva_stage
  1014.         temp_spd_stage = user.spd_stage
  1015.         user.atk_stage = target.atk_stage
  1016.         user.ats_stage = target.ats_stage
  1017.         user.dfe_stage = target.dfe_stage
  1018.         user.dfs_stage = target.dfs_stage
  1019.         user.acc_stage = target.acc_stage
  1020.         user.eva_stage = target.eva_stage
  1021.         user.spd_stage = target.spd_stage
  1022.         target.atk_stage = temp_atk_stage
  1023.         target.ats_stage = temp_ats_stage
  1024.         target.dfe_stage = temp_dfe_stage
  1025.         target.acc_stage = temp_acc_stage
  1026.         target.eva_stage = temp_eva_stage
  1027.         target.spd_stage = temp_spd_stage
  1028.         draw_text("Les changements de stats", "des Pokémon ont été échangés!")
  1029.         wait(40)
  1030.       when 0xFB # Anneau Hydro
  1031.         if user.effect_list.include?(0xFB)
  1032.           miss = true
  1033.         end
  1034.       when 0xFC # Vol Magnétik
  1035.         if user.effect_list.include?(0xFC)
  1036.           miss = true
  1037.         end
  1038.       when 0x70 # Picots / Spikes
  1039.         picots = 0
  1040.         if target.effect_list.include?(0x70)
  1041.           index = target.effect_list.index(0x70)
  1042.           picots = target.effect[index][2]
  1043.         end
  1044.         if picots == 3
  1045.           miss = true
  1046.         else
  1047.           target.effect_list.delete(0x70)
  1048.           picots += 1
  1049.           target.skill_effect(0x70, -1, picots)
  1050.           draw_text("#{user.given_name} pose des", "picots vers l'ennemi!")
  1051.           wait(40)
  1052.         end
  1053.       when 0xF9 # Pics Toxic (+ effet)
  1054.         picots_toxic = 0
  1055.         if target.effect_list.include?(0xF9)
  1056.           index = target.effect_list.index(0xF9)
  1057.           picots_toxic = target.effect[index][2]
  1058.         end
  1059.         if picots_toxic == 2
  1060.           miss = true
  1061.         else
  1062.           target.effect_list.delete(0xF9)
  1063.           picots_toxic += 1
  1064.           target.skill_effect(0xF9, -1, picots_toxic)
  1065.           draw_text("#{enemy.given_name} pose des", "pics empoisonnés vers l'ennemi!")
  1066.           wait(40)
  1067.         end
  1068.       when 0x101 # Anti-Brume
  1069.         for effect in [0x41, 0x23, 0x2E, 0x70, 0x7C, 0xF9]
  1070.           if target.effect_list.include?(effect)
  1071.             target.effect.delete(effect)
  1072.           end
  1073.         end
  1074.         n = target.change_eva(-1)
  1075.         reduce_stat("EVA", target, n)
  1076.       when 0x102 # Distorsion
  1077.         if actor.effect_list.include?(0x102)
  1078.           miss = true
  1079.         else
  1080.           actor.skill_effect(0x102, 6)
  1081.         end
  1082.       when 0x103 # Seduction
  1083.         if target.gender + user.gender != 3
  1084.           n = target.change_ats(-2)
  1085.           reduce_stat("ATS", target, n)
  1086.         end
  1087.       when 0x104 # Piège de Roc
  1088.         if target.effect_list.include?(0x104)
  1089.           miss = true
  1090.         else
  1091.           target.skill_effect(0x104)
  1092.         end
  1093.       when 0x99 # Teleport
  1094.         # Arena Trap / Piege (ab) // Run away / Fuite (ab)
  1095.         if enemy.ability == 71 and (user.ability != 50 or user.effect_list.include?(0xEF) or
  1096.             user.effect_list.include?(0xF7)) and !(enemy.effect_list.include?(0xEF) or
  1097.             enemy.effect_list.include?(0xF7))
  1098.           draw_text("#{enemy.ability_name} de #{enemy.given_name}", "empêche la fuite.")
  1099.           wait(40)
  1100.           return
  1101.         end
  1102.         # Magnet Pull / Magnepiege (ab) // Run away / Fuite (ab)
  1103.         if enemy.ability == 42 and (user.ability != 50 or user.effect_list.include?(0xEF) or
  1104.             user.effect_list.include?(0xF7)) and !(enemy.effect_list.include?(0xEF) or
  1105.             enemy.effect_list.include?(0xF7))
  1106.           draw_text("#{enemy.ability_name} de #{enemy.given_name}", "empêche la fuite.")
  1107.           wait(40)
  1108.           return
  1109.         end
  1110.         # Shadow Tag / Marque ombre (ab) // Run away / Fuite (ab)
  1111.         if enemy.ability == 23 and (user.ability != 50 or user.effect_list.include?(0xEF) or
  1112.             user.effect_list.include?(0xF7)) and !(enemy.effect_list.include?(0xEF) or
  1113.             enemy.effect_list.include?(0xF7))
  1114.           draw_text("#{enemy.ability_name} de #{enemy.given_name}", "empêche la fuite.")
  1115.           wait(40)
  1116.           return
  1117.         end
  1118.       end
  1119.      
  1120.       #------------------------------------------------------------
  1121.       # Attaque
  1122.       #------------------------------------------------------------
  1123.       #
  1124.       #------------------------------------------------------------
  1125.       # Multi_hit
  1126.       until multi_hit == 0
  1127.         multi_hit -= 1
  1128.  
  1129.         #------------------------------------------------------------
  1130.         # Programmation des attaques et effets de statut
  1131.         #------------------------------------------------------------
  1132.         critical_special = 0
  1133.         # Skill Effect
  1134.         case user_skill.effect
  1135.         when 0x2B # Good chance of critical_hit
  1136.           critical_special = 1
  1137.         when 0x4B # Pique/Sky attack / TTA
  1138.           critical_special = 1
  1139.         when 0x68 # Triple Kick / Triple Pied
  1140.           if not(user.effect_list.include?(0x68))
  1141.             user.skill_effect(0x68, 1, 0)
  1142.           else
  1143.             index = user.effect_list.index(0x68)
  1144.             user.effect[index][2] += 1
  1145.             # Accuracy check à chaque coup
  1146.             n = accuracy_check(user_skill, user, target)
  1147.             n = Integer(n*accuracy_stage(user, target))
  1148.             if rand(100) <= n
  1149.               hit = true
  1150.             else
  1151.               hit = false
  1152.             end
  1153.           end
  1154.         when 0xC8 # Blaze Kick
  1155.           critical_special = 1
  1156.         when 0xD1 # Poison Tail
  1157.           critical_special = 1
  1158.         end
  1159.        
  1160.         # User effect
  1161.         for effect in user.effect
  1162.           case effect[0]
  1163.           when 0x2F # Focus energy
  1164.             critical_special = 2
  1165.           when 0xA5 # Torment
  1166.             index = user.skills_set.index(user_last_skill)
  1167.             user.skills_set[index].disable
  1168.            
  1169.             skill_index = effect[2]
  1170.             user.skills_set[skill_index].enable
  1171.            
  1172.             # new index = index du skill bloqué
  1173.             new_index = user.skills_set.index(user_last_skill)
  1174.             effect[2] = new_index
  1175.           end
  1176.         end
  1177.        
  1178.         #------------------------------------------------------------
  1179.         # Détermination des dommages
  1180.         #------------------------------------------------------------
  1181.         info = damage_calculation(user_skill, user, target, critical_special)
  1182.        
  1183.         # Animation d'attaque
  1184.         attack_animation(info, hit, miss, user, user_skill, user_sprite, target_sprite)
  1185.        
  1186.         # Invincibilité
  1187.         if $game_temp.god_mode
  1188.           hit = false
  1189.         end
  1190.        
  1191.         if hit and not(miss)
  1192.          
  1193.           # Damage deal to target
  1194.           damage = info[0]
  1195.           efficiency = info[2]
  1196.          
  1197.           #------------------------------------------------------------
  1198.           # Effets attaque et programmation des attaques
  1199.           #------------------------------------------------------------
  1200.           case user_skill.effect
  1201.           # ----------------- -------------- ---------------
  1202.           #     Dommages Pré-déterminés / Utilisateur
  1203.           # ----------------- -------------- ---------------
  1204.           when 0x26 # OHKO
  1205.             if damage > 0 # Affecté par les immunités
  1206.               damage = target.hp
  1207.             end
  1208.           when 0x28 # Super Fang
  1209.             if damage > 0 # Affecté par les immunités
  1210.               damage = target.hp / 2
  1211.             end
  1212.           when 0x29 # Draco-rage
  1213.             if damage > 0
  1214.               damage = 40
  1215.             end
  1216.           when 0x57 # Frappe Atlas
  1217.             if damage > 0
  1218.               damage = user.level
  1219.             end
  1220.           when 0x58 # Vague Psy
  1221.             if damage > 0
  1222.               damage = Integer( user.level * (rand(11) * 10 + 50) / 100 )
  1223.             end
  1224.           when 0x59 # Counter / Riposte
  1225.             if damage > 0
  1226.               damage = user_last_taken_damage * 2
  1227.             end
  1228.           when 0x90 # Voile Miroir / Mirror Coat
  1229.             if damage > 0
  1230.               damage = user_last_taken_damage * 2
  1231.             end  
  1232.           when 0x65 # False Swipe
  1233.             if target.hp - damage <= 0
  1234.               damage = target.hp - 1
  1235.             end
  1236.           when 0x7A # Cadeau / gift
  1237.             number = rand(256)
  1238.             gift = false
  1239.             if number < 26
  1240.               damage = 120
  1241.             elsif number < 102
  1242.               damage = 80
  1243.             elsif number < 204
  1244.               damage = 40
  1245.             else
  1246.               damage = 0
  1247.               gift = true
  1248.             end
  1249.           when 0x82 # Sonic boom
  1250.             if damage > 0
  1251.               damage = 20
  1252.             end
  1253.           when 0xBD # Endeavor
  1254.             if damage > 0
  1255.               damage = target.hp - user.hp
  1256.             end
  1257.           when 0x1A # Bide / Patience
  1258.             if damage > 0
  1259.               index = user.effect_list.index(0x1A)
  1260.               damage = user.effect[index][2] * 2
  1261.             end
  1262.           end
  1263.          
  1264.           # ----------------- -------------- ---------------
  1265.           #      Dommages Pré-déterminés / Adversaire
  1266.           # ----------------- -------------- ---------------          
  1267.           for effect in target.effect_list
  1268.             case effect
  1269.             when 0x6F # Abri / Detection
  1270.               if (target == actor and @enemy_skill.effect != 0xDF) or (target == enemy and @actor_skill.effect != 0xDF) or
  1271.                  (target == actor and @enemy_skill.effect != 0x108) or (target == enemy and @actor_skill.effect != 0x108) # Ruse
  1272.                 index = target.effect_list.index(0x6F)
  1273.                 ind = target.effect[index][1]
  1274.                 if damage > 0 and ind == 2
  1275.                   damage = 0
  1276.                   draw_text("#{target.given_name}", "est protégé!")
  1277.                   wait(40)
  1278.                   return
  1279.                 end
  1280.               else
  1281.                 if target == actor
  1282.                   draw_text("#{@enemy_skill.name} de #{enemy.given_name}", "contourne la défense ennemie!")
  1283.                 else
  1284.                   draw_text("#{@actor_skill.name} de #{actor.given_name}", "contourne la défense ennemie!")
  1285.                 end
  1286.                 wait(40)
  1287.               end
  1288.             when 0x74 # Endure/Tenacité
  1289.               index = target.effect_list.index(0x74)
  1290.               ind = target.effect[index][1]
  1291.               if target.hp - damage <= 0 and ind == 2
  1292.                 damage = target.hp - 1
  1293.                 draw_text("#{target.given_name}", "tient le coup!")
  1294.                 wait(40)
  1295.               end
  1296.             end
  1297.           end
  1298.          
  1299.           # ----------------- -------------- ---------------
  1300.           #                 Capacités spéciales
  1301.           # ----------------- -------------- ---------------
  1302.           unless target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7) # Suc Digestif / Soucigraine
  1303.             case target.ability
  1304.             when 10 # Absorb Volt / Volt Absorb (ab)
  1305.               if user_skill.type_electric? and damage > 0
  1306.                 damage = 0
  1307.                 bonus = target.max_hp / 4
  1308.                 heal(target, target_sprite, target_status, bonus)
  1309.                 draw_text("#{target.ability_name} de #{target.given_name}", "restaure ses PV.")
  1310.                 wait(40)
  1311.               end
  1312.             when 11 # Absorb Eau / Water Absorb (ab)
  1313.               if user_skill.type_water? and damage > 0
  1314.                 damage = 0
  1315.                 bonus = target.max_hp / 4
  1316.                 heal(target, target_sprite, target_status, bonus)
  1317.                 draw_text("#{target.ability_name} de #{target.given_name}", "restaure ses PV.")
  1318.                 wait(40)
  1319.               end
  1320.             when 18 # Torche / Flash Fire (ab)
  1321.               if user_skill.type_fire? and not(target.ability_active)
  1322.                 damage = 0
  1323.                 target.ability_active = true
  1324.                 draw_text("#{target.ability_name} de #{target.given_name}", "s'active!")
  1325.                 wait(40)
  1326.               end
  1327.             when 25 # Garde Mystik / Wonder Guard (ab)
  1328.               if efficiency != 1
  1329.                 damage = 0
  1330.                 draw_text("#{target.ability_name} de #{target.given_name}", "le protège!")
  1331.                 wait(40)
  1332.               end
  1333.             when 26 # Levitate (ab)
  1334.               if user_skill.type_ground? and !target.effect_list.include?(0xD7)
  1335.                 damage = 0
  1336.                 draw_text("#{target.ability_name} de #{target.given_name}", "le protège!")
  1337.                 wait(40)
  1338.               end
  1339.             end
  1340.           end
  1341.          
  1342.           # Cas de Vol Magnétik
  1343.           if target.ability != 26 and target.effect_list.include?(0xFC) and
  1344.               !(target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7))
  1345.             if user_skill.type_ground? and !target.effect_list.include?(0xD7)
  1346.               damage = 0
  1347.               draw_text("VOL MAGNETIK de #{target.given_name}", "le protège!")
  1348.               wait(40)
  1349.             end
  1350.           end
  1351.          
  1352.           effective_damage = 0
  1353.           # Dommages
  1354.           for i in 1..damage
  1355.             effective_damage += 1
  1356.             target.remove_hp(1)
  1357.             target_status.refresh
  1358.             if target.max_hp >= 144 and effective_damage % (target.max_hp / 144 + 1) != 0
  1359.               next
  1360.             end
  1361.             Graphics.update
  1362.             Graphics.update
  1363.             if target.dead?
  1364.               # Loyauté
  1365.               target.drop_loyalty
  1366.               break
  1367.             end
  1368.           end
  1369.           damage = effective_damage
  1370.          
  1371.           # Redéfinition des derniers points de dommage infligés
  1372.           if user == @actor #and damage != 0
  1373.             $battle_var.enemy_last_taken_damage = damage
  1374.           elsif user == @enemy #and damage != 0
  1375.             $battle_var.actor_last_taken_damage = damage
  1376.           end
  1377.          
  1378.           # Multi_hit
  1379.           if target.dead?
  1380.             total_hit -= multi_hit
  1381.             multi_hit = 0
  1382.           end
  1383.          
  1384.           #------------------------------------------------------------
  1385.           # Effets post-attaque et programmation des attaques
  1386.           #------------------------------------------------------------
  1387.           # Effectiveness
  1388.          
  1389.           if multi_hit == 0
  1390.             post_attack(info, damage, user_skill.power)
  1391.           end
  1392.          
  1393.           # --------------------------- ---------------------------------
  1394.           # Détermination de l'application de l'effet supplémentaire
  1395.           # --------------------------- ---------------------------------
  1396.           ec_rate = rand(101)
  1397.           effect_applied = ec_rate <= user_skill.effect_chance
  1398.          
  1399.           # Serene Grace / Sérenité (ab)
  1400.           if user.ability == 32 and not (user.effect_list.include?(0xEF) or user.effect_list.include?(0xF7))
  1401.             effect_applied = ec_rate <= (user_skill.effect_chance * 2)
  1402.           end
  1403.          
  1404.           # --------------------------- ---------------------------------
  1405.           # Prise en compte du pourcentage de chance que l'effet s'active
  1406.           #                Si l'ennemi est mort ou pas mort
  1407.           # --------------------------- ---------------------------------
  1408.           if ((user_skill.effect_chance != 0 and effect_applied) or
  1409.               user_skill.effect_chance == 0)
  1410.             case user_skill.effect
  1411.             # ----------------- -------------- -------------------
  1412.             #  Dommages/Récupération Post-attaques / Utilisateur
  1413.             # ----------------- -------------- ------------------
  1414.             when 0x07 # Self-destruct
  1415.               rec_damage = user.hp
  1416.               self_damage(user, user_sprite, user_status, rec_damage)
  1417.               draw_text("#{user.given_name}", "se sacrifie.")
  1418.               wait(40)
  1419.             when 0x08 # Devoreve / Dream eater
  1420.               bonus = damage / 2
  1421.               if damage > 0 and bonus == 0
  1422.                 bonus = 1
  1423.               end
  1424.               # Liquid ooze / Suintement (ab)
  1425.               if target.ability != 64 and not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7))
  1426.                 heal(user, user_sprite, user_status, bonus)
  1427.                 draw_text("L'énergie du #{target.given_name}", "est draînée.")
  1428.                 wait(40)
  1429.               else
  1430.                 self_damage(user, user_sprite, user_status, bonus)
  1431.                 draw_text("#{target.ability_name} de #{target.given_name}", "réduit les PV.")
  1432.                 wait(40)
  1433.               end
  1434.             when 0x30 # Bélier
  1435.               recoil_damage = damage / 4
  1436.               if damage > 0 and recoil_damage == 0
  1437.                 recoil_damage = 1
  1438.               end
  1439.               # Head Rock / Tete de rock (ab) // Struggle
  1440.               if (user.ability != 69 and !(user.effect_list.include?(0xEF) or
  1441.                   user.effect_list.include?(0xF7))) or user_skill.id == 165
  1442.                 self_damage(user, user_sprite, user_status, recoil_damage)
  1443.                 draw_text("#{user.given_name} se blesse", "en frappant.")
  1444.                 wait(40)
  1445.               end  
  1446.             when 0xC6 # Damoclès
  1447.               recoil_damage = damage / 3
  1448.               if damage > 0 and recoil_damage == 0
  1449.                 recoil_damage = 1
  1450.               end
  1451.               # Head Rock / Tete de rock (ab) // Struggle
  1452.               if (user.ability != 69 and not (user.effect_list.include?(0xEF) or
  1453.                   user.effect_list.include?(0xF7))) or user_skill.id == 165
  1454.                 self_damage(user, user_sprite, user_status, recoil_damage)
  1455.                 draw_text("#{user.given_name} se blesse", "en frappant.")
  1456.                 wait(40)
  1457.               end
  1458.             when 0xFD # Boutefeu
  1459.               recoil_damage = damage / 3
  1460.               if damage > 0 and recoil_damage == 0
  1461.                 recoil_damage = 1
  1462.               end
  1463.               # Head Rock / Tete de rock (ab) // Struggle
  1464.               if (user.ability != 69 and not (user.effect_list.include?(0xEF) or
  1465.                   user.effect_list.include?(0xF7))) or user_skill.id == 165
  1466.                 self_damage(user, user_sprite, user_status, recoil_damage)
  1467.                 draw_text("#{user.given_name} se blesse", "en frappant.")
  1468.                 wait(40)
  1469.               end
  1470.               # Brûlure : 1 chance / 10
  1471.               if rand(100) < 10
  1472.                 status_check(user, 3)
  1473.               end
  1474.             when 0x03 # Leech
  1475.               bonus = damage / 2
  1476.               if damage > 0 and bonus == 0
  1477.                 bonus = 1
  1478.               end
  1479.               heal(user, user_sprite, user_status, bonus)
  1480.               draw_text("L'énergie du #{target.given_name}", "est draînée.")
  1481.               wait(40)
  1482.             when 0x20 # Heal
  1483.               bonus = user.max_hp / 2
  1484.               heal(user, user_sprite, user_status, bonus)
  1485.               draw_text("#{user.given_name}", "se soigne!")
  1486.               wait(40)
  1487.             when 0x25 # Rest / Repos
  1488.               status_check(user, 4, true)
  1489.               user_status.refresh
  1490.               user.status_count = 3 # Dort pour 2 tours seulement
  1491.               bonus = user.max_hp
  1492.               heal(user, user_sprite, user_status, bonus)
  1493.               draw_text("#{user.given_name} a regagné", "son énergie.")
  1494.               wait(40)
  1495.             when 0x5B # Balance / Pain Split
  1496.               middle = (user.hp + target.hp)/2
  1497.               user_diff = middle - user.hp
  1498.               heal(user, user_sprite, user_status, user_diff)
  1499.               target_diff = middle - target.hp
  1500.               heal(target, target_sprite, target_status, target_diff)
  1501.             when 0x7A # Cadeau
  1502.               if gift
  1503.                 bonus = target.hp / 4
  1504.                 heal(target, target_sprite, target_status, bonus)
  1505.               end
  1506.               draw_text("Surprise!")
  1507.               wait(40)
  1508.             when 0x84 # Morning sun / Aurore
  1509.               weather = $battle_var.weather[0]
  1510.               case weather
  1511.               when 1 # Rainy
  1512.                 bonus = user.max_hp / 4
  1513.               when 2 # Sunny
  1514.                 bonus = user.max_hp * 2 / 3
  1515.               when 3 # Sandstorm
  1516.                 bonus = user.max_hp / 4
  1517.               when 4 # Hail
  1518.                 bonus = user.max_hp / 4
  1519.               when 0
  1520.                 bonus = user.max_hp / 2
  1521.               end
  1522.               heal(user, user_sprite, user_status, bonus)
  1523.             when 0x85 # Synthesis / Synthese
  1524.               weather = $battle_var.weather[0]
  1525.               case weather
  1526.               when 1 # Rainy
  1527.                 bonus = user.max_hp / 4
  1528.               when 2 # Sunny
  1529.                 bonus = user.max_hp * 2 / 3
  1530.               when 3 # Sandstorm
  1531.                 bonus = user.max_hp / 4
  1532.               when 4 # Hail
  1533.                 bonus = user.max_hp / 4
  1534.               when 0
  1535.                 bonus = user.max_hp / 2
  1536.               end
  1537.               heal(user, user_sprite, user_status, bonus)
  1538.             when 0x86 # Rayon Lune
  1539.               weather = $battle_var.weather[0]
  1540.               case weather
  1541.               when 1 # Rainy
  1542.                 bonus = user.max_hp / 4
  1543.               when 2 # Sunny
  1544.                 bonus = user.max_hp * 2 / 3
  1545.               when 3 # Sandstorm
  1546.                 bonus = user.max_hp / 4
  1547.               when 4 # Hail
  1548.                 bonus = user.max_hp / 4
  1549.               when 0
  1550.                 bonus = user.max_hp / 2
  1551.               end
  1552.               heal(user, user_sprite, user_status, bonus)
  1553.             when 0x8E # Belly drum / Cognobidon
  1554.               damage = user.max_hp / 2
  1555.               self_damage(user, user_sprite, user_status, damage)
  1556.             when 0xA2 # Avale
  1557.               bonus = 0
  1558.               if user.effect_list.include?(0xA0)
  1559.                 index = user.effect_list.index(0xA0)
  1560.                 case user.effect[index][2]
  1561.                 when 1
  1562.                   bonus = user.max_hp / 4
  1563.                 when 2
  1564.                   bonus = user.max_hp / 2
  1565.                 when 3
  1566.                   bonus = user.max_hp
  1567.                 end
  1568.               end
  1569.               heal(user, user_sprite, user_status, bonus)
  1570.             when 0xD6 # Atterissage
  1571.               bonus = user.max_hp / 2
  1572.               heal(user, user_sprite, user_status, bonus)
  1573.               user.skill_effect(0xD6, 2)
  1574.               draw_text("#{user.given_name}", "perd son type Vol!")
  1575.               wait(40)
  1576.              
  1577.             # ----------------- -------------- -------------------
  1578.             #                  Autres
  1579.             # ----------------- -------------- ------------------  
  1580.             when 0x22 # Pay Day / Jackpot
  1581.               draw_text("#{tagret.given_name}", "lâche de l'argent!")
  1582.               #$battle_var.add_money(5*target.level)
  1583.               $battle_var.money_payday += 5*user.level
  1584.               wait(40)
  1585.             when 0x26 # OHKO
  1586.               draw_text("K.O. en un coup!")
  1587.               wait(40)
  1588.             when 0x50 # Two_turn reverse
  1589.               user.skill_effect(0x50, 2)
  1590.             when 0x1D # Multihit
  1591.               if multi_hit == 0
  1592.                 draw_text("#{target.given_name}", "est touché #{total_hit.to_s} fois!")
  1593.                 wait(40)
  1594.               else
  1595.                 draw_text("... #{(total_hit - multi_hit).to_s} fois...")
  1596.               end
  1597.             when 0xE0 # Picore
  1598.               if target.item_hold == [205..248]
  1599.                 #if target == enemy
  1600.                 #  use_item(target.item_hold)
  1601.                 #end
  1602.                 target.item_hold = 0
  1603.                 draw_text("#{user.given_name} a mangé","la baie de #{target.given_name}")
  1604.                 wait(40)
  1605.                 draw_text("(Effet de baie non implanté, désolé)")
  1606.                 wait(10)
  1607.               end
  1608.             end
  1609.           end
  1610.          
  1611.           faint_check(user)
  1612.          
  1613.           # --------------------------- ---------------------------------
  1614.           # Prise en compte du pourcentage de chance que l'effet s'active
  1615.           #                     Si l'ennemi n'est pas mort
  1616.           # --------------------------- ---------------------------------
  1617.           if ((user_skill.effect_chance != 0 and effect_applied) or
  1618.               user_skill.effect_chance == 0) and not(target.dead?) and
  1619.               (user_skill.power == 0 or (user_skill.power > 0 and efficiency != -2)) and # Cas d'une attaque dégat sans être efficace
  1620.               not (target.ability == 19 and user_skill.effect_chance > 0 and
  1621.               not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7))) # Ecran Poudre / Shield Dust (ab)
  1622.             # ----------------- -------------- ---------------
  1623.             #                     Utilisateur
  1624.             # ----------------- -------------- ---------------              
  1625.             case user_skill.effect
  1626.             # ----------------- -------------- ---------------
  1627.             #               Stage Effect
  1628.             # ----------------- -------------- ---------------
  1629.             when 0x0A
  1630.               n = target.change_atk(+1)
  1631.               raise_stat("ATK", target, n)
  1632.             when 0x0B
  1633.               n = target.change_dfe(+1)
  1634.               raise_stat("DFE", target, n)
  1635.             when 0x0D
  1636.               n = target.change_ats(+1)
  1637.               raise_stat("ATS", target, n)
  1638.             when 0x10
  1639.               n = target.change_eva(+1)
  1640.               raise_stat("EVA", target, n)
  1641.             when 0x12
  1642.               n = target.change_atk(-1)
  1643.               reduce_stat("ATK", target, n)
  1644.             when 0x13
  1645.               n = target.change_dfe(-1)
  1646.               reduce_stat("DFE", target, n)
  1647.             when 0x14
  1648.               n = target.change_spd(-1)
  1649.               reduce_stat("SPD", target, n)
  1650.             when 0x17
  1651.               n = target.change_acc(-1)
  1652.               reduce_stat("ACC", target, n)
  1653.             when 0x18
  1654.               n = target.change_eva(-1)
  1655.               reduce_stat("EVA", target, n)
  1656.             when 0x32
  1657.               n = target.change_atk(+2)
  1658.               raise_stat("ATK", target, n)
  1659.             when 0x33
  1660.               n = target.change_dfe(+2)
  1661.               raise_stat("DFE", target, n)
  1662.             when 0x34
  1663.               n = target.change_spd(+2)
  1664.               raise_stat("SPD", target, n)
  1665.             when 0x35
  1666.               n = target.change_ats(+2)
  1667.               raise_stat("ATS", target, n)
  1668.             when 0x36
  1669.               n = target.change_dfs(+2)
  1670.               raise_stat("DFS", target, n)
  1671.             when 0x3A
  1672.               n = target.change_atk(-2)
  1673.               reduce_stat("ATK", target, n)
  1674.             when 0x3B
  1675.               n = target.change_dfe(-2)
  1676.               reduce_stat("DFE", target, n)
  1677.             when 0x3C
  1678.               n = target.change_spd(-2)
  1679.               reduce_stat("SPD", target, n)
  1680.             when 0x3E
  1681.               n = target.change_dfs(-2)
  1682.               reduce_stat("DFS", target, n)
  1683.             when 0x44
  1684.               n = target.change_atk(-1)
  1685.               reduce_stat("ATK", target, n)
  1686.             when 0x45
  1687.               n = target.change_dfe(-1)
  1688.               reduce_stat("DFE", target, n)
  1689.             when 0x46
  1690.               n = target.change_spd(-1)
  1691.               reduce_stat("SPD", target, n)
  1692.             when 0x47
  1693.               n = target.change_ats(-1)
  1694.               reduce_stat("ATS", target, n)
  1695.             when 0x48
  1696.               n = target.change_dfs(-1)
  1697.               reduce_stat("DFS", target, n)
  1698.             when 0x49
  1699.               n = target.change_acc(-1)
  1700.               reduce_stat("ACC", target, n)  
  1701.             when 0x6C
  1702.               target.skill_effect(0x6C)
  1703.               draw_text("#{target.given_name} est tout", "petit!")
  1704.               wait(40)
  1705.               n = target.change_eva(+1)
  1706.               raise_stat("EVA", target, n)
  1707.             when 0x76 # Swagger
  1708.               n = target.change_atk(+2)
  1709.               raise_stat("ATK", target, n)
  1710.               status_check(target, 6)
  1711.               target_status.refresh
  1712.             when 0xA6 # Flatter
  1713.               n = target.change_ats(+2)
  1714.               raise_stat("ATS", target, n)
  1715.               status_check(target, 6)
  1716.               target_status.refresh
  1717.             when 0x8A
  1718.               n = user.change_dfe(+1)
  1719.               raise_stat("DFE", user, n)
  1720.             when 0x8B
  1721.               n = user.change_atk(+1)
  1722.               raise_stat("ATK", user, n)
  1723.             when 0x8C # Ancient power
  1724.               n = user.change_atk(+1)
  1725.               raise_stat("ATK", user, n)
  1726.               n = user.change_dfe(+1)
  1727.               raise_stat("DFE", user, n)
  1728.               n = user.change_spd(+1)
  1729.               raise_stat("SPD", user, n)
  1730.               n = user.change_ats(+1)
  1731.               raise_stat("ATS", user, n)
  1732.               n = user.change_dfs(+1)
  1733.               raise_stat("DFS", user, n)
  1734.             when 0x8E # Belly / Drum Cognobion
  1735.               n = user.change_atk(+12)
  1736.               raise_stat("ATK", user, n)
  1737.             when 0xA8 # Memento
  1738.               n = target.change_atk(-2)
  1739.               reduce_stat("ATK", target, n)
  1740.               n = target.change_ats(-2)
  1741.               reduce_stat("ATS", target, n)
  1742.               damage = user.hp
  1743.               self_damage(user, user_sprite, user_status, damage)
  1744.             when 0xB6 # Superpower
  1745.               n = user.change_atk(-1)
  1746.               reduce_stat("ATK", user, n, true)
  1747.               n = user.change_dfe(-1)
  1748.               reduce_stat("DFE", user, n, true)
  1749.             when 0xCC # Overheat / Psycho Boost
  1750.               n = user.change_ats(-2)
  1751.               reduce_stat("ATS", user, n, true)
  1752.             when 0xCD # Tickle
  1753.               n = target.change_atk(-1)
  1754.               reduce_stat("ATK", target, n)
  1755.               n = target.change_dfe(-1)
  1756.               reduce_stat("DFE", target, n)
  1757.             when 0xCE # Cosmic Power
  1758.               n = user.change_dfe(+1)
  1759.               raise_stat("DFE", user, n)
  1760.               n = user.change_dfs(+1)
  1761.               raise_stat("DFS", user, n)
  1762.             when 0xD0 # Bulk Up
  1763.               n = user.change_atk(+1)
  1764.               raise_stat("ATK", user, n)
  1765.               n = user.change_dfe(+1)
  1766.               raise_stat("DFE", user, n)
  1767.             when 0xD3 # Calm Mind
  1768.               n = user.change_ats(+1)
  1769.               raise_stat("ATS", user, n)
  1770.               n = user.change_dfs(+1)
  1771.               raise_stat("DFS", user, n)
  1772.             when 0xD4 # Dragon Dance
  1773.               n = user.change_atk(+1)
  1774.               raise_stat("ATK", user, n)
  1775.               n = user.change_spd(+1)
  1776.               raise_stat("SPD", user, n)
  1777.             when 0x8F # Psych Up / Boost
  1778.               user.atk_stage = target.atk_stage
  1779.               user.dfe_stage = target.dfe_stage
  1780.               user.spd_stage = target.spd_stage
  1781.               user.ats_stage = target.ats_stage
  1782.               user.dfs_stage = target.dfs_stage
  1783.               user.acc_stage = target.acc_stage
  1784.               user.eva_stage = target.eva_stage
  1785.               draw_text("#{user.given_name} copie les stats", "de "+ "#{target.given_name}"+"!")
  1786.               wait(40)
  1787.             when 0x6D # Malédiction  / Curse
  1788.               if not(user.type_ghost?) # Non-ghost
  1789.                 n = user.change_spd(-1)
  1790.                 reduce_stat("SPD", user, n, true)
  1791.                 n = user.change_atk(+1)
  1792.                 raise_stat("ATK", user, n)
  1793.                 n = user.change_dfe(+1)
  1794.                 raise_stat("DFE", user, n)
  1795.               elsif user.type_ghost?
  1796.                 draw_text("#{user.given_name} maudit", "#{target.given_name}!")
  1797.                 wait(40)
  1798.                 damage = user.max_hp / 2
  1799.                 self_damage(user, user_sprite, user_status, damage)
  1800.                 target.skill_effect(0x6D)
  1801.               end
  1802.             when 0x19 # Haze / Buée Noire
  1803.               user.reset_stat_stage
  1804.               enemy.reset_stat_stage
  1805.               raise_stat(0, target)
  1806.             when 0x107 # Rayon Chargé
  1807.               n = user.change_ats(+1)
  1808.               raise_stat("ATS", user, n)
  1809.              
  1810.             # ----------------- -------------- ---------------
  1811.             #               Déroulement du combat
  1812.             # ----------------- -------------- ---------------                
  1813.             when 0x1C # Expulsion du combat
  1814.               # Ventouse / Suction cups (ab)
  1815.               if target.ability == 21 and not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7))
  1816.                 draw_text("#{target.ability_name} de #{target.given_name}", "l'empêche d'être expulsé.")
  1817.                 wait(40)
  1818.               else
  1819.                 if target == @enemy
  1820.                   end_battle_flee_enemy(true)
  1821.                 elsif target == @actor
  1822.                   end_battle_flee(true)
  1823.                 end
  1824.               end
  1825.             when 0x73 # Weather / sandstorm
  1826.               $battle_var.set_sandstorm(5)
  1827.               draw_text("Une tempête de sable", "se lève...")
  1828.               animation = $data_animations[494]
  1829.               @actor_sprite.animation(animation, true)
  1830.               loop do
  1831.                 @actor_sprite.update
  1832.                 Graphics.update
  1833.                 Input.update
  1834.                 if not(@actor_sprite.effect?)
  1835.                   break
  1836.                 end
  1837.               end
  1838.               wait(20)
  1839.             when 0x88 # Weather / Rain dance
  1840.               $battle_var.set_rain(5)
  1841.               draw_text("Il commence à pleuvoir.")
  1842.               animation = $data_animations[493]
  1843.               @actor_sprite.animation(animation, true)
  1844.               loop do
  1845.                 @actor_sprite.update
  1846.                 Graphics.update
  1847.                 Input.update
  1848.                 if not(@actor_sprite.effect?)
  1849.                   break
  1850.                 end
  1851.               end
  1852.               wait(20)
  1853.             when 0x89 # weather / sunny
  1854.               $battle_var.set_sunny(5)
  1855.               draw_text("Le soleil brille.")
  1856.               animation = $data_animations[492]
  1857.               @actor_sprite.animation(animation, true)
  1858.               loop do
  1859.                 @actor_sprite.update
  1860.                 Graphics.update
  1861.                 Input.update
  1862.                 if not(@actor_sprite.effect?)
  1863.                   break
  1864.                 end
  1865.               end
  1866.               wait(20)
  1867.             when 0xA4 # Hail / Grele
  1868.               $battle_var.set_hail(5)
  1869.               draw_text("Il commence à grêler.")
  1870.               animation = $data_animations[495]
  1871.               @actor_sprite.animation(animation, true)
  1872.               loop do
  1873.                 @actor_sprite.update
  1874.                 Graphics.update
  1875.                 Input.update
  1876.                 if not(@actor_sprite.effect?)
  1877.                   break
  1878.                 end
  1879.               end
  1880.               wait(20)
  1881.             when 0x99 # Teleport
  1882.               if user == @actor
  1883.                 end_battle_flee
  1884.               else
  1885.                 end_battle_flee_enemy
  1886.               end
  1887.             # ----------------- -------------- ---------------
  1888.             #             Attaques particulières
  1889.             # ----------------- -------------- ---------------
  1890.            
  1891.             when 0x55 # Trempette
  1892.               draw_text("Mais rien ne se passe...")
  1893.               wait(40)
  1894.             when 0x64 # Dépit/Spite
  1895.               amount = rand(4)+2
  1896.               string1 = " a perdu #{amount.to_s} PP!"
  1897.               draw_text(target_last_used.name, string1)
  1898.               wait(40)
  1899.               target_last_used.pp -= amount
  1900.             when 0x7E # Magnitude / Ampleur
  1901.               draw_text("Séisme de magnitude...", "#{info[3].to_s}!")
  1902.               wait(40)
  1903.             when 0x69 # Thief / Larcin
  1904.               if target.ability == 60 and not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7))
  1905.                 draw_text("#{target.ability_name} de #{target.given_name}", "empêche le vol d'objet!")
  1906.                 wait(40)
  1907.               elsif user.item_hold == 0 and target.item_hold != 0
  1908.                 user.item_hold = target.item_hold
  1909.                 target.item_hold = 0
  1910.                 draw_text("#{user.given_name} vole ", "#{user.item_name}!")
  1911.                 wait(40)
  1912.               end
  1913.             when 0xB1 # Trick
  1914.               if target.ability == 60 and not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7))
  1915.                 draw_text("#{target.ability_name} de #{target.given_name}", "empêche le vol d'objet!")
  1916.                 wait(40)
  1917.               elsif not(user.item_hold == 0 and target.item_hold == 0)
  1918.                 hold = user.item_hold
  1919.                 user.item_hold = target.item_hold
  1920.                 target.item_hold = hold
  1921.                 if user.item_hold == 0
  1922.                   string = "et ne reçoit rien!"
  1923.                 else
  1924.                   string = "et reçoit #{user.item_name}!"
  1925.                 end
  1926.                 draw_text("#{user.given_name} échange les objets", string)
  1927.                 wait(40)
  1928.               end
  1929.             when 0xBC # Knock Off
  1930.               if target.hp > 0 and target.item_hold != 0
  1931.                 draw_text("#{target.given_name} lâche ", Item.name(target.item_hold) + "!")
  1932.                 target.item_hold = 0
  1933.                 wait(40)
  1934.               end
  1935.             # ----------------- -------------- ---------------
  1936.             #             Modificateur de status
  1937.             # ----------------- -------------- ---------------
  1938.             # 0: Normal, 1: Poison, 2: Paralysé, 3: Brulé,
  1939.             # 4:Sommeil, 5:Gelé;    6: Confus,   7: Flinch, 8:Toxic
  1940.             when 0x01 # Sleep
  1941.               status_check(target, 4)
  1942.               target_status.refresh
  1943.             when 0x02 # Poison
  1944.               status_check(target, 1)
  1945.               target_status.refresh
  1946.             when 0x04 # Burn
  1947.               status_check(target, 3)
  1948.               target_status.refresh
  1949.             when 0x05 # Freeze
  1950.               status_check(target, 5)
  1951.               target_status.refresh
  1952.             when 0x06 # Paralyze
  1953.               status_check(target, 2)
  1954.               target_status.refresh
  1955.             when 0x1F # Flinch
  1956.               status_check(target, 7)
  1957.               target_status.refresh
  1958.             when 0x21 # Toxic
  1959.               status_check(target, 8)
  1960.               target_status.refresh
  1961.             when 0xCA # Toxic
  1962.               status_check(target, 8)
  1963.               target_status.refresh
  1964.             when 0x31 # Confuse
  1965.               status_check(target, 6)
  1966.               target_status.refresh
  1967.             when 0xC7 # Confuse
  1968.               status_check(target, 6)
  1969.               target_status.refresh
  1970.             when 0x24 # Triplattaque
  1971.               choice_effect = 0
  1972.               case rand(3)
  1973.               when 0
  1974.                 choice_effect = 2
  1975.               when 1
  1976.                 choice_effect = 3
  1977.               when 2
  1978.                 choice_effect = 5
  1979.               end
  1980.               status_check(target, choice_effect)              
  1981.               target_status.refresh
  1982.             when 0x42 # Poison (sur)
  1983.               status_check(target, 1)
  1984.               target_status.refresh
  1985.             when 0x43 # Paralyze (affected by immunity)
  1986.               status_check(target, 2)
  1987.               target_status.refresh
  1988.             when 0x4C # Confuse
  1989.               status_check(target, 6)
  1990.               target_status.refresh
  1991.             when 0x4D # Poison/Double dar
  1992.               status_check(target, 1)
  1993.               target_status.refresh
  1994.             when 0x5C # Flinch for Snore/Ronflement
  1995.               status_check(target, 7)
  1996.               target_status.refresh
  1997.             when 0x7D # Defrost move
  1998.               status_check(target, 3)
  1999.               target_status.refresh
  2000.             when 0x92 # Twister / Ouragan
  2001.               status_check(target, 7)
  2002.               target_status.refresh
  2003.             when 0x96 # Flinch
  2004.               status_check(target, 7)
  2005.               target_status.refresh
  2006.             when 0x98 # Thunder / paralyze
  2007.               status_check(target, 2)
  2008.               target_status.refresh
  2009.             when 0x9B2 # Bounce / Rebond
  2010.               status_check(target, 2)
  2011.               target_status.refresh
  2012.               #index = user.effect_list.index(0x9B2)
  2013.               #user.effect.delete_at(index)
  2014.             when 0xA7 # Burn
  2015.               status_check(target, 3)
  2016.               target_status.refresh
  2017.             when 0xC8 # Burn
  2018.               status_check(target, 3)
  2019.               target_status.refresh
  2020.             when 0xD1 # Poison Tail
  2021.               status_check(target, 1)
  2022.               target_status.refresh
  2023.             when 0xFE # Crocs Eclair
  2024.               if rand(2) == 0
  2025.                 status_check(target, 2)
  2026.                 target_status.refresh
  2027.               else
  2028.                 status_check(target, 7)
  2029.                 target_status.refresh
  2030.               end
  2031.             when 0xFF # Crocs Givre
  2032.               if rand(2) == 0
  2033.                 status_check(target, 5)
  2034.                 target_status.refresh
  2035.               else
  2036.                 status_check(target, 7)
  2037.                 target_status.refresh
  2038.               end
  2039.             when 0x100 # Crocs Feu
  2040.               if rand(2) == 0
  2041.                 status_check(target, 3)
  2042.                 target_status.refresh
  2043.               else
  2044.                 status_check(target, 7)
  2045.                 target_status.refresh
  2046.               end
  2047.             when 0x66 # Glas de soin / Heal Bell / Aromatherapy
  2048.               user.cure
  2049.               if user == @actor
  2050.                 draw_text("L'équipe est soignée!")
  2051.                 wait(40)
  2052.                 @party.cure_party
  2053.               end
  2054.             when 0xAB # Stimulant / Smelling Salt
  2055.               if user.paralyzed?
  2056.                 user.cure
  2057.                 user_status.refresh
  2058.               end
  2059.             when 0xC1 # Refresh
  2060.               if user.paralyzed? or user.burn? or user.poisoned?
  2061.                 user.cure
  2062.                 user_status.refresh
  2063.               end
  2064.             when 0x1B # Confuse - Mania / Thrash
  2065.               index = user.effect_list.index(0x1B)
  2066.               if not(user.confused?) and user.effect[index][1] == 1
  2067.                 status_check(user, 6)
  2068.                 user_status.refresh
  2069.               end
  2070.             # ----------------- -------------- ---------------
  2071.             #        Modificateur d'effets sur la durée
  2072.             # ----------------- -------------- ---------------
  2073.             when 0x1E # Conversion / Adaptation
  2074.               list = []
  2075.               for i in 0..user.skills_set.length-1
  2076.                 list.push(i)
  2077.               end
  2078.               list.shuffle!
  2079.              
  2080.               chosen_type = user.skills_set[list.pop].type
  2081.               until chosen_type != 0 and
  2082.                   not([user.type1, user.type2].include?(chosen_type))
  2083.                 chosen_type = user.skills_set[list.pop].type
  2084.               end
  2085.               user.skill_effect(0x1E, -1, chosen_type)
  2086.               string = type_string(chosen_type) + "!"
  2087.               draw_text("#{user.given_name} est", "maintenant de type " + string)
  2088.               wait(40)
  2089.             when 0x23 # Light screen / Mur Lumière
  2090.               target.skill_effect(0x23, 5)
  2091.               draw_text("#{user.given_name}", "est protégé!")
  2092.               wait(40)
  2093.             when 0x2A # Multi Turn Attack
  2094.               if not(user.effect_list.include?(0x2A))
  2095.                 turn = rand(4) + 3
  2096.                 user.skill_effect(0x2A, turn)
  2097.                 draw_text("#{target.given_name} est","piégé par " + user_skill.name + "!")
  2098.                 wait(40)
  2099.               end
  2100.             when 0x54 # Leech Seed / Vampigraine
  2101.               user.skill_effect(0x54)
  2102.               draw_text("#{target.given_name}", "est infecté!")
  2103.               wait(40)
  2104.             when 0x2F # Focus energy / Puissance
  2105.               user.skill_effect(0x2F)
  2106.               draw_text("#{user.given_name}", "se gonfle!")
  2107.               wait(40)
  2108.             when 0x2E # Brume / Mist
  2109.               user.skill_effect(0x2E, 5)
  2110.               draw_text("#{user.given_name} s'entoure", "de brume!")
  2111.               wait(40)
  2112.             when 0x39 # Transform / Morphing
  2113.               if user.effect_list.include?(0x56) # Cure Disable / Entrave
  2114.                 index = user.effect_list.index(0x56)
  2115.                 skill_index = user.effect[index][2]
  2116.                 user.skills_set[skill_index].enable
  2117.               end
  2118.              
  2119.               set = []
  2120.               for skill in target.skills_set
  2121.                 adskill = skill.clone
  2122.                 adskill.define_ppmax(5)
  2123.                 adskill.refill
  2124.                 adskill.enable
  2125.                 set.push(adskill)
  2126.               end
  2127.              
  2128.               data = user.clone
  2129.               user.skill_effect(0x39, -1, data)
  2130.               draw_text("#{user.given_name}", "se métamorphose!")
  2131.               if user == @actor
  2132.                 @actor.skills_set = set
  2133.                 @actor.transform_effect(target)
  2134.                 @actor_sprite.bitmap = RPG::Cache.battler(@enemy.battler_back, 0)
  2135.                 @actor_sprite.ox = @actor_sprite.bitmap.width / 2
  2136.                 @actor_sprite.oy = @actor_sprite.bitmap.height
  2137.                 #@actor_sprite.tone = Tone.new(200,0,200,180)
  2138.               else
  2139.                 @enemy.skills_set = set
  2140.                 @enemy.transform_effect(target)
  2141.                 @enemy_sprite.bitmap = RPG::Cache.battler(@actor.battler_face, 0)
  2142.                 #@enemy_sprite.tone = Tone.new(200,0,200,180)
  2143.               end
  2144.               wait(40)
  2145.             when 0x41 # Reflect / Protection
  2146.               target.skill_effect(0x41, 5)
  2147.               draw_text("#{user.given_name}", "est protégé!")
  2148.               wait(40)
  2149.             when 0x4B # Sky attack / TTA
  2150.               status_check(target, 7)
  2151.               target_status.refresh
  2152.             when 0x51 # Frénésie / Rage
  2153.               if not(user.effect_list.include?(0x51))
  2154.                 user.skill_effect(0x51, -1, 0)
  2155.               end
  2156.             when 0x52 # Copie / Mimic
  2157.               cloned_skill = target_last_skill.clone
  2158.               cloned_skill.define_ppmax(5)
  2159.               cloned_skill.refill
  2160.               user.skill_effect(0x52, -1, [user_skill.clone, cloned_skill])
  2161.               index = user.skills_set.index(user_skill)
  2162.               user.skills_set[index] = cloned_skill
  2163.               draw_text("#{user.given_name} copie", cloned_skill.name+"!")
  2164.               wait(40)
  2165.             when 0x56 # Disable / Entrave
  2166.               index = target.skills_set.index(target_last_skill)
  2167.               if index != nil
  2168.                 target.skill_effect(0x56, rand(4) + 2, index)
  2169.                 target.skills_set[index].disable
  2170.                 draw_text(target.skills_set[index].name+" est bloqué!")
  2171.                 wait(40)
  2172.               end
  2173.             when 0x5A # Encore
  2174.               index = target.skills_set.index(target_last_skill)
  2175.               target.skill_effect(0x5A, rand(4) + 3, index)
  2176.             when 0x5E # Lock-on / Verrouillage
  2177.               user.skill_effect(0x5E, 2)
  2178.               draw_text("#{user.given_name} cible #{target.given_name}!")
  2179.               wait(40)
  2180.             when 0x5F # Gribouille // Sketch
  2181.               index = user.skills_set.index(user_last_skill)
  2182.               user.skills_set[index] = target_last_skill
  2183.               draw_text("#{user.given_name} a copié", target_last_skill.name+"!")
  2184.               wait(40)
  2185.             when 0x62 # Prélèvement destin / Destiny Bond
  2186.               user.skill_effect(0x62, 2)
  2187.               draw_text("#{user.given_name} lie son" , "destin.")
  2188.               wait(40)
  2189.             when 0x6A # Regard Noir / Mean Look
  2190.               target.skill_effect(0x6A)
  2191.               draw_text("#{target.given_name}", "ne peut plus fuir!")
  2192.               wait(40)
  2193.             when 0x6B # Cauchemar/Nightmare
  2194.               target.skill_effect(0x6B)
  2195.               draw_text("#{target.given_name} fait des" , "cauchemars!")
  2196.               wait(40)
  2197.             when 0x6F # Abri / Détection
  2198.               if user.effect_list.include?(0x6F)
  2199.                 index = user.effect_list.index(0x6F)
  2200.                 effect = user.effect[index]
  2201.                 effect[1] = 2
  2202.                 effect[2] += 1
  2203.               else
  2204.                 user.skill_effect(0x6F, 2, 1)
  2205.               end
  2206.               draw_text("#{user.given_name}", "se protège!")
  2207.               wait(40)
  2208.             when 0x72 # Requiem / Perish Song
  2209.               if not(user.effect_list.include?(0x72))
  2210.                 user.skill_effect(0x72, 4)
  2211.               end
  2212.               if not(enemy.effect_list.include?(0x72))
  2213.                 enemy.skill_effect(0x72, 4)
  2214.               end
  2215.               draw_text("Une chanson déprimante.")
  2216.               wait(40)
  2217.             when 0x71 # Clairvoyance / Fore Sight
  2218.               target.skill_effect(0x71, -1)
  2219.               draw_text("#{user.given_name} identifie ", "#{target.given_name}.")
  2220.               wait(40)
  2221.             when 0x74 # Tenacité/Endure
  2222.               if user.effect_list.include?(0x74)
  2223.                 index = user.effect_list.index(0x74)
  2224.                 effect = user.effect[index]
  2225.                 effect[1] = 2
  2226.                 effect[2] += 1
  2227.               else
  2228.                 user.skill_effect(0x74, 1)
  2229.               end
  2230.               draw_text("#{user.given_name} résiste!")
  2231.               wait(40)
  2232.             when 0x75 # Roulade/Rollout
  2233.               if not(user.effect_list.include?(0x75))
  2234.                 user.skill_effect(0x75, 5, 5)
  2235.               elsif damage > 0
  2236.                 index = user.effect_list.index(0x75)
  2237.                 user.effect[index][2] -= 1
  2238.               elsif damage == 0
  2239.                 index = user.effect_list.index(0x75)
  2240.                 user.effect.delete_at(index)
  2241.               end
  2242.             when 0x77 # Taillade / Fury Cutter
  2243.               if not(user.effect_list.include?(0x77))
  2244.                 user.skill_effect(0x77, -1, -1)
  2245.               elsif damage > 0
  2246.                 index = user.effect_list.index(0x77)
  2247.                 user.effect[index][2] -= 1
  2248.               end
  2249.             when 0x78 # Attract
  2250.               target.skill_effect(0x78)
  2251.               draw_text("#{target.given_name} tombe amoureux", "de #{user.given_name}"+"!")
  2252.               wait(40)
  2253.             when 0x7C # Safeguard / Rune protect
  2254.               target.skill_effect(0x7C, 5)
  2255.               draw_text("#{target.given_name}", "est protégé!")
  2256.               wait(40)
  2257.             when 0x81 # Rapid Spin / Tour rapide
  2258.               list = [0x54, 0x2A]
  2259.               for effect in list
  2260.                 if target.effect_list.include?(effect)
  2261.                   index = target.effect_list.index(effect)
  2262.                   target.effect.delete_at(index)
  2263.                   draw_text("#{user.given_name}", "se libère!")
  2264.                   wait(40)
  2265.                 end
  2266.               end
  2267.               $battle_var.reset_ground_effect(user, actor)
  2268.             when 0x9C # Defense Curl / Boul'Armure
  2269.               n = user.change_dfe(+1)
  2270.               raise_stat("DFE", user, n)
  2271.               user.skill_effect(0x9C)
  2272.             when 0x9F # Uproar / Brouhaha
  2273.               turn = rand(3)+3
  2274.               user.skill_effect(0x9F, turn)
  2275.               draw_text("#{user.given_name}", "fait un BROUHAHA!")
  2276.               wait(40)
  2277.             when 0xA0 # Stockpile
  2278.               if user.effect_list.include?(0xA0)
  2279.                 index = user.effect_list.index(0xA0)
  2280.                 case user.effect[index][2]
  2281.                 when 1
  2282.                   user.effect[index][2] = 2
  2283.                   draw_text("#{user.given_name}", "se charge!")
  2284.                   wait(40)
  2285.                 when 2
  2286.                   user.effect[index][2] = 3
  2287.                   draw_text("#{user.given_name}", "se charge!")
  2288.                   wait(40)
  2289.                 end
  2290.                 if user.effect[index][2] > 3
  2291.                   draw_text("#{user.given_name}", "est chargé à bloc!")
  2292.                   wait(40)
  2293.                 end
  2294.               else
  2295.                 user.skill_effect(0xA0, -1, 1)
  2296.                 draw_text("#{user.given_name}", "se charge!")
  2297.                 wait(40)
  2298.               end
  2299.             when 0xA1 # Spit up / Relache
  2300.               if user.effect_list.include?(0xA0)
  2301.                 index = user.effect_list.index(0xA0)
  2302.                 user.effect.delete_at(index)
  2303.               end
  2304.             when 0xA2 # Swallow / Avale
  2305.               if user.effect_list.include?(0xA0)
  2306.                 index = user.effect_list.index(0xA0)
  2307.                 user.effect.delete_at(index)
  2308.               end
  2309.             when 0xA5 # Tourment
  2310.               index = target.skills_set.index(target_last_skill)
  2311.               target.skill_effect(0xA5, -1, index)
  2312.               target.skills_set[index].disable
  2313.               draw_text("#{target.given_name}", "est tourmenté!")
  2314.               wait(40)
  2315.             when 0xAE # Charge / Chargeur
  2316.               if user.effect_list.include?(0xAE)
  2317.                 index = user.effect_list.index(0xAE)
  2318.                 user.effect.delete_at(index)
  2319.               end
  2320.               user.skill_effect(0xAE, 2)
  2321.               draw_text("#{user.given_name}", "est chargé!")
  2322.               wait(40)
  2323.             when 0xAF # Taunt / Provoc
  2324.               target.skill_effect(0xAF, 2)
  2325.               draw_text("#{user.given_name} cède à la", "provocation!")
  2326.               wait(40)
  2327.             when 0xB5 # Ingrain / Racines
  2328.               user.skill_effect(0xB5)
  2329.               draw_text("#{user.given_name}" , "est enraciné!")
  2330.               wait(40)
  2331.             when 0xBB # Yawn
  2332.               target.skill_effect(0xBB, 2)
  2333.               draw_text("#{user.given_name}" , "baîlle!")
  2334.               wait(40)
  2335.             when 0xC2 # Grudge / Rancune
  2336.               user.skill_effect(0xC2, 2)
  2337.               draw_text("#{user.given_name}" , "est rancunier!")
  2338.               wait(40)
  2339.             when 0xC9 # Mud Sport
  2340.               user.skill_effect(0xC9)
  2341.               draw_text("#{user.given_name}" , "est couvert de boue!")
  2342.               wait(40)
  2343.             when 0xD2 # Water Sport
  2344.               user.skill_effect(0xD2)
  2345.               draw_text("#{user.given_name}" , "est mouillé! ... ...")
  2346.               wait(40)
  2347.             when 0xD7 # Gravity
  2348.               target.skill_effect(0xD7)
  2349.               draw_text("#{target.given_name}" , "est collé au sol!")
  2350.               wait(40)
  2351.             when 0xE1 # Vent Arrière
  2352.               user.skill_effect(0xE1)
  2353.               draw_text("#{user.given_name}" , "est plus rapide!")
  2354.             when 0xE4 # Demi-Tour
  2355.               faint_check(target)
  2356.               if $pokemon_party.number_alive > 1
  2357.                 scene_temp = Pokemon_Party_Menu.new(0, @z_level + 100, "map", nil, true)
  2358.                 scene_temp.main
  2359.                 return_data_temp = scene_temp.return_data
  2360.                 # Récupération des données
  2361.                 @switch_id = return_data_temp
  2362.                 # Switch
  2363.                 actor_pokemon_switch
  2364.               end
  2365.             when 0xE8 # Embargo
  2366.               target.skill_effect(0xE8, 6)
  2367.               draw_text("#{target.given_name} ne peut" , "plus utiliser d'objet!")
  2368.               wait(40)
  2369.             when 0xEC # Anti-Soin
  2370.               target.skill_effect(0xEC, 6)
  2371.               draw_text("#{target.given_name} ne peut" , "plus se soigner!")
  2372.               wait(40)
  2373.             when 0xEE # Astuce Force
  2374.               user.skill_effect(0xEE)
  2375.               draw_text("#{user.given_name} échange" , "son Attaque et sa Défense!")
  2376.               wait(40)
  2377.             when 0xEF # Suc Digestif
  2378.               target.skill_effect(0xEF)
  2379.               draw_text("SUC DIGESTIF annule le" , "talent de #{target.given_name}!")
  2380.               wait(40)
  2381.             when 0xF0 # Air Veinard
  2382.               user.skill_effect(0xF0, 6)
  2383.               draw_text("#{user.given_name} est" , "protégé des coups critiques!")
  2384.               wait(40)
  2385.             when 0xF7 # Soucigraine
  2386.               target.skill_effect(0xF7)
  2387.               draw_text("Le talent de #{target.given_name}" , "est maintenant Insomnia!")
  2388.               wait(40)
  2389.             when 0xFB # Anneau Hydro
  2390.               user.skill_effect(0xFB)
  2391.               draw_text("#{user.given_name} s'enveloppe" , "d'un ANNEAU HYDRO!")
  2392.               wait(40)
  2393.             when 0xFC # Vol Magnétik
  2394.               user.skill_effect(0xFC)
  2395.               draw_text("#{user.given_name} lévite" , "grâce à VOL MAGNETIK!")
  2396.               wait(40)
  2397.             end
  2398.           end
  2399.          
  2400.           # ----------------- -------------- ------------------
  2401.           #     Contrôle des effets adverses / Adversaire
  2402.           # ----------------- -------------- ------------------
  2403.           for effect in target.effect_list
  2404.             case effect
  2405.             when 0x62 # Prélèvement destin / Destiny Bond
  2406.               if target.dead?
  2407.                 damage = user.hp
  2408.                 draw_text("#{target.given_name}", "est lié par le destin.")
  2409.                 self_damage(user, user_sprite, user_status, damage)
  2410.                 wait(40)
  2411.                 faint_check(user)
  2412.               end
  2413.             when 0xC2 # Grudge
  2414.               if target.dead? and not(user.dead?)
  2415.                 user_skill.pp = 0
  2416.               end
  2417.             when 0x1A # Bide / Patience
  2418.               index = target.effect_list.index(0x1A)
  2419.               target.effect[index][2] += damage
  2420.             when 0x51 # Frénésie / Rage
  2421.               if damage > 0 and multi_hit == 0 # Compte une seule fois
  2422.                 index = target.effect_list.index(0x51)
  2423.                 target.change_atk(+1)
  2424.                 target.effect[index][2] += 1
  2425.               end
  2426.             end
  2427.           end
  2428.          
  2429.           faint_check(target)
  2430.          
  2431.              
  2432.           # ----------- ---------------- --------------
  2433.           #            Capacités spéciales
  2434.           # ----------- ---------------- --------------
  2435.           unless target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7) # Suc Digestif / Soucigraine
  2436.             case target.ability
  2437.             when 28 # Synchro (ab)
  2438.               if target.ability_token != nil
  2439.                 draw_text("#{target.ability_name} de #{target.given_name}", "inflige le même statut!")
  2440.                 wait(40)
  2441.                 status_check(user, target.ability_token, true)
  2442.                 user_status.refresh
  2443.                 target.ability_token = nil
  2444.               end
  2445.             when 16 # Déguisement / Color change (ab)
  2446.               type = user_skill.type
  2447.               if [user.type1, user.type2].include?(type) and type != 0 and
  2448.                   type != user.ability_token and damage > 0
  2449.                 user.ability_token = type
  2450.                 string = type_string(type)
  2451.                 draw_text("#{target.ability_name} de #{target.given_name}", "change le type en " + string + "!")
  2452.                 wait(40)
  2453.               end
  2454.             when 9 # Static (ab)
  2455.               # Contact + dommages + 30% chance # force?
  2456.               if user_skill.direct? and damage > 0 and rand(100) < 30
  2457.                 draw_text("#{target.ability_name} de #{target.given_name}", "paralyse #{user.given_name}!")
  2458.                 wait(40)
  2459.                 status_check(user, 2, true)
  2460.                 user_status.refresh
  2461.                 wait(40)
  2462.               end
  2463.             when 24 # Peau dure / Rough skin (ab)
  2464.               if user_skill.direct? and damage > 0
  2465.                 draw_text("#{target.ability_name} de #{target.given_name}", "blesse #{user.given_name}!")
  2466.                 rec_damage = user.max_hp / 16
  2467.                 self_damage(user, user_sprite, user_status, rec_damage)
  2468.                 wait(40)
  2469.               end
  2470.             when 27 # Pose Spore / Effect Spore (ab)
  2471.               # Contact + dommages + 10% chance # force?
  2472.               if user_skill.direct? and damage > 0 and rand(100) < 10
  2473.                 draw_text("#{target.ability_name} de #{target.given_name}", "laisse des spores!")
  2474.                 wait(40)
  2475.                 status_check(user, [1, 2, 4][rand(3)], true)
  2476.                 user_status.refresh
  2477.                 wait(40)
  2478.               end
  2479.             when 38 # Point poison / Poison point (ab)
  2480.               # Contact + dommages + 30% chance # force?
  2481.               if user_skill.direct? and damage > 0 and rand(100) < 30
  2482.                 draw_text("#{target.ability_name} de #{target.given_name}", "empoisonne #{user.given_name}!")
  2483.                 wait(40)
  2484.                 status_check(user, 1, true)
  2485.                 user_status.refresh
  2486.                 wait(40)
  2487.               end
  2488.             when 49 # Corps ardent / Flame body (ab)
  2489.               # Contact + dommages + 30% chance # force?
  2490.               if user_skill.direct? and damage > 0 and rand(100) < 30
  2491.                 draw_text("#{target.ability_name} de #{target.given_name}", "brûle #{user.given_name}!")
  2492.                 wait(40)
  2493.                 status_check(user, 3, true)
  2494.                 user_status.refresh
  2495.                 wait(40)
  2496.               end
  2497.             when 56 # Joli sourire / Cute charm (ab)
  2498.               # Contact + dommages + 30% chance # force?
  2499.               if user_skill.direct? and damage > 0 and rand(100) < 30 and
  2500.                   not(target.effect_list.include?(0x78) or (target.gender + user.gender) != 3)
  2501.                 user.skill_effect(0x78)
  2502.                 draw_text("#{target.ability_name} de #{target.given_name}", "séduit #{user.given_name}!")
  2503.                 wait(40)
  2504.               end
  2505.             end
  2506.           end
  2507.          
  2508.           faint_check(target)
  2509.          
  2510.         else
  2511.           #-------------------------------------------------------
  2512.           # Miss
  2513.           #--------------------------------------------------------
  2514.           case user_skill.effect
  2515.           when 0x07 # Self_destruct
  2516.             rec_damage = user.hp
  2517.             self_damage(user, user_sprite, user_status, rec_damage)
  2518.             draw_text("#{user.given_name}","se sacrifie.")
  2519.             wait(40)
  2520.             faint_check(user)
  2521.           when 0x2D # Miss and self_damage
  2522.             damage = info[0]
  2523.             rec_damage = damage/2
  2524.             draw_text("#{user.given_name}","retombe au sol!")
  2525.             self_damage(user, user_sprite, user_status, rec_damage)
  2526.             wait(30)
  2527.             faint_check(user)
  2528.           when 0x68 # Triple Kick
  2529.             multi_hit = 0 #Arret si échec
  2530.           when 0x9B2 # Bounce / Rebond
  2531.             if user.effect_list.include?(0x9B2)
  2532.               index = user.effect_list.index(0x9B2)
  2533.               user.effect.delete_at(index)
  2534.             end
  2535.           when 0x75 # Roulade/Rollout
  2536.             if user.effect_list.include?(0x75)
  2537.               index = user.effect_list.index(0x75)
  2538.               user.effect.delete_at(index)
  2539.             end
  2540.           end
  2541.         end
  2542.        
  2543.         #-------------------------------------------------------
  2544.         # Réduction compteur d'effets ?
  2545.         #--------------------------------------------------------
  2546.         # user.skill_effect_end_turn
  2547.         user_status.refresh
  2548.         target_status.refresh
  2549.       end
  2550.     end
  2551.    
  2552.     #------------------------------------------------------------
  2553.     # Gestion des dêgats automatique en combat
  2554.     # Skill utilisé sur l'adversaire
  2555.     # Dommages Infligés - user_skill = class Skill, enemy = class Pokemon
  2556.     # Renvoie: [damage, critical (true/false), efficency (-2, -1,0,1)]
  2557.     #------------------------------------------------------------        
  2558.     def damage_calculation(user_skill, user, target, critical_special = 0, shortcut = false, int_only = false)      
  2559.       if user == @actor
  2560.         user_last_skill = $battle_var.actor_last_used
  2561.         user_last_taken_damage = $battle_var.actor_last_taken_damage
  2562.       elsif user == @enemy
  2563.         user_last_skill = $battle_var.enemy_last_used
  2564.         user_last_taken_damage = $battle_var.enemy_last_taken_damage
  2565.       end
  2566.       if target == @actor
  2567.         target_last_skill = $battle_var.actor_last_used
  2568.         target_last_taken_damage = $battle_var.actor_last_taken_damage
  2569.       elsif target == @enemy
  2570.         target_last_skill = $battle_var.enemy_last_used
  2571.         target_last_taken_damage = $battle_var.enemy_last_taken_damage
  2572.       end
  2573.       last_skill = $battle_var.last_used
  2574.      
  2575.       critical_hit = critical_decision(target, critical_special)
  2576.       level = user.level
  2577.       statistic_refresh_modif
  2578.       user.statistic_refresh_modif
  2579.       if user_skill.physical
  2580.         atk = (critical_hit and user.atk_stage < 0) ? user.atk_basis : user.atk
  2581.         dfe = (critical_hit and target.dfe_stage > 0) ? target.dfe_basis : target.dfe
  2582.       elsif user_skill.special
  2583.         atk = (critical_hit and user.ats_stage < 0) ? user.ats_basis : user.ats
  2584.         dfe = (critical_hit and target.dfs_stage > 0) ? target.dfs_basis : target.dfs
  2585.       else
  2586.         atk = (critical_hit and user.atk_stage < 0) ? user.atk_basis : user.atk
  2587.         dfe = (critical_hit and target.dfe_stage > 0) ? target.dfe_basis : target.dfe
  2588.       end
  2589.      
  2590.       base_damage = user_skill.power
  2591.       user_type1 = user.type1
  2592.       user_type2 = user.type2
  2593.       skill_type = user_skill.type
  2594.       target_type1 = target.type1
  2595.       target_type2 = target.type2
  2596.       weather = $battle_var.weather[0]
  2597.      
  2598.       # ------------- -------------- ---------------
  2599.       #        Programmation des objets
  2600.       # ------------- -------------- ---------------
  2601.       #            Boosts de type
  2602.       # ------------- -------------- ---------------
  2603.       case user.item_name
  2604.       when "MOUCH.SOIE"
  2605.         atk *= user_type1 == 1 ? 1.1 : 1
  2606.       when "CHARBON"
  2607.         atk *= user_type1 == 2 ? 1.1 : 1
  2608.       when "EAU MYSTIQUE"
  2609.         atk *= user_type1 == 3 ? 1.1 : 1
  2610.       when "AIMANT"
  2611.         atk *= user_type1 == 4 ? 1.1 : 1
  2612.       when "GRAIN MIRACL"
  2613.         atk *= user_type1 == 5 ? 1.1 : 1
  2614.       when "GLACETERNEL"
  2615.         atk *= user_type1 == 6 ? 1.1 : 1
  2616.       when "CEINT.NOIRE"
  2617.         atk *= user_type1 == 7 ? 1.1 : 1
  2618.       when "PIC VENIN"
  2619.         atk *= user_type1 == 8 ? 1.1 : 1
  2620.       when "SABLE DOUX"
  2621.         atk *= user_type1 == 9 ? 1.1 : 1
  2622.       when "BEC POINTU"
  2623.         atk *= user_type1 == 10 ? 1.1 : 1
  2624.       when "CUILLERTORDU"
  2625.         atk *= user_type1 == 11 ? 1.1 : 1
  2626.       when "POUDRE ARG."
  2627.         atk *= user_type1 == 12 ? 1.1 : 1
  2628.       when "PIERRE DURE"
  2629.         atk *= user_type1 == 13 ? 1.1 : 1
  2630.       when "RUNE SORT"
  2631.         atk *= user_type1 == 14 ? 1.1 : 1
  2632.       when "CROC DRAGON"
  2633.         atk *= user_type1 == 15 ? 1.1 : 1
  2634.       when "PEAU METAL"
  2635.         atk *= user_type1 == 16 ? 1.1 : 1
  2636.       when "LUNET.NOIRES"
  2637.         atk *= user_type1 == 17 ? 1.1 : 1
  2638.       end
  2639.      
  2640.  
  2641.       # ------------- -------------- ---------------
  2642.       #        Programmation des attaques
  2643.       # ------------- -------------- ---------------
  2644.       #      Redéfinition base_damage (puissance)
  2645.       # ------------- -------------- ---------------
  2646.       data = nil
  2647.      
  2648.       case user_skill.effect
  2649.       when 0x07 # Self_destruct
  2650.         dfe = dfe / 2
  2651.       when 0x63 # Base damage variant
  2652.         a = user.hp * 48.0 / user.max_hp
  2653.         if a >= 33
  2654.           base_damage = 20
  2655.         elsif a >= 17
  2656.           base_damage = 40
  2657.         elsif a >= 10
  2658.           base_damage = 80
  2659.         elsif a >= 5
  2660.           base_damage = 100
  2661.         elsif a >= 2
  2662.           base_damage = 150
  2663.         elsif a < 2
  2664.           base_damage = 200
  2665.         end
  2666.       when 0x7E # Magnitude / Ampleur
  2667.         a = rand(100)
  2668.         if a < 5
  2669.           data = 4
  2670.           base_damage = 10
  2671.         elsif a < 15
  2672.           data = 5
  2673.           base_damage = 30
  2674.         elsif a < 35
  2675.           data = 6
  2676.           base_damage = 50
  2677.         elsif a < 65
  2678.           data = 7
  2679.           base_damage = 70
  2680.         elsif a < 85
  2681.           data = 8
  2682.           base_damage = 90
  2683.         elsif a < 95
  2684.           data = 9
  2685.           base_damage = 110
  2686.         else
  2687.           data = 10
  2688.           base_damage = 150
  2689.         end
  2690.       when 0x68 # Triple Kick/Triple Pied
  2691.         if user.effect_list.include?(0x68)
  2692.           index = user.effect_list.index(0x68)
  2693.           base_damage += 10 * user.effect[index][2]
  2694.         end
  2695.       when 0x75 # Rollout / Roulade
  2696.         # Bonus cumulatif
  2697.         if user.effect_list.include?(0x75)
  2698.           index = user.effect_list.index(0x75)
  2699.           base_damage *= (5-user.effect[index][1])**2
  2700.         end
  2701.         # Defense Curl/Boul'Armure bonus
  2702.         if user.effect_list.include?(0x9C)
  2703.           base_damage *= 2
  2704.         end
  2705.       when 0x77  # Fury Cutter / Taillade
  2706.         if user.effect_list.include?(0x77)
  2707.           index = user.effect_list.index(0x77)
  2708.           multiplier = - user.effect[index][1]
  2709.           if multiplier < 5
  2710.             base_damage *= multiplier**2
  2711.           elsif multiplier >= 5
  2712.             base_damage *= 5**2
  2713.           end
  2714.         end
  2715.       when 0x79 # Return / Retour
  2716.         base_damage = user.loyalty * 10 / 25
  2717.       when 0x7B # Frustration
  2718.         base_damage = (255 - user.loyalty) * 10 / 25
  2719.       when 0xBE # Base damage basé sur hp
  2720.         base_damage = [1, user.hp * 150 / user.max_hp].max
  2721.       when 0xC4 # Low Kick
  2722.         string = Pokemon_Info.weight(target.id)
  2723.         weight = string[0..string.length-2].to_f
  2724.         if weight < 10
  2725.           base_damage = 20
  2726.         elsif weight < 25
  2727.           base_damage = 40
  2728.         elsif weight < 50
  2729.           base_damage = 60
  2730.         elsif weight < 100
  2731.           base_damage = 80
  2732.         elsif weight < 200
  2733.           base_damage = 100
  2734.         else
  2735.           base_damage = 120
  2736.         end
  2737.       when 0xD9 # Réveil Forcé
  2738.         if target.asleep?
  2739.           base_damage *= 2
  2740.           loop do
  2741.             target.sleep_check
  2742.             break if not target.sleep_check
  2743.           end
  2744.           draw_text("#{target.given_name}","se réveille de force!")
  2745.         end
  2746.       when 0xDB # Gyroballe
  2747.         base_damage = 25 * (user.spd / target.spd)
  2748.       when 0xDD # Saumure
  2749.         if target.hp/target.max_hp < 0.5 then base_damage *= 2 end
  2750.       when 0xDE # Don Naturel - Type et Puissance
  2751.         item_berry = true
  2752.         # Type
  2753.         if user.item_hold == [205, 221, 237]    
  2754.           skill.type = 2    # Feu
  2755.         elsif user.item_hold == [206, 222, 238]  
  2756.           skill.type = 3    # Eau
  2757.         elsif user.item_hold == [207, 223, 239]  
  2758.           skill.type = 4    # Électrik
  2759.         elsif user.item_hold == [208, 224, 240]  
  2760.           skill.type = 5    # Plante
  2761.         elsif user.item_hold == [209, 225, 241]  
  2762.           skill.type = 6    # Glace
  2763.         elsif user.item_hold == [210, 226, 242]  
  2764.           skill.type = 7    # Combat
  2765.         elsif user.item_hold == [211, 227, 243]  
  2766.           skill.type = 8    # Poison
  2767.         elsif user.item_hold == [212, 228, 244]  
  2768.           skill.type = 9    # Sol
  2769.         elsif user.item_hold == [213, 229, 245]  
  2770.           skill.type = 10   # Vol
  2771.         elsif user.item_hold == [214, 230, 246]  
  2772.           skill.type = 11   # Psy
  2773.         elsif user.item_hold == [215, 231, 247]  
  2774.           skill.type = 12   # Insecte
  2775.         elsif user.item_hold == [216, 232, 248]  
  2776.           skill.type = 13   # Roche
  2777.         elsif user.item_hold == [217, 233]        
  2778.           skill.type = 14   # Spectre
  2779.         elsif user.item_hold == [218, 234]        
  2780.           skill.type = 15   # Dragon
  2781.         elsif user.item_hold == [219, 235]        
  2782.           skill.type = 16   # Ténèbres
  2783.         elsif user.item_hold == [220, 236]        
  2784.           skill.type = 17   # Acier
  2785.         else
  2786.           skill.type = 1
  2787.           item_berry = false
  2788.         end
  2789.         # Puissance
  2790.         if user.item_hold == [205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220]     # Baies de niveau 1
  2791.           base_damage = 60
  2792.         elsif user.item_hold == [221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236]  # Baies de niveau 2
  2793.           base_damage = 70
  2794.         elsif user.item_hold == [237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248]                      # Baies de niveau 3
  2795.           base_damage = 80
  2796.         else
  2797.           base_damage = 50
  2798.         end
  2799.         # Enlève l'objet si le joueur a une baie
  2800.         if item_berry then user.item_hold = 0 end
  2801.       when 0xE3 # Fulmifer
  2802.         base_damage = target_last_skill.base_damage * 1.5
  2803.       when 0xE6 # Représailles
  2804.         if (user == @enemy and @strike_first) or (user == @actor and !@strike_first)
  2805.           if user_last_taken_damage > 0
  2806.             base_damage *= 2
  2807.           end
  2808.         end
  2809.       when 0xE7 # Assurance
  2810.         if (user == @enemy and @strike_first) or (user == @actor and !@strike_first)
  2811.           if target_last_skill.effect == [0x30, 0xC6, 0x8E]
  2812.             base_damage *= 2
  2813.           end
  2814.         end
  2815.       when 0xE9 # Dégommage
  2816.         if user.item_hold == [74, 82, 85, 92..93, 96..97, 100, 102, 109, 205..252, 331]
  2817.           base_damage = 10
  2818.         elsif user.item_hold == [13..73, 75..80, 84, 87, 89..91, 98..99, 101, 103,
  2819.                                  106..108, 110..112, 114..116, 177..181, 184..191]
  2820.           base_damage = 30
  2821.         elsif user.item_hold == 117
  2822.           base_damage = 40
  2823.         elsif user.item_hold == [83, 331]
  2824.           base_damage = 50
  2825.         elsif user.item_hold == [94, 182]
  2826.           base_damage = 60
  2827.         elsif user.item_hold == [81, 87]
  2828.           base_damage = 70
  2829.         elsif user.item_hold == [95, 192]
  2830.           base_damage = 80
  2831.         elsif user.item_hold == [113, 183, 261..276]
  2832.           base_damage = 90
  2833.         elsif user.item_hold == [86]
  2834.           base_damage = 100
  2835.         else
  2836.           base_damage = 1
  2837.         end
  2838.         if user.item_hold == 88 # Pics Toxic
  2839.           status_check(target, 8)
  2840.           target_status.refresh
  2841.         elsif user.item_hold == 98 # Roche Royale
  2842.           status_check(target, 7)
  2843.           target_status.refresh
  2844.         elsif user.item_hold == [93, 96] # Herbe Blanche / Herbe Mental
  2845.           #user.hold_item_use
  2846.         end
  2847.         user.item_hold = 0
  2848.       when 0xEB # Atout
  2849.         case user_skill.pp
  2850.         when 1
  2851.           base_damage = 200
  2852.         when 2
  2853.           base_damage = 80
  2854.         when 3
  2855.           base_damage = 60
  2856.         when 4
  2857.           base_damage = 50
  2858.         else
  2859.           base_damage = 40
  2860.         end
  2861.       when 0xED # Essorage / Presse
  2862.         base_damage = 110 * (target.hp/target.max_hp)
  2863.       when 0xF5 # Punition (base + augmentations de stats)
  2864.         augment_bonus = 0
  2865.         if target.atk_stage > 0 then augment_bonus += target.atk_stage end
  2866.         if target.dfe_stage > 0 then augment_bonus += target.dfe_stage end
  2867.         if target.spd_stage > 0 then augment_bonus += target.spd_stage end
  2868.         if target.eva_stage > 0 then augment_bonus += target.eva_stage end
  2869.         if target.acc_stage > 0 then augment_bonus += target.acc_stage end
  2870.         if target.dfs_stage > 0 then augment_bonus += target.dfs_stage end
  2871.         if target.ats_stage > 0 then augment_bonus += target.ats_stage end
  2872.         base_damage = 60 + 20 * augment_bonus
  2873.         if base_damage > 200 then base_damage = 200 end
  2874.       when 0x106 # Jugement
  2875.         # Type
  2876.         if user.item_hold == 261
  2877.           skill.type = 2    # Feu
  2878.         elsif user.item_hold == 262
  2879.           skill.type = 3    # Eau
  2880.         elsif user.item_hold == 263  
  2881.           skill.type = 4    # Électrik
  2882.         elsif user.item_hold == 264  
  2883.           skill.type = 5    # Plante
  2884.         elsif user.item_hold == 265  
  2885.           skill.type = 6    # Glace
  2886.         elsif user.item_hold == 266  
  2887.           skill.type = 7    # Combat
  2888.         elsif user.item_hold == 267
  2889.           skill.type = 8    # Poison
  2890.         elsif user.item_hold == 268  
  2891.           skill.type = 9    # Sol
  2892.         elsif user.item_hold == 269  
  2893.           skill.type = 10   # Vol
  2894.         elsif user.item_hold == 270
  2895.           skill.type = 11   # Psy
  2896.         elsif user.item_hold == 271  
  2897.           skill.type = 12   # Insecte
  2898.         elsif user.item_hold == 272
  2899.           skill.type = 13   # Roche
  2900.         elsif user.item_hold == 273      
  2901.           skill.type = 14   # Spectre
  2902.         elsif user.item_hold == 274      
  2903.           skill.type = 15   # Dragon
  2904.         elsif user.item_hold == 275        
  2905.           skill.type = 16   # Ténèbres
  2906.         elsif user.item_hold == 276        
  2907.           skill.type = 17   # Acier
  2908.         else
  2909.           skill.type = 1    # Normal
  2910.         end
  2911.       when 0x10A # Casse-couilles
  2912.         if target.male?
  2913.           base_damage *= 2
  2914.         end
  2915.       end
  2916.      
  2917.       # Cas de Moi d'Abord
  2918.       if @me_first
  2919.         base_damage *= 1.5
  2920.         @me_first = false
  2921.       end
  2922.      
  2923.       # --------- --------------- ----------
  2924.       #       Protections adverses
  2925.       # --------- --------------- ----------
  2926.       for effect in target.effect_list
  2927.         case effect
  2928.         when 0x9B0 # Dig / Tunnel upx2 Magnitude / Earthquake
  2929.           if [0x7E, 0x93].include?(user_skill.effect)
  2930.             base_damage *= 2
  2931.           end
  2932.         when 0x9B1 # Vol / Fly upx2
  2933.           if [0x95, 0x98, 0x92].include?(user_skill.effect)
  2934.             base_damage *= 2
  2935.           end
  2936.         when 0x9B2 # Bounce upx2
  2937.           if [0x95, 0x98, 0x92].include?(user_skill.effect)
  2938.             base_damage *= 2
  2939.           end
  2940.         when 0x9B3 # Dive + Surf
  2941.           if user_skill.id == 15
  2942.             base_damage *= 2
  2943.           end
  2944.         when 0x1E # Conversion / Adaptation
  2945.           index = target.effect_list.index(0x1E)
  2946.           target_type1 = target.effect[index][2]
  2947.           target_type2 = 0
  2948.         end
  2949.       end
  2950.      
  2951.       # --------- --------------- ----------
  2952.       #        Bonus Capacités Spéciales
  2953.       # --------- --------------- ----------
  2954.       unless user.effect_list.include?(0xEF) or user.effect_list.include?(0xF7) # Suc Digestif / Soucigraine
  2955.         case user.ability
  2956.         when 18 # Flash Fire / Torche (ab)
  2957.           if user.ability_active and user_skill.type_fire?
  2958.             base_damage *= 1.5
  2959.           end
  2960.         when 37 # Huge Power / Coloforce (ab)
  2961.           if user_skill.physical
  2962.             atk *= 2
  2963.           end
  2964.         when 74 # Pure Power / Fore pure (ab)
  2965.           if user_skill.physical
  2966.             atk *= 2
  2967.           end
  2968.         when 55 # Agitation / Hustle (ab)
  2969.           if user_skill.physical
  2970.             atk *= 1.5
  2971.           end
  2972.         when 57 # Plus (ab)
  2973.           if target.ability == 58 and user_skill.special # Minus
  2974.             atk *= 1.5
  2975.           end
  2976.         when 58 # Minus (ab)
  2977.           if target.ability == 57 and user_skill.special # Plus
  2978.             atk *= 1.5
  2979.           end
  2980.         when 62 # Cran / Guts (ab)
  2981.           if user.status != 0 and user_skill.physical
  2982.             atk *= 1.5
  2983.           end
  2984.         when 65 # Overgrow / Engrais (ab)
  2985.           if user.hp < (user.max_hp/3) and user_skill.type_grass?
  2986.             base_damage *= 1.5
  2987.           end
  2988.         when 66 # Brasier / Blaze (ab)
  2989.           if user.hp < (user.max_hp/3) and user_skill.type_fire?
  2990.             base_damage *= 1.5
  2991.           end
  2992.         when 67 # Torrent (ab)
  2993.           if user.hp < (user.max_hp/3) and user_skill.type_water?
  2994.             base_damage *= 1.5
  2995.           end
  2996.         when 68 # Essaim / Swarm (ab)
  2997.           if user.hp < (user.max_hp/3) and user_skill.type_insect?
  2998.             base_damage *= 1.5
  2999.           end
  3000.         end
  3001.       end
  3002.      
  3003.       unless target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7) # Suc Digestif / Soucigraine
  3004.         case target.ability
  3005.         when 47 # Thick Fat / Isograisse (ab)
  3006.           if user_skill.type_fire? or user_skill.type_ice?
  3007.             atk /= 2
  3008.           end
  3009.         when 59 # Meteo / Forecast (ab)
  3010.           if target.ability_token == nil
  3011.             target.ability_token = 1 # Normal
  3012.           end
  3013.           target_type1 = target.ability_token
  3014.           target_type2 = 0
  3015.         when 16 # Déguisement / Color Change (ab)
  3016.           if target.ability_token == nil
  3017.             target.ability_token = 1
  3018.           end
  3019.           target_type1 = target.ability_token
  3020.           target_type2 = 0
  3021.         when 63 # Marvel Scale / Ecaille Spe (ab)
  3022.           if target.status != 0 and user_skill.physical
  3023.             dfe *= 1.5
  3024.           end
  3025.         end
  3026.       end
  3027.      
  3028.       # --------- --------------- ---------- ---------------
  3029.       #        Dommages infligés et calculs coefficients
  3030.       # --------- --------------- ---------- ---------------
  3031.       pre_damage = (((level*2/5.0+2)*base_damage*atk/dfe)/50)
  3032.       multiplier = 1
  3033.      
  3034.       # Effets de la météo
  3035.       # Airlock / Cloud Nine (ab)
  3036.       if not([13, 77].include?(user.ability) or [13, 77].include?(target.ability) and
  3037.           not (user.effect_list.include?(0xEF) or user.effect_list.include?(0xF7)) and
  3038.           not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7)))
  3039.         if ($battle_var.sunny? and skill_type == 2) or ($battle_var.rain? and skill_type == 3)
  3040.           # Ensoleillé + Feu ou Pluie + Eau
  3041.           multiplier *= 1.5
  3042.         end
  3043.         if ($battle_var.sunny? and skill_type == 3) or ($battle_var.rain? and skill_type == 2)
  3044.           # Ensoleillé + Eau ou Pluie + Feu
  3045.           multiplier *= 0.5
  3046.         end
  3047.         # Météo - Lance-Soleil / Solarbeam en cas de mauvais temps
  3048.         if user_skill.effect == 0x97 and [1, 3, 4].include?(weather)
  3049.           multiplier *= 0.5
  3050.         end
  3051.       end
  3052.      
  3053.       # Conversion / Adaptation
  3054.       if user.effect_list.include?(0x1E)
  3055.         index = user.effect_list.index(0x1E)
  3056.         user_type1 = user.effect[index][2]
  3057.         user_type2 = 0
  3058.       end
  3059.      
  3060.       # Forecast / Meteo (ab) // Déguisement / Color Change (ab)
  3061.       if (user.ability == 59 or user.ability == 16) and not (user.effect_list.include?(0xEF) or user.effect_list.include?(0xF7))
  3062.         user_type1 = user.ability_token
  3063.         user_type2 = 0
  3064.       end
  3065.      
  3066.       # Bonus même type (STAB)
  3067.       if skill_type == user_type1 or skill_type == user_type2
  3068.         multiplier *= 1.5
  3069.       end
  3070.      
  3071.       # Weather Ball / Ball'Meteo
  3072.       if user_skill.effect == 0xCB
  3073.         case weather
  3074.         when 1 # Pluie
  3075.           skill_type = 3 # Eau
  3076.         when 2 # Sunny
  3077.           skill_type = 2 # Feu
  3078.         when 3 # Tempete Sable
  3079.           skill_type = 13 # Roche
  3080.         when 4 # Hail
  3081.           skill_type = 6 # Glace
  3082.         end
  3083.       end
  3084.        
  3085.       # Complément statut
  3086.       # Brulure // Guts / Cran (ab) // Facade
  3087.       if user.status == 3 and user_skill.physical and not(user.ability == 62 and
  3088.           not (user.effect_list.include?(0xEF) or user.effect_list.include?(0xF7))) and
  3089.           user_skill.effect != 0xA9
  3090.         multiplier *= 0.5
  3091.       end
  3092.      
  3093.       # ------------------ ----------
  3094.       #  Programmation des attaques
  3095.       # ------------------ -----------
  3096.       # Protections et malus adverses
  3097.       for effect in target.effect_list
  3098.         case effect
  3099.         when 0x23 # Mur Lumière / Light Screen
  3100.           if user_skill.special and not(critical_hit)
  3101.             multiplier *= 0.5
  3102.           end
  3103.         when 0x41 # Protection / Reflect
  3104.           if user_skill.physical and not(critical_hit)
  3105.             multiplier *= 0.5
  3106.           end
  3107.         when 0xAE # Charge / Chargeur
  3108.           if skill_type == 4
  3109.             multiplier *= 2
  3110.           end
  3111.         when 0xC9 # Mud Sport / Lance-Boue
  3112.           if skill_type == 4
  3113.             multiplier *= 0.5
  3114.           end
  3115.         when 0xD2 # Water Sport / Tourniquet
  3116.           if skill_type == 2
  3117.             multiplier *= 0.5
  3118.           end
  3119.         when 0x6C # Minimize / Lilliput
  3120.           if user_skill.effect == 0x96
  3121.             multiplier *= 2
  3122.           end
  3123.         when 0x71 # Clairvoyance / Foresight
  3124.           if [1, 7].include?(skill_type) and [target_type1, target_type2].include?(14)
  3125.             skill_type = 0
  3126.           end
  3127.         end
  3128.       end
  3129.      
  3130.       # Bonus efficacité du type // Struggle / Lutte + Gravité
  3131.       rate = element_rate(target_type1, target_type2, skill_type, user_skill.effect, target.effect_list)
  3132.       if user_skill.id != 165
  3133.         multiplier *= rate/100.0
  3134.       end
  3135.       # Etude efficacité
  3136.       if rate > 100.0 # Super efficace
  3137.         efficiency = 1
  3138.       elsif rate < 100.0 and rate > 0 # Pas très efficace
  3139.         efficiency = -1
  3140.       elsif rate == 0 # Inefficace
  3141.         efficiency = -2
  3142.       elsif rate == 100.0 # Normal
  3143.         efficiency = 0
  3144.       end
  3145.      
  3146.       # Propriétés attaque
  3147.       case user_skill.effect
  3148.       when 0xA1 # Relache / Stockage // Spit up / Stockpile
  3149.         if user.effect_list.include?(0xA0)
  3150.           index = user.effect_list.index(0xA0)
  3151.           multiplier *= user.effect[index][2]
  3152.           damage = pre_damage * multiplier
  3153.           return [Integer(damage), false, efficiency]
  3154.         end
  3155.       when 0xA9 # Facade
  3156.         if [1,2,3].include?(user.status)
  3157.           multiplier *= 2
  3158.         end
  3159.       when 0xAB # Smelling Salt / Stimulant
  3160.         if target.status == 2
  3161.           multiplier *= 2
  3162.         end
  3163.       end
  3164.      
  3165.       # Armurbaston / Battle Armor (ab) // Coque armure / Shell Armor (ab)
  3166.       if (target.ability == 4 or target.ability == 75) and not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7))
  3167.         critical_hit = false
  3168.       end
  3169.      
  3170.       # Calcul IA
  3171.       if shortcut
  3172.         return base_damage * multiplier
  3173.       end
  3174.      
  3175.       # Damage weight
  3176.       multiplier *= (100 - rand(15)) / 100.0
  3177.       if critical_hit
  3178.         multiplier *= 2
  3179.       end
  3180.      
  3181.       # Minimum dommage
  3182.       damage = pre_damage * multiplier
  3183.       if damage < 1 and damage > 0
  3184.         damage = 1
  3185.       end
  3186.      
  3187.       if int_only
  3188.         return Integer(damage)
  3189.       else
  3190.         return [Integer(damage), critical_hit, efficiency, data]
  3191.       end
  3192.     end
  3193.    
  3194.    
  3195.     #------------------------------------------------
  3196.     #           Calcul de précision
  3197.     #------------------------------------------------    
  3198.     def accuracy_check(user_skill, user, target) #actor: user
  3199.       n = user_skill.accuracy
  3200.      
  3201.       # ------------- ------------------ --------------------
  3202.       #             Attaques self-cible, buff
  3203.       # ------------- ------------------- -------------------
  3204.       if user == target
  3205.         return n = 100
  3206.       end
  3207.      
  3208.       # ------------- ------------------ --------------------
  3209.       #                Capacités spéciales
  3210.       # ------------- ------------------- -------------------
  3211.       unless target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7) # Suc Digestif / Soucigraine
  3212.         case target.ability
  3213.         when 8 # Voile Sable / Sand Veil (ab)
  3214.           if $battle_var.sandstorm?
  3215.             n *= 0.8
  3216.           end
  3217.         end
  3218.       end
  3219.      
  3220.       unless user.effect_list.include?(0xEF) or user.effect_list.include?(0xF7) # Suc Digestif / Soucigraine
  3221.         case user.ability
  3222.         when 14 # Compoundeyes / Oeil Composé (ab)
  3223.           n *= 1.3
  3224.         when 55 # Hustle / Agitation (ab)
  3225.           if user_skill.physical
  3226.             n *= 0.8
  3227.           end
  3228.         end
  3229.       end
  3230.      
  3231.       for effect in user.effect_list
  3232.         case effect
  3233.         when 0x5E # Verrouillage / Lock-on
  3234.           return n = 100
  3235.         end
  3236.       end
  3237.      
  3238.       # ------------- ------------------ --------------------
  3239.       #             Attaques intouchables
  3240.       # ------------- ------------------- -------------------
  3241.       for effect in target.effect_list
  3242.         case effect
  3243.         when 0x9B0 # Tunnel
  3244.           if not([0x7E, 0x93, 0x26].include?(user_skill.effect) and user_skill.type == 9)
  3245.             return n = 0
  3246.           end
  3247.         when 0x9B1 # Vol / Flying
  3248.           if not([0xCF, 0x92, 0x95, 0x98].include?(user_skill.effect) or user_skill.id == 18)
  3249.             return n = 0
  3250.           end
  3251.         when 0x9B2 # Bounce / Rebond
  3252.           if not([0xCF, 0x92, 0x95, 0x98].include?(user_skill.effect) or user_skill.id == 18)
  3253.             return n = 0
  3254.           end
  3255.         when 0x9B1 # Dive / Plongée
  3256.           if not([57, 250].include?(user_skill.id))
  3257.             return n = 0
  3258.           end
  3259.         end
  3260.       end  
  3261.      
  3262.      
  3263.       case user_skill.effect
  3264.       # ------------- ------------------ --------------------
  3265.       # Attaques réussites sous certaines conditions
  3266.       # ------------- ------------------- -------------------
  3267.       when 0x26 # OHKO
  3268.         if target.ability == 5 and not (target.effect_list.include?(0xEF) or target.effect_list.include?(0xF7)) # Fermeté / Sturdy (ab)
  3269.           return n = 0
  3270.         end
  3271.         if user.level > target.level
  3272.           return n += (user.level - target.level)
  3273.         else
  3274.           return n = 0
  3275.         end
  3276.       when 0x08 # Dream eater / Devorêve
  3277.         if not(target.asleep?)
  3278.           return n = 0
  3279.         end
  3280.       when 0x1C # Whirlwind, Roar
  3281.         number = rand(256)
  3282.         if number*(user.level + target.level)/256 + 1 == target.level/4
  3283.           return n = 0
  3284.         end
  3285.       when 0x98 # Thunder
  3286.         if $battle_var.sunny? # Soleil
  3287.           return n = 50
  3288.         end
  3289.       end
  3290.      
  3291.       # ------------- ------------------ --------------------
  3292.       #             Attaques à précision nulle
  3293.       # ------------- ------------------- -------------------      
  3294.       if n == 0
  3295.         return n = 100
  3296.       end
  3297.      
  3298.       return n
  3299.     end
  3300.    
  3301.     # ----------- -------------- ------------- --------
  3302.     # Fonction détermination des coups critiques
  3303.     # ----------- -------------- ------------- --------
  3304.     def critical_decision(target, critical_special = 0)
  3305.       rate = 0
  3306.       rate += critical_special
  3307.       if target.effect_list.include?(0xF0) # Air Veinard
  3308.         return false
  3309.       end
  3310.       case rate
  3311.       when 0
  3312.         critical_chance = rand(15)
  3313.       when 1
  3314.         critical_chance = rand(7)
  3315.       when 2
  3316.         critical_chance = rand(3)
  3317.       when 3
  3318.         critical_chance = rand(2)
  3319.       end
  3320.       if rate >= 4
  3321.         critical_chance = rand(1)
  3322.       end
  3323.       if critical_chance == 0
  3324.         return true
  3325.       else
  3326.         return false
  3327.       end
  3328.     end
  3329.    
  3330.     #------------------------------------------------------------    
  3331.     # Taux de résultat aux dégâts                          
  3332.     #------------------------------------------------------------    
  3333.     def element_rate(target_type1, target_type2, skill_type, skill_effect, target_effect)
  3334.       result = 100.0
  3335.       result1 = result
  3336.       if $data_table_type[target_type1][skill_type] != nil
  3337.         result = result * $data_table_type[target_type1][skill_type]
  3338.         result1 = result
  3339.         # Gravité, Atterissage et Oeil Miracle
  3340.         if (skill_type == 9 and target_type1 == 10 and (target_effect.include?(0xD6) or target_effect.include?(0xD7))) or (skill_type == 11 and target_type1 == 16 and target_effect.include?(0xD8))
  3341.           result = 100.0
  3342.           result1 = result
  3343.         end
  3344.       else
  3345.         print("Erreur : vérifiez la table des types, case #{target_type1} #{skill_type}")
  3346.       end
  3347.       if $data_table_type[target_type2][skill_type] != nil
  3348.         result = result * $data_table_type[target_type2][skill_type]
  3349.         # Gravité, Atterissage et Oeil Miracle
  3350.         if (skill_type == 9 and target_type2 == 10 and (target_effect.include?(0xD6) or target_effect.include?(0xD7))) or (skill_type == 11 and target_type2 == 16 and target_effect.include?(0xD8))
  3351.           result = result1
  3352.         end
  3353.       else
  3354.         print("Erreur : vérifiez la table des types, case #{target_type2} #{skill_type}")
  3355.       end
  3356.       if skill_effect == 0xE3 then return 100.0 end
  3357.       return result
  3358.     end
  3359.    
  3360.     #------------------------------------------------------------    
  3361.     #    Conséquences du switch sur le Pokémon
  3362.     #------------------------------------------------------------    
  3363.     def switch_effect(actor, enemy)
  3364.       # Reset de statut : Toxic
  3365.       if actor.toxic?
  3366.         actor.reset_toxic_count
  3367.       end
  3368.       # Reset de staut : Confuse
  3369.       if actor.confused?
  3370.         actor.cure_state
  3371.       end
  3372.      
  3373.       # Reset capacité spéciale
  3374.       actor.ability_active = false
  3375.       actor.ability_token = nil
  3376.      
  3377.       unless actor.effect_list.include?(0xEF) or actor.effect_list.include?(0xF7)
  3378.         case actor.ability
  3379.         when 30 # Natural cure / Medic Nature (ab)
  3380.           actor.cure
  3381.         end
  3382.       end
  3383.      
  3384.       # Effets supprimés lors du switch
  3385.       for effect in actor.effect
  3386.         case effect[0]
  3387.         when 0x1A # Bide / Patience
  3388.           actor.effect.delete(effect)
  3389.         when 0x1B # Mania / Thrash
  3390.           actor.effect.delete(effect)
  3391.         when 0x1E # Adaptation / Conversion
  3392.           actor.effect.delete(effect)
  3393.         when 0x2A # Multi turn Attack
  3394.           actor.effect.delete(effect)
  3395.         when 0x2F # Focus Energy / Puissance
  3396.           actor.effect.delete(effect)
  3397.         when 0x39 # Morphing / Transform
  3398.           index = actor.effect_list.index(0x39)
  3399.           actor.transform_effect( actor.effect[index][2] , true )
  3400.           actor.effect.delete(effect)
  3401.         when 0x51 # Rage / Frénésie
  3402.           actor.change_atk(-effect[2])
  3403.           actor.effect.delete(effect)
  3404.         when 0x52 # Copie / Mimic
  3405.           skill_index = actor.skills_set.index(effect[2][1])
  3406.           actor.skills_set[skill_index] = effect[2][0]
  3407.           actor.effect.delete(effect)
  3408.         when 0x54 # Vampigraine
  3409.           actor.effect.delete(effect)
  3410.         when 0x56 # Entrave / Disable
  3411.           index = effect[0][2]
  3412.           actor.skills_set[index].enable
  3413.           actor.effect.delete(effect)
  3414.         when 0x5A # Encore
  3415.           actor.effect.delete(effect)
  3416.         when 0x72 # Perish Song / Requiem
  3417.           actor.effect.delete(effect)
  3418.         when 0x6C # Minimize / Lilliput
  3419.           actor.effect.delete(effect)
  3420.         when 0x6D # Curse
  3421.           actor.effect.delete(effect)
  3422.         when 0x78 # Attraction
  3423.           actor.effect.delete(effect)
  3424.         when 0x9C # Boul'Armure / Defense Curl
  3425.           actor.effect.delete(effect)
  3426.         when 0x9F # Uproar / Brouhaha
  3427.           actor.effect.delete(effect)
  3428.         when 0xA5 # Torment / Tourment
  3429.           index = actor.effect_list.index(0xA5)
  3430.           skill_index = actor.effect[index][2]
  3431.           actor.skills_set[skill_index].enable
  3432.           actor.effect.delete(effect)
  3433.         when 0xAE # Charge / Chargeur
  3434.           actor.effect.delete(effect)
  3435.         when 0xAF # Provoc / Taunt
  3436.           for skill in actor.skills_set
  3437.             if skill.power == 0 and not(skill.enabled?)
  3438.               skill.enable
  3439.             end
  3440.           end
  3441.           actor.effect.delete(effect)
  3442.         when 0xC9 # Mud Sport
  3443.           actor.effect.delete(effect)
  3444.         when 0xD2 # Water Sport
  3445.           actor.effect.delete(effect)
  3446.         when 0xD7 # Gravité
  3447.           actor.effect.delete(effect)
  3448.         when 0xD8 # Oeil Miracle
  3449.           actor.effect.delete(effect)
  3450.         when 0xE8 # Embargo
  3451.           actor.effect.delete(effect)
  3452.         when 0xEC # Anti-Soin
  3453.           actor.effect.delete(effect)
  3454.         when 0xEE # Astuce Force
  3455.           actor.effect.delete(effect)
  3456.         when 0xEF # Suc Digestif
  3457.           actor.effect.delete(effect)
  3458.         when 0xF7 # Soucigraine
  3459.           actor.effect.delete(effect)
  3460.         when 0xFB # Anneau Hydro
  3461.           actor.effect.delete(effect)
  3462.         when 0xFC # Vol Magnétik
  3463.           actor.effect.delete(effect)
  3464.         end
  3465.       end
  3466.  
  3467.       for effect in enemy.effect
  3468.         case effect[0]
  3469.         when 0x6A # Regard noir / Mean Look
  3470.           enemy.effect.delete(effect)
  3471.         when 0x71 # Clairvoyance / Foresight
  3472.           enemy.effect.delete(effect)
  3473.         when 0x78 # Attraction
  3474.           enemy.effect.delete(effect)
  3475.         when 0x54 # Vampigraine
  3476.           enemy.effect.delete(effect)
  3477.         end
  3478.       end
  3479.     end
  3480.    
  3481.   end
  3482. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement