Hello there, I wanted to point out that I'm a complete beginner in scripting.
I'm skilled in RPG Maker 2003, but never really adapted to the scripts of later RPG Makers.
Recently I tried making a new game in RPG Maker VX Ace, with most things customly made. I created a custom battle system with events, and it works quiete well. However the battle system needs a seperate custom menu, and making it with just events would be difficult. I want to try making it with scripts.
I tried finding tutorials for complete beginners about windows (So I can create the menu system with them), and I found this one:
http://www.rpgrevolu...indows_265.html
This one worked fairly well, everything explained there worked fine.
However, I checked the second part:
http://www.rpgrevolu...indows_272.html
And while I can create a window with selectable options, I can't move the cursor. It's always stuck on the first item on the window, and can't select anything else. It might be because these tutorials are intended for RPG Maker XP. How would I make this work for RPG Maker VX Ace?
Also if anyone can point me out to tutorials for scripting beginners like me for RPG Maker VX Ace, I would greatly appreciate it!
[ACE]Creating a selectable window
● ARCHIVED · READ-ONLY
-
-
In VX Ace, you need to activate the window:And while I can create a window with selectable options, I can't move the cursor. It's always stuck on the first item on the window, and can't select anything else. It might be because these tutorials are intended for RPG Maker XP. How would I make this work for RPG Maker VX Ace?
Code:I'll move this to the Learning Ruby and RGSSx section.# Assuming that @my_window is initialized as a window object @my_window.activate -
Thank you for the help Mr.Bubble, however "activate" didn't seem to work anywhere (It would just give me "undefined method" errors).
While researching this problem and trying to make it work, I found this: http://www.rpgmakerv...php/t30285.html This person seemed to have a similar problem.
I added in $window.active=true in the event. That makes it work a little bit better: The player can't move anymore, and the item on the menu is now high lighted (the border around the text is flashing, which didn't happen before). However I still can't move the cursor up and down. I can select the first item, just not move the cursor.
I tried making a Scene class (Similar to the one in that link), however I couldn't actually call the Scene in an event. When interacting with the event (that activates the Scene, with this: $scene = Scene_Pet.new ), nothing would happen.
So how can I make the cursor move in the selectable window? And how would I activate scenes in events?
Thank you very much in advance! -
First and foremost, you need to post your attempted code. It's not possible to explain what you did incorrectly without it.
If $window.activate didn't work in Ace then I can't imagine that $window is a proper window object.
That's the scene call syntax for VX. It's not the same in Ace. In Ace that scene call would beWhen interacting with the event (that activates the Scene, with this: $scene = Scene_Pet.new ), nothing would happen.
Code:SceneManager.call(Scene_Pet) -
Thank you once again Mr.Bubble, yes I fear that I didn't make the Window into a proper object.
ATM this is my code, the script is made so the player can choose between a canary or cat:
I based it on this (outdated) code:SpoilerCode:#============================================================================== # ** Window_Pet. #------------------------------------------------------------------------------ # Based on the Script Builder's Guide, this is a selectable window for a pet. #============================================================================== class Window_Pet < Window_Selectable #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(100, 100, 640, 480) self.index = 0 # This is what item is selected when the window is first made @item_max = 2 self.contents = Bitmap.new(width-32,height-32) refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear #self.contents.draw_text(x_position_from_edge , y_position_from_edge, # width, height, "Text", alignment) self.contents.draw_text(0,0,100,32,"Canary Halinka") self.contents.draw_text(0,32,100,32,"Cat Lulu") end #============================================================================== # ** Scene_Window #------------------------------------------------------------------------------ class Scene_Pet < Scene_Base def start super @pet = Window_Pet.new end #-------------------------------------------------------------------------- # * Dispose Window #-------------------------------------------------------------------------- def terminate @pet.dispose end #-------------------------------------------------------------------------- # * Update Window #-------------------------------------------------------------------------- def update @pet.update if Input.trigger?(Input::C) $window.dispose if self.index == 0 $window = Window_Text.new elsif self.index == 1 print "You have selected the cat Lulu!" $window = Window_Text.new $window.y = 0 $window.back_opacity = 0 end end end end end
http://www.rpgrevolu...indows_272.html
http://www.rpgmakerv...php/t30285.html
I tried to create a scene to keep my window updated with the player's input (Instead of doing that with events, it seems to be a better idea to create a Scene from the information I could find), however RPG Maker now keeps pointing out the following:
"uninitialized constant Game_Interpreter:: Scene_Pet". Even though I did create the class "Scene_Pet" when making the Scene. What did I do wrong here?
And I still don't know how to make the cursor move, I'm sure it has something to do with $window.activate but I don't know where to put it.
It would be great if I could find a RPG Maker VX Ace tutorial about this, because the syntax to ACE is different to VX. -
Well, there's a lot to explain.
You accidentally nested the Scene_Pet class within Window_Pet class. What this means is that outside of class Window_Pet, you can't instantiate Scene_Pet through the normal means except maybe through some strange coding loop holes I'm unaware of. See Scope.
SpoilerCode:This isn't necessary in Ace. Windows will create their contents bitmap on initialization in Ace. See the create_contents method in Window_Base.self.contents = Bitmap.new(width-32,height-32)SpoilerCode:You were trying to make a conditional branch list with if-elsif statements, but the second "if" is supposed to be elsif which changes the flow of that control structure completely.if Input.trigger?(Input::C) # code if self.index == 0 # code elsif self.index == 1
Code:You almost got it, but you'll want to read up on proper if-elsif-else control structures. http://en.wikibooks....else_expressionif Input.trigger?(Input::C) # code elsif self.index == 0 # code elsif self.index == 1
However, the entirety of your update method won't work in Ace. In Ace, Windows use handlers now and I'm not capable of explaining that in beginner's terms.SpoilerCode:I just want to make it clear that you're not actually populating the window with selectable items with this method. You're drawing two lines of text in a window.#-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear #self.contents.draw_text(x_position_from_edge , y_position_from_edge, # width, height, "Text", alignment) self.contents.draw_text(0,0,100,32,"Canary Halinka") self.contents.draw_text(0,32,100,32,"Cat Lulu") endSpoilerCode:The Window_Text class doesn't exist in Ace which is why $window is nil.$window = Window_Text.newSpoilerCode:Manually disposing windows in a scene isn't needed anymore in Ace since Scene_Base now has a method which disposes all windows automatically when needed.#-------------------------------------------------------------------------- # * Dispose Window #-------------------------------------------------------------------------- def terminate @pet.dispose endWhile it's better than nothing, I don't think using an XP tutorial on VX Ace will help much. Judging from your code, you're better off doing beginner Ruby tutorials to learn the programming fundamentals and working your way up from there. No point in trying to make a building when your foundation isn't solid.SpoilerCode:@item_max has been turned into a method.@item_max = 2
Code:This is the reason why your cursor won't move in your window.#-------------------------------------------------------------------------- # * Get Number of Items #-------------------------------------------------------------------------- def item_max return 2 end -
Thank you very much for taking your time to review all my code, Mr. Bubble, I appreciate it. I have tried altering my script with your suggestions but I couldn't do it.
You're right I need to start from the very basics with Ruby. I'm going to learn it using this for now: http://ruby.learncodethehardway.org/book/ex0.html
Hopefully I'll get good enough eventually to make my own scripts in RPG Maker.
Again, thanks a lot! :)