Chaos Project

RPG Maker => RPG Maker Scripts => Script Requests => Topic started by: Ryex on January 27, 2008, 08:56:17 am

Title: Mirror Script?
Post by: Ryex on January 27, 2008, 08:56:17 am
IS it possible to make a script the duplacates a mirror? like you stand in frount of it and your reflection appears?
Title: Re: Mirror Script?
Post by: Calintz on January 27, 2008, 01:10:02 pm
I think that would be cool, but I think it's do-able...I'm not advanced enuff to try this, but I've seen this done in rivers and lakes in other ppls games, so I'd say it's possible...
Title: Re: Mirror Script?
Post by: Blizzard on January 27, 2008, 01:23:29 pm
I should actually be fairly simple. But the lag factor could be pretty high if not made well. It's a bit tricky to set up the viewpoint when I now think of it.
Title: Re: Mirror Script?
Post by: Punn on January 27, 2008, 02:43:39 pm
Look for Retaime's script, in his script bed, theres some. Unless you want me to post it..I do it later
Title: Re: Mirror Script?
Post by: Blizzard on January 27, 2008, 02:45:03 pm
Didn't he only have a water reflection script? O_o
Title: Re: Mirror Script?
Post by: Punn on January 27, 2008, 03:00:19 pm
Look alive.
Title: Re: Mirror Script?
Post by: Nortos on January 27, 2008, 05:44:42 pm
Water reflection script would be just alike mirrors practically but ripply
Title: Re: Mirror Script?
Post by: Calintz on January 27, 2008, 06:38:38 pm
Haha, that would be funny...
- But useful if you had a Nemesis like looking into his cauldron and seeing the hero or something...
Title: Re: Mirror Script?
Post by: Punn on January 27, 2008, 06:47:35 pm
On a event, put in comments

Like this

Comment: m
Comment: 120

Spoiler: ShowHide

#==============================================================================
# ? Sprite_Mirror
# Based on Sprite_Shadow, modified by Rataime
#==============================================================================

class Sprite_Mirror < RPG::Sprite

attr_accessor :character
attr_accessor :events
attr_accessor :event_y

def initialize(viewport=nil)
   super(viewport)
   @character = $game_player
   @events=0
   @event_y=0
   self.opacity=0
   update
end

def update
   super
   if @tile_id != @character.tile_id or
      @character_name != @character.character_name or
      @character_hue != @character.character_hue
     @tile_id = @character.tile_id
     @character_name = @character.character_name
     @character_hue = @character.character_hue
     if @tile_id >= 384
       self.bitmap = RPG::Cache.tile($game_map.tileset_name,
         @tile_id, @character.character_hue)
       self.src_rect.set(0, 0, 32, 32)
       self.ox = 16
       self.oy = 32
     else
       self.bitmap = RPG::Cache.character(@character.character_name,
         @character.character_hue)
       @cw = bitmap.width / 4
       @ch = bitmap.height / 4
       self.ox = @cw / 2
       self.oy = @ch
     end
   end
   self.visible = (not @character.transparent)
   if @tile_id == 0
     sx = (@character.pattern) * @cw
     sy = (@character.direction - 2) / 2 * @ch
     if @character.direction==8
       sy = 0 * @ch
     end
     if @character.direction==2
       sy = 3 * @ch
     end
     self.src_rect.set(sx, sy, @cw, @ch)
   end
   self.x = @character.screen_x
   self.y = self.event_y-($game_player.screen_y-self.event_y).abs+30
   self.z = 10
   self.blend_type = @character.blend_type
   self.bush_depth = @character.bush_depth
   if @character.animation_id != 0
     animation = $data_animations[@character.animation_id]
     animation(animation, true)
     @character.animation_id = 0
   end
end
end

#===================================================
# ? CLASS Sprite_Character edit
#===================================================

class Sprite_Character < RPG::Sprite
  alias mirror_initialize initialize
 
  def initialize(viewport, character = nil)
    @character = character
    super(viewport)
    if character.is_a?(Game_Player)
     $game_map.mirror=Sprite_Mirror.new(viewport)
    end
    mirror_initialize(viewport, @character)
  end
 
  alias mirror_update update
 
  def update
   mirror_update
   if (@mirror!=nil and character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["m"])
     if $game_player.screen_y-self.y<80 and self.y<$game_player.screen_y and ($game_player.screen_x-self.x).abs<17
       if (character.list[1]!=nil and character.list[1].code == 108)
         @mirror.opacity=character.list[1].parameters[0].to_f
       else
         @mirror.opacity=$game_player.opacity
       end
       @mirror.events=self.id
       @mirror.event_y=self.y
     else
       if @mirror.events==self.id
         @mirror.events=0
       else
         if @mirror.events==0
           @mirror.opacity=0
         end
       end
     end
   end
   @mirror=$game_map.mirror
   if character.is_a?(Game_Player)
     @mirror.update
   end
  end
 
end

#===================================================
# ? CLASS Scene_Save edit
#===================================================
class Scene_Save < Scene_File
 
  alias mirror_write_save_data write_save_data
 
  def write_save_data(file)
    $game_map.mirror = nil
    mirror_write_save_data(file)
  end
end

#===================================================
# ? CLASS Game_Map edit
#===================================================
class Game_Map
  attr_accessor :mirror
end

#===================================================
# ? CLASS Scene_Map edit
#===================================================
class Spriteset_Map
 
  alias mirror_map_initialize initialize
 
  def initialize
    $game_map.mirror=nil
    mirror_map_initialize
  end
end
Title: Re: Mirror Script?
Post by: alexthemusicdude on June 23, 2008, 10:31:26 pm
Quote from: mumerus on January 27, 2008, 06:47:35 pm
On a event, put in comments

Like this

Comment: m
Comment: 120

Spoiler: ShowHide

#==============================================================================
# ? Sprite_Mirror
# Based on Sprite_Shadow, modified by Rataime
#==============================================================================

class Sprite_Mirror < RPG::Sprite

attr_accessor :character
attr_accessor :events
attr_accessor :event_y

def initialize(viewport=nil)
   super(viewport)
   @character = $game_player
   @events=0
   @event_y=0
   self.opacity=0
   update
end

def update
   super
   if @tile_id != @character.tile_id or
      @character_name != @character.character_name or
      @character_hue != @character.character_hue
     @tile_id = @character.tile_id
     @character_name = @character.character_name
     @character_hue = @character.character_hue
     if @tile_id >= 384
       self.bitmap = RPG::Cache.tile($game_map.tileset_name,
         @tile_id, @character.character_hue)
       self.src_rect.set(0, 0, 32, 32)
       self.ox = 16
       self.oy = 32
     else
       self.bitmap = RPG::Cache.character(@character.character_name,
         @character.character_hue)
       @cw = bitmap.width / 4
       @ch = bitmap.height / 4
       self.ox = @cw / 2
       self.oy = @ch
     end
   end
   self.visible = (not @character.transparent)
   if @tile_id == 0
     sx = (@character.pattern) * @cw
     sy = (@character.direction - 2) / 2 * @ch
     if @character.direction==8
       sy = 0 * @ch
     end
     if @character.direction==2
       sy = 3 * @ch
     end
     self.src_rect.set(sx, sy, @cw, @ch)
   end
   self.x = @character.screen_x
   self.y = self.event_y-($game_player.screen_y-self.event_y).abs+30
   self.z = 10
   self.blend_type = @character.blend_type
   self.bush_depth = @character.bush_depth
   if @character.animation_id != 0
     animation = $data_animations[@character.animation_id]
     animation(animation, true)
     @character.animation_id = 0
   end
end
end

#===================================================
# ? CLASS Sprite_Character edit
#===================================================

class Sprite_Character < RPG::Sprite
  alias mirror_initialize initialize
 
  def initialize(viewport, character = nil)
    @character = character
    super(viewport)
    if character.is_a?(Game_Player)
     $game_map.mirror=Sprite_Mirror.new(viewport)
    end
    mirror_initialize(viewport, @character)
  end
 
  alias mirror_update update
 
  def update
   mirror_update
   if (@mirror!=nil and character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["m"])
     if $game_player.screen_y-self.y<80 and self.y<$game_player.screen_y and ($game_player.screen_x-self.x).abs<17
       if (character.list[1]!=nil and character.list[1].code == 108)
         @mirror.opacity=character.list[1].parameters[0].to_f
       else
         @mirror.opacity=$game_player.opacity
       end
       @mirror.events=self.id
       @mirror.event_y=self.y
     else
       if @mirror.events==self.id
         @mirror.events=0
       else
         if @mirror.events==0
           @mirror.opacity=0
         end
       end
     end
   end
   @mirror=$game_map.mirror
   if character.is_a?(Game_Player)
     @mirror.update
   end
  end
 
end

#===================================================
# ? CLASS Scene_Save edit
#===================================================
class Scene_Save < Scene_File
 
  alias mirror_write_save_data write_save_data
 
  def write_save_data(file)
    $game_map.mirror = nil
    mirror_write_save_data(file)
  end
end

#===================================================
# ? CLASS Game_Map edit
#===================================================
class Game_Map
  attr_accessor :mirror
end

#===================================================
# ? CLASS Scene_Map edit
#===================================================
class Spriteset_Map
 
  alias mirror_map_initialize initialize
 
  def initialize
    $game_map.mirror=nil
    mirror_map_initialize
  end
end



Is there a way to:

1. add a reflection when you approach the event from the top? right now it only works if you're below it and walk "up" towards it.

2. add in additional characters in a catepillar script? right now I'm only seeing a reflection of the main character, even if i have 3 reflections side to side and walk from one end to the other

thx
Title: Re: Mirror Script?
Post by: alexthemusicdude on July 06, 2008, 03:38:15 pm
bump