#==============================================================================# # Name: RK5 Debug Console # # Version: 1.2.1 # # Author: Rikifive # #==============================================================================# # UPDATES # # ------- # # [■] 03.05.2016 | Version 1.2.1 # # └► you can print hooked object's parameters by pressing [CTRL] # # └► added changeable opacity of the object to hook command # # # # [■] 29.04.2016 | Version 1.2 # # └► added 'Give' command # # └► added 'Give All' command # # └► added 'Lose All' command # # └► added 'Spawn Gold' command # # └► added 'Noclip' command # # └► improved help window - it displays information more clearly # # # # [■] 27.04.2016 | Version 1.1 # # └► added 'Hook' function # # └► incorrect codes don't crash the game anymore # # | (Thanks to BLACK WYVERN for help with this) # # └► all sounds can be configured or disabled # # └► 'optimized' script code a little to make it shorter and more effective # # # # [■] 25.04.2016 | Version 1 # # └► initial release # #==============================================================================# # DESCRIPTION # # ----------- # # This script adds an in-game console, that can be brought in any scene # # to perform a script call, that can be typed during gameplay. # # There are many, many, many possibilities of using that console, # # starting from simply changing variables to even performing advanced codes to # # affect objects or even create them. # # Besides freely typed strings, the console contains build-in commands, # # for quicker debugging like teleporting player to specific maps # # and coordinates. # # # #==============================================================================# # FEATURES # # -------- # # -=> Use build-in commands! Think of cheats or commands in Minecraft lel # # -=> Hook objects like windows to adjust their position, size or opacity # # and print the results into a txt file! # # -=> Change variables, actor/enemy stats and many, many other # # -=> Check values maintained by variables etc. # # -=> Everything is up to you! # # # #==============================================================================# # INSTRUCTIONS # # ------------ # # ► SCRIPT DIFFICULTY: ★★☆☆☆ - ★★★★☆ # # from build-in commands - to advanced usage # # # # ► REQUIRED SCRIPTS! # # [■] CP Keyboard Input script by Neon Black # # └►[profile] http://forums.rpgmakerweb.com/index.php?/profile/626-neon-black/ # # └►[script] http://pastebin.com/raw/rD4rQtKP # # # # -=> Place script(s) below ▼ Materials; above ▼ Main Process # # -=> Plug & Play # # -=> Press '~' (tilde) to bring up the console or exit from it. # # -=> Type /help in console to view available commands and such. # # # #==============================================================================# # CURRENTLY AVAILABLE COMMANDS # # ---------------------------- # # [■] Commands - Call pre-made codes. # # └► Toogle Noclip Mode | /noclip # # | Desc: Allows to go through impassable objects. # # | Usage: /noclip #=> Toogles Noclip Mode ON/OFF # # | # # └► Give Item | /give [type] [id] [amount] OR /give [amount] # # | Desc: Spawns an item in inventory. Types: 1=item 2=weapon 3=armor # # | Usage: /give 1 5 10 #=> Gives 10x item with ID 5 from item category # # | /give Small Potion 10 #=> Gives items based on their names # # | (If there will be multiple items with the same name, it will # # | give them all, even from various item categories) # # | # # └► Give All | /give all # # | Desc: Fills your inventory with everything. # # | Usage: /give all #=> Gives EVERYTHING x 99 # # | # # └► Lose All | /lose all # # | Desc: Cleans up your inventory. # # | Usage: /lose all #=> Removes EVERYTHING x 999 # # | # # └► Spawn Gold | /gold [amount] # # | Desc: Adds or removes a specified amount of gold to/from inventory. # # | Usage: /gold 1000 #=> Adds 1000 gold to player's inventory # # | # # └► Transfer Player | /tp [map_id] [x] [y] # # | Desc: Moves player to specific map and coordinates. # # | Usage: /tp 2 4 5 #=> Moves player to [4,5] position on MAP002 # # | # # └► Scene Call | /sc scene ("Scene_" is automatically added) # # | Desc: Calls a specific scene. # # | Usage: /sc Menu #=> Calls a Scene_Menu # # | # # └► Escape From Battle | /run # # | Desc: Successfully escapes from battle. # # | Usage: /run #=> Escapes from battle and gets back to Map # # | # # └► Force Victory | /win # # Desc: Forces victory by instant-killing all enemies. # # Usage: /win #=> Kills all enemies - Your new secret OP weapon # # # # [■] Functions - New logical keywords used by this console. # # └► Check Value | [var] == ? # # | Desc: Returns current value from object to the console. # # | Usage: $game_variables[5] == ? #=> Returns value from Variable #5 # # | # # └► Hook Object | /hook [object] # # Desc: Hooks an object to allow moving/resising by input. # # Usage: /hook @status_window #=> Hooks f.e. a party window from menu # # # # [■] Shortcuts - Replaces keyword into a string when pressing [TAB] button. # # └► Variables | #v # # | Desc: Code used to handle variables. # # | Usage: #v =[TAB]=> $game_variables => $game_variables[3] # # | # # └► Switches | #s # # | Desc: Code used to handle switches. # # | Usage: #s =[TAB]=> $game_switches => $game_switches[3] # # | # # └► Party Members | #a # # | Desc: Refers to a member similar to eg. 'a.hp' in Damage Formulas. # # | Usage: #a =[TAB]=> $game_party.members => $game_party.members[3].hp # # | # # └► Party Members | #b # # Desc: Refers to an enemy similar to eg. 'b.hp' in Damage Formulas. # # Usage: #b =[TAB]=> $game_troop.members => $game_troop.members[3].hp # # # # REMEMBER: You can use negative numbers to subtract values / remove items # # # # - More to come in future updates - # #==============================================================================# # TERMS OF USE # # ------------ # # You ARE allowed to use this script in non-commercial projects. # # You ARE NOT allowed to use this script in commercial projects. # # You ARE allowed to edit this script to your needs. # # You ARE NOT allowed to repost or post modified versions of this script!!! # # You ARE DEFINITELY NOT allowed to claim this script as your own. # # Crediting me, Rikifive would be heavily appreciated. # # You ARE obligated to read and follow the terms of use of # # CP Keyboard Input script created by Neon Black as well # # # # While I won't kill anybody for breaking these rules, it still would be # # a violation of personal rights, that shouldn't happen. # # By using this script you accept these terms of use. # # Not reading them DOES NOT exempt you from liability. # # # #==============================================================================# # LAST WORDS # # ---------- # # This script has been written as a sort of an experiment. # # I'm not a professional scriptwriter - I wanted a simple console, that would # # do what I want without any unecessary fancy thingies. Also I wanted to learn # # more about strings/arrays, so I've started toying with them here. # # Most likely this code will look extremely noobish, but hey! It works and # # I'm really proud of it! So deal with it! (▀Ĺ̯▀̿) # # # # But if you have contructive suggestions, opinions and ideas, then feel free # # to tell me about them, but there's no need to be mean. # #==============================================================================# #=============================================================================== # >>> CONFIGURATION #=============================================================================== module RK5DC # Sound Effects | Set to true/false | ["Sound_Name", volume, pitch] PLAY_SOUND_INPUT = true # SE when typing SOUND_INPUT = ["Cursor1", 100, 100] PLAY_SOUND_BACK = true # SE when erasing characters by 'Backspace' SOUND_BACK = ["Cancel1", 100, 100] PLAY_SOUND_ENTER = true # SE when code is accepted SOUND_ENTER = ["Decision2", 100, 100] PLAY_SOUND_ERROR = true # SE when code was incorrect SOUND_ERROR = ["Buzzer1",100, 100] PLAY_SOUND_HELP = true # SE when browsing through help pages SOUND_HELP = ["Book1", 100, 100] PLAY_SOUND_PRINT = true # SE when printing object's parameters SOUND_PRINT = ["Save", 100, 100] end #=============================================================================== # >>> END OF CONFIGURATION #------------------------------------------------------------------------------- # /!\ WARNING! # ------------ # Editing anything below can result in breaking the script, which will give # you errors as a gift in return. ( °͜ʖ°) #=============================================================================== #=============================================================================== # >>> Create Console For Debugging #=============================================================================== class Window_RK5_Debug_Console < Window_Base #----------------------------------------------------------------------------- # >>> Object Initialization #----------------------------------------------------------------------------- def initialize super(-12, Graphics.height - 83, Graphics.width + 24, 95) self.z = 1000 self.opacity = 0 setup_window end #----------------------------------------------------------------------------- # >>> Setup Window #----------------------------------------------------------------------------- def setup_window @hide_console = false @string = "" @last = -1 @cursor_position = 0 @cursor_visibility = 0 @current_page = 0 setup_help @hook = false refresh end #----------------------------------------------------------------------------- # >>> Setup Sounds #----------------------------------------------------------------------------- def se_input; RPG::SE.new(RK5DC::SOUND_INPUT[0],RK5DC::SOUND_INPUT[1],RK5DC::SOUND_INPUT[2]).play if RK5DC::PLAY_SOUND_INPUT; end def se_back; RPG::SE.new(RK5DC::SOUND_BACK[0],RK5DC::SOUND_BACK[1],RK5DC::SOUND_BACK[2]).play if RK5DC::PLAY_SOUND_BACK; end def se_enter; RPG::SE.new(RK5DC::SOUND_ENTER[0],RK5DC::SOUND_ENTER[1],RK5DC::SOUND_ENTER[2]).play if RK5DC::PLAY_SOUND_ENTER; end def se_error; RPG::SE.new(RK5DC::SOUND_ERROR[0],RK5DC::SOUND_ERROR[1],RK5DC::SOUND_ERROR[2]).play if RK5DC::PLAY_SOUND_ERROR; end def se_help; RPG::SE.new(RK5DC::SOUND_HELP[0],RK5DC::SOUND_HELP[1],RK5DC::SOUND_HELP[2]).play if RK5DC::PLAY_SOUND_HELP; end def se_print; RPG::SE.new(RK5DC::SOUND_PRINT[0],RK5DC::SOUND_PRINT[1],RK5DC::SOUND_PRINT[2]).play if RK5DC::PLAY_SOUND_PRINT; end #----------------------------------------------------------------------------- # >>> Refresh #----------------------------------------------------------------------------- def refresh self.contents.clear return if @hide_console input_y = 35 # >>> Configuring Font self.contents.font.size = 24 # >>> Draw Console Title contents.fill_rect(0, 0, 98, 2, Color.new(160,210,255)) contents.fill_rect(98, 0, 2, 29, Color.new(160,210,255)) contents.fill_rect(0, 2, 98, 27, Color.new(60,40,40)) self.contents.font.color = Color.new(255,200,100) draw_text(0, 2, 100, 24, "CONSOLE", 1) # >>> Make Input Box contents.fill_rect(0, input_y - 6, self.width, 2, Color.new(160,210,255)) contents.fill_rect(0, input_y - 4, self.width, 32, Color.new(40,40,40)) contents.fill_rect(0, input_y + 28, self.width, 2, Color.new(160,210,255)) @string_size = self.contents.text_size(@string).width @move_text = [@string_size - 500,0].max @string_rect = @cursor_position > 0 ? self.contents.text_size(@string[0..@cursor_position - 1]).width : 0 @cursor_position_x = 20 + @string_rect - @move_text @move_text = [@move_text - (500 - @cursor_position_x),0].max if @string_size > 480 self.contents.font.color = Color.new(150,255,255) draw_text(10 - @move_text, input_y, 10, 24, ">") self.contents.font.color = Color.new(255,255,255) if !@hook self.contents.font.color = Color.new(190,220,255) if @hook draw_text(20 - @move_text, input_y, @string_size + 5, 24, @string) if @cursor_visibility < 40 && !@hook self.contents.font.color = Color.new(255,255,100) draw_text(20 + @string_rect - @move_text, input_y, 10, 24, "|") end # >>> Make Help Box if @string == "/"; if @scroll_help; refresh_help(0); end help = "Type /help to view available commands" self.contents.font.color = Color.new(255,190,255) elsif @hook help = "WSAD - Move | Arrow Keys - Resize (Window Objects Only)" if @help_page == 1 help = "Q and E - Priority | [ and ] - Opacity" if @help_page == 2 help = "Tab - Hide Console | CTRL - Print Parameters | Enter - Unhook" if @help_page == 3 self.contents.font.color = Color.new(255,255,175) self.contents.font.size = 20 elsif @string.end_with? "#v"; if @scroll_help; refresh_help(0); end help = "[TAB] -> $game_variables" self.contents.font.color = Color.new(150,255,150) elsif @string.end_with? "#s"; if @scroll_help; refresh_help(0); end help = "[TAB] -> $game_switches" self.contents.font.color = Color.new(150,255,150) elsif @string.end_with? "#a"; if @scroll_help; refresh_help(0); end help = "[TAB] -> $game_party.members" self.contents.font.color = Color.new(150,255,150) elsif @string.end_with? "#b"; if @scroll_help; refresh_help(0); end help = "[TAB] -> $game_troop.members" self.contents.font.color = Color.new(150,255,150) elsif @string.end_with? " == ?"; if @scroll_help; refresh_help(0); end help = "[FUN] Check Value" self.contents.font.color = Color.new(150,255,255) elsif @string.start_with? "/hook"; if !@scroll_help; refresh_help(2); end help = "[FUN] Hook Object | /hook " if @help_page == 1 help = "[FUN] Hook Object | ex: /hook @status_window" if @help_page == 2 self.contents.font.color = Color.new(150,255,255) elsif @string.start_with? "/noclip"; if @scroll_help; refresh_help(0); end help = "[COM] Toogle Noclip Mode" self.contents.font.color = Color.new(255,200,150) elsif @string.start_with? "/give all"; if @scroll_help; refresh_help(0); end help = "[COM] Get All Items"; if @scroll_help; refresh_help(0); end self.contents.font.color = Color.new(255,200,150) elsif @string.start_with? "/lose all"; if @scroll_help; refresh_help(0); end help = "[COM] Remove All Items"; if @scroll_help; refresh_help(0); end self.contents.font.color = Color.new(255,200,150) elsif @string.start_with? "/give"; if !@scroll_help; refresh_help(4); end help = "[COM] Give Item | /give [type] [id] [amount]" if @help_page == 1 help = "[COM] Give Item | ex: /give 1 5 10" if @help_page == 2 help = "[COM] Give Item | /give [amount]" if @help_page == 3 help = "[COM] Give Item | ex: /give Small Potion 10" if @help_page == 4 self.contents.font.color = Color.new(255,200,150) elsif @string.start_with? "/gold"; if !@scroll_help; refresh_help(2); end help = "[COM] Spawn Gold | /gold [amount]" if @help_page == 1 help = "[COM] Spawn Gold | ex: /gold 1000" if @help_page == 2 self.contents.font.color = Color.new(255,200,150) elsif @string.start_with? "/tp"; if !@scroll_help; refresh_help(2); end help = "[COM] Transfer Player | /tp [map_id] [x] [y]" if @help_page == 1 help = "[COM] Transfer Player | ex: /tp 5 15 10" if @help_page == 2 self.contents.font.color = Color.new(255,200,150) elsif @string.start_with? "/sc"; if !@scroll_help; refresh_help(2); end help = "[COM] Scene Call | /sc " if @help_page == 1 help = "[COM] Scene Call | ex: /sc Menu" if @help_page == 2 self.contents.font.color = Color.new(255,200,150) elsif @string.start_with? "/run"; if @scroll_help; refresh_help(0); end help = "[COM] Escape From Battle" self.contents.font.color = Color.new(255,200,150) elsif @string.start_with? "/win"; if @scroll_help; refresh_help(0); end help = "[COM] Kill All Enemies" self.contents.font.color = Color.new(255,200,150) elsif @string == "/help"; if @scroll_help; refresh_help(0); end setup_help help = @page[@current_page] self.contents.font.color = Color.new(255,190,255) self.contents.font.size = 15 else; @scroll_help; refresh_help(0); end if help != nil help_rect = self.contents.text_size(help).width contents.fill_rect(100, 0, Graphics.width - 100, 2, Color.new(160,210,255)) contents.fill_rect(100, 2, Graphics.width - 100, 27, Color.new(40,40,60)) contents.fill_rect(100, 2, Graphics.width - 100, 27, Color.new(60,40,70)) if @string == "/help" contents.fill_rect(100, 2, Graphics.width - 100, 27, Color.new(40,70,50)) if @hook draw_text(110, 4, help_rect + 5, 24, help) end reset_font_settings end #----------------------------------------------------------------------------- # >>> Setup Help #----------------------------------------------------------------------------- def setup_help @page = [] @page[@page.size] = "Use arrow keys to browse through pages." @page[@page.size] = "Functions are new logical keywords used by this console." @page[@page.size] = "[FUNCTION] == ? | Returns value maintained by something." @page[@page.size] = "[FUNCTION] /hook | Allows to adjust an object by input." @page[@page.size] = "Shortcuts are keywords, that are replaced by code when pressing [TAB]." @page[@page.size] = "[SHORTCUT] '#v' | => $game_variables | Variable[ID]" @page[@page.size] = "[SHORTCUT] '#s' | => $game_switches | Switch[ID]" @page[@page.size] = "[SHORTCUT] '#a' | => $game_party.members | Party Member[ID]" @page[@page.size] = "[SHORTCUT] '#b' | => $game_troop.members | Enemy[ID]" @page[@page.size] = "Commands are pre-made codes for quicker debugging." @page[@page.size] = "[COMMAND] /noclip | Toggle ability to walk through impassable tiles." @page[@page.size] = "[COMMAND] /give | Spawns items in the inventory." @page[@page.size] = "[COMMAND] /give all | Gives all items." @page[@page.size] = "[COMMAND] /lose all | Removes all items." @page[@page.size] = "[COMMAND] /gold | Spawns Gold." @page[@page.size] = "[COMMAND] /tp | Transfers player to specific map and coordinates." @page[@page.size] = "[COMMAND] /sc | Calls a scene." @page[@page.size] = "[COMMAND] /run | Successfully escapes from battle." @page[@page.size] = "[COMMAND] /win | Forces victory by killing all enemies." @page[@page.size] = "More functionality will be added in future updates." @page[@page.size] = "Feel free to leave a suggestion for adding more commands/features" @page.size.times do |page| text = "Page " + (@current_page+1).to_s + "/" + @page.size.to_s + " | " @page[page].insert(0, text) end end #----------------------------------------------------------------------------- # >>> Refresh Help #----------------------------------------------------------------------------- def refresh_help(pages = 1) if pages == 0; @scroll_help = false; return; end @scroll_help = true @help_pages = pages @help_timer = 0 @help_page = 1 end #----------------------------------------------------------------------------- # >>> Update #----------------------------------------------------------------------------- def update super update_cursor if !@hook update_help_timer if @scroll_help update_input end #----------------------------------------------------------------------------- # >>> Update Text Cursor #----------------------------------------------------------------------------- def update_cursor @cursor_visibility = @cursor_visibility >= 79 ? 0 : @cursor_visibility + 1 refresh if @cursor_visibility % 40 == 0 end #----------------------------------------------------------------------------- # >>> Update Help Scrolling #----------------------------------------------------------------------------- def update_help_timer @help_timer = @help_timer >= 200 * @help_pages - 1 ? 0 : @help_timer + 1 if @help_timer % 200 == 0; @help_page = @help_timer / 200 + 1; refresh; end end #----------------------------------------------------------------------------- # >>> Update Input #----------------------------------------------------------------------------- def update_input ###=[ 'HOOK' FUNCTION ACTIVATED ]=########################################## if @hook # MOVE OBJECT # SHIFT? if caps? SceneManager.scene.console_move_object("y",-1) if Input.press?(:kW) SceneManager.scene.console_move_object("y",1) if Input.press?(:kS) SceneManager.scene.console_move_object("x",-1) if Input.press?(:kA) SceneManager.scene.console_move_object("x",1) if Input.press?(:kD) SceneManager.scene.console_move_object("z",-1) if Input.press?(:kQ) SceneManager.scene.console_move_object("z",1) if Input.press?(:kE) SceneManager.scene.console_move_object("-",0,0,0,-1) if Input.press?(:kLEFTBRACE) SceneManager.scene.console_move_object("-",0,0,0,1) if Input.press?(:kRIGHTBRACE) SceneManager.scene.console_move_object("-",0,0,-1) if Input.press?(:kUP) SceneManager.scene.console_move_object("-",0,0,1) if Input.press?(:kDOWN) SceneManager.scene.console_move_object("-",0,-1) if Input.press?(:kLEFT) SceneManager.scene.console_move_object("-",0,1) if Input.press?(:kRIGHT) end if Input.repeat?(:kW); SceneManager.scene.console_move_object("y",-1) elsif Input.repeat?(:kS); SceneManager.scene.console_move_object("y",1) elsif Input.repeat?(:kA); SceneManager.scene.console_move_object("x",-1) elsif Input.repeat?(:kD); SceneManager.scene.console_move_object("x",1) elsif Input.repeat?(:kQ); SceneManager.scene.console_move_object("z",-1) elsif Input.repeat?(:kE); SceneManager.scene.console_move_object("z",1) elsif Input.repeat?(:kLEFTBRACE); SceneManager.scene.console_move_object("-",0,0,0,-1) elsif Input.repeat?(:kRIGHTBRACE); SceneManager.scene.console_move_object("-",0,0,0,1) elsif Input.repeat?(:kUP); SceneManager.scene.console_move_object("-",0,0,-1) elsif Input.repeat?(:kDOWN); SceneManager.scene.console_move_object("-",0,0,1) elsif Input.repeat?(:kLEFT); SceneManager.scene.console_move_object("-",0,-1) elsif Input.repeat?(:kRIGHT); SceneManager.scene.console_move_object("-",0,1) end # REFRESH CONSOLE if caps? if Input.press?(:kW) || Input.press?(:kS) || Input.press?(:kA) || Input.press?(:kD) || Input.press?(:kUP) || Input.press?(:kDOWN) || Input.press?(:kLEFT) || Input.press?(:kRIGHT) || Input.press?(:kQ) || Input.press?(:kE) || Input.press?(:kLEFTBRACE) || Input.press?(:kRIGHTBRACE) @string = SceneManager.scene.console_move_object; refresh; end else if Input.repeat?(:kW) || Input.repeat?(:kS) || Input.repeat?(:kA) || Input.repeat?(:kD) || Input.repeat?(:kUP) || Input.repeat?(:kDOWN) || Input.repeat?(:kLEFT) || Input.repeat?(:kRIGHT) || Input.repeat?(:kQ) || Input.repeat?(:kE) || Input.repeat?(:kLEFTBRACE) || Input.repeat?(:kRIGHTBRACE) @string = SceneManager.scene.console_move_object; refresh; end end # HIDE CONSOLE if Input.trigger?(:kTAB); @hide_console = @hide_console ? false : true ; refresh; end # PRINT PARAMETERS if Input.trigger?(:kCTRL) se_print current_scene = SceneManager.scene.to_s scene = current_scene[2, current_scene.index(":") -2] object = SceneManager.scene.console_hook_object("-",get_object = true) File.open("RK5 Debug Console Print.txt", "a") {|f| f.write( "[ Scene: " + scene + " | Object: " + object + " ]\n" + @string.to_s + "\n\n") } end # UNHOOK setup_window if Input.trigger?(:kENTER) ###=[ NO FUNCTIONS ACTIVATED ]=############################################# else # LETTERS if Input.repeat?(:kA); @sym = caps? ? 'A' : 'a'; add_symbol elsif Input.repeat?(:kB); @sym = caps? ? 'B' : 'b'; add_symbol elsif Input.repeat?(:kC); @sym = caps? ? 'C' : 'c'; add_symbol elsif Input.repeat?(:kD); @sym = caps? ? 'D' : 'd'; add_symbol elsif Input.repeat?(:kE); @sym = caps? ? 'E' : 'e'; add_symbol elsif Input.repeat?(:kF); @sym = caps? ? 'F' : 'f'; add_symbol elsif Input.repeat?(:kG); @sym = caps? ? 'G' : 'g'; add_symbol elsif Input.repeat?(:kH); @sym = caps? ? 'H' : 'h'; add_symbol elsif Input.repeat?(:kI); @sym = caps? ? 'I' : 'i'; add_symbol elsif Input.repeat?(:kJ); @sym = caps? ? 'J' : 'j'; add_symbol elsif Input.repeat?(:kK); @sym = caps? ? 'K' : 'k'; add_symbol elsif Input.repeat?(:kL); @sym = caps? ? 'L' : 'l'; add_symbol elsif Input.repeat?(:kM); @sym = caps? ? 'M' : 'm'; add_symbol elsif Input.repeat?(:kN); @sym = caps? ? 'N' : 'n'; add_symbol elsif Input.repeat?(:kO); @sym = caps? ? 'O' : 'o'; add_symbol elsif Input.repeat?(:kP); @sym = caps? ? 'P' : 'p'; add_symbol elsif Input.repeat?(:kQ); @sym = caps? ? 'Q' : 'q'; add_symbol elsif Input.repeat?(:kR); @sym = caps? ? 'R' : 'r'; add_symbol elsif Input.repeat?(:kS); @sym = caps? ? 'S' : 's'; add_symbol elsif Input.repeat?(:kT); @sym = caps? ? 'T' : 't'; add_symbol elsif Input.repeat?(:kU); @sym = caps? ? 'U' : 'u'; add_symbol elsif Input.repeat?(:kV); @sym = caps? ? 'V' : 'v'; add_symbol elsif Input.repeat?(:kW); @sym = caps? ? 'W' : 'w'; add_symbol elsif Input.repeat?(:kX); @sym = caps? ? 'X' : 'x'; add_symbol elsif Input.repeat?(:kY); @sym = caps? ? 'Y' : 'y'; add_symbol elsif Input.repeat?(:kZ); @sym = caps? ? 'Z' : 'z'; add_symbol # NUMBERS elsif Input.repeat?(:k1); @sym = caps? ? '!' : '1'; add_symbol elsif Input.repeat?(:k2); @sym = caps? ? '@' : '2'; add_symbol elsif Input.repeat?(:k3); @sym = caps? ? '#' : '3'; add_symbol elsif Input.repeat?(:k4); @sym = caps? ? '$' : '4'; add_symbol elsif Input.repeat?(:k5); @sym = caps? ? '%' : '5'; add_symbol elsif Input.repeat?(:k6); @sym = caps? ? '^' : '6'; add_symbol elsif Input.repeat?(:k7); @sym = caps? ? '&' : '7'; add_symbol elsif Input.repeat?(:k8); @sym = caps? ? '*' : '8'; add_symbol elsif Input.repeat?(:k9); @sym = caps? ? '(' : '9'; add_symbol elsif Input.repeat?(:k0); @sym = caps? ? ')' : '0'; add_symbol # SYMBOLS elsif Input.repeat?(:kSPACE); @sym = ' '; add_symbol elsif Input.repeat?(:kUNDERSCORE); @sym = caps? ? '_' : '-'; add_symbol elsif Input.repeat?(:kEQUAL); @sym = caps? ? '+' : '='; add_symbol elsif Input.repeat?(:kLEFTBRACE); @sym = caps? ? '{' : '['; add_symbol elsif Input.repeat?(:kRIGHTBRACE); @sym = caps? ? '}' : ']'; add_symbol elsif Input.repeat?(:kCOLON); @sym = caps? ? ':' : ';'; add_symbol elsif Input.repeat?(:kAPOSTROPHE); @sym = caps? ? '"' : "'"; add_symbol elsif Input.repeat?(:kBACKSLASH); @sym = caps? ? '|' : '\\'; add_symbol elsif Input.repeat?(:kCOMMA); @sym = caps? ? '<' : ','; add_symbol elsif Input.repeat?(:kPERIOD); @sym = caps? ? '>' : '.'; add_symbol elsif Input.repeat?(:kSLASH); @sym = caps? ? '?' : '/'; add_symbol # ARROWS elsif Input.repeat?(:kUP) #---[=> Help ] if @string == "/help" if @current_page < @page.size - 1 se_help; @current_page = [@current_page + 10,@page.size - 1].min else; return; end #---[=> Get Next Recent String ] elsif $game_temp.last_string.size - 1 > @last se_input @last += 1 @string = $game_temp.last_string.at(@last) @cursor_position = @string.size else; return; end refresh elsif Input.repeat?(:kDOWN) #---[=> Help ] if @string == "/help" if @current_page > 0 se_help; @current_page = [@current_page - 10,0].max else; return; end #---[=> Get Previous Recent String ] elsif @last > -1 se_input @last -= 1 @string = @last >= 0 ? $game_temp.last_string.at(@last) : "" @cursor_position = @string.size else; return; end refresh elsif Input.repeat?(:kLEFT) #---[=> Help ] if @string == "/help" if @current_page > 0; se_help; @current_page -= 1; else; return; end #---[=> Move Cursor ] elsif @cursor_position > 0 @cursor_position -= 1 @cursor_visibility = 0 else; return; end refresh elsif Input.repeat?(:kRIGHT) #---[=> Help ] if @string == "/help" if @current_page < @page.size - 1; se_help; @current_page += 1; else; return; end #---[=> Move Cursor ] elsif @cursor_position < @string.size && @string != "/help" @cursor_position += 1 @cursor_visibility = 0 else; return; end refresh # BACKSPACE elsif Input.repeat?(:kBACKSPACE) && @string.size > 0 se_back if @cursor_position > 0 @string[@cursor_position - 1] = "" @cursor_position -= 1 else @string[@cursor_position] = "" end @cursor_visibility = 0 refresh # USE SHORTCUT elsif Input.trigger?(:kTAB) check_shortcuts # RUN CODE elsif Input.trigger?(:kENTER) begin scan_string se_enter rescue se_error; SceneManager.scene.dispose_rk5_console rescue SyntaxError => se se_error; SceneManager.scene.dispose_rk5_console end end end # FUNCTION! end #----------------------------------------------------------------------------- # >>> Check Shift Buttons #----------------------------------------------------------------------------- def caps? if Input.press?(:kLSHIFT) || Input.press?(:kRSHIFT) return true else return false end end #----------------------------------------------------------------------------- # >>> Add Symbol #----------------------------------------------------------------------------- def add_symbol se_input @string.insert(@cursor_position, @sym) @cursor_position += 1 @cursor_visibility = 0 refresh end #----------------------------------------------------------------------------- # >>> Scan String #----------------------------------------------------------------------------- def scan_string #===[ Scan String ]========================================================= # Store Recently Typed String $game_temp.last_string.unshift(@string) # Clean Strings Older Than 50 Entries $game_temp.last_string.pop if $game_temp.last_string.size > 50 # >>> Toggle Noclip Mode if @string.start_with? "/noclip" @string = "$game_temp.noclip = " + ($game_temp.noclip ? "false" : "true") run_code # >>> Give All Items elsif @string.start_with? "/give all" @string = "$data_items.each {|item| $game_party.gain_item(item, 99)}; " + "$data_weapons.each {|item| $game_party.gain_item(item, 99)}; " + "$data_armors.each {|item| $game_party.gain_item(item, 99)}" run_code # >>> Lose All Items elsif @string.start_with? "/lose all" @string = "$data_items.each {|item| $game_party.gain_item(item, -999)}; " + "$data_weapons.each {|item| $game_party.gain_item(item, -999)}; " + "$data_armors.each {|item| $game_party.gain_item(item, -999)}" run_code # >>> Give elsif @string.start_with? "/give" part = @string.split if part[1] == "1" || part[1] == "2" || part[1] == "3" # [type] [id] [amount] case part[1]; when "1"; type = "items"; when "2"; type = "weapons"; when "3"; type = "armors"; end @string = "$game_party.gain_item($data_" + type + "[" + part[2].to_s + "], " + part[3].to_s + ")" else # [name] [amount] name_parts = @string.split; name_parts.pop; name_parts.shift name = "'" + name_parts * " " + "'" @string = "$data_items.each {|item| $game_party.gain_item(item, " + part.last.to_s + ") if item && item.name == " + name.to_s + "}; " + "$data_weapons.each {|item| $game_party.gain_item(item, " + part.last.to_s + ") if item && item.name == " + name.to_s + "}; " + "$data_armors.each {|item| $game_party.gain_item(item, " + part.last.to_s + ") if item && item.name == " + name.to_s + "}" end # id/name run_code # >>> Get Gold elsif @string.start_with? "/gold" part = @string.split @string = "$game_party.gain_gold(" + part[1].to_s + ")" run_code # >>> Player Transfer Command elsif @string.start_with? "/tp" part = @string.split location = part[1].to_s + "," + part[2].to_s + "," + part[3].to_s @string = "$game_player.reserve_transfer(" + location + ")" run_code # >>> Scene Call elsif @string.start_with? "/sc" @string = @string[4, @string.size] @string = "SceneManager.call(Scene_" + @string + ")" run_code # >>> Escape From Battle elsif @string.start_with? "/run" @string = "BattleManager.abort" run_code # >>> Kill All Enemies elsif @string.start_with? "/win" @string = "$game_troop.members.each do |e|; e.hp -= 99999999999; e.perform_collapse_effect; end" run_code # >>> Hook Object elsif @string.start_with? "/hook" SceneManager.scene.console_hook_object(@string) @hook = true refresh_help(3) @string = SceneManager.scene.console_move_object refresh # >>> Asking for the value elsif @string.end_with? " == ?" check_for_value @string = @string + " = " + SceneManager.scene.console_ask_for_value.to_s @cursor_position = @string.size refresh # >>> When there's no special code detected else run_code end end #----------------------------------------------------------------------------- # >>> Run Code! #----------------------------------------------------------------------------- def run_code if Input.press?(:kPDOWN); @cursor_position = @string.size; refresh; return; end SceneManager.scene.console_eval_string(@string) end #----------------------------------------------------------------------------- # >>> Check For Value #----------------------------------------------------------------------------- def check_for_value # Reset Last String Position @last = -1 # Clean String From Special Format @string = @string[0, @string.size - 5] # Run Code! SceneManager.scene.console_ask_for_value(@string) end #----------------------------------------------------------------------------- # >>> Check For Shortcuts #----------------------------------------------------------------------------- def check_shortcuts if @string.end_with? "#v" #=> VARIABLES @string = @string.size > 2 ? @string[0, @string.size - 2] : "" @string += "$game_variables" shortcut_return_string elsif @string.end_with? "#s" #=> SWITCHES @string = @string.size > 2 ? @string[0, @string.size - 2] : "" @string += "$game_switches" shortcut_return_string elsif @string.end_with? "#a" #=> MEMBERS @string = @string.size > 2 ? @string[0, @string.size - 2] : "" @string += "$game_party.members" shortcut_return_string elsif @string.end_with? "#b" #=> ENEMIES @string = @string.size > 2 ? @string[0, @string.size - 2] : "" @string += "$game_troop.members" shortcut_return_string end end def shortcut_return_string(pos = @string.size) se_enter @cursor_position = pos refresh end end #=============================================================================== # >>> Modification of Scene_Base #=============================================================================== class Scene_Base #----------------------------------------------------------------------------- # >>> [OVERWRITE] Main # -=> Replacing 'update' method with even 'greater' one... #----------------------------------------------------------------------------- def main start post_start update_game until scene_changing? pre_terminate terminate end #----------------------------------------------------------------------------- # >>> [CREATE] Main Update Method # -=> Takes priority over 'update' method, so that when the console is open, # everything 'freezes', except that debug window. #----------------------------------------------------------------------------- def update_game if debug_mode? update_console_only else update end end #----------------------------------------------------------------------------- # >>> [CREATE] Checking if Debug Mode is Enabled # -=> Detects if the console is open. #----------------------------------------------------------------------------- def debug_mode? @rk5_console_window end #----------------------------------------------------------------------------- # >>> [ALIAS] Update # -=> Just adds input detection for a button, that opens the console. #----------------------------------------------------------------------------- alias :rk5_console_update :update def update rk5_console_update update_console_call end #----------------------------------------------------------------------------- # >>> [CREATE] Update (Console Only) # -=> Just like the update, but updates only the console window. #----------------------------------------------------------------------------- def update_console_only Graphics.update Input.update @rk5_console_window.update update_console_call end #----------------------------------------------------------------------------- # >>> [CREATE] Update Console Call # -=> Brings or disposes the console when [~] button is pressed. #----------------------------------------------------------------------------- def update_console_call if Input.trigger?(:kTILDE) if @rk5_console_window == nil @rk5_console_window = Window_RK5_Debug_Console.new else dispose_rk5_console end end end #----------------------------------------------------------------------------- # >>> [CREATE] Dispose RK5 Console Window #----------------------------------------------------------------------------- def dispose_rk5_console @rk5_console_window.dispose if @rk5_console_window @rk5_console_window = nil end #----------------------------------------------------------------------------- # >>> [CREATE] Console Eval String # -=> Runs the typed string. #----------------------------------------------------------------------------- def console_eval_string(string) dispose_rk5_console eval string end #----------------------------------------------------------------------------- # >>> [CREATE] Console Ask For Value # -=> Special Function: Asking for a variable. # -> Checks the current value of typed variable and returns it to the console. #----------------------------------------------------------------------------- def console_ask_for_value(string = nil) if string != nil @console_result = nil @console_result = eval string @console_result = "nil" if @console_result == nil else return @console_result end end #----------------------------------------------------------------------------- # >>> [CREATE] Hook Object # -=> Special Function: Moves or resizes an object. # -> Hooks an object to move or resize it by input. #----------------------------------------------------------------------------- def console_hook_object(string,get_object = false) return @console_hooked_object_name if get_object object = string[6, string.size] @console_hooked_object_name = object @console_hooked_object = eval object end #----------------------------------------------------------------------------- # >>> [CREATE] Console Move Object - Hook Object Function # -> Performs an action and stores object's parameters. #----------------------------------------------------------------------------- def console_move_object(dir="x",dist=0,rewi=0,rehei=0,opac=0) obj = @console_hooked_object object = instance_variable_get(@console_hooked_object_name) obj.x += dist if dir == "x" && dist != 0 obj.y += dist if dir == "y" && dist != 0 obj.z += dist if dir == "z" && dist != 0 obj.width += rewi if rewi != 0 && object.is_a?(Window) obj.height += rehei if rehei != 0 && object.is_a?(Window) obj.opacity += opac if opac != 0 object_parameters = "x: " + obj.x.to_s + " | y: " + obj.y.to_s + " | z: " + obj.z.to_s + " | w: " + obj.width.to_s + " | h: " + obj.height.to_s + " | o: " + obj.opacity.to_s return object_parameters end end class Game_Player < Game_Character #----------------------------------------------------------------------------- # >>> [ALIAS] debug_through? # -> Implements Noclip Mode. #-------------------------------------------------------------------------- alias :rk5_console_debug_through? :debug_through? def debug_through? rk5_console_debug_through? || $game_temp.noclip end end #=============================================================================== # >>> Store Recently Typed String #=============================================================================== class Game_Temp attr_accessor :last_string attr_accessor :noclip alias :rk5_console_initialize :initialize def initialize rk5_console_initialize @last_string = [] @noclip = false end end