BIG UPDATE: ChatGPT now allow sharing of conversation, and continue it from where it left off in the shared link. Here’s my convo with chatGPT Chat.openai.com
Lately been trying this WOLF RPG Editor game engine. To be honest, I have known this thing for quite a while back. But using this is quite overwhelming, there’s somewhat steep learning curve to this one, well pretty steep compared to RPG Maker series that’s for sure. Which is why only now when I took a deeper look did I start piecing things together. I really recommend you play the sample game, at least breeze through it to get the feel first.
Some important things I notice are:
On Game Variables
- Values of variables including map events self-variables SelfVarX and common events self-variables CSelfX are retained per playthrough. The only way to reset this is to start new game. Loading game will load this value. This has pro and cons depending on your style of implementing things.
On Omni-Window
Here’s Omni-Window definition from ChatGPT:
In the context of RPG Maker, the term “Omni-Window” refers to a type of window or dialogue box that is versatile and can display various types of information. The Omni-Window is a customizable window that can be used to show text, menus, item lists, character information, and more.
The term “Omni” suggests that this window has multiple functions and can adapt to different purposes within the game. It provides a flexible way to present information to the player and interact with game elements. The content and appearance of the Omni-Window can be customized through RPG Maker’s event scripting or plugin systems, allowing game developers to design unique and engaging interfaces for their games.
Overall, the Omni-Window in RPG Maker offers a dynamic and adaptable solution for displaying information and interacting with the game world.
-ChatGPT
What I learnt are:
- Omni-Window in WOLF seems to be used more to create selection box. Like a pick a menu or something. The important parameters so far are: Display Coordinate (top-left) X and Y; Dimension width and height; Item column (horz.) and row (vert.); Menu Item count.
- Parameters related to each menu items are set in Variable Database : Type/Table 19 Omni-Wind TempDB. First menu item is in data 0, second menu item is in data 1, and so on so forth.
- Selection Code is the Code returned when you pick a menu item, it’s returned on Variable Database: Type 18. Base System Var : 8. Omni-Window Code Return. You really need to use some events to handle this return code.
- Common64:X[Com]Omni-WindowDrawFunction draw or erase (pick the mode) the omni-box.
- Common65:X[Com]Omni-WindowSelection allow you to enter the item selection loop and move the cursor to pick an item selection in the omni-box.
- If you don’t want the hero to move during omni-box selection (which is more often than not), disable them with Event Command: “9 Input Key –> Input Enable/Disable –> Movement NO/Key Input OK”, then select all the direction key and insert command to disable them.
- If you disable hero movement, don’t forget to enable them later by “Movement OK/Key Input OK” and probably also select all the direction key as before.
On Common Events Scripting
ChatGPT can understand Command String, it even helped me understanding how Omni-Window works. The CE script itself is C-like so if you feed it enough data (including comments to aid it), ChatGPT should quickly turn useful.
Imgur Album of me teaching ChatGPT both Command String and Event Code. Warning Imgur is heavy to load.
Scripting a map events to show omni-window
Page 1, set to confirm key
} Show Message: Helloo1
} Show Message: Let's test omni-window
# Set item name
} Set String: S0[[Sample] Temporary String] = "Attack"
#
# set item description
} Set String: S1[] = "Display description\n"
#
# set selection code holder
} Set Variable: This Event: Self1 = 0 + 1
#
# Get This Event Screen X and Y
# into CSelf 2 and CSelf3
} Set Variable+: This Event: Self2 = This Map Event's Screen X
} Set Variable+: This Event: Self3 = This Map Event's Screen Y
} Set Variable: This Event: Self2 = 0 + 0
} Set Variable: This Event: Self3 = Sys117:[RO]Screen Size Y + 0
#
# normalize screen coordinate
} Set Variable: This Event: Self2 /= 1 + 0
} Set Variable: This Event: Self3 /= 1 + 0
#
# Shift coordinate so it displays the character.
} Set Variable: This Event: Self2 -= 0 + 0
} Set Variable: [Real Number Calculation] This Event: Self3 -= 30 + 0
#
#
# init loop counter
} Set Variable: This Event: Self0 = 0 + 0
} Repeat Loop [ 10 ] Times
|#
|# set item string
|} Write to VarDB: DB[ 19 : This Event: Self0 : 0 ] (Omni-Wind TempDB : - : Item String) = S0[[Sample] Temporary String]
|#
|# set description string
|} Write to VarDB: DB[ 19 : This Event: Self0 : 6 ] (Omni-Wind TempDB : - : Description String) = S1[]
|#
|# turn on selectable
|} Write to VarDB: DB[ 19 : This Event: Self0 : 2 ] (Omni-Wind TempDB : - : Selectable State [1=Yes]) = 1
|#
|# set item code
|} Write to VarDB: DB[ 19 : This Event: Self0 : 1 ] (Omni-Wind TempDB : - : Item Code) = This Event: Self1
|#
|# INC loop counter
|} Set Variable: This Event: Self0 += 1 + 0
|#
|# Dummy selection code
|} Set Variable: This Event: Self1 += 3 + 1
|#
|}
+Loop End Point++
#
#
# omni window setting
#
# display coord
} Write to VarDB: DB[ Base System Var : Omni-Window Display X : 0 ] (18 : 9 : Number) = This Event: Self2
} Write to VarDB: DB[ Base System Var : Omni-Window Display Y : 0 ] (18 : 10 : Number) = This Event: Self3
#
# window dimension
} Write to VarDB: DB[ Base System Var : Omni-Window Width : 0 ] (18 : 11 : Number) = 240
} Write to VarDB: DB[ Base System Var : Omni-Window Height : 0 ] (18 : 12 : Number) = 30
#
# item column (horz.) and row (vert.)
} Write to VarDB: DB[ Base System Var : Omni-Window Horz. Items : 0 ] (18 : 13 : Number) = 6
} Write to VarDB: DB[ Base System Var : Omni-Window Vert. Items : 0 ] (18 : 14 : Number) = 2
#
# item count
} Write to VarDB: DB[ Base System Var : Omni-Window Item Count : 0 ] (18 : 17 : Number) = 12
#
#
# actual display function
} Call Event: Common64:[ X[Com]Omni-WindowDrawFunction ] / 0:Display / 0 / 3:Display Above Window / 0:None
#
#
} Set Variable: This Event: Self9 = 1 + 0
Page 2 activate when Self9 = 1, also set to parallel (in autorun there’s no need for Input Enable/Disable since the hero move will be locked in place, but to show how it works in common event we use parallel here):
#
# Disable hero movement
} Input Enable/Disable: Down Left Right Up [ Movement NO Key Input OK ]
#
# window item selection event
} Call Event: Common65:[ X[Com]Omni-WindowSelection ] / 0:LoopUntilSelectionDone / 0:Play Confirm Sound
#
# ReEnable hero movement
} Input Enable/Disable: Down Left Right Up [ Movement OK Key Input OK ]
#
} Party Graphics: Warp Party to Hero
#
# erase window
} Call Event: Common64:[ X[Com]Omni-WindowDrawFunction ] / -1:Erase / 0 / 0:Don't Display / 0:None
#
# show selection code
} Show Message: Selection code is \cdb[18:8:0]
#
} Set Variable: This Event: Self9 = 0 + 0
Event Code:
Page 1, confirm key
WoditorEvCOMMAND_START
[101][0,1]<0>()("Helloo1")
[101][0,1]<0>()("Let's test omni-window")
[103][0,1]<0>()("Set item name")
[122][2,1]<0>(3000000,0)("Attack")
[103][0,1]<0>()(" ")
[103][0,1]<0>()("set item description")
[122][2,1]<0>(3000001,0)("Display description<\n>")
[103][0,1]<0>()(" ")
[103][0,1]<0>()("set selection code holder")
[121][4,0]<0>(1100001,0,1,0)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()(" Get This Event Screen X and Y ")
[103][0,1]<0>()("into CSelf 2 and CSelf3")
[124][4,0]<0>(1100002,4096,-1,6)()
[124][4,0]<0>(1100003,4096,-1,7)()
[121][4,0]<0>(1100002,0,0,0)()
[121][4,0]<0>(1100003,9000117,0,0)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()("normalize screen coordinate")
[121][4,0]<0>(1100002,1,0,1024)()
[121][4,0]<0>(1100003,1,0,1024)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()("Shift coordinate so it displays the character.")
[121][4,0]<0>(1100002,0,0,512)()
[121][4,0]<0>(1100003,30,0,514)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()(" ")
[103][0,1]<0>()("init loop counter")
[121][4,0]<0>(1100000,0,0,0)()
[179][1,0]<0>(10)()
[103][0,1]<1>()(" ")
[103][0,1]<1>()("set item string")
[250][5,4]<1>(19,1100000,0,0,3000000)("","","","")
[103][0,1]<1>()(" ")
[103][0,1]<1>()("set description string")
[250][5,4]<1>(19,1100000,6,0,3000001)("","","","")
[103][0,1]<1>()(" ")
[103][0,1]<1>()("turn on selectable")
[250][5,4]<1>(19,1100000,2,0,1)("","","","")
[103][0,1]<1>()(" ")
[103][0,1]<1>()("set item code")
[250][5,4]<1>(19,1100000,1,0,1100001)("","","","")
[103][0,1]<1>()(" ")
[103][0,1]<1>()("INC loop counter")
[121][4,0]<1>(1100000,1,0,256)()
[103][0,1]<1>()(" ")
[103][0,1]<1>()("Dummy selection code")
[121][4,0]<1>(1100001,3,1,256)()
[103][0,1]<1>()(" ")
[0][0,0]<1>()()
[498][0,0]<0>()()
[103][0,1]<0>()(" ")
[103][0,1]<0>()(" ")
[103][0,1]<0>()("omni window setting")
[103][0,1]<0>()(" ")
[103][0,1]<0>()("display coord")
[250][5,4]<0>(18,9,0,196608,1100002)("","Base System Var","Omni-Window Display X","")
[250][5,4]<0>(18,10,0,196608,1100003)("","Base System Var","Omni-Window Display Y","")
[103][0,1]<0>()(" ")
[103][0,1]<0>()("window dimension")
[250][5,4]<0>(18,11,0,196608,240)("","Base System Var","Omni-Window Width","")
[250][5,4]<0>(18,12,0,196608,30)("","Base System Var","Omni-Window Height","")
[103][0,1]<0>()(" ")
[103][0,1]<0>()("item column (horz.) and row (vert.)")
[250][5,4]<0>(18,13,0,196608,6)("","Base System Var","Omni-Window Horz. Items","")
[250][5,4]<0>(18,14,0,196608,2)("","Base System Var","Omni-Window Vert. Items","")
[103][0,1]<0>()(" ")
[103][0,1]<0>()("item count")
[250][5,4]<0>(18,17,0,196608,12)("","Base System Var","Omni-Window Item Count","")
[103][0,1]<0>()(" ")
[103][0,1]<0>()(" ")
[103][0,1]<0>()("actual display function")
[210][6,0]<0>(500064,4,0,0,3,0)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()(" ")
[121][4,0]<0>(1100009,1,0,0)()
WoditorEvCOMMAND_END
Page 2, activate when self9 = 1, parallel
WoditorEvCOMMAND_START
[103][0,1]<0>()(" ")
[103][0,1]<0>()("Disable hero movement")
[126][1,0]<0>(496)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()("window item selection event")
[210][4,0]<0>(500065,2,0,0)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()("ReEnable hero movement")
[126][1,0]<0>(240)()
[103][0,1]<0>()(" ")
[270][1,0]<0>(36)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()("erase window")
[210][6,0]<0>(500064,4,-1,0,0,0)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()("show selection code")
[101][0,1]<0>()("Selection code is \cdb[18:8:0]")
[103][0,1]<0>()(" ")
[121][4,0]<0>(1100009,0,0,0)()
WoditorEvCOMMAND_END