Shiva Posted March 16, 2016 Share Posted March 16, 2016 (edited) 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 March 16, 2016 by Shiva Quote Link to comment Share on other sites More sharing options...
Mr Noob Posted March 16, 2016 Share Posted March 16, 2016 I think thats a question for Chuk Quote Link to comment Share on other sites More sharing options...
Lemon Posted March 16, 2016 Share Posted March 16, 2016 (edited) 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 21. Forest 12. Forest 23. Cave 14. Cave 35. Under The Dome6. 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: #10Section: 2Wave: 10Delay: 0Call 11#11Section: 2Wave: 11Delay: 0Unlock 2#20Section: 0Wave: 0Delay: 0Call 21Call 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 1set_qt_cancel 1set_qt_success 20set_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 numbersset_floor_handler 00000000, 1set_floor_handler 00000003, 1set_floor_handler 00000007, 1// BB_Map_Designate <floor> <map> <variant> 00// Will set a floor to a given map// Check the wiki for map numbersBB_Map_Designate 00, 0012, 00, 00 // laboBB_Map_Designate 03, 0015, 00, 00 // spaceship alphaBB_Map_Designate 07, 0019, 00, 00 // Jungle NorthBB_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 anywhereset_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 R250get_number_of_player1 R251get_difflvl2 R252// Starts the check to see if quest is completethread 101// ret ends the functionret// 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 boss101: 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 March 16, 2016 by Lemon 6 Quote Link to comment Share on other sites More sharing options...
El Socko Posted March 16, 2016 Share Posted March 16, 2016 (edited) 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 March 16, 2016 by El Socko Quote Link to comment Share on other sites More sharing options...
Lemon Posted March 16, 2016 Share Posted March 16, 2016 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 Quote Link to comment Share on other sites More sharing options...
Cyane Posted March 16, 2016 Share Posted March 16, 2016 I want to save this topic so hard! Sent from my XT1068 using Tapatalk Quote Link to comment Share on other sites More sharing options...
Shiva Posted March 16, 2016 Author Share Posted March 16, 2016 Nice 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. Quote Link to comment Share on other sites More sharing options...
Lemon Posted March 16, 2016 Share Posted March 16, 2016 (edited) 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 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... Edited March 17, 2016 by Lemon Quote Link to comment Share on other sites More sharing options...
acidman Posted April 6, 2016 Share Posted April 6, 2016 Also good video tutorials somewhere here and on you tube, just be sure to test them before submitting had a couple that didn't work to well back when i had a server running Quote Link to comment Share on other sites More sharing options...
Shiva Posted April 6, 2016 Author Share Posted April 6, 2016 Checked also some Videos on the Forum. Really Nice Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.