Jump to content

Create own Quest


Shiva

Recommended Posts

Hi Everyone,

just wanted to Know if i can make my own quests and add them somehow to Ultima.

If yes, how can i make a Quest? Is there a Special Programm for it?

Would appreciate to make some good stuff in there. ;)

Also got some ideas ready

Edited by Shiva
Link to comment
Share on other sites

As for the uploading to ultima: as far as my experience has been, its a verbal yes with no action.

EDIT:

I use qEdit, which can get complex when you're trying to do obscure things, but is generally pretty easy. It does eat up quite a bit of time, especially when you're trying to do something you've never done before.

If that hasn't scared you off, here's some helpful tips to get you started.

- The first thing you have to understand is how PSO stores floor data. Each "floor" is assigned a map, which includes a list of all legal objects\monsters that can be placed on that floor. The numbering for these floors starts at 0 and ends at some point over 10 (I haven't counted, but 10 is WAY more than enough for a single quest). Each floor is accessed through red\blue warps. The boss teleporter will automatically put you in the closes floor (numbering up) that is the corresponding boss floor for that map. This means that you can have floor:

0. Pioneer 2
1. Forest 1
2. Forest 2
3. Cave 1
4. Cave 3
5. Under The Dome
6. Waterworks (De Rol La)

and the boss warp you place on floor 2 will warp the player to floor 5.

- Each monster is assigned a wave, and a room. When the floor loads, all wave 0 mobs will spawn. Spawn control for other waves is controlled with the "map events". When you first open the map events, there will not be any. Map events are broken into segments called functions. Each function begins with the pound sign (#) and a number. Example:

#10
Section: 2
Wave: 10
Delay: 0

Call 11


#11
Section: 2
Wave: 11
Delay: 0

Unlock 2


#20
Section: 0
Wave: 0
Delay: 0

Call 21
Call 211

Each map event is triggered by the use of "Event Collision" objects. These objects are invisible to the player, but have a range that will trigger the given event when a player enters that range. There are a number of commands that you can run other than spawning waves in a map event function. Some of the useful one are:

"unlock #" which unlocks all doors on that floor with the switch number given.

"call #" which runs the map event function with the number #

"unhide # 1" which reveals all hidden objects in room #

Although each map event function needs data on section (room #), wave, and delay, there does not have to be a corresponding wave to those numbers. This can be seen above in function #20, which calls a nonexistent wave 0 in room 0, and then runs both functions 21 and 211. It should be noted that these calls are not sequential, and that both 21 and 211 will be run on top of each other.

- pasm code (script) is most defiantly the most confusing and annoying thing that you will have to deal with while using qedit. There's a whole ton of commands that are usable, but for a first quest, i'd stick with the barebones until you can play around with it enough to figure it out. Rika has a "guide" with short descriptions on a good handful of the pasm commands in the "quest development" subforum. She also has some great videos which are very informative (though incomplete). I'll post below the barebones script with some comments (lines that begin with // are not to be implemented).

// The quest automatically runs function 0 on loading
// Our first command will set the episode to Ep 2 (numbering always starts at 0)
0: set_episode 00000001

// These next 4 commands setup the flags for winning\losing the quest.
// We really only care about set_qt_success and set_qt_failure
// They all assign functions to run on success\fail\exit\cancel
// Thus, if R255 is set to 1, then the quest is successful,
// and when you talk to the guild lady function 20 will run.
set_qt_exit 1
set_qt_cancel 1
set_qt_success 20
set_qt_failure 30

// These next commands are the bread and butter of the script
// set_floor_handler <floor> <function>
// will run <function> whenever a player enters <floor>
// THIS IS NEEDED EVEN IF YOU DON'T WANT ANYTHING TO RUN
// These are floor numbers, not map numbers
set_floor_handler 00000000, 1
set_floor_handler 00000003, 1
set_floor_handler 00000007, 1

// BB_Map_Designate <floor> <map> <variant> 00
// Will set a floor to a given map
// Check the wiki for map numbers
BB_Map_Designate 00, 0012, 00, 00 // labo
BB_Map_Designate 03, 0015, 00, 00 // spaceship alpha
BB_Map_Designate 07, 0019, 00, 00 // Jungle North
BB_Map_Designate 04, 0008, 00, 00 // Ruins 1

// This determines which floor the players will spawn in
// On most quests this is 0 (labo or pioneer2 by convention)
initial_floor 00000007

// This assigns a map to the main warp
// in this case, we don't want them going anywhere
set_mainwarp 00000000

// These just gather information for later use
// and stores them in registers (places to store data)
// To access this data later, you simply have to read from R#
get_slotnumber R250
get_number_of_player1 R251
get_difflvl2 R252

// Starts the check to see if quest is complete
thread 101

// ret ends the function
ret

// Since we are required to have floor handlers, the convention
// is to make function 1 a single return statement, and use that
// as a "do-nothing" function.
1: ret

// FUNCTION 101 taken from qedit wiki
// it's all kinda mumbo jumbo unless you have the floor data in front of you
// This is the way that you have triggered text events and check to see if players have killed the boss
101: sync //Waits 1 frame.
jmpi_= R1, 00000001, 1 //If register 1 equals 00000001 jump to function 1.
leti R2, 00000003 //Makes register 2 equal 00000003. (For floor id 3.)
leti R3, 0000000A //Makes register 3 equal 0000000A. (For room id 10.)
if_zone_clear R1, R2 //If room id 10 on floor id 3 has been cleared of enemies make register 1 equal 00000001.
jmpi_= R1, 00000000, 101 //If register 1 equals 00000000 jump to function 101.
sync_register R1, 00000001 //Makes register 1 equal 00000001 for all clients.
jmp 101 //Jumps to function 101.

To run\test your quest, you will need to have a personal server set up. PM me if you need help with this.

Useful links:

qedit Wiki: qedit.info

download link (courtesy of Rika): http://www.mediafire.com/download/w6hkcfcilmearu0/Qedit1.0b.rar

Alternate (untested) qedit download link: http://qedit.schtserv.com/qedit.rar

Very useful video tutorials (by Rika): http://www.phantasystaronline.net/forum/index.php/topic/6209-pso-qedit-video-tutorials/

If you would like more info, please contact me. I'm happy to help where I can.

EDIT 2: also there is apparently a forum segment specifically for this further down called "Quest Development" which has lots of good info, and should probably be where this (and my own) thread(s) are.

Edited by Lemon
  • Like 6
Link to comment
Share on other sites

Interesting and insightful post, Lemon. It reminds me a lot of Z80 assembler that I dabbled in many years ago, with commands like LD A,0 (means LoaD register A with the value 0) ...

Some of the commands you listed sounded very similar to some of the stuff back then, like the RET for Return or JMP for jump (was called JP there, also had conditional jumps like JP NZ) ... good old times.

Edited by El Socko
Link to comment
Share on other sites

Interesting and insightful post, Lemon. It reminds me a lot of Z80 assembler that I dabbled in many years ago, with commands like LD A,0 (means LoaD register A with the value 0) ...

Some of the commands you listed sounded very similar to some of the stuff back then, like the RET for Return or JMP for jump (was called JP there, also had conditional jumps like JP NZ) ... good old times.

Haha that's exactly what I thought. I only listed the beginnings of the quest. There are conditional jumps and other commands. here's the most complete list out there that I could find: http://qedit.info/index.php?title=OPCodes

Link to comment
Share on other sites

Nice :D thanks

I made some few Levels for other Games already, so it wont be that Hard for me. The only thing i need what i don't have that much, is Time.

Link to comment
Share on other sites

I want to save this topic so hard!

Sent from my XT1068 using Tapatalk

I'll make a better one that's more organized in the development section to save. This is a copy and paste job from a PM I sent someone xP

EDIT: here you go http://www.phantasystaronline.net/forum/index.php/topic/26156-how-to-build-a-custom-quest/

Nice :D thanks

I made some few Levels for other Games already, so it wont be that Hard for me. The only thing i need what i don't have that much, is Time.

Me too... me too... :onion-head43:

Edited by Lemon
Link to comment
Share on other sites

  • 3 weeks later...

Checked also some Videos on the Forum. Really Nice

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...