RMRK is retiring.
Server is paid up for the rest of 2026, but the forum may go after that. See here for more information. Please archive or save anything you would like to keep before 2027.
Main Menu
  • Welcome to The RPG Maker Resource Kit.

[VXA][REQUEST] Spin Command

Started by bastian, May 26, 2012, 12:47:48 AM

0 Members and 1 Guest are viewing this topic.

bastian

Name: ziifee's Spin Command
Description: Within battles, changes the usual Attack/Skill/Guard/Item vertical menu into a spinning menu. This could either be a conversion of ziifee's VX script or a complete remake that simply reproduces the appearance of the menu turned into a spinning ring.

Original VX script:

[spoiler]# * ziifee's Spin Command (http://neomemo.web.fc2.com/) # Changes the Party and Actor Command Windows in battle. # ? Spin40.png is required in Graphics/System #============================================================================== # ? Ziifee #============================================================================== module Zii # ? Spin Command/Icon Index Number FIGHT = 132 # Fight ESCAPE = 143 # Escape ATTACK = 1 # Attack (Default) GUARD = 52 # Guard SKILL = 128 # Skill ITEM = 144 # Item # ? Spin Command/Direction of Rotation ( "normal" or "reverse" ) # Determines how Spin Command rotates according to left/right key press. TURN = "normal" # ? Face Graphics (true: Use battle face graphic / false: don't use faces) STATUS_FACE = true # ? Actor Names (true: Show actor names / false: Don't show ) STATUS_LINE = true # ? Actor Name Text Size ( VX default size: 20 ) LINE_SIZE = 14 #-------------------------------------------------------------------------- # ? ???? ??? #-------------------------------------------------------------------------- def self.turn_normal? return false if TURN == "reverse" return true if TURN == "normal" return true end #-------------------------------------------------------------------------- # ? ???????? [???????] ??? #-------------------------------------------------------------------------- def self.battle_face? return true if STATUS_FACE return false end #-------------------------------------------------------------------------- # ? ???????????? [??] ??? #-------------------------------------------------------------------------- def self.line_name? return true if STATUS_LINE return false end end #============================================================================== # ? Window_Base #============================================================================== class Window_Base #-------------------------------------------------------------------------- # ? ?????????? ? # opacity : ???? #-------------------------------------------------------------------------- def draw_face(face_name, face_index, x, y, size = 96, opacity = 255) bitmap = Cache.face(face_name) rect = Rect.new(0, 0, 0, 0) rect.x = face_index % 4 * 96 + (96 - size) / 2 rect.y = face_index / 4 * 96 + (96 - size) / 2 rect.width = size rect.height = size self.contents.blt(x, y, bitmap, rect, opacity) bitmap.dispose end #-------------------------------------------------------------------------- # ? ?????????????? ? # opacity : ???? #-------------------------------------------------------------------------- def draw_actor_face(actor, x, y, size = 96, opacity = 255) draw_face(actor.face_name, actor.face_index, x, y, size, opacity) end end #============================================================================== # ? Window_SpinCommand #------------------------------------------------------------------------------ # ????????????????????? #============================================================================== class Window_SpinCommand < Window_Base #-------------------------------------------------------------------------- # ? ?????????? #-------------------------------------------------------------------------- attr_reader :index # ?????? attr_reader :help_window # ???????? #-------------------------------------------------------------------------- # ? ????????? # cx / cy : ??? X?? / Y?? # commands : ?????? (?? ? [name, kind, pull, enabled?]) # setting : ?????? ("R"=>?? "S"=>?? "G"=>?? "L"=>??) #-------------------------------------------------------------------------- def initialize(cx, cy, commands, setting = {}) @radius = setting.has_key?("R") ? setting["R"] : 40 # ???? @speed = setting.has_key?("S") ? setting["S"] : 36 # ???? @spin_back = setting.has_key?("G") ? setting["G"] : "" # ???? @spin_line = setting.has_key?("L") ? setting["L"] : nil # ???? x, y = cx - @radius - 28, cy - @radius - 28 width = height = @radius * 2 + 56 super(x, y, width, height) self.opacity = 0 @index = 0 @commands = commands # ???? @spin_right = true @spin_count = 0 update_cursor end #-------------------------------------------------------------------------- # ? ?????????? (???? ???) # i : ?????? # cx : ?? ???? X?? # cy : ?? ???? Y?? #-------------------------------------------------------------------------- def draw_spin_graphic(i, cx, cy) case command_kind(i) when "icon" draw_icon(command_pull(i), cx - 12, cy - 12, command_enabled?(i)) end end #-------------------------------------------------------------------------- # ? ?????? ????? #-------------------------------------------------------------------------- def refresh set_spin end #-------------------------------------------------------------------------- # ? ????? ????? #-------------------------------------------------------------------------- def draw_item(index, enabled = true) @commands[index][3] = enabled set_spin end #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- def command_name(index = @index) return "" if index < 0 name = @commands[index][0] return name != nil ? name : "" end #-------------------------------------------------------------------------- # ? ?????????? #-------------------------------------------------------------------------- def command_kind(index) result = @commands[index][1] return result != nil ? result : "" end #-------------------------------------------------------------------------- # ? ??????? ??? #-------------------------------------------------------------------------- def command_pull(index) result = @commands[index][2] return result != nil ? result : "" end #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- def command_enabled?(index) result = @commands[index][3] return result != nil ? result : true end #-------------------------------------------------------------------------- # ? ?????? index ????? #-------------------------------------------------------------------------- def set_index(name) n = -1 for i in 0...@commands.size n = i if @commands
  • == name end @index = n if n >= 0 update_cursor call_update_help set_spin end #-------------------------------------------------------------------------- # ? ????????? # index : ????????? #-------------------------------------------------------------------------- def index=(index) @index = index update_cursor call_update_help set_spin end #-------------------------------------------------------------------------- # ? ???X????? #-------------------------------------------------------------------------- def center_x return contents.width / 2 end #-------------------------------------------------------------------------- # ? ???Y????? #-------------------------------------------------------------------------- def center_y return contents.height / 2 end #-------------------------------------------------------------------------- # ? ?????? #-------------------------------------------------------------------------- def item_max return @commands.size end #-------------------------------------------------------------------------- # ? ????? (??? ??) #-------------------------------------------------------------------------- def set_background return if @spin_back == "" bitmap = Cache.system(@spin_back) rect = Rect.new(0, 0, bitmap.width, bitmap.height) self.contents.blt(12, 12, bitmap, rect) end #-------------------------------------------------------------------------- # ? ????? (??? ??) #-------------------------------------------------------------------------- def set_text return if @spin_line == nil y = center_y - WLH / 2 + @spin_line self.contents.draw_text(center_x - 48, y, 96, WLH, command_name, 1) end #-------------------------------------------------------------------------- # ? ????????????????? #-------------------------------------------------------------------------- def angle_size return (Math::PI * 2 / item_max) end #-------------------------------------------------------------------------- # ? ??????????????? ????? #-------------------------------------------------------------------------- def set_spin_count @spin_count = angle_size * 360 / @speed set_spin(true) end #-------------------------------------------------------------------------- # ? ????? ??? # spin : ????? (true ?????) #-------------------------------------------------------------------------- def set_spin(spin = false) self.contents.clear set_background angle = spin ? @speed * @spin_count / 360 : 0 angle = @spin_right ? angle : -angle for i in 0...item_max n = (i - @index) * angle_size + angle cx = @radius * Math.sin(n) + center_x cy = - @radius * Math.cos(n) + center_y draw_spin_graphic(i, cx, cy) end set_text end #-------------------------------------------------------------------------- # ? ?????? #-------------------------------------------------------------------------- def update super update_cursor if @spin_count > 0 @spin_count -= 1 set_spin(@spin_count >= 1) return end update_command end #-------------------------------------------------------------------------- # ? ??????????? #-------------------------------------------------------------------------- def command_movable? return false if @spin_count > 0 return false if (not visible or not active) return false if (index < 0 or index > item_max or item_max == 0) return false if (@opening or @closing) return true end #-------------------------------------------------------------------------- # ? ????????? #-------------------------------------------------------------------------- def command_right @index = (@index + 1) % item_max @spin_right = true set_spin_count end #-------------------------------------------------------------------------- # ? ????????? #-------------------------------------------------------------------------- def command_left @index = (@index - 1 + item_max) % item_max @spin_right = false set_spin_count end #-------------------------------------------------------------------------- # ? ????????? #-------------------------------------------------------------------------- def update_command if command_movable? if Input.press?(Input::RIGHT) Sound.play_cursor Zii.turn_normal? ? command_right : command_left end if Input.press?(Input::LEFT) Sound.play_cursor Zii.turn_normal? ? command_left : command_right end end call_update_help end #-------------------------------------------------------------------------- # ? ??????? #-------------------------------------------------------------------------- def update_cursor if @index < 0 self.cursor_rect.empty else rect = Rect.new(0, 0, 24, 24) rect.x = center_x - rect.width / 2 rect.y = center_y - rect.height / 2 - @radius self.cursor_rect = rect end end #-------------------------------------------------------------------------- # ? ??????????? # help_window : ??????????? #-------------------------------------------------------------------------- def help_window=(help_window) @help_window = help_window call_update_help end #-------------------------------------------------------------------------- # ? ??????????????????? #-------------------------------------------------------------------------- def call_update_help if self.active and @help_window != nil update_help end end #-------------------------------------------------------------------------- # ? ??????????? (???????????) #-------------------------------------------------------------------------- def update_help end end #============================================================================== # ? Window_LineHelp #------------------------------------------------------------------------------ # ?????????????????????????????????????? #============================================================================== class Window_LineHelp < Window_Base #-------------------------------------------------------------------------- # ? ????????? #-------------------------------------------------------------------------- def initialize super(-16, 0, 576, WLH + 32) self.opacity = 0 end #-------------------------------------------------------------------------- # ? ?????? # text : ????????????? # align : ??????? (0..????1..?????2..???) #-------------------------------------------------------------------------- def set_text(text, align = 0) if text != @text or align != @align self.contents.clear back_color = Color.new(0, 0, 0, 80) self.contents.fill_rect(0, y = 12, contents.width, WLH - y, back_color) self.contents.font.color = normal_color self.contents.draw_text(20, 0, self.width - 72, WLH, text, align) @text = text @align = align end end end #============================================================================== # ? Window_PartyCommand #============================================================================== class Window_PartyCommand < Window_SpinCommand #-------------------------------------------------------------------------- # ? ????????? #-------------------------------------------------------------------------- def initialize s1 = [Vocab::fight, "icon", Zii::FIGHT, true] s2 = [Vocab::escape, "icon", Zii::ESCAPE, $game_troop.can_escape] setting = {"R"=>40, "S"=>52, "G"=>"Spin40", "L"=>-12} super(72, 356, [s1, s2], setting) self.active = false set_spin end end #============================================================================== # ? Window_ActorCommand #============================================================================== class Window_ActorCommand < Window_SpinCommand #-------------------------------------------------------------------------- # ? ????????? #-------------------------------------------------------------------------- def initialize s1 = [Vocab::attack, "icon", Zii::ATTACK, true] s2 = [Vocab::skill, "icon", Zii::SKILL, true] s3 = [Vocab::guard, "icon", Zii::GUARD, true] s4 = [Vocab::item, "icon", Zii::ITEM, true] setting = {"R"=>40, "S"=>52, "G"=>"Spin40", "L"=>-12} super(72, 356, [s1, s2, s3, s4], setting) self.active = false set_spin end #-------------------------------------------------------------------------- # ? ?????? # actor : ???? #-------------------------------------------------------------------------- def setup(actor) @commands[0][2] = Zii::ATTACK @commands[1][0] = Vocab::skill if actor.weapons[0] != nil n = actor.weapons[0].icon_index @commands[0][2] = n if n > 0 end @commands[1][0] = actor.class.skill_name if actor.class.skill_name_valid self.index = 0 set_spin end end #============================================================================== # ? Window_BattleStatus #============================================================================== class Window_BattleStatus < Window_Selectable #-------------------------------------------------------------------------- # ? ????????? ? #-------------------------------------------------------------------------- def initialize super(128, 288, 416, 128) @column_max = 4 refresh self.active = false self.opacity = 0 end #-------------------------------------------------------------------------- # ? ??????? ????? #-------------------------------------------------------------------------- def draw_neomemo7_back @neomemo7_clear = false for index in 0...@item_max x = index * 96 self.contents.clear_rect(x + 72, WLH * 3, 24, 24) next unless Zii.battle_face? actor = $game_party.members[index] next if actor.hp <= 0 bitmap = Cache.face(actor.face_name) rect = Rect.new(0, 0, 22, 22) rect.x = actor.face_index % 4 * 96 + 72 rect.y = actor.face_index / 4 * 96 + 72 self.contents.blt(x + 72, WLH * 3, bitmap, rect, 192) end end #-------------------------------------------------------------------------- # ? ????? ? #-------------------------------------------------------------------------- def draw_item(index) x = index * 96 rect = Rect.new(x, 0, 96, 96) self.contents.clear_rect(rect) self.contents.font.color = normal_color actor = $game_party.members[index] draw_actor_face(actor, x + 2, 2, 92, 192) if actor.hp > 0 and Zii.battle_face? draw_actor_state(actor, x + 72, WLH * 3) if Zii.line_name? self.contents.font.color = hp_color(actor) size = Zii::LINE_SIZE self.contents.font.size = size self.contents.draw_text(x, WLH * 1 + 20 - size, 80, WLH, actor.name) self.contents.font.size = 20 end draw_actor_hp(actor, x, WLH * 2, 80) draw_actor_mp(actor, x, WLH * 3, 70) end #-------------------------------------------------------------------------- # ? ??????? #-------------------------------------------------------------------------- def update_cursor if @index < 0 # ??????? 0 ????? self.cursor_rect.empty # ?????????? else # ??????? 0 ????? rect = Rect.new(index * 96, 0, 96, 96) self.cursor_rect = rect # ?????????? end end end #============================================================================== # ? Scene_Battle #------------------------------------------------------------------------------ # ?????????????????? #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- alias :neomemo13_create_info_viewport :create_info_viewport def create_info_viewport neomemo13_create_info_viewport @info_viewport.rect.set(0, 0, 544, 416) @status_window.x = 128 @actor_command_window.x = 4 end #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- alias :neomemo13_update_info_viewport :update_info_viewport def update_info_viewport ox = @info_viewport.ox neomemo13_update_info_viewport @info_viewport.ox = ox end #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- alias :neomemo13_start_party_command_selection :start_party_command_selection def start_party_command_selection if $game_temp.in_battle @party_command_window.visible = true @actor_command_window.visible = false end neomemo13_start_party_command_selection end #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- alias :neomemo13_update_party_command_selection :update_party_command_selection def update_party_command_selection return unless @party_command_window.command_movable? neomemo13_update_party_command_selection end #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- alias :neomemo13_start_actor_command_selection :start_actor_command_selection def start_actor_command_selection neomemo13_start_actor_command_selection @party_command_window.visible = false @actor_command_window.visible = true end #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- alias :neomemo13_update_actor_command_selection :update_actor_command_selection def update_actor_command_selection return unless @actor_command_window.command_movable? neomemo13_update_actor_command_selection end #-------------------------------------------------------------------------- # ? ??????????? #-------------------------------------------------------------------------- alias :neomemo13_start_target_enemy_selection :start_target_enemy_selection def start_target_enemy_selection x = @info_viewport.rect.x ox = @info_viewport.ox neomemo13_start_target_enemy_selection @info_viewport.rect.x = x @info_viewport.ox = ox @target_enemy_window.x = 544 - @target_enemy_window.width @target_enemy_window.y = 288 @info_viewport.rect.width -= @target_enemy_window.width end #-------------------------------------------------------------------------- # ? ??????????? #-------------------------------------------------------------------------- alias :neomemo13_end_target_enemy_selection :end_target_enemy_selection def end_target_enemy_selection x = @info_viewport.rect.x ox = @info_viewport.ox @info_viewport.rect.width += @target_enemy_window.width neomemo13_end_target_enemy_selection @info_viewport.rect.x = x @info_viewport.ox = ox end #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- alias :neomemo13_start_target_actor_selection :start_target_actor_selection def start_target_actor_selection x = @info_viewport.rect.x ox = @info_viewport.ox neomemo13_start_target_actor_selection @target_actor_window.y = 288 @info_viewport.rect.x = x @info_viewport.ox = ox @info_viewport.rect.width -= @target_actor_window.width end #-------------------------------------------------------------------------- # ? ??????????? #-------------------------------------------------------------------------- alias :neomemo13_end_target_actor_selection :end_target_actor_selection def end_target_actor_selection x = @info_viewport.rect.x ox = @info_viewport.ox @info_viewport.rect.width += @target_actor_window.width neomemo13_end_target_actor_selection @info_viewport.r
    ect.x = x @info_viewport.ox = ox end end[/spoiler]

    It requires this image to work:



    This is what it looks like in action:


    I'd really, really appreciate this conversion! Thanks for reading! :D

ShinGamix

Just to let you know this has been done now.
The Maker of Battle Dungeons!!


[Spoiler=Big ass signature, bro]
AbsoluteIce I finally say your Sig.

Get by 20 attack Dogs...seriously. I got 20 attack Dogs.

*Your signature was raped changed for taking up too much room.
~Sincerely, a staff member. That is all you need to know. That, and I am no one to be trifled with.
[/Spoiler]

bastian

Quote from: ShinGamix on December 07, 2013, 12:25:43 AM
Just to let you know this has been done now.

Oh?! I didn't see it in the Script Index. However, I found a broken version in Japanese that a friend of mine fixed for me, but I would like to take a look at this other version as well for the heck of it, where is it? :D