WELCOME TO THE OFFICIAL QEDIT RESOURCE
- FIRST AND FOREMOST, ABSOLUTELY NO CODING EXPERIENCE IS REQUIRED TO USE THIS APPLICATION (ALTHOUGH UNDERSTANDING ASSEMBLY SCRIPTS IS A PLUS)*
The purpose of this section is to have all gathered information from different sources to better facilitate for others to start making their own quests. All information gathered here are gathered from various soruces, most notably from qedit.info. This will server as an alternative, up to date resource.
Navigate through the tabbed sections to find out more on Qedit.
Qedit is a complex and powerful quest editor for Phantasy Star Online that allows the user to make and edit custom quests. The program boasts very useful features such as a 3D view of your work and large amounts of customization options. Qedit was co-developed by Schthack, Lee and others during the height of PSOBB’s popularity.
Qedit has the ability to make the quests compatible with different platforms.
Snapshot of qedit and 3D view
-Register, Values and Labels-
Here is some useful information on some of the phrases we will be using.
A function (also known as a label) is a number that is assigned to operation codes (OPCodes). That number can be any number under 10000. A register is like a container that stores values. Qedit allows 256 different registers, including 0, so 0-255 which totals 256.
Dwords can be considered hex values
e.g 200: leti r240, 00000001 ret 100: ret
200 and 100 are two different labels. Leti is an OPCode, R240 is a register. 00000001 is a dword value.
So it’s like this, register is a variable, R200 is variable 200. Simple, no? If you want register 200 to be 1, you would do this; leti R200, 00000001
Label 0: (function 0)
This is the function that starts the quest. OP codes such as bb_map_designate, leti and set_floor_handler are found here. It’s essentially telling the client how you want the quest to start. So as you can see, label 0 is very important.
Here are some reserved registers that the quest uses:
- Register 255 is the quest success flag (if true quest cleared).
- Register 253 is the quest failure flag (if true quest failed).
- Register 0 says the quest has begun.
- Register 252 is for get_difficulty_level2
- R60-R69 used for quest items and such (not reserved, but used often by Sega)
PSOBB QUESTS ARE COMPRISED OF TWO FILES, THE .DAT AND THE.BIN. THESE TWO ARE COMPRISE THE ACTUAL FILE THAT THE SERVER READS, THE .QST QUEST FILE.
The .dat is what contains the floor data (map) object (such as traps, player sets) and the event data. The .bin contains the script. The script is what tells the client what do with NPC’s, objects. It’s essentially the “director” for the quest.
A PSOBB quest needs both of these raw files for it to function properly.
To get a little better understanding, let’s look at one of our custom quests:
As you can see, you have red and green arrows, red are the monsters and green are objects (doors, player sets, energy barriers, etc) The red arrows are facing where the monster will be facing when it spawns. Monsters, as defined in Qedit, isn’t exclusively for monsters, it’s also for NPC’s so don’t be confused when you scroll down the list of monsters within the menu and see Irene!
The map event data is a bit more simpler to understand, it essentially defines what and when the mob waves will be called. Let’s look at one.
Here is a map event for Tenebrous Woods. On the left, you see the events list (total of 134) and on the right is the actual events that will take place. Let’s break it down.
- 100 <—–Number of the event
Section: 2 <—— Section where the event will take place
Wave: 1 <—— The wave that will take place in the section
Delay: 1 <—— The delay at which the wave will spawn
Call 102 <—- Function that calls on the next wave after #100 is complete (when all monsters are defeated)
(Process repeats)# This process is what takes place when you add map events for monster mobs. You can only add 134 events for each area. (134 in Forest 1, 134 in Forest 2)
PSOBB Script (assembly)
As i stated above, for the quest to actually function, it will need a script. The script tells the client what map to use, how and when to run the cut scenes (if any), what the NPC’s are going to say, etc. The script essentially does it all. In this article, i will be showing you basics on the script, we will go more in depth in a future topic.
Let’s look at the script for Tenebrous Woods to give us a better idea:
Whenever a quest starts, it will always start with function 0:, the line with the blue 0 It tells the client what episode the quest is in, what difficulty to set it at, where’s the main warp, where the players will start, etc. Let’s look closely at the script to get a better understand of it.
Any quest will run this function automatically when it loads We are essentially telling the server to set ep1 as the area 0: set_episode 00000000
The next two commands will set the success/failure flags In this case, we have the success and failure flags setup set_qt_success 186 set_qt_failure 157
These next commands tell server what functions to run at what floors when players enters it so, set_floor_handler <floor> <function>
set_floor_handler 00000000. 1 set_floor_handler 00000003, 1 set_floor_handler 00000007,1
These commands sets a floor for a given map. So it’s like BB_map_designate <floor> <map> <variant> 00
bb_map_designate 00, 0000, 00, 00 bb_map_designate 04, 0002, 00, 00 bb_map_designate 07, 0002, 00, 00 bb_map_designate 0A, 000A, 01, 00
This command will determine what floor players will spawn in.
This one will assign a map to the mainwarp (the big warp behind that sliding door in Pioneer2)
Hope this helps on getting you started! Any questions you all may have, feel free to post on [forums.]