BLOOD_CHARACTER_SPRITES = [
"Blood/Blood1",
"Blood/Blood2",
"Blood/Blood3",
"Blood/Blood4"
]
#-----------------------------------------------------------------------------#
# Maintains a list of blood objects and controls updating and disposal #
#-----------------------------------------------------------------------------#
class Blood_System
def initialize
@bloods = []
end
def update
for blood in @bloods
blood.update
end
end
def dispose_blood_sprites
for blood in @bloods
blood.dispose_sprite
end
end
def clear_blood_sprites
dispose_blood_sprites
@bloods = []
end
def add_blood(x, y)
@bloods.push(Requiem_Blood.new(x, y))
end
end
#-----------------------------------------------------------------------------#
# Holds xy coordinates, a bitmap, and manages a sprite #
#-----------------------------------------------------------------------------#
class Requiem_Blood
def initialize(x, y)
@x = x
@y = y
@bmp = BLOOD_CHARACTER_SPRITES[rand(4)]
end
def update
create_sprite if @sprite.nil? or @sprite.disposed?
@sprite.update
end
def create_sprite
@sprite = Sprite_Blood.new($scene.get_viewport, @x, @y, @bmp)
end
def dispose_sprite
@sprite.bitmap.dispose
@sprite.dispose
end
end
#-----------------------------------------------------------------------------#
# Blood sprite objects, drawn at x,y coordinates in the game world #
#-----------------------------------------------------------------------------#
class Sprite_Blood < Sprite
# extend existing method
alias requiem_blood_sprite_initialize initialize
def initialize(viewport, x, y, bmp)
requiem_blood_sprite_initialize(viewport)
@char_x = x * 32
@char_y = y * 32
self.bitmap = Cache.system(bmp)
self.x = x
self.y = y
end
# extend existing method
alias requiem_blood_sprite_update update
def update
requiem_blood_sprite_update
self.x = @char_x - 8
self.y = @char_y - 8
self.x -= ($game_map.display_x / 8)
self.y -= ($game_map.display_y / 8)
end
end
#-----------------------------------------------------------------------------#
# Update the blood system object every frame #
#-----------------------------------------------------------------------------#
class Game_Map
alias requiem_blood_game_map_update update
def update
requiem_blood_game_map_update
$blood_system.update
end
end
#-----------------------------------------------------------------------------#
# Get the viewport that draws sprites "Below Character" #
#-----------------------------------------------------------------------------#
class Scene_Map < Scene_Base
# new method
def get_viewport
return @spriteset.get_viewport
end
end
class Spriteset_Map
# new method
def get_viewport
return @viewport1
end
end
#-----------------------------------------------------------------------------#
# Dispose blood sprites on menu call #
#-----------------------------------------------------------------------------#
class Scene_Map < Scene_Base
# extend existing method
alias requiem_blood_scene_map_call_menu call_menu
def call_menu
$blood_system.dispose_blood_sprites
requiem_blood_scene_map_call_menu
end
end
#-----------------------------------------------------------------------------#
# Fully dispose and clear blood objects on transfer #
#-----------------------------------------------------------------------------#
class Game_Player < Game_Character
# extend existing method
alias requiem_blood_game_player_perform_transfer perform_transfer
def perform_transfer
$blood_system.clear_blood_sprites
requiem_blood_game_player_perform_transfer
end
end
#-----------------------------------------------------------------------------#
# Create a global $blood_system object on startup #
#-----------------------------------------------------------------------------#
class Scene_Title < Scene_Base
alias requiem_blood_scene_title_cgo create_game_objects
def create_game_objects
requiem_blood_scene_title_cgo
$blood_system = Blood_System.new
end
end