Files
infinitefusion-e18/Data/Scripts/005_Sprites/016_Sprite_Player.rb
T
2026-07-10 15:42:06 -04:00

181 lines
5.5 KiB
Ruby

class Sprite_Player < Sprite_Character
ACRO_BIKE_RAMP_POSITION_OFFSET = 16
ACRO_BIKE_TRICK_POSITION_OFFSET = 4
def initialize(viewport, character = nil)
super
@viewport = viewport
@outfit_bitmap = nil
# @hat_bitmap = nil
# @hat2_bitmap = nil
hatFilename = ""
hairFilename = ""
@hat = Sprite_Hat.new(self, hatFilename, @character_name, @viewport, 3)
@hat2 = Sprite_Hat.new(self, hatFilename, @character_name, @viewport, 2)
@hair = Sprite_Hair.new(self, hairFilename, @character_name, @viewport)
@bicycle = Sprite_Bicycle.new(self,"", @character_name, @viewport)
@previous_skinTone = 0
@current_bitmap = nil
@previous_action = nil
echoln "init playa"
getClothedPlayerSprite(true)
end
def updateCharacterBitmap
skinTone = $Trainer.skin_tone ? $Trainer.skin_tone : 0
baseBitmapFilename = getBaseOverworldSpriteFilename(@character_name, skinTone)
if !pbResolveBitmap(baseBitmapFilename)
baseBitmapFilename = Settings::PLAYER_GRAPHICS_FOLDER + @character_name
end
AnimatedBitmap.new(baseBitmapFilename, @character_hue)
end
def applyDayNightTone
super
pbDayNightTint(@hat.sprite) if @hat && @hat.sprite.bitmap
pbDayNightTint(@hat2.sprite) if @hat2 && @hat2.sprite.bitmap
pbDayNightTint(@hair.sprite) if @hair && @hair.sprite.bitmap
pbDayNightTint(@bicycle.sprite) if @bicycle && @bicycle.sprite.bitmap
end
def opacity=(value)
super
@hat.sprite.opacity = value if @hat && @hat.sprite.bitmap
@hat2.sprite.opacity = value if @hat2 && @hat2.sprite.bitmap
@hair.sprite.opacity = value if @hair && @hair.sprite.bitmap
@bicycle.sprite.opacity = value if @bicycle && @bicycle.sprite.bitmap
end
def biking?
@character_name.to_s.include?("bike")
end
def getClothedPlayerSprite(forceUpdate = false)
if @previous_action != @character_name || forceUpdate
@current_bitmap = generateClothedBitmap
end
@previous_action = @character_name
return @current_bitmap
end
def generateClothedBitmap()
@charbitmap.bitmap.clone # nekkid sprite
baseBitmap = @charbitmap.bitmap.clone # nekkid sprite
if $game_player.hasGraphicsOverride? && @character_name != "fish"
@hair.update(@character_name, "", 0) if @hair
@hat.update(@character_name, "", 0) if @hat
@hat2.update(@character_name, "", 0) if @hat2
@bicycle.update(@character_name, "", 0) if @bicycle
return baseBitmap
end
outfitFilename = getOverworldOutfitFilename($Trainer.clothes, @character_name) #
outfitFilename = getOverworldOutfitFilename(Settings::PLAYER_TEMP_OUTFIT_FALLBACK) if !pbResolveBitmap(outfitFilename)
hairFilename = getOverworldHairFilename($Trainer.hair)
hatFilename = getOverworldHatFilename($Trainer.hat)
hat2Filename = getOverworldHatFilename($Trainer.hat2)
bicycleFilename = get_bicycle_filename
hair_color_shift = $Trainer.hair_color
hat_color_shift = $Trainer.hat_color
hat2_color_shift = $Trainer.hat2_color
clothes_color_shift = $Trainer.clothes_color
hair_color_shift = 0 if !hair_color_shift
hat_color_shift = 0 if !hat_color_shift
hat2_color_shift = 0 if !hat2_color_shift
clothes_color_shift = 0 if !clothes_color_shift
bicycle_color_shift = $Trainer.bike_color || 0
@hair.update(@character_name, hairFilename, hair_color_shift) if @hair
@hat.update(@character_name, hatFilename, hat_color_shift) if @hat
@hat2.update(@character_name, hat2Filename, hat2_color_shift) if @hat2
@bicycle.update(@character_name, bicycleFilename, bicycle_color_shift) if @bicycle
if !pbResolveBitmap(outfitFilename)
raise "No temp clothes graphics available"
end
outfitBitmap = AnimatedBitmap.new(outfitFilename, clothes_color_shift) if pbResolveBitmap(outfitFilename)
baseBitmap.blt(0, 0, outfitBitmap.bitmap, outfitBitmap.bitmap.rect) if outfitBitmap
@previous_action = @character_name
return baseBitmap
end
def get_bicycle_filename
if biking?
bicycleFilename = getOverworldBicycleFilename
else
bicycleFilename = ""
end
return bicycleFilename
end
# When the player needs to be positioned differently relative to its normal position
def apply_global_player_offsets
if $PokemonGlobal.bicycle
if $PokemonGlobal.acroBike
self.y -= ACRO_BIKE_RAMP_POSITION_OFFSET
end
if $PokemonGlobal.bike_trick
self.y -= ACRO_BIKE_TRICK_POSITION_OFFSET
end
end
end
def update
super
apply_global_player_offsets
@hair.animate(@character_name) if @hair
@hat.animate(@character_name) if @hat
@hat2.animate(@character_name) if @hat2
@bicycle.animate(@character_name) if @bicycle
if $game_map.scrolling?
@hat.adjustPositionForScreenScrolling if @hat
@hat2.adjustPositionForScreenScrolling if @hat2
@hair.adjustPositionForScreenScrolling if @hair
@bicycle.adjustPositionForScreenScrolling if @bicycle
end
if Settings::GAME_ID == :IF_HOENN && $PokemonGlobal.diving
self.z = -4
@hat.adjust_layer if @hat
@hat2.adjust_layer if @hat2
@hair.adjust_layer if @hair
@bicycle.adjust_layer if @bicycle
end
end
def dispose
super
@hat.dispose if @hat
@hat2.dispose if @hat2
@hair.dispose if @hair
@bicycle.dispose if @bicycle
end
def pbLoadOutfitBitmap(outfitFileName)
begin
outfitBitmap = RPG::Cache.load_bitmap("", outfitFileName)
return outfitBitmap
rescue
return nil
end
end
end