Dannygs90

Veteran
Veteran
Joined
Jan 5, 2020
Messages
30
Reaction score
1
First Language
Spanish
Primarily Uses
RMVXA
Well, Im a noob with scripts and I literally have no idea on how to make this one work. It is for timed events on battles, but whenever I copy that "<btnpress>" thing in those note boxes, it just does nothing. Any help?
This is the script:
 

KK20

Just some XP Scripter
Veteran
Joined
Oct 11, 2018
Messages
389
Reaction score
155
First Language
English
Primarily Uses
RMXP
Did you try the demo out and learn how it's used? You can see the tags added to the actors and various skills in the database, notably the Attack skill.
 

MushroomCake28

KAMO Studio
Global Mod
Joined
Nov 18, 2015
Messages
3,951
Reaction score
4,868
First Language
EN, FR
Primarily Uses
RMMZ
@Dannygs90 I moved your post post and made it into its own thread since your question concerns support of a script, not a simple script call. I've put a simple thread title, but you can replace/edit the thread title.
 

Dannygs90

Veteran
Veteran
Joined
Jan 5, 2020
Messages
30
Reaction score
1
First Language
Spanish
Primarily Uses
RMVXA
Did you try the demo out and learn how it's used? You can see the tags added to the actors and various skills in the database, notably the Attack skill.
I've done everything I saw in the demo, writing every tag in its place and its still does nothing...
 

Shiro-chan

Friendly Neighbourhood Neppy Maid
Veteran
Joined
Aug 7, 2018
Messages
177
Reaction score
51
First Language
German
Primarily Uses
RMVXA
Please show us your script list with the script itself, and any relevant database entries or events.
 

Dannygs90

Veteran
Veteran
Joined
Jan 5, 2020
Messages
30
Reaction score
1
First Language
Spanish
Primarily Uses
RMVXA
Please show us your script list with the script itself, and any relevant database entries or events.
Im not sure of what to show, but this is the list (the script is used twice cause thats how the demo was, so Im trying to replicate that. In the second screenshot Im not sure if I should delete that japanese text or what. And well, then is the script itself.
1597675381937.png
1597675667327.png
#------------------------------------------------------------------------------#
# Galv's Timed Button Attacks
#------------------------------------------------------------------------------#
# For: RPGMAKER VX ACE
# Version 1.6
#------------------------------------------------------------------------------#
# 2013-04-17 - Version 1.6 - Fixed a pretty big bug with ending battle.
# 2013-04-17 - Version 1.5 - Fixed evaded popup appearing in Yanfly's engine
# - when hitting using 'guarantee hit' option. Added
# - fix for if battle ends early while indicator live
# 2013-04-08 - Version 1.4 - Fixed bug with defend indicator not showing on
# - correct actor.
# 2013-03-15 - Version 1.3 - Fixed animation option
# 2013-03-15 - Version 1.2 - Fixed a bug with not pressing button at all
# 2013-03-15 - Version 1.1 - added option to turn off battle log messages
# - disabled hit indicator when actor is confused
# - fixed yanfly battle engine compatability bug
# 2013-03-11 - Version 1.0 - release
#------------------------------------------------------------------------------#
# Adds a graphical indicator to selected attacks that allows the player to
# press a button at a certain time for the attack to do extra damage or apply
# a state. Different attacks can use different buttons, graphics and have
# varied speeds and difficulty.
#
# NOTES: Put this script below any battle scripts. Tested in default battle
# system as well as Yanfly's default battle script.
#
# MORE NOTES: If the indicator disappears too soon, increase the frames of the
# skill's animation in the Database Animations tab.
#
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# NOTE TAGS for SKILLS or ITEMS
#------------------------------------------------------------------------------#
#
# <btnpress> # Enables the btn press with flash and SE when successful
# OR
# <btnpress n> # Enables the btn press and plays animation n when successful
# # This animation cancels the current skill's animation.
#
# # NOTE: Only one of these is required for a skill.
#
#------------------------------------------------------------------------------#
# NOTE TAGS for SKILLS or ITEMS (Leaving any of these out will use defaults)
#------------------------------------------------------------------------------#
#
# <btn x> # Use a different button to press (default :X)
# <btnmsg x> # Use a different message number when hit successful
#
# <btnmultiply x> # Multiply the damage/healing by x (default 2)
#
# <btnstates x,x,x> # Apply states with id x when timing is hit.
# <btnrstates x,x,x> # Remove states with id x when timing is hit.
#
# <btnopt a,b,c,d> # a = start time (delay before indicator moves)
# # b = target time (when button should be pressed)
# # c = indicator image number to use
# # d = difficulty number. Higher is easier to hit
#
# # The indicator will appear at the start time (a) and shrink down to meet
# # the target circle at the target time (b) when the player should press
# # the button.
# # DEFAULTS: a = 0 b = 31 c = 1 d = 0
#------------------------------------------------------------------------------#
# EXAMPLES:
#
# <btnpress 4> # Enables script and uses animation 4 on success
# <btn Y> # Use the :Y ("s" on the keyboard) button instead
# <btnmultiply 3> # 3 x damage
# <btnstates 2,3> # Applies states 2 and 3
# <btnrstates 5,6,7> # Removes states 5, 6 and 7
# <btnopt 10,61,2,0> # Indicator runs from 10-61 frames using image 2
# # and no change in difficulty
#
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# NOTE TAGS for ACTORS or EQUIPS - These determine a defending timed hit
#------------------------------------------------------------------------------#
#
# <btnpress> # Enables an actor or equip defending timed hit.
# OR
# <btnpress n> # Enables def timed hit and plays animation n when successful
# # Only use this if you are using a sideview battle script.
# # Only works with battle scripts that show animations on actors
#
# # NOTE: Only one of these is required for an equip or actor.
#
#------------------------------------------------------------------------------#
# Optional NOTE TAGS for ACTORS or EQUIPS (Leaving any out will use defaults)
#------------------------------------------------------------------------------#

# <btn x> # Use a different button to press (default :Z)
# <btnmsg x> # Use a different message number when hit successful
#
# <btnmultiply x> # Multiply the damage/healing by x (default 0.5)
#
# <btnstates x,x,x> # Apply states with id x when timing is hit.
# <btnrstates x,x,x> # Remove states with id x when timing is hit.
#
# <btnopt a,b,c,d> # a = start time (delay before indicator moves)
# # DEFAULTS: a = 0 b = 31 c = 3 d = 0
#
#------------------------------------------------------------------------------#

($imported ||= {})["Galv_BtnPress_Hit"] = true
module Galv_BtnAtk

#------------------------------------------------------------------------------#
# SETUP OPTIONS
#------------------------------------------------------------------------------#

#---------------#
# PREFERENCES #
#---------------#

GUARANTEE_HIT = true # If player hits the timing, the attack cannot miss
SHOW_AS_CRIT = true # Displays hits on enemy as critical hits.

ATK_MULTIPLIER = 2 # Default damage/healing multipliers if the timing is
DEF_MULTIPLIER = 0.5 # successful for attacking and defending.

DIFFICULTY = 1 # The higher this number, the further away from the
# center circle will score a success. 0 is extremely
# difficult, the higher this number the easier.

DISABLE_SWITCH = 1 # Turn swith ON to disable this

ATK_BTN = :X # Default attack button to press. :X is "a"
DEF_BTN = :Z # Default defend button to press. :Z is "d"

Y_OFFSET = -50 # 0 is positioned at bottom of a battler.

Y_FRONT_OFFSET = 0 # x and y offset for targeting your party when using a
X_FRONT_OFFSET = 0 # battle system with no actor x,y locations. By default
# it centers at the top of the battle status window.

#---------------#
# VOCAB #
#---------------#

BATTLE_LOG_TXT = true # Display battle log text (below) true or false
# Displaying battle messages slows down multi-hit
# skills in some battle systems.

# Below is a list of battlelog vocab that you can add to and use for timed hit
TXT = [ # don't touch

"A perfect hit!", # 0) Default attacking timed hit success
"Super effective!", # 1) Default allied spell timed hit success
"A great block!", # 2) Default defending timed hit success

"CUSTOM TEST!", # 3) When <btnmsg 3> notetag

#"Another one", # 4) Add as many as you need
#"Another one", # 5) Add as many as you need
#"Another one", # 6) Add as many as you need
#"Another one", # 7) Add as many as you need

] # don't touch

#---------------#
# GRAPHICS #
#---------------#

TARGET_IMG = "hit_target" # The inner target that the indicator meets
INDICATOR_IMG = "hit_indicator" # The indicator that shrinks to the target

# NOTE: These are the base image names for the graphics. The actual files will
# have a number appended to them. By default this number is 1, so the file
# names by default would be: "hit_target1.png", "hit_indicator1.png"
# This number can be changed using the option notetag so different skills can
# use a different graphic. Images go in /Graphics/System/ folder.

COLOR_HIT = [0, 255, 0] # [R,G,B] indicator turns this color when success
COLOR_MISS = [255, 0, 0] # [R,G,B] indicator turns this color when fail


#---------------#
# SOUNDS #
#---------------#
SE_HIT = ["Flash1",100,100] # "SE_Name", volume, pitch when hit timing
SE_MISS = ["Buzzer1",85,100] # "SE_Name", volume, pitch when missed timing


#------------------------------------------------------------------------------#
# END SETUP OPTIONS
#------------------------------------------------------------------------------#

end


class RPG::BaseItem
def btnpress
if @btnpress.nil?
if @note =~ /<btnpress>/i
@btnpress = 0
elsif @note =~ /<btnpress[ ](.*)>/i
@btnpress = $1.to_i
else
@btnpress = -1
end
end
@btnpress
end
def btnmultiply
if @btnmultiply.nil?
if @note =~ /<btnmultiply[ ](.*)>/i
@btnmultiply = $1.to_f
else
if self.is_a?(RPG::Actor) || self.is_a?(RPG::EquipItem)
@btnmultiply = Galv_BtnAtk::DEF_MULTIPLIER
else
@btnmultiply = Galv_BtnAtk::ATK_MULTIPLIER
end
end
end
@btnmultiply
end
def btn
if @btn.nil?
if @note =~ /<btn[ ](.*)>/i
@btn = $1.to_sym
else
if self.is_a?(RPG::Actor) || self.is_a?(RPG::EquipItem)
@btn = Galv_BtnAtk::DEF_BTN
else
@btn = Galv_BtnAtk::ATK_BTN
end
end
end
@btn
end
def btnmsg
if @btnmsg.nil?
if @note =~ /<btnmsg[ ](.*)>/i
@btnmsg = $1.to_i
else
@btnmsg = nil
end
end
@btnmsg
end
def btnstates
if @btnstates.nil?
if @note =~ /<btnstates[ ](.*)>/i
@btnstates = $1.to_s.split(",").map {|i| i.to_i}
else
@btnstates = []
end
end
@btnstates
end
def btnrstates
if @btnrstates.nil?
if @note =~ /<btnrstates[ ](.*)>/i
@btnrstates = $1.to_s.split(",").map {|i| i.to_i}
else
@btnrstates = []
end
end
@btnrstates
end
def btnopt
if @btnopt.nil?
if @note =~ /<btnopt[ ](.*)>/i
@btnopt = $1.to_s.split(",").map {|i| i.to_i}
else
if self.is_a?(RPG::Actor) || self.is_a?(RPG::EquipItem)
@btnopt = [0,31,3,0]
else
@btnopt = [0,31,1,0]
end
end
end
@btnopt
end
end # RPG::BaseItem


class Game_Temp
attr_accessor :btncrit
attr_accessor :btndata
alias galv_btnhit_gt_initialize initialize
def initialize
galv_btnhit_gt_initialize
@btncrit = false
@btndata = [2,nil] # [multipler,vocab]
end
end # Game_Temp


class Game_Actor < Game_Battler
if !$imported["YEA-BattleEngine"]
attr_accessor :screen_x
attr_accessor :screen_y
end
end # Game_Actor < Game_Battler


class Game_ActionResult
# Cannot miss if hit button at right time
alias galv_btnhit_gar_hit? hit?
def hit?
if $game_temp.btncrit && Galv_BtnAtk::GUARANTEE_HIT
@missed = false
@evaded = false
@used
else
galv_btnhit_gar_hit?
end
end

# Modify damage if button is hit and make it show critical
alias galv_btnhit_gar_make_damage make_damage
def make_damage(value, item)
if $game_temp.btncrit
value = (value * $game_temp.btndata[0]).to_i
@critical = true if @battler.is_a?(Game_Enemy) && Galv_BtnAtk::SHOW_AS_CRIT
end
galv_btnhit_gar_make_damage(value, item)
end

end # Game_ActionResult


class Window_BattleLog < Window_Selectable
alias galv_btnhit_wblog_display_critical display_critical
def display_critical(target, item)
if $game_temp.btncrit && Galv_BtnAtk::BATTLE_LOG_TXT
if $game_temp.btndata[1]
text = $game_temp.btndata[1]
else
text = target.actor? ? Galv_BtnAtk::TXT[1] : Galv_BtnAtk::TXT[0]
end
add_text(text)
wait
else
galv_btnhit_wblog_display_critical(target, item)
end
end
end # Window_BattleLog < Window_Selectable


class Scene_Battle < Scene_Base
attr_accessor :btnactive

alias galv_btnhit_sb_update_basic update_basic
def update_basic
if @btnactive
btn_pressed
@hit_indicator.update if @hit_indicator
end
galv_btnhit_sb_update_basic
end

def hskill
if @def_opts
@def_opts
else
@subject.current_action.item
end
end

def btn_pressed
return if $game_switches[Galv_BtnAtk::DISABLE_SWITCH] || $game_troop.all_dead?
if Input.trigger?(hskill.btn) && @hit_indicator.hit?
$game_temp.btncrit = true
$game_temp.btndata[0] = hskill.btnmultiply
btn_addstate if hskill.btnstates
btn_remstate if hskill.btnrstates
@hit_indicator.success
if hskill.btnpress > 0
show_hit_success_anim(@current_inditargets, hskill.btnpress)
else
$game_troop.screen.start_flash(Color.new(255,255,255,255),25)
RPG::SE.new(Galv_BtnAtk::SE_HIT[0],Galv_BtnAtk::SE_HIT[1],Galv_BtnAtk::SE_HIT[2]).play
end
@btnactive = nil
elsif Input.trigger?(hskill.btn)
$game_temp.btncrit = false
@hit_indicator.fail
RPG::SE.new(Galv_BtnAtk::SE_MISS[0],Galv_BtnAtk::SE_MISS[1],Galv_BtnAtk::SE_MISS[2]).play
@btnactive = nil
end
end

def btn_addstate
@current_inditargets.each { |t|
already_dead = t.dead?
hskill.btnstates.each { |state| t.add_state(state) if !already_dead }
t.perform_collapse_effect if t.dead? && !already_dead
}
end

def btn_remstate
@current_inditargets.each { |t|
already_dead = t.dead?
hskill.btnrstates.each { |state| t.remove_state(state) }
t.perform_collapse_effect if t.dead? && !already_dead
}
end

def show_hit_success_anim(targets, animation_id, mirror = false)
if $data_animations[animation_id]
targets[0].animation_id = animation_id
targets[0].animation_mirror = mirror
end
end

alias galv_btnhit_sb_use_item use_item
def use_item
galv_btnhit_sb_use_item
$game_temp.btncrit = false
end

def do_indicator(targets)
return if targets.nil? || targets.empty?
@def_opts = nil
item = @subject.current_action.item
target = targets[0]
if @subject.is_a?(Game_Actor) && !@subject.confusion? && item.btnpress >= 0
$game_temp.btndata[1] = item.btnmsg ? Galv_BtnAtk::TXT[item.btnmsg] : nil
@current_inditargets = targets
setup_hit_indicator(item.btnopt)
@btnactive = true
elsif target && defender?(target)
$game_temp.btndata[1] = @def_opts.btnmsg ?
Galv_BtnAtk::TXT[@def_opts.btnmsg] : Galv_BtnAtk::TXT[2]
@current_inditargets = targets
setup_hit_indicator(@def_opts.btnopt)
@btnactive = true
end
update_for_wait
end

alias galv_btnhit_sb_show_animation show_animation
def show_animation(targets, animation_id)
do_indicator(targets)
galv_btnhit_sb_show_animation(targets, animation_id)
end

def defender?(target)
return false if !target.is_a?(Game_Actor)
return false if @subject.is_a?(Game_Actor)
defend = -1
defend = $data_actors[target.id].btnpress
@def_opts = $data_actors[target.id]
target.equips.each { |i|
next if i.nil?
if i.btnpress > defend
defend = i.btnpress
@def_opts = i
end
}
return true if defend >= 0
end

def setup_hit_indicator(array)
return if @current_inditargets[0].nil? ||
$game_switches[Galv_BtnAtk::DISABLE_SWITCH] || $game_troop.all_dead?
if !@current_inditargets.empty? && @current_inditargets[0].screen_x
x = @current_inditargets[0].screen_x
y = @current_inditargets[0].screen_y + Galv_BtnAtk::Y_OFFSET
else
x = Graphics.width / 2 + Galv_BtnAtk::X_FRONT_OFFSET
y = Graphics.width / 1.7 + Galv_BtnAtk::Y_FRONT_OFFSET
end
@hit_indicator = Timed_Hits.new(x,y,array)
end

alias galv_btnhit_sb_invoke_item invoke_item
def invoke_item(target, item)
if !$imported["YEA-BattleEngine"]
@btnactive = nil
@hit_indicator.dispose if @hit_indicator
end
galv_btnhit_sb_invoke_item(target, item)
if $imported["YEA-BattleEngine"]
@btnactive = nil
@hit_indicator.dispose if @hit_indicator
end
end

alias galv_btnhit_sb_terminate terminate
def terminate
galv_btnhit_sb_terminate
@hit_indicator.dispose if @hit_indicator
end
end # Scene_Battle < Scene_Base


#------------------------------------------------------------------------------#
# Class Timed_Hits
#------------------------------------------------------------------------------#
class Timed_Hits
def initialize(x,y,options)
@x = x
@y = y
@opt = options
@img = @opt[2].to_s
@start_frame = @opt[0]
@target_frame = @opt[1]
@current_frame = 0
@s = (3.to_f - 0.6) / (@target_frame - @start_frame)
@d = (Galv_BtnAtk::DIFFICULTY + @opt[3]).to_f * 0.5
create_hit_indicator
create_target_indicator
end

def create_target_indicator
@hittarget = Sprite.new(@viewport1)
@hittarget.bitmap = Cache.system(Galv_BtnAtk::TARGET_IMG + @img)
@hittarget.z = 100
@hittarget.x = @x - (@hittarget.bitmap.width / 2)
@hittarget.y = @y - (@hittarget.bitmap.height / 2)
@hittarget.opacity = 130
end

def create_hit_indicator
@hitindi = Sprite.new(@viewport1)
@hitindi.bitmap = Cache.system(Galv_BtnAtk::INDICATOR_IMG + @img)
@hitindi.x = @x
@hitindi.y = @y
@hitindi.z = 100
@hitindi.opacity = 0
@hitindi.zoom_x = 3
@hitindi.zoom_y = 3
@hitindi.color = Color.new(0, 0, 0, 0)
end

def hit?
@current_frame.between?(@target_frame - @d,@target_frame + @d)
end

def success
c = Galv_BtnAtk::COLOR_HIT
@hitindi.color = Color.new(c[0],c[1],c[2],255)
end

def fail
c = Galv_BtnAtk::COLOR_MISS
@hitindi.color = Color.new(c[0],c[1],c[2],255)
end

def update
update_indicators
end

def update_indicators
return @current_frame += 1 if @current_frame < @start_frame
@hitindi.opacity = 100
@hitindi.zoom_x -= @s
@hitindi.zoom_y -= @s
@hitindi.x = @x - (@hitindi.bitmap.width / 2) * @hitindi.zoom_x
@hitindi.y = @y - (@hitindi.bitmap.height / 2) * @hitindi.zoom_y
@current_frame += 1
if @hitindi.zoom_x <= 0
fail
SceneManager.scene.btnactive = nil
end
end

def dispose
@hitindi.bitmap.dispose if @hitindi
@hittarget.bitmap.dispose if @hittarget
end
end # Timed_Hits
 

Shiro-chan

Friendly Neighbourhood Neppy Maid
Veteran
Joined
Aug 7, 2018
Messages
177
Reaction score
51
First Language
German
Primarily Uses
RMVXA
Yeah, you have to put the script above the script called Main and only there. Delete the other one.
 

KK20

Just some XP Scripter
Veteran
Joined
Oct 11, 2018
Messages
389
Reaction score
155
First Language
English
Primarily Uses
RMXP
What bootleg rpg maker is this??

Did you remove the japanese characters, leaving only the tags in the notebox? I find it hard to believe the script would do nothing because of that, but worth a shot.

You will probably have to upload a demo of your project if all else fails.
 

Dannygs90

Veteran
Veteran
Joined
Jan 5, 2020
Messages
30
Reaction score
1
First Language
Spanish
Primarily Uses
RMVXA
What bootleg rpg maker is this??

Did you remove the japanese characters, leaving only the tags in the notebox? I find it hard to believe the script would do nothing because of that, but worth a shot.

You will probably have to upload a demo of your project if all else fails.
I wanted to try that, but now there is a new error that doesnt let me try the game, and I didnt do anything to that script. Im starting panicking :)))
1597697201578.png
 

KK20

Just some XP Scripter
Veteran
Joined
Oct 11, 2018
Messages
389
Reaction score
155
First Language
English
Primarily Uses
RMXP
Can't really help you anymore without a demo of your project.
 

KK20

Just some XP Scripter
Veteran
Joined
Oct 11, 2018
Messages
389
Reaction score
155
First Language
English
Primarily Uses
RMXP
Note that you're using version 1.6 when 1.7 exists. In Galv's demo, 1.7 was on top while 1.6 was under Main. Also note that any scripts placed after Main are not loaded into your game (technically, they will after the user closes your game).

You're also using a side-view battle system that interferes with Timed-Hits. If you put Timed-Hits above Lateral, it works.
 

Dannygs90

Veteran
Veteran
Joined
Jan 5, 2020
Messages
30
Reaction score
1
First Language
Spanish
Primarily Uses
RMVXA
Note that you're using version 1.6 when 1.7 exists. In Galv's demo, 1.7 was on top while 1.6 was under Main. Also note that any scripts placed after Main are not loaded into your game (technically, they will after the user closes your game).

You're also using a side-view battle system that interferes with Timed-Hits. If you put Timed-Hits above Lateral, it works.
Just did that and... the error is still there
 

Dannygs90

Veteran
Veteran
Joined
Jan 5, 2020
Messages
30
Reaction score
1
First Language
Spanish
Primarily Uses
RMVXA
Note that you're using version 1.6 when 1.7 exists. In Galv's demo, 1.7 was on top while 1.6 was under Main. Also note that any scripts placed after Main are not loaded into your game (technically, they will after the user closes your game).

You're also using a side-view battle system that interferes with Timed-Hits. If you put Timed-Hits above Lateral, it works.
Nevermind, it is fixed now (wtf) and the script works!! Thanks a lot!!!
 

Latest Threads

Latest Profile Posts

party time.png
If you've played Knight Shift Chapter 1 this image'll mean something to you. If not, that's also fine!
Here's a medical question for ya: Why do I start lightly coughing after I drink coffee?
Well, someone "reviewed" my game. Didn't credit me anywhere in the video and spent 2 minutes insulting it. Going to ignore that and move on.
To cut down on map lag, I've been researching how to implement a lighting layer as a single map overlay instead of a bunch of individual lights. Hopefully I'll have a screenshot soon!
Imagine having a game broken up into a whole bunch of chapters? Like Chapter 11 should be about the party members going bankrupt.

Forum statistics

Threads
117,264
Messages
1,105,959
Members
153,440
Latest member
VicArt
Top