{ABANDONED} [VXA] Witchtooth 2

0 Members and 1 Guest are viewing this topic.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
"And God Never Shed A Tear"


Story
Six years have passed since Lin disappeared. Rolan's grandmother came down with a serious illness that causes her passing. Left with a single promise to her, Rolan travels to Cairesville with his sister to get the education that his grandmother always wanted Sophie to have. Cairesville sits on the far off continent of Elevan where the two stay with good friends of their family. Now Rolan and his sister, Sophie have to adapt to their new home. But their past cannot be erased. Things left behind will follow them and build a new journey


Characters
Rolan Accades
Rolan was born in Havel, originally working as a shopkeeper's assistant. He left much behind after moving to Cairesville, but his excellent fighting skills never faded. He is introduced to the Treasure Hunting business and quickly acquires a liking for it. The memories of a time before drive him to be the best hunter he could be.
Sophie Accades
Sophie was born in Havel alongside her brother, Rolan. She looks up to him but is hit hard by the realization of how much she has lost by moving to Cairesville. For a while she enjoyed being a student, but the routine lifestyle quickly becomes unappealing. With a Slingshot at hand she finds something new to enjoy. An adventurer in her mind, a rebel in everyone else's.


Screenshots





---------------------------


The game has not been in production for very long. I spent a good while writing before actually putting anything into the game engine. These screenshots are very early work and the locations they take place in are definitely bound to be altered in some way. I'll be trying to update as frequently as possible. I know that many people have not played the first game. I feel like the first was more of a test of my skills as a game developer and lacks in many areas. Hopefully the sequel will fix the problems the first had. If you want to play the game, please do, if not I recommend watching D&P3's playthrough (http://lnk.nu/youtube.com/23eb) or just asking me questions because there will be call backs to the original in this game.

Again, I will try to update this page as frequent as possible. The story above is left in a fairly cut and dry state because I plan on releasing a one hour (approx.) demo in about a week or two. Now you all have a nice day.

Credit goes to Bunny for the awesome logo!

« Last Edit: April 04, 2013, 11:09:10 PM by hiromu656 »

****
Rep:
Level 71
The Doctors in!
This looks very nice, I loved the first one and I'm sure you'll do a good job on this one as well. Are you going with a front view battle system and the default encounter system again?

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
I'm sticking with the front view battle system, as for the random encounters, either it'll be heavily tweeked or I'll be putting the enemies on screen (which is what I really want to do).

****
Rep:
Level 71
The Doctors in!
Alright, are you using Yanfly's battle system? It makes the front view battle system much more enjoyable.

*
*crack*
Rep:
Level 63
2012 Best Newbie2012 Most Unsung MemberFor frequently finding and reporting spam and spam bots
Looking forward to this :)

I'm sticking with the front view battle system, as for the random encounters, either it'll be heavily tweeked or I'll be putting the enemies on screen (which is what I really want to do).
If you're going to do the latter, make sure that the monsters respawn after some time has past and that the player can actually escape from battle.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
And yes, I'm using Yanfly's Battle System, it's great.

[Update]
It's a small update though:
- I've been playing the first Witchtooth, mostly at the higher levels or again, mainly trying to find things worth fixing, ways to balance combat and all that jazz. So, I plan on having less spells this time around, but much higher scaling based on attack and magic damage. For instance, in the first game Rolan had a skill called Heavy Slash that seriously fell off in damage later in the game. A good way to fix that problem is to have Heavy Slash deal pretty low Base Damage, but then increase the effect that his Attack Damage has on the bonus damage. The same goes for Lin, whose Dim spell was nearly useless because the spirit didn't scale well.

So, combat at the moment is my biggest priority. I'm making spells cost less mana, not so that they can be spammed but so combat is less based on Rolan dealing heavy damage with his basic attacks. Monsters will be heavily damaged if you cast or attack with a weapon or spell that uses the element the enemy is least resistant to. You'll be cued as to what that element is if you deal damage with it, afterwards you can remember how to take down specific enemies quickly. No one likes having to heal after every encounter, this way you'll know how to breeze through them at the cost of a couple Volute Potions.
But of course, I'll try to keep the bosses difficult. But by difficult, I don't mean insane HP which is what the problem was in the first game. I'll make sure they have varied skills and most likely deal more damage but have less health. So, if you understand the strategy to kill the boss you will kill it, it would probably piss me off if a boss is incredibly easy for me but the only thing that causes my defeat is how long the fight lasts.

I'll be making Video Gameplay really soon.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
Well, I guess there's a slight change in plans on that Video. I was going to make it tomorrow, but I'm going on a sort of vacation tomorrow morning.

In the location I'll be there isn't any Internet. So, that kicks aside my plan of making a video soon. I don't have the game in the best state to record anything yet, so I'll have to push aside the video (uploading that is, I will finish it during the trip). I'll make the video, but it will be uploaded on the day I get back, which will be 2-3 weeks.

The good news about having no Internet for a couple weeks though is that I won't be distracted by the wonders of the Interwebz when I know I should be working on the game. So over 10 straight days of work will come out of this trip, which pretty much guarantees that the first demo will be out the day after I get home, aka the day after my gameplay footage is uploaded. So, first its gameplay, then the next day I'll get my music, and I'll upload the demo.  ;8

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
<a href="http://www.youtube.com/watch?v=6PDgGu2z-yk" target="_blank">http://www.youtube.com/watch?v=6PDgGu2z-yk</a>

Demo Release Tomorrow

****
Rep:
Level 71
The Doctors in!
Cool I'll download the demo when it's out.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
The Demo is Here

The Demo is Non-RTP, unfortunately, if you add RTP on Ace it adds around 200mb to the file, so the Ace RTP is needed to play the Demo.
It spans around an hour and takes place at the very beginning of the game.
Some things are still under construction, such as the dialogue, music and mapping.
Please leave feedback if you try it out

Download this as well and Add the Folder to the game's Folder
http://www.mediafire.com/?f14t5xf2e5lq3at
« Last Edit: August 07, 2012, 11:10:59 PM by hiromu656 »

****
Rep:
Level 71
The Doctors in!
Unfortunately I can't even go outside your parent's friends house, the game says that the light file is missing (le). But so far everything is nice, I'm enjoying Rolan's humor so far.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
The missing le. file is because there is a script that has me make a new folder for the game, so it must not have been extracted into the game file. I'm going to link the folder. Just add the two folders it includes into the game's Graphics folder. This should fix the problem and a foreseeable problem i know will come up.

I'm glad you're enjoying it.
« Last Edit: August 07, 2012, 10:32:14 PM by hiromu656 »

****
Rep:
Level 71
The Doctors in!
Do you mean the main folder? Because the graphics folder is encrypted.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
Ugh, you're right... how did you work around the le problem?

****
Rep:
Level 71
The Doctors in!
I didn't, the game crashed and I watched Mayday.

EDIT:
Or did you mean how did I work around it when I used the script? If so I haven't used it.
« Last Edit: August 07, 2012, 11:09:30 PM by DoctorTodd »

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
Alright either download this: http://www.mediafire.com/?f14t5xf2e5lq3at

Or you can create a folder called Graphics and paste those folders inside. I should have play tested the Compressed Version, I don't know why I forgot to. Sorry about that.

****
Rep:
Level 71
The Doctors in!
I'll play some more tomorrow, but so far it's pretty good. I love the cake joke. Are you switching out the menu? Because I really don't like the default menu, I may be able to script you a menu if I have time.
« Last Edit: August 08, 2012, 01:01:42 AM by DoctorTodd »

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
I really want to switch the menu, right now I'm leaving things basic, as with the title screen. Later on most menu type things will be altered in some way.

***
Rep:
Level 56
Miiiiaf =^+^=
GIAW 14: ParticipantParticipant - GIAW 11
Nice maps!! Like the story and it's hint of mystery but it's still clear to people who haven't played the first one. Though, maybe you can add a link to the first one as well?

Why is there a demo download and a file download?
Anyway, I'll be trying this out.


As blonde as can be!!!
Doesn't mean I'm the dumb one...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Spoiler for supporting!:


****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
Thanks.

There's a file download because it is necessary for the game to Run. When I release Demo 2, I'll be putting everything into a Rar file, the game extractor, the folders and a notepad instruction. I wish it could be as simple as double clicking the blue crystal, but the scripts I'm using can only be used if you create a specific folder, a folder that is not extracted into the game extractor. Currently this is the only way I can work around it.

And I tried to make sure players new to the game can still understand it without playing the first. I'm glad it actually worked.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
[Update]
With school starting up soon for me, I'm having less and less time to work on the game. I'm working mainly on the database, the mapping is coming afterwards. I've already drawn out the map on paper along with many of the enemies and items, so my work intervals run smoothly but don't last very long. The second demo is weeks away, but for now I have just a couple new screenshots.

Spoiler for:




****
Raped by DrSword
Rep:
Level 82
Dance with the enemy
Contestant - GIAW 10Contestant - GIAW 9
SO EXCITED!!!!
I've been off this site for a while so I'm catching up. This game is looking great so far, it could also somehow top the original.
Also, I think Witchtooth could be the next Vacant Sky :3


*
*crack*
Rep:
Level 63
2012 Best Newbie2012 Most Unsung MemberFor frequently finding and reporting spam and spam bots
I wish it could be as simple as double clicking the blue crystal, but the scripts I'm using can only be used if you create a specific folder, a folder that is not extracted into the game extractor. Currently this is the only way I can work around it.
Which scripts are causing this?
Either DoctorTodd or I could probably modify them not to be a hassle.

Also I've been putting this off for awhile D:
Needz to play Demo :D

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
FenixFyreX's Light Effects
and
Victor Engine - Fog Effect

Those require additional folders to be made for the scripts to work.

****
Rep:
Level 71
The Doctors in!
Here's the light effects script, it now uses the pictures folder. I'll go do the fog one, let me know if you have any issues.
Code: [Select]
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #
# FenixFyreX's Light Effects (FFXLFX)
# Version 1.1
# http://www.rpgmakervx.net
# http://www.rpgmakervxace.net
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #
#
# To use this script, either make a preset then setup an event's comment like so:
#
#  <prelfx string> OR <prelfx=string> OR <prelfx = string>    # You get the idea.
#
# Where string is the name of the preset below,
# or setup an event's comment like so:
#
#  <lfx fn "image";>
#
# Where opts is any option defined below that you can put in a preset.
#
# fn = string   # The filename of the image to use. Always pulls from Graphics/LFX.
# fa = number   # Fadein? Default is 0(false).
# zx = number   # The zoom x of the effect.
# zy = number   # The zoom y of the effect.
# bl = number   # Either 0(normal), 1(add), or 2(subtract).
# op = number   # Anything from 0 to 255. Sets maximum opacity for effect.
# z  = number   # 0 is in front, the default. 1 is behind.
# s  = number   # Adheres to the light switch? 0 is false, 1 is true. Default is 1.
# fl = number   # [n,n]. First n determines randomness of visibility. Second n
#                        determines the range of opacity change.
# cl = array    # [n,n,n] or [n,n,n,n]. [red,green,blue,transparency].
# os = array    # [x,y]. will offset the graphic by x,y.
#  w = array    # [n,n,n] or [n,n,n,n]. [strength,length,speed,phase].
#
# You must include filename if you make a direct light effect in a comment.
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #
# Event Script Command Calls
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #
# These are commands you can call via Advanced/Script.
#
#   remove_lfx(key)
#     This will remove any light effects by the key. key has to be 1 or greater.
#
#   player_lfx(preset_name,fade = false)
#     This will add a light effect to the player. Must be a preset defined below.
#     If you leave fade out, the effect will not fade in. If you set it to true,
#     it will. es.g:
#         player_lfx("Ground")        # Will not fadein
#         player_lfx("Ground",true)   # Will fadein
#
#   stop_player_lfx(fade = false)
#     This will remove the player's light effect. If you leave out fade, the effect
#     will just go away. If fade is true, the effect will fadeout. es.g:
#         stop_player_lfx             # Will not fadeout
#         stop_player_lfx(true)       # Will fadeout
#   
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #
module FFXLFX
  # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #
  #
  # Set up preset light fx here. the preset can be named anything as long as it
  # is a string(e.g. within " ")
  # Options for the preset are as follows; if a * is next to it, its mandatory:
  #
  #   :filename *  The name of the file in Graphics/Lights/
  #   :fadein      Should the effect fadein? 0 is false(default), 1 is true.
  #   :flicker     Should the light flicker? Must be an array of two numbers.
  #   :zx          Zoom X of the effect, 1 is default
  #   :zy          Zoom Y of the effect, 1 is default
  #   :z           Z coordinate of the effect. 0 is in front, 1 is behind.
  #   :blend       0 is normal, 1 is add, 2 is subtract
  #   :switch      Adheres to the light switch? true or false. Default is true.
  #   :color       An array of 3-4 numbers, like so: [155,100,0] # Yellow
  #                To make a random color, put -1 in the color index spot, so
  #                a fully random color would be [-1,-1,-1]
  #   :offset      An array of two numbers. [-1,1] will offset the image left
  #                and down one pixel.
  #   :opacity     Anything from 0 to 255. Sets maximum opacity for the effect.
  #   :wave        An array of 3-4 numbers, [amp, length, speed, phase]
  #
  # :wave makes the image wiggle. Use the help file for further information on
  # wave effects. Look up Sprite in the help file.
 
 
  Presets = { # do NOT delete this.
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    # Preset 1: Ground
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    "Ground" => {
      :filename => "ground",
      :flicker => [200,100],
      :zx => 4,
      :zy => 4,
      :blend => 1,
      :color => [155,100,0],
    },
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    # Preset 2: Lantern
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    "Lantern" => {
      :filename => "lantern",
      :flicker => [500,100],
      :zx => 1,
      :zy => 1,
      :blend => 1,
      :color => [190,100,0],
      :offset => [0,0],
    },
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    # Preset 3: Lightbug
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    "Lightbug" => {
      :filename => "ground",
      :flicker => [500,200],
      :zx => 1,
      :zy => 1,
      :z  => 0,
      :blend => 1,
      :color => [-1,-1,-1],
      :offset => [0,-6],
      :switch => false,
    },
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    # Preset 4: Headstone
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    "Ghost" => {
      :filename => "ghost",
      :flicker => [0,0],
      :zx => 2,
      :zy => 2,
      :blend => 1,
      :color => [-1,-1,-1],
      :offset => [0,-16],
      :opacity => -170,
      :wave => [2,5,1],
      :fadein => true,
    },
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    # Preset 5: Fireplace
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    "Fireplace" => {
      :filename => "fireplace",
      :flicker => [500,200],
      :color => [220,10,0],
      :blend => 1,
    },
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    # Preset 6: Drunk
    # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=--=- #
    "Drunk" => {
      :filename => "ground",
      :switch => false,
      :zx => 3,
      :zy => 4,
      :color => [220,10,0],
      :blend => 1,
    },
  # -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=--=- #
  } # DO NOT DELETE THIS
 
 
 
  # The switch that turns the whole system on or off. If on, the system will be off.
  On_Off_Switch = 1
 
  # Is the system on at startup? If true, it does. False, it doesn't.
  Sys_Starts_On = true
 
  # This number determines the speed at which light effects fade on and off.
  # Higher numbers result in faster fading.
  Fade_Time = 3
end

# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #
# DO NOT EDIT FURTHER UNLESS YOU KNOW WHAT YOU ARE DOING.
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #

class Game_Switches
  alias initialize_ffxlfx_switch_value initialize
  def initialize(*a,&b)
    initialize_ffxlfx_switch_value(*a,&b)
    @data[FFXLFX::On_Off_Switch] = FFXLFX::Sys_Starts_On
  end
end
module FFXLFX
  def self.scene
    return defined?($scene) ? $scene : SceneManager.scene
  end
end

class Sprite
 
  def start_wave(amp,speed,length,phase=nil)
    self.wave_amp = amp
    self.wave_speed = speed
    self.wave_length = length
    self.wave_phase = phase.to_i unless phase.nil?
  end
end

class Spriteset_Map
 
  alias initialize_ffxlfx_old initialize unless $@
  alias update_ffxlfx_old update unless $@
  alias dispose_ffxlfx_old dispose unless $@
 
  def initialize(*a, &b)
    @ffxlfx_sprites = {}
    initialize_ffxlfx_old(*a, &b)
    initialize_ffxlfx
    update_ffxlfx
  end
 
  def update(*a, &b)
    update_ffxlfx_old(*a, &b)
    update_ffxlfx
  end
 
  def dispose(*a, &b)
    dispose_ffxlfx
    dispose_ffxlfx_old(*a, &b)
  end
 
  def initialize_ffxlfx
    $game_map.events.each_pair do |id,event|
      s = nil
      cache = event.light_cache
      if cache
        s = Sprite_FFXLight.new(@viewport1,id)
        s.setup(cache)
      end
      @ffxlfx_sprites[id] = s
    end     
    @ffxlfx_sprites[:player] = nil
    player_lfx
  end
 
  def refresh_ffxlfx
    @ffxlfx_sprites.each_key do |key|
      next unless key.is_a?(Integer)
      if (@ffxlfx_sprites[key].nil? || @ffxlfx_sprites[key].disposed?)
        cache = $game_map.events[key].nil? ? nil : $game_map.events[key].light_cache
        next if (cache.nil? || cache.empty?)
        @ffxlfx_sprites[key] = Sprite_FFXLight.new(@viewport1,key)
        @ffxlfx_sprites[key].setup(cache)
      else
        cache = $game_map.events[key].nil? ? nil : $game_map.events[key].light_cache
        if cache.nil?
          remove_lfx(key)
        elsif cache == @ffxlfx_sprites[key].cache
          next
        else
          @ffxlfx_sprites[key].setup(cache)
        end
      end
    end
  end
 
  def update_ffxlfx
    rs = []
    @ffxlfx_sprites.each_pair do |key,s|
      next if s.nil?
      next if s.disposed?
      s.update
      if s.to_nil?
        rs << key
      end
    end
    rs.each do |r|
      @ffxlfx_sprites[r].dispose
      @ffxlfx_sprites[r] = nil
    end
  end
 
  def dispose_ffxlfx
    @ffxlfx_sprites.each_pair do |key,s|
      next if s.nil?
      next if s.disposed?
      s.dispose
    end
    @ffxlfx_sprites = {}
  end
 
  def remove_lfx(key)
    @ffxlfx_sprites[key].fade2nil
  end
 
  def change_lfx(key,key2)
    if @ffxlfx_sprites[key].nil?
      @ffxlfx_sprites[key] = Sprite_FFXLight.new(@viewport1,key)
      @ffxlfx_sprites[key].setup(FFXLFX::Presets[key2])
    end
  end
 
  def player_lfx
    return if $game_player.light_cache.nil?
    return unless $game_player.light_cache[:filename]
    if @ffxlfx_sprites[:player].nil? || @ffxlfx_sprites[:player].disposed?
      @ffxlfx_sprites[:player] = Sprite_FFXLight.new(@viewport1,:player)
      @ffxlfx_sprites[:player].cache = {}
      @ffxlfx_sprites[:player].set_cache
    end
  end
 
  def stop_player_lfx(fade)
    return if @ffxlfx_sprites[:player].nil? || @ffxlfx_sprites[:player].disposed?
    if fade
      @ffxlfx_sprites[:player].fade2nil
    else
      @ffxlfx_sprites[:player].dispose
      @ffxlfx_sprites[:player] = nil
    end
  end
 
#~   def add_lfx(opts)
#~   end
end

class Game_Player < Game_Character
  attr_accessor :light_cache
  alias initialize_light_cache initialize unless $@
  def initialize(*a,&b)
    initialize_light_cache(*a,&b)
    @light_cache = nil
  end
end

class Game_Event < Game_Character
 
  FFXLFX_Light_Rgxp    = /<lfx[ ]*[=]?/i
  FFXLFX_Prelight_Rgxp = /<prelfx[ ]*[=]?[ ]*(.*)>/i
 
  alias refresh_ffxlfx_refresh refresh unless $@
  def refresh(*a,&b)
    refresh_ffxlfx_refresh(*a,&b)
    if FFXLFX.scene.is_a?(Scene_Map)
      FFXLFX.scene.refresh_ffxlfx_lights
    end
  end
 
  def name
    return @event.nil? ? "" : @event.name
  end
 
  def comment?(txt,ret = false)
    return false if @page.nil?
    @page.list.each do |item|
      if [108,408].include?(item.code)
        item_text = item.parameters[0]
        case txt
        when Regexp
          m = (item_text.match(txt))
          if ret && !m.nil?
            return m.captures
          else
            return !m.nil?
          end
        when String
          if ret && (m = item_text.include?(txt))
            return item.parameters[0]
          else
            return m
          end
        end
      end
    end
    return false
  end
 
  def light?
    return comment?(FFXLFX_Light_Rgxp)
  end
 
  def prelight?
    return comment?(FFXLFX_Prelight_Rgxp)
  end
 
  def light_cache
    cache = nil
    if light?
      txt = comment_block(FFXLFX_Prelight_Rgxp, ">")
      cache = parse_lfx(txt)
    elsif prelight?
      txt = comment?(FFXLFX_Prelight_Rgxp, true)
      cache = FFXLFX::Presets[txt[0]]
    end
    unless cache.nil?
      cache[:fadein] = false if cache[:fadein].nil?
    end
    return cache
  end
 
  def comment_block(txt1,txt2)
    s = [""]
    start = false
    stop = false
    return s if @page.nil?
    @page.list.each do |item|
      if [108,408].include?(item.code)
        item_text = item.parameters[0]
        case txt1
        when Regexp
          if item_text =~ txt1
            start = true
          end
        when String
          if item_text.include?(txt1)
            start = true
          end
        end
        case txt2
        when Regexp
          if item_text =~ txt2
            stop = true
          end
        when String
          if item_text.include?(txt2)
            stop = true
          end
        end
        s << item_text
        if stop
          break
        end
      end
    end
    return s.join("")
  end
 
  def parse_lfx(txt="")
    cache = {}
    ary = txt.split(";")
    ary.each do |item|
      case item
      when /fn[ ]*[=]?[ ]*(.*)/i
        cache[:filename] = $1.to_s.gsub(">","")
      when /fa[ ]*[=]?[ ]*(\d+)[>]?/i
        cache[:fadein] = ($1.to_i == 1)
      when /fl[ ]*[=]?[ ]*\[[ ]*(\d+)[ ]*,[ ]*(\d+)\][>]?/i
        cache[:flicker] = [$1.to_i,$2.to_i]
      when /zx[ ]*[=]?[ ]*(\d+)[>]?/i
        cache[:zx] = $1.to_i
      when /zy[ ]*[=]?[ ]*(\d+)[>]?/i
        cache[:zy] = $1.to_i
      when /z[ ]*[=]?[ ]*(0|1)[>]?/i
        cache[:z] = ($1.to_i == 1)
      when /a[ ]*[=]?[ ]*(0|1)[>]?/i
        cache[:switch] = ($1.to_i == 1)
      when /bl[ ]*[=]?[ ]*(0|1|2)[>]?/i
        cache[:blend] = $1.to_i
      when /op[ ]*[=]?[ ]*(\d+)[>]?/i
        cache[:opacity] = $1.to_i
      when /cl[ ]*[=]?[ ]*\[[ ]*(\d+)[ ]*,[ ]*(\d+)[ ]*,[ ]*(\d+)[ ]*[,]?[ ]*(\d+)?\][>]?/i
        cache[:color] = [$1.to_i,$2.to_i,$3.to_i]
        cache[:color] << $4.to_i unless $4.nil?
      when /os[ ]*[=]?[ ]*\[[ ]*([-]?\d+)[ ]*,[ ]*([-]?\d+)\][>]?/i
        cache[:offset] = [$1.to_i,$2.to_i]
      when /w[ ]*[=]?[ ]*\[[ ]*(\d+)[ ]*,[ ]*(\d+)[ ]*,[ ]*(\d+)[ ]*[,]?[ ]*(\d+)?\][>]?/i
        cache[:wave] = [$1.to_i,$2.to_i,$3.to_i]
        cache[:wave] << $4.to_i unless $4.nil?
      end
    end
    return cache
  end
end

class Sprite_FFXLight < Sprite_Base
 
  attr_reader :charID,:char
  attr_accessor :cache,:offset,:flicker
 
  def initialize(viewport, charID)
    super(viewport)
    @charID = charID
    @char = nil
    @cache = {}
    @offset = [0,0]
    @flicker = nil
    @go2nil = @to_nil = false
    set_char
    set_xyz
  end
 
  def setup(cache={})
    if cache.nil?
      @cache = {}
      return
    end
    unless FileTest.exist?(fn="Graphics/Pictures/"+cache[:filename]+".png")
      msgbox "File does not exist: "+fn
      exit
    end
    self.bitmap = Cache.picture(cache[:filename]).clone
    self.flicker = cache[:flicker] unless cache[:flicker].nil?
    self.zoom_x = cache[:zx] unless cache[:zx].nil?
    self.zoom_y = cache[:zy] unless cache[:zy].nil?
    unless cache[:color].nil?
      self.color = Color.new(*cache[:color])
      self.color.red = rand(256) if cache[:color][0] == -1
      self.color.green = rand(256) if cache[:color][1] == -1
      self.color.blue = rand(256) if cache[:color][2] == -1
    end
    self.blend_type = cache[:blend] unless cache[:blend].nil?
    self.offset = cache[:offset] unless cache[:offset].nil?
    self.start_wave(*cache[:wave]) unless cache[:wave].nil?
    if cache[:fadein]
      self.opacity = 0
      fadein
      if get_char.is_a?(Game_Player)
        get_char.light_cache[:fadein] = false
      end
    else
      self.opacity = max_opacity
    end
    cache[:switch] = true if cache[:switch].nil?
    @cache = cache
    set_char
  end
 
  def max_opacity
    result = 170
    result = @cache[:opacity] unless @cache[:opacity].nil?
    if !$game_switches[FFXLFX::On_Off_Switch]
      result = 0 if @cache[:switch]
    end
    return result
  end
 
  def update
    super
    if @cache != get_cache
      set_char
      set_cache
      if [nil,{}].include?(@cache)
        fadeout
      end
      setup(@char.light_cache)
    end
    set_xyz
    update_fadeinout
    update_flicker if !fading
  end
 
  def update_fadeinout
    fade_time = FFXLFX::Fade_Time
    if @fadein
      self.opacity = [[self.opacity+fade_time,0].max, max_opacity].min
      if self.opacity >= max_opacity
        self.opacity = max_opacity
        @fadein = false
      else
        return
      end
    elsif @fadeout
      self.opacity -= fade_time
      if self.opacity == 0
        if @go2nil
          @to_nil = true
        end
        @fadeout = false
      else
        return
      end
    end
  end
 
  def update_flicker
    if !@flicker.nil?
      self.visible = (rand(@flicker[0]) != @flicker[0]-1)
      self.opacity = 255-rand(@flicker[1])
      self.opacity = max_opacity if self.opacity > max_opacity
    else
      self.visible = true
      self.opacity = max_opacity
    end
  end
 
  def set_cache
    @cache = get_cache
    setup(@cache)
  end
 
  def get_cache
    return @char.light_cache
  end
 
  def fadein
    @fadeout = false
    @fadein = true
  end
 
  def fadeout
    @fadein = false
    @fadeout = true
  end
 
  def set_char
    @char = get_char
  end
 
  def get_char
    if @charID.is_a?(Integer)
      return $game_map.events[@charID]
    elsif @charID == :player
      return $game_player
    else
      p "A light effect is assigned a nil character. Exiting for safety."
      exit
    end
  end
 
  def set_xyz
    a = (@char.screen_x.to_f)
    b = (@char.screen_y.to_f)
    a -= 16+((self.zoom_x-1)*self.width/2)
    b -= 32+((self.zoom_y-1)*self.height/2)
    if self.width > 32
      n1 = (self.width - 32) / 2
      a -= n1
    elsif self.width < 32
      n1 = (32 - self.width) / 2
      a += n1
    end
    if self.height > 32
      n2 = (self.height - 32) / 2
      b -= n2
    elsif self.height < 32
      n2 = (32 - self.height) / 2
      b += n2
    end
    a += @offset[0]
    b += @offset[1]
    self.x = a
    self.y = b
    fz = @char.screen_z
    if @cache[:z]
      fz -= 1
    else
      fz += 1
    end
    self.z = fz
  end
 
  def to_nil?
    return @to_nil
  end
 
  def fade2nil
    @go2nil = true
    fadeout
  end
 
  def fading
    return true if @fadein || @fadeout || @go2nil
    return false
  end
end

class Game_Interpreter
 
  def remove_lfx(key)
    FFXLFX.scene.remove_lfx(key)
  end
 
#~   def add_lfx(x,y,key)
#~     opts = {}
#~     opts[:x] = x
#~     opts[:y] = y
#~     opts[:k] = key
#~     FFXLFX.scene.add_lfx(opts)
#~   end
 
  def player_lfx(preset,fade=false)
    FFXLFX.scene.player_lfx(preset,fade)
  end
 
  def stop_player_lfx(fade=false)
    FFXLFX.scene.stop_player_lfx(fade)
  end
end

class Scene_Map < Scene_Base
  def refresh_ffxlfx_lights
    return if @spriteset.nil?
    @spriteset.refresh_ffxlfx
  end
 
  def remove_lfx(key)
    @spriteset.remove_lfx(key)
  end
 
#~   def add_lfx(opts)
#~     @spriteset.add_lfx(opts)
#~   end
 
  def player_lfx(preset,fade)
    $game_player.light_cache = FFXLFX::Presets[preset]
    return if $game_player.light_cache.nil?
    $game_player.light_cache[:fadein] = fade
    @spriteset.player_lfx
  end
 
  def stop_player_lfx(fade)
    @spriteset.stop_player_lfx(fade)
  end
 
  alias pre_transfer_lfx pre_transfer
  def pre_transfer(*a,&b)
    pre_transfer_lfx(*a,&b)
    @spriteset.dispose_ffxlfx
  end
 
  alias post_transfer_lfx post_transfer
  def post_transfer(*a,&b)
    @spriteset.initialize_ffxlfx
    post_transfer_lfx(*a,&b)
  end
end

****
Rep:
Level 71
The Doctors in!
Here is the fog script, I ran out of characters in the first post.
Code: [Select]
#==============================================================================
# ** Victor Engine - Fog Effect
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
#  v 1.00 - 2011.12.19 > First relase
#  v 1.01 - 2011.12.30 > Faster Regular Expressions
#  v 1.02 - 2012.01.02 > Fixed fog dispose when changing maps
#  v 1.03 - 2012.01.04 > Fixed load fail when fog ON
#  v 1.04 - 2012.01.10 > Fixed fog movement y bug
#  v 1.05 - 2012.01.14 > Fixed the positive sign on some Regular Expressions
#  v 1.06 - 2012.01.15 > Fixed the Regular Expressions problem with "" and “”
#  v 1.07 - 2012.01.15 > Fixed fog position in maps with loop
#------------------------------------------------------------------------------
#  This script allows to add varied of effects to the maps. Fos are picutres
# placed above the player layer and loops. Differently from pictures the fog
# follows the map movement instead of the screen (this behavior can be changed)
# You can add various fogs to the map.
#------------------------------------------------------------------------------
# Compatibility
#   Requires the script 'Victor Engine - Basic Module' v 1.09 or higher
#
# * Alias methods (Default)
#   class Game_Screen
#     def initialize
#     def clear
#     def update
#
#   class Game_Map
#     def setup(map_id)
#     def scroll_down(distance)
#     def scroll_left(distance)
#     def scroll_right(distance)
#     def scroll_up(distance)
#
#   class Spriteset_Map
#     def initialize
#     def dispose
#     def update
#
# * Alias methods (Basic Module)
#   class Game_Interpreter
#     def comment_call
#
#------------------------------------------------------------------------------
# Instructions:
#  To instal the script, open you script editor and paste this script on
#  a new section on bellow the Materials section. This script must also
#  be bellow the script 'Victor Engine - Basic'
#  The fogs must be placed on the folder "Graphics/Fogs". Create a folder
#  named "Fogs" on the Graphics folder.
#
#------------------------------------------------------------------------------
# Maps and Comment calls note tags:
#  Tags to be used on the Maps note box in the database or in events
#  comment box, works like a script call
#
#  <fog effect>
#  settings
#  </fog effect>
#   Create a fog effect on the map, add the following values to the info
#   the ID and name must be added, other values are optional.
#     id: x      : fog ID
#     name: "x"  : fog graphic filename ("filename")
#     opacity: x : fog opacity (0-255)
#     move: x    : fog screen movement (32 = fog follows the map)
#     zoom: x    : fog zoom (100 = default size)
#     hue: x     : fog hue (0-360)
#     blend: x   : fog blend type (0: normal, 1: add, 2: subtract)
#     depth: x   : fog Z axis (300 = default value)
#
#  <fog opacity id: o, d>
#   This tag allows to change the fog opacity gradually
#     id : fog ID
#     o  : new opacity (0-255)
#     d  : wait until complete change (60 frames = 1 second)
#
#  <fog move id: x, y>
#   This tag adds fog continuous movement
#     id : fog ID
#     x  : horizontal movement, can be positive or negative
#     y  : vertical movement, can be positive or negative
#
#  <fog  tone id: r, g, b, y, d>
#   This tag allows to change the fog opacity gradually
#     id : fog ID
#     r  : red tone   (0-255, can be negative)
#     g  : green tone (0-255, can be negative)
#     b  : blue tone  (0-255, can be negative)
#     y  : gray tone  (0-255)
#     d  : wait until complete change (60 frames = 1 second)
#
#------------------------------------------------------------------------------
# Additional instructions:
#
#   Map note tags commands are called right when enters the map, comment calls
#   are called during the event process.
#
#==============================================================================

#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
#   Setting module for the Victor Engine
#==============================================================================

module Victor_Engine
  #--------------------------------------------------------------------------
  # * Set fogs visibility on battle
  #    When true, fogs are visible on battle
  #--------------------------------------------------------------------------
  VE_BATTLE_FOGS = false
  #--------------------------------------------------------------------------
  # * required
  #   This method checks for the existance of the basic module and other
  #   VE scripts required for this script to work, don't edit this
  #--------------------------------------------------------------------------
  def self.required(name, req, version, type = nil)
    if !$imported[:ve_basic_module]
      msg = "The script '%s' requires the script\n"
      msg += "'VE - Basic Module' v%s or higher above it to work properly\n"
      msg += "Go to http://victorscripts.wordpress.com/ to download this script."
      msgbox(sprintf(msg, self.script_name(script), version))
      exit
    else
      self.required_script(name, req, version, type)
    end
  end
  #--------------------------------------------------------------------------
  # * script_name
  #   Get the script name base on the imported value, don't edit this
  #--------------------------------------------------------------------------
  def self.script_name(name, ext = "VE")
    name = name.to_s.gsub("_", " ").upcase.split
    name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }
    name.join(" ")
  end
end

$imported ||= {}
$imported[:ve_fog_effects] = 1.07
Victor_Engine.required(:ve_fog_effects, :ve_basic_module, 1.09, :above)
#==============================================================================
# ** Game_Screen
#------------------------------------------------------------------------------
#  This class handles screen maintenance data, such as change in color tone,
# flashes, etc. It's used within the Game_Map and Game_Troop classes.
#==============================================================================

class Game_Screen
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :fogs
  #--------------------------------------------------------------------------
  # * Alias method: initialize
  #--------------------------------------------------------------------------
  alias :initialize_ve_fog_effects :initialize
  def initialize
    @fogs = Game_Fogs.new
    initialize_ve_fog_effects
  end
  #--------------------------------------------------------------------------
  # * Alias method: clear
  #--------------------------------------------------------------------------
  alias :clear_ve_fog_effects :clear
  def clear
    clear_ve_fog_effects
    clear_fogs
  end
  #--------------------------------------------------------------------------
  # * Alias method: update
  #--------------------------------------------------------------------------
  alias :update_ve_fog_effects :update
  def update
    update_ve_fog_effects
    update_fogs
  end
  #--------------------------------------------------------------------------
  # * New method: fogs
  #--------------------------------------------------------------------------
  def fogs
    @fogs ||= Game_Fogs.new
  end
  #--------------------------------------------------------------------------
  # * New method: clear_fogs
  #--------------------------------------------------------------------------
  def clear_fogs
    fogs.each {|fog| fog.erase }
  end
  #--------------------------------------------------------------------------
  # * New method: update_fogs
  #--------------------------------------------------------------------------
  def update_fogs
    fogs.each {|fog| fog.update }
  end
  #--------------------------------------------------------------------------
  # * New method: create_fog
  #--------------------------------------------------------------------------
  def create_fog(*args)
    fogs[args.first].show(*args)
  end
  #--------------------------------------------------------------------------
  # * New method: set_fog_move
  #--------------------------------------------------------------------------
  def set_fog_move(id, sx, sy)
    fogs[id].start_movement(sx, sy)
  end
  #--------------------------------------------------------------------------
  # * New method: set_fog_tone
  #--------------------------------------------------------------------------
  def set_fog_tone(id, red, green, blue, gray, duration = 0)
    tone = Tone.new(red, green, blue, gray)
    fogs[id].start_tone_change(tone, duration)
  end
  #--------------------------------------------------------------------------
  # * New method: set_fog_opacity
  #--------------------------------------------------------------------------
  def set_fog_opacity(id, opacity, duration = 0)
    fogs[id].start_opacity_change(opacity, duration)
  end
end

#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  This class handles maps. It includes scrolling and passage determination
# functions. The instance of this class is referenced by $game_map.
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :fog_x
  attr_reader   :fog_y
  #--------------------------------------------------------------------------
  # * Alias method: setup
  #--------------------------------------------------------------------------
  alias :setup_ve_fog_effects :setup
  def setup(map_id)
    setup_ve_fog_effects(map_id)
    setup_fogs_effect
  end
  #--------------------------------------------------------------------------
  # * Alias method: scroll_down
  #--------------------------------------------------------------------------
  alias :scroll_down_ve_fog_effects :scroll_down
  def scroll_down(distance)
    last_y = @display_y
    scroll_down_ve_fog_effects(distance)
    @fog_y += loop_vertical? ? distance : @display_y - last_y
  end
  #--------------------------------------------------------------------------
  # * Alias method: scroll_left
  #--------------------------------------------------------------------------
  alias :scroll_left_ve_fog_effects :scroll_left
  def scroll_left(distance)
    last_x = @display_x
    scroll_left_ve_fog_effects(distance)
    @fog_x += loop_horizontal? ? -distance : @display_x - last_x
  end
  #--------------------------------------------------------------------------
  # * Alias method: scroll_right
  #--------------------------------------------------------------------------
  alias :scroll_right_ve_fog_effects :scroll_right
  def scroll_right(distance)
    last_x = @display_x
    scroll_right_ve_fog_effects(distance)
    @fog_x += loop_horizontal? ? distance : @display_x - last_x
  end
  #--------------------------------------------------------------------------
  # * Alias method: scroll_up
  #--------------------------------------------------------------------------
  alias :scroll_up_ve_fog_effects :scroll_up
  def scroll_up(distance)
    last_y = @display_y
    scroll_up_ve_fog_effects(distance)
    @fog_y += loop_vertical? ?  -distance : @display_y - last_y
  end
  #--------------------------------------------------------------------------
  # * New method: setup_fogs_effect
  #--------------------------------------------------------------------------
  def setup_fogs_effect
    @fog_x = 0
    @fog_y = 0
    create_fog(note)
    set_fog_opacity(note)
    set_fog_move(note)
    set_fog_tone(note)
  end
  #--------------------------------------------------------------------------
  # * New method: create_fog
  #--------------------------------------------------------------------------
  def create_fog(note)
    regexp = /<FOG EFFECT>([^><]*)<\/FOG EFFECT>/im
    note.scan(regexp) { setup_fog($1) }
  end
  #--------------------------------------------------------------------------
  # * New method: set_fog_opacity
  #--------------------------------------------------------------------------
  def set_fog_opacity(note)
    regexp = /<FOG OPACITY (\d+): (\d+) *, *(\d+)>/i
    note.scan(regexp) do  |id, o, d|
      @screen.set_fog_opacity(id.to_i, o.to_i, d.to_i)
    end
  end
  #--------------------------------------------------------------------------
  # * New method: set_fog_move
  #--------------------------------------------------------------------------
  def set_fog_move(note)
    regexp = /<FOG MOVE (\d+): ([+-]?\d+) *, *([+-]?\d+)>/i
    note.scan(regexp) do |id, sx, sy|
      @screen.set_fog_move(id.to_i, sx.to_i, sy.to_i)
    end
  end
  #--------------------------------------------------------------------------
  # * New method: set_fog_tone
  #--------------------------------------------------------------------------
  def set_fog_tone(note)
    values = "(\\d+) *, *(\\d+) *, *(\\d+) *, *(\\d+)(?: *, *(\\d+))?"
    regexp = /<FOG TONE (\d+): #{values}>/i
    note.scan(regexp) do |i, r, g, b, a, d|
      info = [i.to_i, r.to_i, g.to_i, b.to_i, a.to_i, d ? d.to_i : 0]
      @screen.set_fog_tone(*info)
    end
  end
  #--------------------------------------------------------------------------
  # * New method: setup_fog
  #--------------------------------------------------------------------------
  def setup_fog(info)
    id    = info =~ /ID: (\d+)/i       ? $1.to_i : 0
    name  = info =~ /NAME: #{get_filename}/i  ? $1.dup  : ""
    op    = info =~ /OPACITY: (\d+)/i  ? $1.to_i : 192
    move  = info =~ /MOVE: (\d+)/i     ? $1.to_i : 32
    zoom  = info =~ /ZOOM: (\d+)/i     ? $1.to_f : 100.0
    hue   = info =~ /HUE: (\d+)/i      ? $1.to_i : 0
    blend = info =~ /BLEND: (\d+)/i    ? $1.to_i : 0
    depth = info =~ /DEPTH: ([+-]?\d+)/i ? $1.to_i : 300
    @screen.create_fog(id, name, op, move, zoom, hue, blend, depth)
  end
end

#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
#  An interpreter for executing event commands. This class is used within the
# Game_Map, Game_Troop, and Game_Event classes.
#==============================================================================

class Game_Interpreter
  #--------------------------------------------------------------------------
  # * Alias method: comment_call
  #--------------------------------------------------------------------------
  alias :comment_call_ve_fog_effects :comment_call
  def comment_call
    call_create_fog_effect
    comment_call_ve_fog_effects
  end
  #--------------------------------------------------------------------------
  # * New method: call_create_fog_effect
  #--------------------------------------------------------------------------
  def call_create_fog_effect
    $game_map.create_fog(note)
    $game_map.set_fog_opacity(note)
    $game_map.set_fog_move(note)
    $game_map.set_fog_tone(note)
  end
end

#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
#  Esta classe reune os sprites da tela de mapa e tilesets. Esta classe é
# usada internamente pela classe Scene_Map.
#==============================================================================

class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Alias method: initialize
  #--------------------------------------------------------------------------
  alias :initialize_ve_fog_effects :initialize
  def initialize
    create_fogs
    initialize_ve_fog_effects
  end
  #--------------------------------------------------------------------------
  # * Alias method: dispose
  #--------------------------------------------------------------------------
  alias :dispose_ve_fog_effects :dispose
  def dispose
    dispose_ve_fog_effects
    dispose_fogs
  end
  #--------------------------------------------------------------------------
  # * Alias method: update
  #--------------------------------------------------------------------------
  alias :update_ve_fog_effects :update
  def update
    update_ve_fog_effects
    update_fogs
  end
  #--------------------------------------------------------------------------
  # * New method: create_fogs
  #--------------------------------------------------------------------------
  def create_fogs
    @fog_sprites = []
  end
  #--------------------------------------------------------------------------
  # * New method: dispose_fogs
  #--------------------------------------------------------------------------
  def dispose_fogs
    if @fog_sprites
      @fog_sprites.compact.each {|sprite| sprite.dispose }
      @fog_sprites.clear
    end
  end
  #--------------------------------------------------------------------------
  # * New method: update_fogs
  #--------------------------------------------------------------------------
  def update_fogs
    $game_map.screen.fogs.each do |fog|
      @fog_sprites[fog.id] ||= Sprite_Fog.new(@viewport1, fog)
      @fog_sprites[fog.id].update
    end
  end
end

#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
#  This class brings together battle screen sprites. It's used within the
# Scene_Battle class.
#==============================================================================

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # * Alias method: initialize
  #--------------------------------------------------------------------------
  alias :initialize_ve_fog_effects :initialize
  def initialize
    create_fogs if VE_BATTLE_FOGS
    initialize_ve_fog_effects
  end
  #--------------------------------------------------------------------------
  # * Alias method: dispose
  #--------------------------------------------------------------------------
  alias :dispose_ve_fog_effects :dispose
  def dispose
    dispose_fogs if VE_BATTLE_FOGS
    dispose_ve_fog_effects
  end
  #--------------------------------------------------------------------------
  # * Alias method: update
  #--------------------------------------------------------------------------
  alias :update_ve_fog_effects :update
  def update
    update_fogs if VE_BATTLE_FOGS
    update_ve_fog_effects
  end
  #--------------------------------------------------------------------------
  # * New method: create_fogs
  #--------------------------------------------------------------------------
  def create_fogs
    @fog_sprites = []
  end
  #--------------------------------------------------------------------------
  # * New method: dispose_fogs
  #--------------------------------------------------------------------------
  def dispose_fogs
    if @fog_sprite
      $game_map.screen.fogs.clear
      @fog_sprites.compact.each {|sprite| sprite.dispose }
      @fog_sprites.clear
    end
  end
  #--------------------------------------------------------------------------
  # * New method: update_fogs
  #--------------------------------------------------------------------------
  def update_fogs
    $game_map.screen.fogs.each do |fog|
      @fog_sprites[fog.id] ||= Sprite_Fog.new(@viewport1, fog)
      @fog_sprites[fog.id].update
    end
  end
end

#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
#  This class performs the map screen processing.
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # * Alias method: pre_transfer
  #--------------------------------------------------------------------------
  alias :pre_transfer_ve_fog_effects :pre_transfer
  def pre_transfer
    pre_transfer_ve_fog_effects
    if $game_player.new_map_id != $game_map.map_id
      @spriteset.dispose_fogs
      $game_map.screen.clear_fogs
      $game_map.screen.fogs.clear
    end
  end
end

#==============================================================================
# ** Game_Fog
#------------------------------------------------------------------------------
#  This class handles fog data. This class is used within the Game_Fogs class.
#==============================================================================

class Game_Fog
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :id
  attr_reader   :name
  attr_reader   :hue
  attr_reader   :sx
  attr_reader   :sy
  attr_reader   :ox
  attr_reader   :oy
  attr_reader   :depth
  attr_reader   :move
  attr_reader   :zoom_x
  attr_reader   :zoom_y
  attr_reader   :opacity
  attr_reader   :blend_type
  attr_reader   :tone
  #--------------------------------------------------------------------------
  # * initialize
  #--------------------------------------------------------------------------
  def initialize(id)
    @id = id
    init_basic
    init_target
    init_tone
  end
  #--------------------------------------------------------------------------
  # * init_basic
  #--------------------------------------------------------------------------
  def init_basic
    @name    = ""
    @depth   = 300
    @zoom_x  = 1.0
    @zoom_y  = 1.0
    @move    = 32
    @opacity = 255.0
    @blend_type = 1
    @sx  = 0
    @sy  = 0
    @ox  = 0
    @oy  = 0
    @hue = 0
    @opacity_duration = 0
    @tone_duration    = 0
  end
  #--------------------------------------------------------------------------
  # * init_target
  #--------------------------------------------------------------------------
  def init_target
    @target_x = @x
    @target_y = @y
    @target_zoom_x  = @zoom_x
    @target_zoom_y  = @zoom_y
    @target_opacity = @opacity
  end
  #--------------------------------------------------------------------------
  # * init_tone
  #--------------------------------------------------------------------------
  def init_tone
    @tone        = Tone.new
    @tone_target = Tone.new
    @tone_duration = 0
  end
  #--------------------------------------------------------------------------
  # * show
  #--------------------------------------------------------------------------
  def show(id, name, opacity, move, zoom, hue, blend, depth)
    @id      = id
    @name    = name
    @move    = move
    @zoom_x  = zoom.to_f
    @zoom_y  = zoom.to_f
    @depth   = depth
    @opacity = opacity.to_f
    @blend_type = blend
    init_target
    init_tone
  end
  #--------------------------------------------------------------------------
  # * start_movement
  #--------------------------------------------------------------------------
  def start_movement(sx, sy)
    @sx = sx
    @sy = sy
  end
  #--------------------------------------------------------------------------
  # * start_tone_change
  #--------------------------------------------------------------------------
  def start_tone_change(tone, duration)
    @tone_target   = tone.clone
    @tone_duration = [duration.to_i, 0].max
    @tone = @tone_target.clone if @tone_duration == 0
  end
  #--------------------------------------------------------------------------
  # * start_opacity_change
  #--------------------------------------------------------------------------
  def start_opacity_change(opacity, duration)
    @opacity_target   = opacity
    @opacity_duration = [duration.to_i, 0].max
    @opacity = @opacity_target if @opacity_duration == 0
  end
  #--------------------------------------------------------------------------
  # * erase
  #--------------------------------------------------------------------------
  def erase
    @name = ""
  end
  #--------------------------------------------------------------------------
  # * update
  #--------------------------------------------------------------------------
  def update
    update_move
    update_tone
    update_opacity
  end
  #--------------------------------------------------------------------------
  # * update_move
  #--------------------------------------------------------------------------
  def update_move
    @ox -= @sx / 16.0
    @oy -= @sy / 16.0
  end
  #--------------------------------------------------------------------------
  # * update_opacity
  #--------------------------------------------------------------------------
  def update_opacity
    return if @opacity_duration == 0
    d = @opacity_duration
    @opacity = (@opacity * (d - 1) + @opacity_target) / d
    @opacity_duration -= 1
  end
  #--------------------------------------------------------------------------
  # * update_tone
  #--------------------------------------------------------------------------
  def update_tone
    return if @tone_duration == 0
    d = @tone_duration
    @tone.red   = (@tone.red   * (d - 1) + @tone_target.red)   / d
    @tone.green = (@tone.green * (d - 1) + @tone_target.green) / d
    @tone.blue  = (@tone.blue  * (d - 1) + @tone_target.blue)  / d
    @tone.gray  = (@tone.gray  * (d - 1) + @tone_target.gray)  / d
    @tone_duration -= 1
  end
end

#==============================================================================
# ** Game_Fogs
#------------------------------------------------------------------------------
#  This class handles fogs. This class is used within the Game_Screen class.
#==============================================================================

class Game_Fogs
  #--------------------------------------------------------------------------
  # * initialize
  #--------------------------------------------------------------------------
  def initialize
    @data = []
  end
  #--------------------------------------------------------------------------
  # * []
  #--------------------------------------------------------------------------
  def [](number)
    @data[number] ||= Game_Fog.new(number)
  end
  #--------------------------------------------------------------------------
  # * each
  #--------------------------------------------------------------------------
  def each
    @data.compact.each {|fog| yield fog } if block_given?
  end
  #--------------------------------------------------------------------------
  # * clear
  #--------------------------------------------------------------------------
  def clear
    @data.clear
  end
end

#==============================================================================
# ** Sprite_Fog
#------------------------------------------------------------------------------
#  This sprite is used to display fgos. It observes a instance of the
# Game_Fog class and automatically changes sprite conditions.
#==============================================================================

class Sprite_Fog < Plane
  #--------------------------------------------------------------------------
  # * initialize
  #--------------------------------------------------------------------------
  def initialize(viewport, fog)
    super(viewport)
    @fog = fog
    @x = 0
    @y = 0
    @old_x = $game_map.round_x($game_map.display_x)
    @old_y = $game_map.round_y($game_map.display_y)
    update
  end
  #--------------------------------------------------------------------------
  # * dispose
  #--------------------------------------------------------------------------
  def dispose
    bitmap.dispose if bitmap
    super
  end
  #--------------------------------------------------------------------------
  # * update
  #--------------------------------------------------------------------------
  def update
    update_bitmap
    update_position
    update_zoom
    update_other
  end
  #--------------------------------------------------------------------------
  # * update bitmap
  #--------------------------------------------------------------------------
  def update_bitmap
    if @fog_name != @fog.name
      self.bitmap = Cache.picture(@fog.name)
      @fog_name = @fog.name.dup
    end
  end
  #--------------------------------------------------------------------------
  # * update_position
  #--------------------------------------------------------------------------
  def update_position
    self.ox = $game_map.fog_x * @fog.move + @fog.ox
    self.oy = $game_map.fog_y * @fog.move + @fog.oy
    self.z  = @fog.depth
  end
  #--------------------------------------------------------------------------
  # * update_zoom
  #--------------------------------------------------------------------------
  def update_zoom
    self.zoom_x = @fog.zoom_x / 100.0
    self.zoom_y = @fog.zoom_y / 100.0
  end
  #--------------------------------------------------------------------------
  # * update_other
  #--------------------------------------------------------------------------
  def update_other
    self.opacity    = @fog.opacity
    self.blend_type = @fog.blend_type
    self.tone.set(@fog.tone)
  end
end

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
That's awesome man! Thanks a lot for that. Lemme just get it all set up so it's up and running for Demo 2.

****
Rep:
Level 71
The Doctors in!
No problem.  :)

***
if you try & edit my custom title i will hack you
Rep:
Level 66
Im PRO get used to it!
Looks great i will have to play the demo!



Spoiler for projects:
God of Darkness
Devils nest
Unnamed Games(2)
The CREW experience


****
Raped by DrSword
Rep:
Level 82
Dance with the enemy
Contestant - GIAW 10Contestant - GIAW 9
Just downloaded the demo. Gonna play it now.


****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
I seriously apologize for the lack of updates on the game. Sadly, this isn't much of an update, but I wanted to just say that the game is very much in production and I want to have a demo out as soon as possible. My schedule however, filled with Guild Wars and high school (plus being on the football team), has become difficult to find time to work on Witchtooth. At the most, the second demo will be out in a month, that being said I will try to get more screenshots/gameplay out in between this time.


PS: I bought Torchlight 2...hopefully that doesn't take up too much time.  :V

*
*crack*
Rep:
Level 63
2012 Best Newbie2012 Most Unsung MemberFor frequently finding and reporting spam and spam bots
I still haven't played it, not really sure if I should. I'll probably LP it when it's complete and LP's kinda suck when the player already knows what's gonna happen.

I do however have something for you. I decided to loop your music for you; no longer will they have to restart after completion :)
I can't really do that to midi files without converting them to ogg. So I guess it's up to you if you're willing to compensate file size for smoother sounds  :-\

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
Oh that's amazing dude! So many helpful fellas on the RMRK. Thanks a lot for that.

***
You pie feeders!
Rep:
Level 67
Everyone... Actually Everyone hates me :)
2012 Biggest Drama Whore
Blah!!! nerdgasm, though the first game was great i look forward to this, and again i'm available for whatever help you may need. (except for scripting)
Final Statement: I chowder5lock am a dipshit and MA is a pretty cool dude.

*
Rep:
Level 82
GIAW 14: 1st Place (Easy Mode)2013 Project of the Year2013 Best RPG Maker User (Programming)2013 Most Promising ProjectParticipant - GIAW 11Bronze - GIAW 10
After meandering through the available demonstration, I believe that you are off to a good start on the sequel! I played through most of the first Witchtooth, although I never completed the game (something that I will correct eventually).

The mapping is solid, and while most areas do feel boxy and rigid, one can sense that time was taken to make everything feel organic and populated. The attention to detail is also evident in the many secret chests and items available throughout the game. Toss several more difficult to find secrets in, please! As for the music selection, the songs do tie in nicely to the areas and scenes, but the volume was louder than I enjoy.

There is quite a bit of dialog to wade through and very little action at this point, but considering the span of time that has passed in the story and how early in production the game is, this is understandable. I do not agree with starting the characters from level one as well as with next to no gear when they have clearly adventured in the past. But overall, I believe that you are on the right track!


I did notice some errors along the way, and have noted them below.



[ General ]
-- Color used for the hi-lighted selection within the menu system is extremely difficult to see at times.
-- After returning from witch island, Lin does not join the party.
-- After returning from witch island, ocean background sound continues to play.


[ Cairesville ]

< Bar >
- <Minor>
-- When facing candle holders in the bar and pressing the action button, the light briefly flickers.

- <Minor> : ( Before Image - After Image )
-- Rippul virus has infected the patrons of the bar after 'tipping' the street performer.

< Salvadore Residence >
- <Minor> : ( Image of Issue )
-- Sophie doppelganger after returning from witch island.


[ Dreamland Knights' House of Magical Paradise ]
- <Minor> : ( Image of Issue )
-- Passage settings incorrect.


[ Mine ]
- <Minor> : ( Image of Issue )
-- Passage settings incorrect.


[ Witch Island ]

< Beach Tent >
- <Minor> : ( Image of Issue )
-- Passage settings incorrect.

- <Minor> : ( Image of Issue )
-- Passage settings incorrect.


< Witch Village >
- <Minor> : ( Image of Issue )
-- Village soundtrack abruptly restarts upon entering and exiting pictured house.


< Sacred Cave >
- <Minor> : ( Image of Issue )
-- Passage settings incorrect.

- <Minor> : ( Image of Issue )
-- Passage settings incorrect.

- <Minor> : ( Image of Issue )
-- Passage settings incorrect.

UPDATED 05-29-14


IS YOUR PROJECT OPTIMIZED?
UPDATED 07/04/15 - v2.5

RPG MAKER TOOLBOX
UPDATED 07/04/15 - v1.5

***
Rep:
Level 76
RMRK Junior
Protip: Don't put passable tiles on roof/wall tiles, and set the candles to "Direction Fix".

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
Yeah I discovered the problem with the wall tiles and stuff, I have to go back and find them all.

Thanks a lot for that Exhydra, I'll get that worked out now. Thanks for the images too, that REALLY helps me out.

Pretty much 100% of those passability errors have been fixed, I just haven't had the game updated, I should do that. But, about the Rippul virus and the Sophie clone, it's probably me messing up my switches like I always do. I'll get those worked out right away along with the audio.
It really wasn't specified much, nor shown, but Lin will not fight for you, but she is following. I'll add a small cutscene right after getting off the boat from the Witch Island that'll clarify all of this.
If there is a way to make someone follow the party, but not actually be IN the party, that'd be nice.
« Last Edit: October 13, 2012, 10:56:33 PM by hiromu656 »

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
My laptop has been suffering from some serious problems. Because of this I've put in little to no progress onto the game. When I get everything settled out I will get a bit more stuff out, such as the videos and screenshots I promised.
My high school football career is officially over so I'll have a ton of time on my hands. So apologies for the lack of updates, I'm working on it.

****
Raped by DrSword
Rep:
Level 82
Dance with the enemy
Contestant - GIAW 10Contestant - GIAW 9
I'm way too excited. I'm actually as excited for this as I am with Pokemon games or Zelda games XD


*
Rep:
Level 87
&& Lime
Winner - 2011 Spring Project of the Season
I'm loving the progress! Look forward to when this is completed. Also, make sure you back up your projects if your computer is acting touchy. I've lost a few substantial projects (one was posted here, too!) that way.


hey, pasta!

i'm not okay.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
I'm pretty sure all types of problems have been solved with my laptop. Previously, it simply did not turn on, leaving my game sitting there for at least a month. Now I've got it fixed and the game backed up on my home computer. I can finally do something.
Sorry again! I've been making all these posts of stuff no one really wants to hear, I'll finally get working on the game.

I'm going to be setting myself some deadlines for things I want to have posted/released. I realized that when I don't create deadlines for myself, my procrastinating ways truly kick in. I'll get back on when I'd like to showcase some more of the game really soon.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
On Sunday, (Nov. 11) I'll be uploading a new gameplay video and posting it here. Screenshots are kinda boring.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
<a href="http://www.youtube.com/watch?v=xizq09CKB0w" target="_blank">http://www.youtube.com/watch?v=xizq09CKB0w</a>
Here is a bit more Gameplay Footage. It's not much of a trailer, but it showcases one of the game's early zones.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
The current demo for the game is awfully buggy and I've been way too lazy when it comes to updating it. So this week I'll be releasing an updated and extended demo (with an hour or so of additional content). Once the demo is fixed I'll be able to get more people to review it without getting all the same feedback about the glitches.

The game is progressing well and I plan on putting up some new screenshots and/or videos once I've built a couple more maps.

Yup.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
The second version of the demo is done, you can get it here:
http://www.mediafire.com/?7zqti8dxcudw2c2

Again, this adds another hour to the original demo and fixes most if not all of its bugs.

If anything is found please tell me about them, but what I'm really looking for is the difficulty factor, since its hard to measure difficulty when you're the one who created the game.

An extractor (such as WinRar/7zip) maybe be needed
« Last Edit: December 20, 2012, 04:04:56 AM by hiromu656 »

**
Rep: +0/-0Level 56
RMRK Junior
in second demo version, I think I found a bug, when I finally proceed through the bridge, instead of pay up, I beat up two bandits, then I head to cairesville heal up and back to bridge, they're still there asking to pay up, this time I pay up, but cannot proceed to Ellrock city.

----------
And it would be nice to have a quest log too.
« Last Edit: January 11, 2013, 09:29:50 AM by Fanatik007 »

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
That must be a bug, because for this demo I tried to seal that bridge off... And I'm surprised you could beat them.

I guess I'll be updating the demo again. I'm thinking about adding a quest log, but not a traditional one. We'll see.
« Last Edit: January 11, 2013, 12:24:36 PM by hiromu656 »

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
I haven't posted anything for Witchtooth 2 in a long time... here's why:

When I created Witchtooth 1, it was incredibly rushed, mainly because I didn't have much time to work on it and releasing it was more of a "look i finished a game" type of thing than it being something I was truly proud of. It had numerous flaws, one of which was its linearity, which I slowly see Witchtooth 2 falling into that same hole. A sequel was never what I truly wanted for the game. I'm not highly motivated to continue a story with these specific characters, or with similar gameplay. I'm on the fence on whether or not I'll try to finish this game. If I did continue at the rate I have been developing the game, I'll hit another roadblock, College. That would make development last even longer.
I want to continue using RPG Maker, but with my time constraints I want to make a game worth the effort. Witchtooth 2 may not be it. I have something else in my head that I'm really excited about working on, but that would kick Witchtooth 2 aside if I decided to work on it.

So for now I'm putting Witchtooth 2 into hiatus until I decide what I want to do with it. I'm sure I'll come back to the witchtooth "universe" with a future game, but for now I'm not motivated to work on this.

I sincerely apologize to the few looking forward to its completion. 

***
You pie feeders!
Rep:
Level 67
Everyone... Actually Everyone hates me :)
2012 Biggest Drama Whore
You haven't disappointed me, I understand the rushed feeling quite well. I'm Sure others understand too. Take your time and Build the Game you want to, not the one everybody tells you to. otherwise your just a mindless producer. Good Luck to you!
Final Statement: I chowder5lock am a dipshit and MA is a pretty cool dude.

****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)
I think it's safe to say, I'm done with this project. I've got something else I'd rather work on.

Could a mod please move this? (to abandoned)

****
Raped by DrSword
Rep:
Level 82
Dance with the enemy
Contestant - GIAW 10Contestant - GIAW 9
Genuinely upset by this, but I have to say I understand why. When I get half way through making a game, I tend to feel like I've hit a stopping point where I can't think of a way to continue.
If Witchtooth was just you wanted to show people you've made a game, though, I can't begin to imagine how amazing your new project will be :3


****
Rep:
Level 75
Praise the Sun (Arcana)
GIAW 14: 1st Place (Hard Mode)