-
Content Count
188 -
Joined
-
Last visited
-
Days Won
5
Content Type
Profiles
Forums
Blogs
Downloads
Calendar
Gallery
Everything posted by Zeriab
-
I have tried to make a Dialog system which is intended to ease the creation of dialogs. Dialog system #============================================================================== # ** Dialog system #------------------------------------------------------------------------------ # Zeriab # Version 1.0 # 2007-11-07 (Year-Month-Day) #------------------------------------------------------------------------------ # * Description : # # A small framework like script for dialogs #------------------------------------------------------------------------------ # * License : # # Copyright (C) 2007 Zeriab # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser Public License for more details. # # For the full license see <http://www.gnu.org/licenses/> # The GNU General Public License: http://www.gnu.org/licenses/gpl.txt # The GNU Lesser General Public License: http://www.gnu.org/licenses/lgpl.txt #------------------------------------------------------------------------------ # * Instructions : # # You can place this script pretty much anyway you like. # Place it above any other Dialogs you might be using. # Increase the STARTING_Z_VALUE if you have trouble with the dialog not # on top. #============================================================================== class Dialog STARTING_Z_VALUE = 1500 # Default value is 1500 attr_accessor :value attr_writer :marked_to_close #-------------------------------------------------------------------------- # * Getter with 'false' as default value #-------------------------------------------------------------------------- def marked_to_close @marked_to_close = false if @marked_to_close.nil? return @marked_to_close end #-------------------------------------------------------------------------- # * Initialization #-------------------------------------------------------------------------- def mark_to_close self.marked_to_close = true end #-------------------------------------------------------------------------- # * Show the dialog # Returns the value from the dialog #-------------------------------------------------------------------------- def self.show(*args, &block) dialog = self.new(*args, &block) dialog.marked_to_close = false return dialog.main end #-------------------------------------------------------------------------- # * Initialization #-------------------------------------------------------------------------- def initialize(*args, &block) # For subclasses to overwrite end #-------------------------------------------------------------------------- # * Main processing #-------------------------------------------------------------------------- def main # Create the dimmed background create_background # Create Windows main_window # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if the dialog should close if marked_to_close break end end # Dispose of windows main_dispose # Dispose of background dispose_background # Update input information Input.update # Returns the acquired value return self.value end #-------------------------------------------------------------------------- # * Create the dimmed background #-------------------------------------------------------------------------- def create_background bitmap = Bitmap.new(640,480) bitmap.fill_rect(0,0,640,480,Color.new(0,0,0,128)) @background_sprite = Sprite.new @background_sprite.z = STARTING_Z_VALUE @background_sprite.bitmap = bitmap end #-------------------------------------------------------------------------- # * Create the windows #-------------------------------------------------------------------------- def main_window # For the subclasses to override # Remember to set their z.value to at least STARTING_Z_VALUE + 1 end #-------------------------------------------------------------------------- # * Dispose the background #-------------------------------------------------------------------------- def dispose_background @background_sprite.dispose end #-------------------------------------------------------------------------- # * Dispose the windows #-------------------------------------------------------------------------- def main_dispose # For the subclasses to override # Dispose your windows here end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # For the subclasses to override if Input.trigger?(Input::B) mark_to_close end end end What is a dialog? You can consider it as a scene that runs on top of the current scene. Here is an example of how the system can be used. It is a yes/no dialog. An example - A Yes/No Dialog #============================================================================ # * A Simple Yes/No dialog #============================================================================ class Dialog_YesNo < Dialog # self.value: false = No, true = Yes #-------------------------------------------------------------------------- # * A show method #-------------------------------------------------------------------------- def initialize(default_value = false, text = nil) # Sets the default value self.value = default_value @text = text # Sets the menu index if default_value @menu_index = 0 else @menu_index = 1 end end #-------------------------------------------------------------------------- # * Create the windows #-------------------------------------------------------------------------- def main_window @disposables = [] # The command window @command_window = Window_Command.new(80, ['Yes', 'No']) @command_window.index = @menu_index @command_window.x = (640 - @command_window.width) / 2 @command_window.y = (480 - @command_window.height) / 2 @command_window.z = STARTING_Z_VALUE + 1 @disposables << @command_window # The text window if @text.is_a?(String) @text_window = Window_Help.new @text_window.set_text(@text, 1) @text_window.z = STARTING_Z_VALUE + 1 @disposables << @text_window end end #-------------------------------------------------------------------------- # * Dispose the windows #-------------------------------------------------------------------------- def main_dispose @disposables.each {|element| element.dispose} end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update @command_window.update if Input.trigger?(Input::B) mark_to_close end if Input.trigger?(Input::C) if @command_window.index == 0 self.value = true else self.value = false end mark_to_close end end end The idea is that you can all this dialog anywhere with the code: # Code before var = Dialog_YesNo.show(default_value, text) # Calls the dialog # Code after The dialog should then be shown and the code after will only be executed after the player chooses yes or no. It will return false if No is selected and true if Yes is selected. Then the code placed after the call will be executed. You can say it will freeze execution until the dialog is closed. The principle is that you can call this code anyway. In script calls as well as in normal scripts. Here is an example of a script call: s = 'Do you want to open the chest?' v = Dialog_YesNo.show(true, s) $game_switches[5] = v Here is an event using this: Angry Chest Here is a screenie of it in action: I assume you know how to make page 2 and page 3 yourself. I know. This can easily be done with the normal choice system in events. So what about an example where its use is more clear? Did you know that if you try to save on a slot where there already is a savegame it does not ask if you want to overwrite? It simply just overwrites the savegame. Let us say we don't want that. The remedy? class Scene_Save < Scene_File alias scene_save_overwrite_dialog_on_decision on_decision #-------------------------------------------------------------------------- # * Decision Processing #-------------------------------------------------------------------------- def on_decision(filename) if File.exist?(filename) var = Dialog_YesNo.show(false, 'Do you want to overwrite' + ' the old savegame?') unless var $game_system.se_play($data_system.buzzer_se) return end end scene_save_overwrite_dialog_on_decision(filename) end end Just paste this anywhere below the original Scene_Save. Screenie I have tried to give dialogs the feeling of scenes. When you create a dialog you will in most cases only have to overwrite 3-4 methods: main_window You should create the windows you are going to use in this method. Please set the .z-values of the windows to at least STARTING_Z_VALUE + 1 This is what you put before the main loop when creating a normal scene. You can consider it pretty much equivalent to the main_window method in the SDK. Does nothing by default main_dispose Dispose of the windows you have created here and do any other clean up you find necessary. Does nothing by default update The update method is pretty much equivalent to the update method in a normal scene. Exits the scene when you press the B-button by default. You end the dialog by calling the mark_to_close method. It will then exit just like if you normally change the scene. Remember to set the value that will be returned. By default is nil returned. Use self.value = ... to set the value. This value will not be frozen after you use the mark_to_close method, which means that you can change the value after you use that method if it happens later in the update method. I am certain that I have messed something up or forgotten to tell something important. Please do tell if you run into any problems *hugs* - Zeriab
-
I just found out that this system works amazingly well on RMVX. All that is needed is to change the fixed widths 640 and 480 to Graphics.width and Graphics.height. So here is an update with a RMVX version: The dialog framework: #============================================================================== # ** Dialog system - RMVX #------------------------------------------------------------------------------ # Zeriab # Version 1.0 # 2008-02-16 (Year-Month-Day) #------------------------------------------------------------------------------ # * Description : # # A small framework like script for dialogs #------------------------------------------------------------------------------ # * License : # # Copyright (C) 2008 Zeriab # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser Public License for more details. # # For the full license see <http://www.gnu.org/licenses/> # The GNU General Public License: http://www.gnu.org/licenses/gpl.txt # The GNU Lesser General Public License: http://www.gnu.org/licenses/lgpl.txt #------------------------------------------------------------------------------ # * Instructions : # # You can place this script pretty much anyway you like. # Place it above any other Dialogs you might be using. # Increase the STARTING_Z_VALUE if you have trouble with the dialog not # on top. #============================================================================== class Dialog STARTING_Z_VALUE = 1500 # Default value is 1500 attr_accessor :value attr_writer :marked_to_close #-------------------------------------------------------------------------- # * Getter with 'false' as default value #-------------------------------------------------------------------------- def marked_to_close @marked_to_close = false if @marked_to_close.nil? return @marked_to_close end #-------------------------------------------------------------------------- # * Mark the dialog to close #-------------------------------------------------------------------------- def mark_to_close self.marked_to_close = true end #-------------------------------------------------------------------------- # * Show the dialog # Returns the value from the dialog #-------------------------------------------------------------------------- def self.show(*args, &block) dialog = self.new(*args, &block) dialog.marked_to_close = false return dialog.main end #-------------------------------------------------------------------------- # * Initialization #-------------------------------------------------------------------------- def initialize(*args, &block) # For subclasses to overwrite end #-------------------------------------------------------------------------- # * Main processing #-------------------------------------------------------------------------- def main # Create the dimmed background create_background # Create Windows main_window # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if the dialog should close if marked_to_close break end end # Dispose of windows main_dispose # Dispose of background dispose_background # Update input information Input.update # Returns the acquired value return self.value end #-------------------------------------------------------------------------- # * Create the dimmed background #-------------------------------------------------------------------------- def create_background bitmap = Bitmap.new(Graphics.width,Graphics.height) bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0,0,0,128)) @background_sprite = Sprite.new @background_sprite.z = STARTING_Z_VALUE @background_sprite.bitmap = bitmap end #-------------------------------------------------------------------------- # * Create the windows #-------------------------------------------------------------------------- def main_window # For the subclasses to override # Remember to set their z.value to at least STARTING_Z_VALUE + 1 end #-------------------------------------------------------------------------- # * Dispose the background #-------------------------------------------------------------------------- def dispose_background @background_sprite.dispose end #-------------------------------------------------------------------------- # * Dispose the windows #-------------------------------------------------------------------------- def main_dispose # For the subclasses to override # Dispose your windows here end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # For the subclasses to override if Input.trigger?(Input::B) mark_to_close end end end A simple Yes/No Dialog: (as an example, REQUIRES the framework) #============================================================================ # * A Simple Yes/No dialog (RMVX) #============================================================================ class Dialog_YesNo < Dialog # self.value: false = No, true = Yes #-------------------------------------------------------------------------- # * A show method #-------------------------------------------------------------------------- def initialize(default_value = false, text = nil) # Sets the default value self.value = default_value @text = text # Sets the menu index if default_value @menu_index = 0 else @menu_index = 1 end end #-------------------------------------------------------------------------- # * Create the windows #-------------------------------------------------------------------------- def main_window @disposables = [] # The command window @command_window = Window_Command.new(80, ['Yes', 'No']) @command_window.index = @menu_index @command_window.x = (Graphics.width - @command_window.width) / 2 @command_window.y = (Graphics.height - @command_window.height) / 2 @command_window.z = STARTING_Z_VALUE + 1 @disposables << @command_window # The text window if @text.is_a?(String) @text_window = Window_Help.new @text_window.set_text(@text, 1) @text_window.z = STARTING_Z_VALUE + 1 @disposables << @text_window end end #-------------------------------------------------------------------------- # * Dispose the windows #-------------------------------------------------------------------------- def main_dispose @disposables.each {|element| element.dispose} end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update @command_window.update if Input.trigger?(Input::B) mark_to_close self.value = false end if Input.trigger?(Input::C) if @command_window.index == 0 self.value = true else self.value = false end mark_to_close end end end An as an actual use here is a code if you want a confirmation dialog when attempting to overwrite an existing save: (REQUIRES Dialog_YesNo) class Scene_File alias scene_file_dialog_determine_savefile determine_savefile #-------------------------------------------------------------------------- # * Determine savefile #-------------------------------------------------------------------------- def determine_savefile if @saving && @savefile_windows[@index].file_exist var = Dialog_YesNo.show(false, 'Do you want to overwrite' + ' the old savegame?') unless var Sound.play_buzzer return end end scene_file_dialog_determine_savefile end end It is used in the very same way as the RMXP version, so refer to my RMXP Dialog System for instructions.
-
I have heard that the whole game is limited to 5 tilesets. If that is true then XP is definitely better unless you want short-stories type of games.
-
Happy Birthday Leon *Zeriab gives Leon a hug*
-
If it something to disregard it shouldn't be in the tutorial ;)
-
An interesting event you have made there Leon ^^ There is one potential danger though. It is the Wait for Move's Completion. If you have for fun given another event a specific Move Route or it got stuck you will wait forever. It will basically feel as if the game freezes. I know it is easier to just use Wait for Move's Completion, but you really should specify a specific amount of frames to wait. It is safer. I noted that your event has 3 pages. While I can see that whatever is on page 1 can never happen it may confuse some trying to copy your system. You have probably used it for some experimenting. I recommend that you delete extra pages when taking screen shots in the future. At least, when you use more than 1 page. Oh and one final detail. When the trigger is on Action Button you know that C button is being pressed at the start of the event. Well, unless you are using special script. *hugs* - Zeriab
-
I am not sure yet. I'll wait for an English trial before deciding. I know there is an English mod, but I will still wait for the official trial. A lot depends on the eventing and the RGSS2. The fact that the variable reference option from rm2k(3) seems to be lacking in VX as well is not promising -_-
-
That is a nice looking battle system you got there ^_^ I took a look at it and noticed that common event number 058: Calculate_BTL_HP_Data could be done in a nicer way ^^ You could naturally place the breaking up functionality in other common events and then do it by using a temporary variable and a couple of common event calls, though that is more complex. Good luck with your system *hugs* - Zeriab
-
-
Zeriab's Anti Event Lag System
Zeriab replied to Zeriab's topic in Archived RPG Maker XP Scripts (RGSS1)
Updated to version 1.0 Version 1.0 -------------------------------------------------- (2007-09-24) - Fixed compatibility issue with Blizzard's Caterpillar script - Overwrote more methods scanning for events on a specific tile - Support for defining whether an event will always be updated or never be updated by specifying the event's id and map_id - Some structural changes. - Integrated the Non-SDK patch into the main script -
Zeriab's Anti Event Lag System for RMXP Version: 1.2 Introduction This system changes the design used for controlling the events on the game map as well as reducing the number of character sprites outside of the visible area. The new design for the events should in most cases give faster collision detection In certain situations this system should be slightly slower though I doubt it can make any noticeable difference. This script only makes event collision detection faster in the case where all the events are visible. The greatest benefit from this script comes from large maps with sparse population of events. Basically, events do no come together loads at a time. Version history For anyone interested Version 0.8 -------------------------------------------------- (2007-09-03) - First release Version 0.81 ------------------------------------------------- (2007-09-05) - Overwrote Game_Map's passable? method for faster collision detection Version 0.9 -------------------------------------------------- (2007-09-12) - Support for the Non-SDK patch - Support for defining whether and event will always be updated or never be updated by defining name patterns. Version 1.0 -------------------------------------------------- (2007-09-24) - Fixed compatibility issue with Blizzard's Caterpillar script - Overwrote more methods scanning for events on a specific tile - Support for defining whether an event will always be updated or never be updated by specifying the event's id and map_id - Some structural changes. - Integrated the Non-SDK patch into the main script Version 1.05 ------------------------------------------------- (2007-11-18) - Fixed bug where sprites might not be disposed when changing scene. Version 1.1 -------------------------------------------------- (2008-04-10) - Added declaration to which common events to update Version 1.15 ------------------------------------------------- (2008-06-19) - Added automatic detection of which common events to update (optional) Version 1.2 -------------------------------------------------- (2008-07-04) - Fixed a case where an event could be registered twice causing transparent events to look less transparent. Features Easy to alter the size of the visible area. (In combination with resolution scripts for example) Pattern matching on event names to ease determination of events needing special treatment. (Never update and always update) Specify special update schemes for events by their id and the map they are on. Screenshots The screenshot was taking from my test map included as an attachment. There are 662 events on that 500x500 map. Demo http://www.sendspace.com/file/0up9up (zip version) Mirror: ZAntiLagTest-v1.2.zip Script Zeriab's Anti Event Lag System version 1.2 Note: The comments in the script are aimed at other scripters. Don't be scared by it. Installation You don't have to do more than copy and paste the script into the script editor BUT where you paste it matters. If you are using the SDK 2.0+ paste the script just below the SDK. If you are are not using the SDK then paste the script just below the default scripts The structure in the script editor should be like this: default scripts (SDK) Zeriab's Anti Event Lag System (custom scripts) main Pasting the script just above main has caused errors! You can add [A] to the name of an event if you want it always updated. A typical example is that you want an event outside of the screen to move around properly. You can add [N] to the name of an event and it will never be updated. Great for non-animated decoration events. Note that if you have both [A] and [N] in the name of the event the event will never be updated. If you are not satisfied with the default settings or are curious you can look into the customization possibilities Customization A little below the big header there is a customization area (line 265-284) which contains: class Game_Map ALWAYS_UPDATE = false BUFFER_SIZE = 1 TILES_VERTICAL = 15 TILES_HORIZONTAL = 20 LIMIT_COMMON_EVENTS = true SPECIFY_COMMON_EVENTS_MANUALLY = false # If you want to specify which common events to update COMMON_EVENTS_TO_UPDATE = [] # If you want the script to automatically read the common events and find # out which to update. Must be the path to the CommonEvents.rxdata COMMON_EVENT_FILEPATH = 'Data/CommonEvents.rxdata' end class Game_Event SPECIAL_UPDATE_IDS = {} NEVER_UPDATE_NAME_PATTERNS = ['[N]'] # [N] in the event name => not updated ALWAYS_UPDATE_NAME_PATTERNS = ['[A]'] # [A] in the event name => always updated end There are comments on how to use each constant in the script header. Those comments are aimed at other scripters and can therefore be fairly difficult to understand for non-scripters. The examples in the header can useful even if you are not a scripter. I will explain each constant in a more humane way. (Using this in unison with the instructions in the header might yield the best result) I'll start by going through class Game_Map. ALWAYS_UPDATE Set this to true if you want all events updated. All events will on the map will be updated just like with the default scripts. This is slow, but you will still get the effects of the changed collision detection and sprite management. I included this option for compatibility reasons more than anything else. Don't use this if you want a few events outside of the screen to be constantly updated. In that case refer to the stuff in Game_Event BUFFER_SIZE The buffer size tells how many tiles outside of the visible area should be updated. If you have many big sprites (for the events) and get the sprites just disappearing or 'freezing' for a moment near the edge of the screen the solution can be to increase the buffer size. Be aware that increasing the buffer size makes the game slower. TILES_VERTICAL Use this to tell how many tiles there on a vertical line across the game screen. Only change this value if you change the resolution. TILES_HORIZONTAL Use this to tell how many tiles there on a horizontal line across the game screen. Only change this value if you change the resolution. LIMIT_COMMON_EVENTS Set this to false if you do not wish to limit which common events are updated. If you do not limit the common events the next three constants have no effect. (SPECIFY_COMMON_EVENTS_MANUALLY, COMMON_EVENTS_TO_UPDATE, COMMON_EVENT_FILEPATH) SPECIFY_COMMON_EVENTS_MANUALLY Set this to true if you want to specify the common events manually. This is not recommended for beginners. You will have to fill out COMMON_EVENTS_TO_UPDATE if you set this to true. COMMON_EVENT_FILEPATH will have no effect if this is true. If this is set to false then COMMON_EVENTS_TO_UPDATE will have no use. The script will automatically detect which common events to update if this is set to false. COMMON_EVENTS_TO_UPDATE Fill in the array with the common event ids you want updated. (Look in the database for the numbers) All other common events will not be updated. They can still be called using the call common event command, but they will not be started if they have the autorun or parallel process triggers. COMMON_EVENT_FILEPATH The path to where the common events are stored. Only touch this if you have changed the filename where the common events are stored. If you don't know what this means then chances are that you should not change what is given. Next we come to class Game_Event which is a bit more complicated to customize. Typically you can be fine without modifying the following constants. Id y SPECIAL_UPDATE_IDS You can use this to say that specific in specific maps must always be updated or never updated. If an event is always updated it acts just as it does with the default scripts. If an event is never updated it not move. Neither with Autonomous Movement nor the event command 'Set Move Route...'. You can still to some degree interact with it but in general use the never update feature for decoration events. NEVER_UPDATE_NAME_PATTERNS You can use this to specify new patterns to look for in the names of the events. If the name of an event matches at least one of the patterns it will never be updated. A pattern can both be what is called a regular expression and a string. If you don't know what a regular expression is or don't understand them then don't try to use regular expressions. The string is a piece of text and the name of the event will be checked if that piece of text is anywhere in the name. The text have to be surrounded by either 'text' or "text". There is no practical difference in case of this script. If an event is never updated it not move. Neither with Autonomous Movement nor the event command 'Set Move Route...'. You can still to some degree interact with it but in general use the never update feature for decoration events. ALWAYS_UPDATE_NAME_PATTERNS You can use this to specify new patterns to look for in the names of the events. If the name of an event matches at least one of the patterns it will always be updated. A pattern can both be what is called a regular expression and a string. If you don't know what a regular expression is or don't understand them then don't try to use regular expressions. The string is a piece of text and the name of the event will be checked if that piece of text is anywhere in the name. The text have to be surrounded by either 'text' or "text". There is no practical difference in case of this script. If an event is always updated it acts just as it does with the default scripts. Q&A's How can I make sure that an event outside of the screen moves like I told it to? Change the name of the event so it always updates. With the default configurations you can do this by adding [A] anywhere in the name. Compatibility Technical Details This is SDK compliant. It is written for SDK version 2.3. It has not been tested with older versions. Requires SDK Part 2 or the Non-SDK patch version 1.1 The following methods has been overwritten: Game_Character.passable? Game_Map.passable? Game_Map.update_events Game_Player.check_event_trigger_here Game_Player.check_event_trigger_there Game_Player.check_event_trigger_touch Spriteset_Map.init_characters Spriteset_Map.update_character_sprites The following methods have been aliased: Game_Event.jump Game_Event.moveto Game_Event.move_down Game_Event.move_left Game_Event.move_right Game_Event.move_up Game_Event.move_lower_left Game_Event.move_lower_right Game_Event.move_upper_left Game_Event.move_upper_right Game_Map.setup Rataime's Sun Effect Paste this code in a new section anywhere below Rataime's Sun Effect and above main. (use can press Insert to create a new section) alias Zantilag_XPML_read XPML_read def XPML_read(markup,event_id,max_param_number=0) return if $game_map.events[event_id].nil? Zantilag_XPML_read(markup,event_id,max_param_number=0) end Near Fantastica's Particle Engine v2 Paste this code in a new section anywhere below Near Fantastica's Particle Engine v2 and above main. (use can press Insert to create a new section) class Spriteset_Map def update_character_sprites nf_particles_spriteset_map_update_character_sprites for sprite in @character_event_sprites next unless sprite.character.is_a?(Game_Event) if sprite.character.pe_refresh == true sprite.character.pe_refresh = false @particle_engine.remove_effect(sprite.character) @particle_engine.add_effect(sprite.character) end end end end Credits and Thanks Thanks goes to Enterbrain for making this possible. Special thanks to Blizzard for many suggestions, help and support :3 Special thanks to: Eilei Shadow Wolf Untravaersil darksora I would like to thank everyone using their time to try and use my system. I would like to thank everyone reading this topic. Thanks. Terms and Conditions License Copyright © 2007 Zeriab This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser Public License for more details. For the full license see <http://www.gnu.org/licenses/> The GNU General Public License: http://www.gnu.org/licenses/gpl.txt The GNU Lesser General Public License: http://www.gnu.org/licenses/lgpl.txt Author's Notes I would be delighted if you report any bug, errors or issues you find. In fact I would be delighted if you took the time and replied even if you have nothing to report. Suggestions are more than welcome And finally: ENJOY! - Zeriab
-
You mean like this? class Scene_Map alias zeriab_shift_update update def update zeriab_shift_update if Input.trigger?(Input::A) $scene = Scene_Quests.new end end end
-
A mix-in. It means you can use it like this: class Foo include Enumerable end I got that it was a mix-in from the RMXP helpfile
-
They are not a waste of time. I'm not reading them because I have no use for them, but I am sure beginners appreciate them. You should definitely continue working on them! ~ Zeriab
-
I can try to explain it in a way that seems to help others. (Only normal switches) Consider room with a light switch. When you enter the room the light is not on. (To save power) You turn on the light by turning on the switch. Each light switch have a room. When you start the game every room will be dark, which means that every light switch will be off. You can't create new rooms nor remove them. There are there from the start. (I.e. no database stuff) You can use the Control Switches... event command to turn the light on and off. (Say that the event goes to the room and turns the light on / off) Every event in the game can go to any room the want and see whether the room is dark or not. If one event goes to a room and turns on the light then other events will naturally be able to see this. In this sense the rooms are global. On event pages there is the section to the left labeled 'preconditions'. It is literally the conditions that must be fulfilled for that page to be processed. If you require an switch to be ON then there MUST be light in that specific room. You can say that the event goes to the room and looks whether or not the light is on. This is basically how switches and events are connected. There are however some other switches. So called 'self-switches'. They are different in that other events can't see them. You could say that event event goes around with 4 light-bulbs in their pockets, labeled A, B, C and D. There are all turned off when the game starts. Let's say we let event 1 turns on light-bulb A right after we start. (Only bulb turned on) If we ask event 2 if light-bulb A is on it will answer no. If we ask event 1, then the answer is yes. That is because the light-bulbs for event 1 is not the same as for event 2. And so on. That's how it works if we use self-switches for preconditions. There. I've explained it to the best of my abilities and hope you can figure out how it works. ^_^ - Zeriab
-
I would do it with a common event like this: I'm not sure I understand what you want though.
-
Yay, I am among the winners ^_^
-
What about a tutorial on the Enumerable mix-in? An Array is for example a enumerable.
-
I was bored, so here is a quick and dirty WASD movement system made with events Note that you can't talk to NPC like normally. This is intended for minigames. If you change the Left-Right event's trigger to Parallel Process you might be able to use the Arrow keys like normal. Changing both events to parallel processes have the bonus that you now can talk to people. You can also put both in common events instead and just turn the system on and off by turning a switch on and off. - Zeriab
-
I have an assignment lying around that I made ages ago. I don't know if you have seen it already. I don't need it, I just made it up for someone wanting a CMS request ^_^ Okay, here goes: I request a CMS which assumes there only is 1 person in the party. I have made a design for it: The light grey parts with the text in it can be selected. The dark gray part in the middle is a window with information on what currently is selected. I know that creating a non-rectangular window can be a bother. Therefore I have come up with another design if you can't make the other one: The first design is preferably. You'll notice there are 10 possible choices. The action needed: Map: $scene = Scene_World_Map.new Options: $scene = Scene_Options.new Journal: $scene = Scene_Journal.new Tactics: $scene = Scene_Tactics.new Datapad: $scene = Scene_Tactics.new Load: Just as the normal load Save: Just as the normal save Quit: Just as the normal end game Status: Status for the first person in the party. (The one you can see on the map) Inventory: Just as the normal items Just make some small classes showing that the wanting action has been done. Movement: The movement between choices is a bit special. I have created this sketch to show the movement: (note same movement for both designs) As you see there are lots of arrows. If you stand on a field then pressing the up key will make you follow the arrow upwards to the next field it is point at and so forth. I hope you understand this? Well? That's that. Now get to work.
-
Wow. It is really some nice stuff you got there. I like the shading you have done on manga man.
-
In the system there is a Wood event, which gives a choice. (Do you want to collect the wood?) If No is selected nothing happens (except a message) If Yes is selected a wood item is added to the inventory and a switch (001) is turned on. The wood event has a second page where the precondition is switch 001. It has no graphic and has no commands. When switch 001 is turned on the second page being of higher order will determine the events properties. (Note: this event only has 2 pages) The result is that the wood seems to disappear. The next event I will comment on is the man, which possible is a carpenter. This event has 3 pages where the last two needs certain preconditions to be fulfilled. You have to collect the word (previous event) before you can continue the puzzle with this man. This means that the first page contains a text, which tells to get some word. The second page's precondition is exactly switch 001, which is turned on when you collect the wood. When the event's second page is triggered a couple of messages and a fade-out-fade-in animation to give the feel of time has passed will be displayed. 1 wood item will be removed from the inventory and another switch (002) will be turned on. The precondition of the 3rd page is exactly switch 001 and 002 being on, so the third page will be in effect. Here is just a message saying 'Thank You' or so... Finally there are the bridge events. There are 2 types, one with 2 pages and one with just 1 page. The bridge events with 1 page shows only a part of the fixed bridge and have a precondition which is switch 001 and switch 002 being on. They will not show anything before the conditions are fulfilled. The ones with 2 pages are those which show the broken bridge. On page 1 is the broken bridge part chosen as the graphic. There are no preconditions on page 1. On page 2 is the fixed bridge part chosen as the graphic. The preconditions for page 2 are the same as for the 1 page bridge events. (Switch 001 and 002) This way it will look like the bridge is fixed when the two switches is turned on. All in all we have a wood event which turns 1 switch on, a man event which turns on another switch when the first switch has been turned on and finally a couple of bridge events which will show a whole bridge when both switch has been turned on. Thus we get a nice and simple puzzle. - Zeriab
-
I added the second page for user friendliness So eventing-illiterate doesn't have to go to the bottom of the page ^_^ I have no problems understanding A*, though the percent marker is nice as well %100. I'm so happy I got %100 on first test ^_^
-
I misunderstood, sorry about that. http://www28.websamba.com/Vobbys/Pics/gradient.png http://www28.websamba.com/Vobbys/Pics/azurequest_intro.png Note: I have lost the original azurequest_intro.png. This one has been taken from ccoa's Demystifying the Game Process and is longer. Please set [0003: IntroPositionYFinal] = -2100 instead. Sorry about this.
-
I have uploaded them here: http://www28.websamba.com/Vobbys/Pics/System1stPage.png http://www28.websamba.com/Vobbys/Pics/System2ndPage.png Would that be sufficient or should I make a demo?