[SCRIPTING] [RMVX ACE] GAME SOFTLOCKS WITH 2 OR MORE ENEMIES IN BATTLE WHILE USING SCRIPT.
Posts
Pages:
1
Hey, I'd like some help with this issue.
I'm using the following script, (not by me) for a project of mine. I'm having an issue where it freezes when there are two or more enemies in battle.
I'm using the following script, (not by me) for a project of mine. I'm having an issue where it freezes when there are two or more enemies in battle.
#==============================================================================
# ** Earthbound-Ish Battle Core
#------------------------------------------------------------------------------
# Version: 1.0
# Author: cozziekuns
# Date: February 17, 2013
#==============================================================================
# Description:
#------------------------------------------------------------------------------
# This script attempts to mimic the battle system of the Earthbound/Mother
# series; most notably Earthbound and Earthbound 2 (Mother 2 and 3).
#==============================================================================
# Instructions:
#------------------------------------------------------------------------------
# Paste this script into its own slot in the Script Editor, above Main but
# below Materials. Edit the modules to your liking.
#==============================================================================
#==============================================================================
# ** Cozziekuns
#==============================================================================
module Cozziekuns
module Earthboundish
ActorIcons ={
# Command Name => IconID
"Attack" => 2,
"Magic" => 4,
"Skills" => 4,
"Cards" => 4,
"Guard" => 5,
"Items" => 3,
"Escape" => 6,
}
end
end
include Cozziekuns
#==============================================================================
# ** Sprite Battler
#==============================================================================
class Sprite_Battler
alias coz_ebish_spbtlr_update_effect update_effect
def update_effect(*args)
update_select_whiten if @effect_type == :select_white
if @battler.sprite_effect_type == :select_white_to_normal
revert_to_normal
@battler.sprite_effect_type = nil
end
coz_ebish_spbtlr_update_effect(*args)
end
def update_select_whiten
self.color.set(255, 255, 255, 0)
self.color.alpha = 128
end
end
#==============================================================================
# ** Window_ActorCommand
#==============================================================================
class Window_ActorCommand
def visible_line_number
return 1
end
def col_max
return 6
end
def contents_height
item_height
end
def top_col
ox / (item_width + spacing)
end
def top_col=(col)
col = 0 if col < 0
col = col_max - 1 if col > col_max - 1
self.ox = col * (item_width + spacing)
end
def bottom_col
top_col + col_max - 1
end
def bottom_col=(col)
self.top_col = col - (col_max - 1)
end
def ensure_cursor_visible
self.top_col = index if index < top_col
self.bottom_col = index if index > bottom_col
end
def item_rect(index)
rect = super
rect.x = index * (item_width + spacing)
rect.y = 0
rect
end
def window_width
Graphics.width - 224
end
def open
@help_window.open
super
end
def close
@help_window.close
super
end
def update
super
@help_window.update
end
def draw_item(index)
rect = item_rect_for_text(index)
x = rect.x + rect.width / 2 - 12
y = item_rect_for_text(index).y
draw_icon(Earthboundish::ActorIcons[command_name(index)], x, y, command_enabled?(index))
end
alias coz_ebish_waccmd_make_command_list make_command_list
def make_command_list(*args)
coz_ebish_waccmd_make_command_list(*args)
add_escape_command
end
def add_escape_command
add_command(Vocab::escape, :escape, BattleManager.can_escape?)
end
def update_help
@help_window.set_text(command_name(index))
end
end
#==============================================================================
# ** Window_BattleStatus
#==============================================================================
class Window_BattleStatus
[:basic_area_rect, :gauge_area_rect].each { |method|
define_method(method) { |index|
rect = item_rect(index)
rect
}
}
def col_max
$game_party.members.size
end
def window_width
Graphics.width / ( 4.5 / $game_party.members.size.to_f )
end
def window_height
fitting_height($data_system.opt_display_tp ? 5 : 4)
end
def item_width
(window_width - standard_padding * 2) / $game_party.members.size
end
def item_height
(window_height - standard_padding * 2)
end
def draw_basic_area(rect, actor)
draw_actor_name(actor, rect.x, rect.y, rect.width)
draw_actor_icons(actor, rect.x + 4, rect.y + line_height, rect.width)
end
def draw_gauge_area_with_tp(rect, actor)
draw_gauge_area_without_tp(rect, actor)
draw_actor_tp(actor, rect.x + 4, rect.y + line_height * 4, rect.width - 8)
end
def draw_gauge_area_without_tp(rect, actor)
draw_actor_hp(actor, rect.x + 4, rect.y + line_height * 2, rect.width - 8)
draw_actor_mp(actor, rect.x + 4, rect.y + line_height * 3, rect.width - 8)
end
def draw_actor_name(actor, x, y, width = 112)
change_color(hp_color(actor))
draw_text(x, y, width, line_height, actor.name, 1)
end
alias coz_ebish_wbtlsts_item_rect item_rect
def item_rect(index, *args)
rect = coz_ebish_wbtlsts_item_rect(index, *args)
rect.x = index % col_max * item_width
rect
end
def update
super
update_position
end
def update_position
self.x = (Graphics.width - window_width) / 2 + 128
end
end
#==============================================================================
# ** Window_BattleActor
#==============================================================================
class Window_BattleActor
def update_position
self.x = (Graphics.width - window_width) / 2
end
end
#==============================================================================
# ** Window_BattleEnemy
#==============================================================================
class Window_BattleEnemy
def cursor_left(wrap)
select((index - 1 + item_max) % item_max)
end
def cursor_right(wrap)
select((index + 1) % item_max)
end
def cursor_up(wrap)
cursor_left(true)
end
def cursor_down(wrap)
cursor_right(true)
end
def show
select(0)
self
end
def update_help
@help_window.set_text(enemy.name)
end
end
#==============================================================================
# ** Window_BattleSkill + Window_BattleItem
#==============================================================================
[:Window_BattleSkill, :Window_BattleItem].each { |klass|
Object.const_get(klass).send(:define_method, :show) {
select_last
super()
}
Object.const_get(klass).send(:define_method, :hide) { super() }
}
#==============================================================================
# ** Window_ActorHelp
#==============================================================================
class Window_ActorHelp < Window_Help
def initialize
super(1)
self.openness = 0
update_position
end
def update_position
self.x = Graphics.width - 224
self.width = 224
create_contents
end
def refresh
contents.clear
draw_text(4, 0, 224 - standard_padding * 2, line_height, @text, 1)
end
end
#==============================================================================
# ** Scene_Battle
#==============================================================================
class Scene_Battle
def start_party_command_selection
unless scene_changing?
@status_window.open
@status_window.refresh
if BattleManager.input_start
next_command
start_actor_command_selection
else
@party_command_window.deactivate
turn_start
end
end
end
def create_actor_command_window
@actor_command_window = Window_ActorCommand.new
@actor_command_window.set_handler(:attack, method(:command_attack))
@actor_command_window.set_handler(:skill, method(:command_skill))
@actor_command_window.set_handler(:guard, method(:command_guard))
@actor_command_window.set_handler(:item, method(:command_item))
@actor_command_window.set_handler(:escape, method(:command_escape))
@actor_command_window.set_handler(:cancel, method(:prior_command))
@actor_command_window.help_window = Window_ActorHelp.new
end
def create_help_window
@help_window = Window_Help.new(1)
@help_window.visible = false
end
alias coz_ebish_scbtl_create_enemy_window create_enemy_window
def create_enemy_window(*args)
coz_ebish_scbtl_create_enemy_window(*args)
@enemy_window.help_window = @actor_command_window.help_window
end
alias coz_ebish_scbtl_update_basic update_basic
def update_basic(*args)
old_enemy = @enemy_window.active ? @enemy_window.enemy : nil
coz_ebish_scbtl_update_basic(*args)
update_enemy_whiten(old_enemy)
end
def update_enemy_whiten(old_enemy)
if !@enemy_window.active or old_enemy != @enemy_window.enemy
old_enemy.sprite_effect_type = :select_white_to_normal if old_enemy && !old_enemy.dead?
end
@enemy_window.enemy.sprite_effect_type = :select_white if @enemy_window.active
end
def update_info_viewport
move_info_viewport(128)
end
end
Okay, this is weird.
So, when I put this into a testbed project, the error I got after getting into an encounter was...
...this. Whatever, this wasn't the issue I wanted to nail down, I can get around that.
The next time I tested it, I noticed the game freezing after defeating an enemy. Which was somewhat expected, given the issue presented. My response to try to contain where it might be freezing up was to display a console output during an update method.
I might have chosen the wrong update method, since I never saw any output to the console. However, the combat was completed without any hitches? What!?
So, when I put this into a testbed project, the error I got after getting into an encounter was...
Script `Window_Base` line 373: NoMethodError occurred
undefined method `%` for nil:NilClass
class Window_ActorCommand def draw_item(index) rect = item_rect_for_text(index) x = rect.x + rect.width / 2 - 12 y = item_rect_for_text(index).y #draw_icon(Earthboundish::ActorIcons[command_name(index)], x, y, command_enabled?(index)) draw_icon(4, x, y, command_enabled?(index)) end end
I might have chosen the wrong update method, since I never saw any output to the console. However, the combat was completed without any hitches? What!?
author=Marrend
Okay, this is weird.
So, when I put this into a testbed project, the error I got after getting into an encounter was...
Script `Window_Base` line 373: NoMethodError occurred
undefined method `%` for nil:NilClass
...this. Whatever, this wasn't the issue I wanted to nail down, I can get around that.
class Window_ActorCommand def draw_item(index) rect = item_rect_for_text(index) x = rect.x + rect.width / 2 - 12 y = item_rect_for_text(index).y #draw_icon(Earthboundish::ActorIcons[command_name(index)], x, y, command_enabled?(index)) draw_icon(4, x, y, command_enabled?(index)) end end
The next time I tested it, I noticed the game freezing after defeating an enemy. Which was somewhat expected, given the issue presented. My response to try to contain where it might be freezing up was to display a console output during an update method.
I might have chosen the wrong update method, since I never saw any output to the console. However, the combat was completed without any hitches? What!?
It's very odd, I really don't know what causes it, it also seems to do this randomly. The only thing I really want out of this script is the UI.
Pages:
1















