Advertisement
DrDhoom

Fall Event

Sep 22nd, 2014
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.15 KB | None | 0 0
  1. module Dhoom
  2.   module FallEvent
  3.     Terrain_ID = 6
  4.     Fall_SE = "fall"
  5.     Fall_Duration = 60
  6.     Fall_Angle_Speed = 6
  7.     #Fall_Damage = [Min, Max]
  8.     Fall_Damage = [100,200]
  9.   end
  10. end
  11.  
  12. class Game_Temp
  13.   attr_accessor :fallback_coordinate
  14.   def set_fallback_coordinate(x,y)
  15.     @fallback_coordinate = [x,y]
  16.   end
  17. end
  18.  
  19. class Game_CharacterBase
  20.  
  21.   attr_reader :angle
  22.  
  23.   alias dhoom_fallevent_gamecharacterbase_init_public_members init_public_members
  24.   def init_public_members
  25.     dhoom_fallevent_gamecharacterbase_init_public_members
  26.     @angle = 0
  27.   end
  28.  
  29.   alias dhoom_fallevent_gamecharacterbase_init_private_members init_private_members
  30.   def init_private_members
  31.     dhoom_fallevent_gamecharacterbase_init_private_members
  32.     @falling = false
  33.   end    
  34.  
  35.   alias dhoom_fallevent_gamecharacterbase_update update
  36.   def update    
  37.     update_animation
  38.     dhoom_fallevent_gamecharacterbase_update    
  39.     return update_fall if falling?
  40.   end
  41.  
  42.   alias dhoom_fallevent_gamecharacterbase_move_straight move_straight
  43.   def move_straight(d, turn_ok = true)
  44.     @temp_x = @x
  45.     @temp_y = @y
  46.     dhoom_fallevent_gamecharacterbase_move_straight(d, turn_ok)
  47.     if @move_succeed
  48.       fall_event if $game_map.terrain_tag(x, y) == Dhoom::FallEvent::Terrain_ID
  49.     end
  50.   end
  51.  
  52.   def falling?
  53.     @falling
  54.   end
  55.  
  56.   def fall_event
  57.     return if falling?
  58.     @falling = true    
  59.     @se = RPG::SE.new(Dhoom::FallEvent::Fall_SE) if @se.nil?
  60.     @se.play
  61.   end
  62.  
  63.   def update_fall
  64.     if @opacity > 0
  65.       @opacity -= [1, 255.0/Dhoom::FallEvent::Fall_Duration].max
  66.       @angle += Dhoom::FallEvent::Fall_Angle_Speed
  67.     else
  68.       @falling = false
  69.       if $game_party.members[0].hp <= Dhoom::FallEvent::Fall_Damage[1]
  70.         moveto($game_temp.fallback_coordinate[0],$game_temp.fallback_coordinate[1])
  71.       else
  72.         moveto(@temp_x, @temp_y)
  73.       end
  74.       @angle = 0
  75.       @opacity = 255
  76.       for actor in $game_party.members
  77.         r = Dhoom::FallEvent::Fall_Damage[0]+rand(Dhoom::FallEvent::Fall_Damage[1]-Dhoom::FallEvent::Fall_Damage[0]+1)
  78.         actor.change_hp(-r, true)
  79.       end
  80.     end
  81.   end
  82. end
  83.  
  84. class Game_Player < Game_Character
  85.   alias dhoom_fallevent_gameplayer_passable? passable?
  86.   def passable?(x, y, d)
  87.     x2 = $game_map.round_x_with_direction(x, d)
  88.     y2 = $game_map.round_y_with_direction(y, d)
  89.     return false unless $game_map.valid?(x2, y2)
  90.     return true if $game_map.terrain_tag(x2, y2) == Dhoom::FallEvent::Terrain_ID
  91.     dhoom_fallevent_gameplayer_passable?(x, y, d)
  92.   end
  93.  
  94.   alias dhoom_fallevent_gameplayer_movable? movable?
  95.   def movable?    
  96.     return false if falling?
  97.     dhoom_fallevent_gameplayer_movable?
  98.   end
  99. end
  100.  
  101. class Sprite_Character < Sprite_Base
  102.  
  103.   alias dhoom_fallevent_sprchara_update_other update_other
  104.   def update_other
  105.     dhoom_fallevent_sprchara_update_other
  106.     self.angle = @character.angle
  107.     if @character.falling?
  108.       self.ox = self.width/2
  109.       self.oy = self.height/2
  110.     else
  111.       if @tile_id > 0
  112.         self.ox = 16
  113.         self.oy = 32
  114.       else
  115.         self.ox = @cw / 2
  116.         self.oy = @ch
  117.       end
  118.     end
  119.   end
  120. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement