- Joined
- Sep 12, 2013
- Messages
- 32
- Reaction score
- 6
- First Language
- English
- Primarily Uses
Thank you for your help, I greatly appreciate it!
#==============================================================================
# ** Earthbound-Ish Odometer Roll
#------------------------------------------------------------------------------
# Version: 1.0
# Author: cozziekuns
# Date: February 17, 2013
#==============================================================================
# Description:
#------------------------------------------------------------------------------
# This script attempts to emulate the battle system of the Earthbound/Mother
# series; most notably Earthbound and Earthbound 2 (Mother 2 and 3). This
# certain addon addresses the infamous HP/MP scrolling system that made battles
# that much more intense.
#==============================================================================
# Instructions:
#------------------------------------------------------------------------------
# Paste this script into its own slot in the Script Editor, above Main but
# below Materials. Edit the modules to your liking.
#==============================================================================
# Graphics:
#------------------------------------------------------------------------------
# You must have two Odometer pictures in your Graphics/System folder. One of
# them must be named "Odometer_HP", and the other one must be named
# "Odometer_MP". Obviously, they represent the odometer for HP and MP values,
# respectively
#==============================================================================
#==============================================================================
# ** Cozziekuns
#==============================================================================
module Cozziekuns
module Earthboundish
Odometer_Roll_Speed = 5 # Smaller speeds are faster than larger speeds.
end
end
include Cozziekuns
#==============================================================================
# ** Game_Actor
#==============================================================================
class Game_Actor
attr_accessor :odometer_hp
attr_accessor :odometer_mp
alias coz_ebisohd_gmactr_setup setup
def setup(actor_id, *args)
coz_ebisohd_gmactr_setup(actor_id, *args)
@odometer_hp = 0
@odometer_mp = 0
end
alias coz_ebishod_gmactr_execute_damage execute_damage
def execute_damage(user, *args)
if $game_party.in_battle
on_damage(@result.hp_damage) if @result.hp_damage > 0
@odometer_hp += @result.hp_damage
@odometer_mp += @result.mp_damage
user.hp += @result.hp_drain
user.mp += @result.mp_drain
else
coz_ebishod_gmactr_execute_damage(user, *args)
end
end
[:hp, :mp].each { |stat|
alias_method("coz_ebishod_gmactr_item_effect_recover_#{stat}".to_sym, "item_effect_recover_#{stat}".to_sym)
define_method("item_effect_recover_#{stat}".to_sym) { |user, item, effect|
if $game_party.in_battle
value = (send("m#{stat}".to_sym) * effect.value1 + effect.value2) * rec
value *= user.pha if item.is_a?(RPG::Item)
value = value.to_i
@result.send("#{stat}_damage=".to_sym, @result.send("#{stat}_damage".to_sym) - value)
@result.success = true
send("odometer_#{stat}=".to_sym, send("odometer_#{stat}".to_sym) - value)
else
send("coz_ebishod_gmactr_item_effect_recover_#{stat}".to_sym, user, item, effect)
end
}
}
end
#==============================================================================
# ** Game_Enemy
#==============================================================================
class Game_Enemy
def execute_damage(user)
on_damage(@result.hp_damage) if @result.hp_damage > 0
self.hp -= @result.hp_damage
self.mp -= @result.mp_damage
user.odometer_hp -= @result.hp_drain
user.odometer_mp -= @result.mp_drain
end
end
#==============================================================================
# ** Window_BattleStatus
#==============================================================================
class Window_BattleStatus
def refresh_hpmp(actor, index)
rect = item_rect(index)
if gauge_area_rect(index) == item_rect(index)
rect.y += line_height * 2
rect.height -= line_height * 2
contents.clear_rect(rect)
else
contents.clear_rect(gauge_area_rect(index))
end
draw_gauge_area(gauge_area_rect(index), actor)
end
[:hp, :mp].each { |stat|
define_method("draw_actor_#{stat}".to_sym) { |actor, x, y, width|
change_color(system_color)
draw_text(x, y, 30, line_height, Vocab.send("#{stat}_a"))
od_x = x + contents.text_size(Vocab.send("#{stat}_a")).width + 4
actor_hp = actor.send("#{stat}".to_sym)
actor_od_hp = actor.send("odometer_#{stat}".to_sym)
draw_odometer(od_x, y, stat, actor_hp, actor_od_hp)
}
}
def draw_odometer(x, y, type, value, od_value)
bitmap = Cache.system("Odometer_#{type.upcase}")
places = [1000, 100, 10, 1]
od_ary = value.to_s.split("").collect { |str| str.to_i }
(3 - od_ary.size).times { od_ary.unshift(0) }
od_ary.each_index { |i|
src_y = (9 - od_ary[i]) * 20
if (od_ary.join.to_i) % places[i] == 0 and od_value != 0
src_y += 20 / Earthboundish::Odometer_Roll_Speed * (Graphics.frame_count % Earthboundish::Odometer_Roll_Speed)
end
contents.blt(x + i * 24, y + 2, bitmap, Rect.new(0, src_y, 24, 20))
}
end
end
#==============================================================================
# ** Scene_Battle
#==============================================================================
class Scene_Battle
alias coz_ebishod_scbtl_update_basic update_basic
def update_basic(*args)
coz_ebishod_scbtl_update_basic(*args)
update_odometer
end
def update_odometer
$game_party.members.each { |actor|
if actor.odometer_hp != 0 or actor.odometer_mp != 0
if actor.odometer_hp != 0 and Graphics.frame_count % Earthboundish::Odometer_Roll_Speed == 0
damage = actor.odometer_hp > 0 ? 1 : - 1
actor.hp -= damage
actor.odometer_hp -= damage
end
if actor.odometer_mp != 0 and Graphics.frame_count % Earthboundish::Odometer_Roll_Speed == 0
damage = actor.odometer_mp > 0 ? 1 : - 1
actor.mp -= damage
actor.odometer_mp -= damage
end
@status_window.refresh_hpmp(actor, actor.index)
end
}
end
end
I cannot for the life of me get this to work in a conditional branch:
if ($game_variables[57] / 3) == 1; end
I could do this without a conditional branch script call, but I feel it'd be far more efficient than doing it manually.
The idea is that every turn, I'm increasing variable 57 by 1. Then, I divide it by 3, and if it gives me a whole integer, I know that 3 turns have passed. It's a turn counter. However, before I figure out how to compare it to an array of numbers, I need it to actually go off at all. I have a text event setup in the "else" option of the branch, that prints the current value of $game_variables[57]. On turn 3, it is 3. However, I also know that 3 divided by 3 is, in fact, 1, as I went to elementary school.
What in the world am I messing up?
I personally like to set up instance variables for stuff like this, so it doesn't confuse the system. You create, name, and set a instance variable's value, as the name implies, for this instance only. These variables are script specific, unless you you do some other stuff I'm not going to get in to lol. Anyway back to the point.
@turn_counter = $game_variables[57]
@integer = @turn_counter / 3
if
@integer == 1
else
end
This give you flexibility.
Whenever this script is called, it sets the values again, making it precise Even more so if it is constantly updated. You could make it run itself again is for instance @integer doesn't equal 1, creating a loop until the condition is fulfilled. You could simply use the 'loop' tag, but I digress, just some ideas.
Ah, I think I found Your problem. You said you are printing the value of the variable on the 3ed turn and it's coming up 3? Well that's to be expected, since you haven't actually changed its value. In your conditional you say:
if ($game.variables[57] \ 3) == 1
Your asking if the variable, divided by 3, equals 1. Your not actually making the variable have a value of 1, so it'll still return a 3 when prompted.
$game_map.region_id(x, y)
$game_map.events[event_id].x
$game_map.events[event_id].y
$game_variables[ID] = $game_map.region_id($game_map.events[event_id].x, $game_map.events[event_id].y)
load_data("Data/Map001.rvdata2").events[1].pages[0].graphic.direction