This section of the site contains just about all the information you would need to create a Well of Souls world.

Why would I want to make my own world? - Well, each Well of Souls world is in reality its own RPG game. Remember those RPG games from the golden days of Super Nintendo and Playstation 1? Well of Souls gives you enough freedom to make a completely custom RPG of your own, as well as letting you play this RPG online with other players whenever you please. Unlike things like "RPG MAKER," Well of Souls does most of the difficult things for you. You still have the freedom to use your own art, music, animations, ect. While WoS does give you a lot of freedom, at the same time it does take a lot of work to make a decent world. If you think you're ready to make your own world, then you can use this section to help you!

Of course, before you start, it might be a good idea to play a few different worlds first. Using the "Check on-line for new worlds" option on the Well of Souls welcome screen, download RoT and Athelias and compare them to Evergreen. Of course, you can easily do better than any worlds out right now. Like anything else in life, you're only limited by your own motivation and imagination.



World Developing Directory:
Starting a Well of Souls world
How to use WoS cookies (strings)
How to make Shops
Special things about Classes
Securing certain features in your world
How to add music to your world
How to use Maps
Actors (NPCs)
Random other things
Frequently Asked Questions
Complete List of QUEST commands (for scripting scenes)
samsyn's world developing pages (important read)
Stock Cookies List
World .txt Files:
quest.txt
items.txt
spells.txt
levels.txt
trophies.txt
monsters.txt
maps.txt
groups.txt



Basics to World Developing
Suggested steps to Making a World
Tips to making your world




Basics
Written by: Silver
The Idea

You probably start with having a nice idea for a world and maybe you even thought of a world name already. Before you do anything you might want to open WoS' Help guide (You can press F1 in-game) and go to Creating new worlds: Overview and Tutorial You'll find some useful starters info there but you probably want more resources before you get started.

Creating a world

By now you probably read a lot of info (assuming you don't read this post completely first). And you are eager to get started. I could probably tell you about how you should start writing out a storyline and such first, but you'll probably ignore those tips anyways because you want to see some action. (Been there before myself.) First thing you'll need to do now is finding a picture you can use as a map. It doesn't really matter what kind of picture you pick though, it could even be a picture of your pet. You can always change this later. Most people don't have a world map ready yet when they just get started.


Once you have a nice picture go to WoS in Solo Mode and click on ...or Create Your Own World. Click on Create New World and follow the steps.


It's probably interesting to know that a WoS world is basicly just a bunch of files put together in a folder with a world name you thought of. You can find all these files in C:\WoS\Worlds\ for example C:\WoS\Worlds\Evergreen (Assuming you installed WoS on it's standard install path.) Here you can add files, modify files, delete files etc.


Before you can get started with scripting you'll probably need a lot of information about certain subjects. You can find this info in the WoS Quest Language Dictionary but I doubt you'll find everything you need in there.



General scripting: quest.txt
Spell scripting: spells.txt
Classes scripting: levels.txt
Item scripting: items.txt
Monster scripting: monsters.txt
World midi: music.ini
Stocks: stocks.ini
Making maps: quest.txt
Scene effects: quest.txt
Monster groups: groups.txt (this is hardly used anymore though)
Setting genders: gender.ini

You may have to copy several of those files from Evergreen to your world before you can read them. Whatever you do, DON'T modify Evergreen files, it will get you marked as a modder.


I hope that this is enough information right now about how to get started. You can always read Script + Mapping FAQ for more useful information.


Tips
A few last tips:
  • Try to write a decent storyline a.s.a.p. Worlds like Evergreen are basicly worlds who are pulled together by a few quests related to 1 storyline, but most people will agree on it that it could have been worked out a lot better. (No offense intended to Samsyn!)

  • Samsyn challenges you to do better:

    quote:

    Make your own world, BETTER than evergreen! Show us all what you can do! We're confident in your skills! Go Go Go! :-)

  • Try to reach at least a slightly higher level then Evergreen before publishing if you want to get your world popular. Else people will just try it once, deceide they don't like it and delete it from their Harddrive again. Off course you don't HAVE to publish your world, many people like creating their own little paradise.

  • When you start learning to script go easy on yourself. It's probably best if you first build a small test world, to get used with WoS and figuring out what does what. The best way to do this is by probably copying Evergreens Folder, renaming that copy and start modding every little inch of it. Don't mod anything in Evergreen itself though, it will get you marked as a modder in Evergreen else and you probably want to avoid that. You'll be surprised how much you can learn from modding a world.

  • Study quest.txt's information about how to script, everytime you think you understand a small piece of it try putting it into action a.s.a.p. It's the best and easiest way to memorize the script commands and to learn how to script. A nice thing to try is scripting your first heal scene. For the older scripters this sounds very easily, but if you can do this then you can handle the rest of WoS too. Try to expand your heal scene as much as possible for example by adding music, an actor, a shop, changing background pics, playing of some noises, letting the actor move around a little etc.

  • The only real limit is your imagination in WoS, well and some limits we all have to live with, like not being able to script in fights, but there are usually ways to work around that sort of thing.

  • Don't try to make a world in just 2 weeks while you still have to study everything, but take your time to study it all. Not even a very experienced world creater will be able to make a good world in less then a month. Well Gametweeka could be the only exception, knowing him he might be able to pull that off. Usually a good world takes at least a few months, assuming you're not scripting 24/7.

  • If you need more info about how to make a world to open WoS and click on the option Check On-line for New Worlds and download the world HowToMakeWorlds that's made by Gametweeka. It has a lot of useful information and tutorials inside it.




    Steps
    Written by: Silver and Makarei

    1. Write any ideas down on a piece of paper, away from the computer. Hard copies are the best because they wonít disappear unless you throw them out. Never throw out an idea even if it sounds stupid or silly. All ideas can be converted later into new ideas..

    2. Look at your idea list.. Try to build a feel for your world. Doesn't need to be in any order. For example a great plague, a war, meteor, castle blows up, snakes appear etc. From your ideas try to gather a general idea on what you think might be a good base to construct a story. Write all the main ideas down on some paper.

    3. Use those ideas you have decided to use in a story. And construct a basic timeline. Example (basic timeline) {on paper - not pc}:
      277BA -Gold discovered
      Some gold was found in a town over night.
      276BA - First gold mine
      The first gold mine was founded in the town.

    4. Once you have written your basic time line; Construct the last part of your story using ideas, timeline.. Etc. It doesn't have to be flash just something to give yourself a starting point, as to what is going to happen in your world. {on paper - not pc}

    5. With the end part of you story constructed, it's now time to organise your timeline from end to beginning. This timeline is how your stages of your game will progress. You can also make a history time line to further enhance your worlds story.

    6. Now at this point I enhanced my timelines once I had them all organised to my liking, and of course made some sense as to how my end story part had happened. Example on improving timeline:
      277BA -Gold discovered
      In 277BA, the discovery of a gold deposit created the city of Algor, almost over night. Unfortunately, the vein ran dry within five years and most of the prospectors ended up losing money. Within seven years, nothing was left of Algor but a few abandoned buildings.

    7. Now the fun part. With my enhanced timeline, I sat down, and took in all this information I had written. And constructed a story. Based around the time events I had set up. Which leaded to the end or final part of the world. As explained above somewhere.

    8. Once I had written it all out on paper, I then transferred it all to computer. Making the right spelling changes etc. Etc. And improving the story as I began to think of better ways to further explain the story I was telling. Once you have written your story save it to your pc, and to a cd or a:\ disk. Because you donít know when your pc is going to bugger up next. Keep you hard copies too. They come in handy.

    9. Read your story, and try to create a picture of the world you are reading about, based on your timelines and places mentioned in your story. Now make your main map. Try to keep those elements in your story in the map as well. It make more sense to the player when they have heard about the old forsaken castle on the dark spiral hilltop. So we make it just like I said. Otherwise you story will loose some value to it, and people will find themselves becoming lost in your storyline.

    10. Same goes for other additional maps, and scene's..

    11. Set up your maps.txt

    12. Put maps and X4 maps you have made into the map folder

    13. Put all scene.jpg's in the scene folder

    14. Set up Terrains, located in quest.txt

    15. Add links/scene boxes etc. to places in which the player can go based on your story. (just add story links and scene boxes on maps.. Give them correct names based on your story, and timeline details.)

    16. Set links to link with other correct links. I.e. When joining maps etc.

    17. Place terrain in areas where needed.. On all maps..

    18. Create two txt files outside of the WoS game.. I.e. Desktop. Call one tokens, and the other scenes.

    19. Script those areas, i.e. scenes the player is going to visit first. After that record in your two txt files what scene numbers you have used and tokens.. Example:
      T = 1020 = dungeon Q111, has entered tomb.
      T = 1021 = dungeon Q111, has won against big zombie dude, and collected treasure.
      And for scene's..
      S = 999 = Dungeon Q111, tomb
      S = 1000 = Dungeon Q111, zombie coffin fight!
      [added by Silver: T stands for Tokens, Q for Quest and S for Scenes]

      This helps to keep track of all you tokens and scene numbers you have used. Just remember to save these txt files when you add some new info to them. Otherwise you might get lost later.. Or confused when your not sure what tokens you have or havenít used as yet. And also back them up on a diskette or something..


    20. The storyline of your world should take awhile to script. Once you have your story line scripted, you should be able to test it, provided you have some classes. By default coping evergreens folder when you first were going to make a world should have kept all the original classes. So make a person jump into the world, and cheat.. And run through your storyline.. We cheat just to see if everything works.. I.e. Scripts and stuff.. [added by Silver: You can also use Proxbeta for this, but cheat characters are probably easier, especially because you can use /stepper and /reload on cheat characters. Personally I always test a scene immediately after writing them because you can fix your bugs easier if you still remember how you exactly made the script.]

    21. Make correct storyline items, spells, music, sfx etc as you go.. I found it is easier then to do them all at once..
    22. Ok our story and world is complete..? NO!

      Oh yes, having a storyline is fun isnít it. But we need some other no related quests to tired the players down.. Do the same method as like you were doing with the storyline. But this time write a miscellaneous quests timeline.. Also refer to you story timeline as to when or how these misc. quests have come available to the player. Maybe a plague happened in you main story, so we can spring some misc. quests to the world at this time, or place in your world. Work your misc. quests out, what is the purpose of doing the quest? Reward? Maybe to find a cure and to save the town.. Will the misc. quests interfere with the main storyline. Or can this misc. quests spring a hidden storyline from the first main storyline..


    23. Now make the correct links/scenes boxes on your maps for the misc. quests you are implementing.

    24. Script your misc. quests. Try to work with one misc. quest at a time.. Again write what tokens and scene number you have used. Or refer back to the txt files for what ones you havenít used.

    25. Now add in remaining links/scene boxes for basic shops.. Places mini games etc..

    26. Add basic remaining items, spells music, sfx etc to your world.

    27. Script all shops, mini games camp scene, basic fight scene etc.

    28. Add monsters to the correct places and areas in your world.. Example snow fields, must have snow or cold related monsters. No point putting a magma dragon in the north pole. Or putting Santa in a volcano.

    29. Make your interface, buttons etc..

    30. Make classes, playable people etc [added by Silver: donít forget to balance classes with the /battle command. To take care that all classes have no real advantage vs. each other each class should have 0,0 hit.]

    31. Make any additional files, example film clips.. Or something I might have missed in this topic..

    32. By now you should have some idea as to what your world is all about. So you should be able to make a title for it.

    33. Now make a web page for your world, remember the web page is about your world not you.

    34. Find some willing people who want to help beta test your world.

    35. Add those beta testers names, and those people who helped you in your credits section, maybe even the scrolling intro thingy..

    36. version you world.

    37. Zip, upload it and release your world, on your worlds website..

    38. Enjoy playing.. ( well, that of course is boring playing your own world.. Because you made it..) Lol so enjoy others worlds, and help those who need help.. [added by Silver: Playing your own world does have certain advantages, but if quests arenít randomised it gets boring soon as Makarei said since you wrote them and already know what to do where. Youíll mostly end up testing the quests instead of playing them.]





    Tips


    Written By: Makarei

    To those who are new to making a wos world, for wos. Firstly, before you go ahead and ask about how you do this or that.. Go into wos world making thingy and play around with it, test it see what you think it can or cant do.. push buttons, fiddle, etc and see what the outcome is. i found playing around with the wos eninge thingy is the easiest way to learn it.



    ------

    Written by: Darangen

    If you're making a world for the sole purpose of seeing how many people will play it, I can assure you that you will be disappointed, especially if it is your first world.


    When making a world, you should make sure that you are doing it because it is something that you want to do, something that will make you happy when it's complete, and something that be fun for YOU. Many worlds are out there, and a lot of them are really good worlds with a lot of time put into them, some on the other hand are a couple of re-used maps and monsters with 1 or 2 quests that can be finished in 5 minutes. What is my point here? How many worlds do you see being played online? Usually Evergreen is predominant, some Aerianell servers, maybe an RoT and Worlds End. There are other great worlds out there, but still not many, if anyone, plays them. So if you are developing a world you should do it because you just want to, not because you want everyone else to see how many cool and awesome ideas you have.


    I have made about 7 worlds altogether, and I have assisted some in making their worlds. My first 4 worlds sucked so bad that I was embarrased to release them to the public, only a few close friends ever got copies of those. (The Unnamed World, Erotomania, Hells Kitchen, and Trial of Tears). But then I finally released a world to the public, I figured that the only way to figure out what people were looking for was to give them something, and then get feedback from the players. This world was Innsmouth. Everything was going fine and dandy until an unexpected virus destroyed all my files and i was forced to reformat losing my precious pubCenter.dat file. I then started on a new project, Dragonia. Dragonia was a beta only world and was closed due to matters happening in my life. I stopped playing WoS and creating worlds for a while, but then about a year later I returned and started working on it again. Dragonia soon became what you all know as Althagar. I worked on Althagar for a while but grew weary of trying to keep up with hackers cheaters and modders. Learning a valuable lesson, I decided to start again from ground zero, this time not trying to catch cheaters, or ban hackers. At this same time though I was asked to help with project x, a large scale world in progress. So now I've been working mainly on px, with a little bit of time on The Twelve Stones. People may know and like my work now, but I was once an unknown author.


    I said all that to say this:
    Don't give up on your world just because other worlds are coming out. So what, maybe you're world won't be #1 on it's first day, maybe there won't be 10 servers filled with 30 people each on it, maybe it will seem that your time and effort were wasted on this. But here are a few tips to helping your world become known.

    1) Advertise. Go to the BB's. The most productive advertisement would be on the official wos bb. Just post a topic with the title something like this "NEW WORLD! - WorldName" People will often read this and learn about your world. Be sure to include information about your world, but don't make it too lengthy, long posts tend to scare people away.


    2) Be Unique Many worlds out there are copies of a different world with a new name slapped on it. It's not to say that you shouldn't learn from other worlds and get ideas from others work, but have something in your world that makes your world unique. (example would be deleveling from althagar, no other world has that).


    3) Host your own server. Not everyone reads the bb's. Another way people can see that there is a new world is out is seeing it on the server list. If you can't host a server most of the time, then try and get some friends to host it when you can't. Connection speed isn't a must, cable or better is nice, but you can still host a server with 56k. You're main focus here is advertising your world, others with higher speed online will come by and host servers if needed later on.


    I hope this helps and encourages you to persevere.


    ------

    Written By: Devourer Of Souls

    Step 1: Organize your work.

    It's probably a good idea to seperate your code files by what they are in different TXTs. Such as

    scenes10.txt - Basic scenes from 1-10
    quests30.txt - Quest scenes from 21-30

    Or you could even do it by where it is.

    town1.txt - All of town 1's coding.
    city1.txt - All of city 1's coding.

    Either one works, it's just up to you. This way your code is easily locate-able, and it saves you alot of headaches.

    Step 2: Organizing your Code.

    Now that you have your TXTs organized, it's probably a smart idea to organize the code inside too. You could try something like

    ;Town 1's Armor Shop
    SCENE...

    Or something similar. It's probably also a good idea to code your scenes in numerical order.

    Another good thing to try is tabbing your code to be even more organized. Since tabbing doesn't really matter in WoS coding, you can use it to separate different commands.


    ------

    Written By: Silver

    Important notice!

    When you're ready to publish your world and get to put a version on your world with the /version command then don't forget your password!

    If you forget it you can never retrieve it again and by doing not update your world anymore. You could delete the world.ver file in that case, but that will mark all existing characters as modders!

    Also be sure to make a back up from your pubCentre.dat file in your c:\WoS\ folder. This is the file that takes care that nobody can change something in your world without being marked a modder.


    ------

    Written By: Simmen Stenil

    A world should be an original creation. If your intent is to 'mimick' something else, then you're not really creating anything, are you? The ideally creative world would have original skins, maps, music, art, and script. While not all of these topics can always be met (espcially music, as I know of no one that composes well), the world developer should strive to meet each of these as well as he or she is able. Only after creating all that he or she can should he or she begin to ask permission from others to use their materials.

    What purpose does a world have if it's merely a copy of another? Enhancing another's content can be good, but creating something that is truly your own is amazing.

    Actually sitting down with pen and paper helps to avoid creating an epitome. During this time you can ask yourself the critial question of "What is it that I want to DO with this world?" I ask myself this question every time I begin to work on Master of Reality again, and I believe that it's paid off.

    Imitation is not always a bad thing. In an attempt to refine my programming skills, I have created several scripts that immitate turn-based combat, Animal Crossing, Simon, and more. While the actual games themselves are not original, the idea of taking these games (all of which WoS's actual engine is not truly designed for and making them work well, I believe that I've managed to create something that's truly unique.

    Other world developers should begin to stive for this as well. Think not "How can I immitate that world?" or "How can I take Silver's ideas and improve upon them but rather "How can I create something that truly reflects me?"

    Sadly, most WoSsian could care less about originality. Instead of something fresh, they want the world that can call itself "Evergreen II." I believe this is the reason that world developers fear to tread far from the beaten path; they're afraid of being rejected.

    Therefore, you must ultimately create your game for yourself. Don't worry about pleasing your audience and, when the time is write, they shall come.

    I applaud worlds like Orino, Aerianell and World's End for shedding their fear of renunciation. No one can deny that these worlds have been successful, though one may fail to notice that none of these truly mock Evergreen.

    World developers should come together and learn from each other how to create something new and fresh.



    ------

    Written By: Hesacon

    As if you haven't heard it enough, I'll tell you again. Be original. Its hard to find a world that is not either:
    a) Knights/Olde Europe
    b) Samurai/Japan
    c) Demons and magical things
    d) Remake of a video game
    e) A combination of the four

    Worlds usually don't come out in a week or a month. Work hard, but not too hard. If it takes you two years to finish your world, if you enjoyed making it, then it was probably worth it. Don't be like some developers and come out with a new patch every time you add a new item. Personally, I'd like to see a world that is 100%(or close) come out than 80 patches of a world that is 10% done. Get a few friends who know what they are looking for, and run beta versions you don't release to the public. Find all the bugs before regular players decide to start playing. Nothing is more frusterating than being in the middle of a quest and noticing that a certain link doesn't go to where it is supposed to, or a scene is broken.

    While most people will start playing your world for the story behind it, they will only play until they got the max out of the story and then stop playing the world. Things like PKing and guild/group activities are crucial when it comes to hooking your play. If a lot of players start at the same time and enjoy your story, they will level to 100. When they do get to level 100, they might get bored. Give them something to do. WoS and Evergreen would have died a long time ago if it hadn't been for pking. Some worlds start and are popular for a few weeks or months, but the players just get bored and stop playing.

    My opinion is worth one and a half cents, so take it for what its worth.







    Self made cookies:
    Written by: Silver

    Self made cookies are really easy to make, all you have to do is think of a (logical) name and then SET the cookie. For example we'll call the cookie apple, because we want to see how many times somebodies has earned apples during some sort of (in this case imaginary) minigame.

    The current amount of apples will be zero.

    SET apple, "0"

    You have now succesfully made your first cookie. This hopefully didn't seem to hard yet.
    With cookies you can also do some basic math, like adding numbers, subtracting, multiplying and dividing. For example somebody won 1 apple with that minigame. In that case you'll have to add 1 apple to the current cookie:
    ADD apple, "1"

    The scene host scored a bonus and his amount of apples will be multiplied with 6 now.
    MUL apple, "6"

    6 x 1 = 6, the current cookie value will be 6 right now.
    Next the scene host will spend 2 apples in exchange for something else, in other words we'll have to substract 2 apples from the cookie:
    SUB apple, "2"

    (6 - 2 = 4, the current cookie value is 4 now)
    Finally if we also want to divide the current amount of apples by 2 we'll have to do this:
    DIV apple, "2"

    In short the math commands are MUL (for MULtiplying), DIV (for DIViding), ADD (for ADDing) and SUB (for substracting).

    You could let the actor tell how many apples you have right now. To do that you'll need to read the cookie. This might seem confusing first, but just try it out in a script:
    1: You have #<apple> apples right now %1.

    In WoS it will show up as:
    Farmer: You have 2 apples right now Silver.

    Most bugs in cookies are caused by typos (aplle instead of apple) or because people try this:
    ADD #<apple>, "10"
    instead of
    ADD apple, "10"

    You can't do any math or set cookies in the read only mode, that's impossible, please keep that in mind when you're working with cookies. (I even fell for this myself several times.)

    Basic explaining compare commands you need:
    Cookies are mostly useful if you compare them with other values. For example if you have 10 apples you will win something special in that minigame quest.
    To do so we need to compare if the apple cookie has 10 apples or not. We can use the COMPARE command to do that:
    COMPARE #<apple>, "10"
    IF< @notenoughapplesyet
    IF= @enoughapples
    IF> @hasmoreapples

    Please note that WoS needs to read the cookie now, therefore we use #<apple> and not apple. (You can also store letters, words, even sentences in cookies if you want, I'll talk about that later.)

    IF< checks if the value in the cookie is smaller then 10. IF= checks if the value is exactly the same and IF> checks if the value is greater then 10.

    If you want you can also compare 1 cookie with a 2nd cookie, this goes like this:
    COMPARE #<cookie1>, #<cookie2>
    IF< @1issmaller
    IF= @thesame
    IF> @1islarger

    We also have the STRCMP command, STRCMP stands for string compare, basicly you'll use this cookie for checking cookies who have letters and numbers in them, or words. This is mostly useful in to see if cookie 1 is the same as cookie 2.
    For example:
    SET banana, "yellow"
    SET melon, "green"
    SET strawberry, "red"
    SET colour, "red"

    In this example we're going to compare which fruit has the same colour as the current colour in cookie #<colour>. As you can see the strawberry and the #<colour> cookie match, but since WoS isn't as smart as us we'll have to use the STRCMP command to figure that out:
    STRCMP #<banana>, #<colour>
    IF= @colourmatch1
    1: I'm sorry but the banana is colour #<banana> and the colour we're looking for is not.
    STRCMP #<melon>, #<colour>
    IF= @colourmatch
    1: I'm sorry but the melon is not the colour we're looking for.
    STRCMP #<strawberry>,#<colour>
    IF= @colourmatch3
    1: I'm sorry but this strawberry does not have the right colour.
    END
    @colourmatch
    1: Yay you found the right colour!
    END

    I hope this made some sense...

    Last we also have the STRSTR command to play with. STRSTR stands for string in string. Cookie values (the numbers and letters) are also called strings. Sometimes you have a cookie that is partially in cookie 2 also. This makes probably more sense with an example so here goes:
    SET cookie1, "Bush"
    SET cookie2, "I don't like Bush."
    STRSTR #<cookie2>, #<cookie1>
    IF> @foundtheword
    1: Cookie 1 was not found in cookie 2.
    END
    ;[Error found by Flamelord.]
    You have to use IF> here instead of IF= because of some C stuff which samsyn explains a lot better then I did.
    quote:
    NOTE: use IF= to see if the string was NOT inside the other. It's odd, but it's easier to remember the behaviour if you are a 'c' programmer, since strstr returns NULL if the string is not found.
    You can off course also do something like this:
    STRSTR #<cookie1>, "We all love Bush."
    IF> @foundtheword
    END

    In short:
    COMPARE - Use this one to compare numbers only, it won't work with letters and other characters.
    STRCMP - Use this one to find out if cookies who contain letters and numbers are a match with your other cookie (or word, soul ID, whatever you want.)
    STRSTR - Use this one to see if the first cookie is in the 2nd cookie (or to put it more corrent, if the first string is in the 2nd string).
    IF= - Use this one to see if cookie 1 equals cookie 2.
    IF> - Use this to see if cookie 1 is larger then cookie 2.
    IF< - Use this one to see if cookie 1 is smaller then cookie 2.

    Things to watch out for:
    You can use COMPARE for numbers only! Else it simply won't work, some people forget this sometimes.
    Don't forget that WoS needs to read cookies, if you write COMPARE apple, "10" instead of COMPARE #<apple>, "10" this will make a major difference for WoS.
    Use the IF commands as I wrote them down, Between the IF and =,> or < may NOT be a space. So either use IF=, IF< or IF> and not IF =, IF < or IF >.
    After writing down the IF as it should you always have to follow it up with a link, like @gohere and not gohere Also DON'T put any commas between IF= and @link, most likely WoS won't read the line in that case. A good IF command looks like this:
    IF= @link
    a completely wrong one like this:
    IF =, link
    This is one of the most caused bugs when working with cookies and is often one of the hardest bugs to find. Even experienced world developers still have this bug sometimes.

    If you like you can also read all this info at http://www.synthetic-reality.com/wosquest.htm#Quest
    Sometimes this may be confusing though, so I hope that my examples cleared up some of that confusion. Actually I recommend looking up all the above on that webpage, that's the main source I used to learn how to use everything myself.


    Added by: Avelon Hellfyre

    There's 1 other opCode for cookies that isn't listed above anywhere. Think of it as being most like DIVide...

    Modulus (short: MOD) is used to find the remainder of a cookie when you divide it by the argument you specify.

    SET mod1, 22
    MOD mod1, 10
    1: #<mod1> should now equal 2.

    In this case, 10 is the argument you specified. You're probably wondering now what use this has. I'll just give you an example.

    SET mod1, 73
    SET mod2, 73
    DIV mod1, 10
    MOD mod2, 10
    ADD mod1, #<mod2>
    1: #<mod1> should now equal 10.

    In this case, you have two cookies that are equal. You DIV the first by 10 (the result being 7.3), but WoS doesn't *do* decimals. So the outcome is 7. The second you MOD by 10...

    What happens here is 10 goes into 73 as many times as it can (7) and then saves the remainder (3).

    So now you have #<mod1> (7) and #<mod2> (3). Adding them together gives you 10. Funky, eh?




    Stock cookies
    Written by: Silver

    Basicly the stock cookie list is a long list with mostly read only cookies made by samsyn. These cookies give all kinds of useful values (numbers/letters) about the scene hosts character, the scene itself, monsters, spells, items, pets, real life time, gender and even the server.

    Mostly these cookies are read only, but some of them you can set yourself.
    For the full list of stock cookies and which ones you can set I have to refer to http://www.synthetic-reality.com/wosCookies.htm#Stock%20Cookies

    Let's see what you can use them for though.

    Example:
    You have made a quest and to finish the quest the scene host needs at least 45 Wisdom (more is allowed), a pet of level 70 (can't be higher or lower), full HP, at least half MP, he must be carring lesser then 50,000 GP and it has to be 5 pm in real life.

    Nice quest huh?

    To check if somebody has at least 45 wisdom you'll first have to look up the stock cookie for the scene hosts wisdom, this cookie is called #<num.hostWIS> as you can see in the stock cookie list (the link I gave earlier).
    To make it easy on myself I'll just write down the entire thing, with some self study you should be able to figure out what happens where. Read carefully what has to be done and then check what's happening in the script written below.

    COMPARE #<num.hostWIS>, "45"
    IF= @questpart2
    IF> @questpart2
    1: I'm sorry but you're not smart enough yet, so you can not do the quest until you gain more wisdom.
    END
    @questpart2
    COMPARE #<num.hostPetLevel>, "70"
    IF= @questpart3
    1: I'm sorry but your best pet is to high or to low in level. Get it to level 70.
    END
    @questpart3
    COMPARE #<num.hostHP>,#<num.hostMaxHP>
    IF= @questpart4
    1: I'm sorry but it seems like you don't have full HP right now.
    1: Your HP is current #<num.hostHP> HP and it should be #<num.hostMaxHP> HP.
    END
    @questpart4
    SET checkMP, #<num.hostMaxMP>
    DIV checkMP, "2"
    COMPARE #<num.hostMP>, #<checkMP>
    IF= @questpart5
    IF> @questpart5
    1: I'm sorry but your MP is to low right now.
    1: You need to get your MP up to #<checkMP> MP.
    END
    @questpart5
    COMPARE #<num.hostGP>, "50000"
    IF< @questpart6
    1: I'm sorry but you're carrying to much GP right now.
    1: You have to carry lesser then 50,000 GP.
    END
    @questpart6
    COMPARE #<num.timeHour>,"17"
    IF= @questpart7
    1: I'm sorry but entered this scene at the wrong time, try again later.
    END
    @questpart7
    1: Yay, you're meeting all my requirements to do this quest.
    END

    Please note that since all my cookies that I used only contain numbers I only have to use the COMPARE command and not the other 2 compare commands.





    Tamper Resistant Cookies
    Written By: Gametweeka

    It's quite possible to make cookies tamper resistant *not tamper PROOF*. For example, say you have a money cookie #<cash>, and an anti-hack cookie #<cashcheck>. Every instance of "cash" being changed with SET, ADD, SUB, etc. you would follow up with #include cashcheckset.txt. Then in cashcheckset.txt file you would make a complex formula that would read #<cash> and SET the resulting #<cashcheck> cookie. This cookie would then be saved as well. Then when the portion of the game you change the amount of your #<cash> you can have #cashcheck.txt take the #<checkcash> cookie and run it through the process in reverse and compare the two...if they don't match, they cheated, they changed the #<cash> cookie and not the #<cashcheck> cookie. I wouldn't advise naming your cookies that obvious either. It's possible.

    Imagine you buy an ATM machine in a scene....after you buy it the script SETS some cookies.

    SET cash,0
    SET cashcheck,0
    END

    Then you go and use it here in another scene, (say,in your house?)

    ATM Machine Example
    Silver outta get a kick outta this...or a headache

    SCENE whatever
    ACTOR 1, "ATM", myactors, 1, 95, 70
    @eventActorClick1
    1: Welcome %1, your balance is #<cash>
    MENU "Deposit=@deposit","Withdraw=@withdraw","Earn Interest=@earn","Exit=@exit"
    END
    @deposit
    1: Amount of deposit? Enter the amount...
    SET deposit, "0"
    ASK 60
    SET deposit, "#<lastAsk>"
    COMPARE "#<lastAsk>","#<hostGP>
    IF G#<deposit>, @continued
    1: Insufficient funds available for deposit.
    GOTO @deposit
    END
    @continued
    1: You would like to deposit #<deposit>? YES/NO
    IF NO, @no
    IF -G#<deposit>, @nogo
    1: One moment please...
    HOST_TAKE G#<deposit>
    #include cashcheck.txt
    ADD cash, "#<deposit>"
    #include cashcheckset.txt
    1: Processing................................
    1: Thank you for your deposit.
    GOTO @normal
    END
    @withdraw
    1: Amount to withdraw? Enter the amount...
    SET withdraw, "0"
    ASK 99
    SET withdraw, "#<lastAsk>"
    COMPARE #<lastask>, 999999999999999
    IF=@cheatattempt
    COMPARE #<cash>, #<withdraw>
    IF> @continuew
    IF= @continuew
    1: Insufficient funds............. Your current balance is #<cash>.
    GOTO @normal
    END
    @continuew
    1: You would like to withdraw #<withdraw> ? (YES/NO)
    IF No, @no
    1: One moment please.
    HOST_GIVE G#<withdraw>
    #include cashcheck.txt
    SUB cash, #<withdraw>
    #include cashcheckset.txt
    1: Thank you for using your ATM!
    GOTO @normal
    END
    @no
    1: One moment please...
    GOTO @normal
    END
    @nogo
    1: Insufficient funds...
    GOTO @normal
    END
    @earn
    COUNTDOWN 60
    WAIT 60
    HOST_GIVE G500
    WAIT 1.0
    1: Interest Earned!
    1:
    GOTO @earn
    @exit
    1: Thank you for using your ATM.
    GOTO @normal
    END

    @cheatattempt
    HOST_GIVE T666 ;being a trigger for ban
    END


    cashcheckset.txt file would read...
    SET cashcheck,#<cash>
    ADD cashcheck,1492
    SUB cashcheck,983
    MUL cashcheck,2
    SUB cashcheck,36
    blah blah blah...much as you like.


    cashcheck.txt file would read...
    ADD cashcheck,36
    DIV cashcheck,2
    ADD cashcheck,983
    SUB cashcheck,1942
    blah blah blah...much as you like in reverse order
    COMPARE #<cashcheck>,#<cash>
    IF>,@cheatattempt
    IF<,@cheatattempt


    This should at least inconvenience cheaters since they would have to look at the formula *make it longer* and figure out what to set BOTH cookies to so that they wouldn't be marked a cheat! I just loooooove to make life miserable for cheats!!!





    CAN I PUT COOKIES IN MY MONSTERS.TXT SPELLS.TXT AND ITEMS.TXT FILES?
    Written By: Darangen
    No, you CANNOT use cookies in items.txt, monsters.txt, spells.txt or anything else that is not in a scene. All monsters, spells, items, and things not scripted by the developer are loaded when the world is loaded, not as they are being used.




    Cookie pointers
    Written By: Mad

    From a graphical point of view, pointers will use this symbol: *, put before the normal #<> to check the value of the cookie. You all know, I hope, that if A is the name of the cookie, #<A> will return its value. *#<A> will return the value of the cookie whose name is the value of A.

    Let's be more concrete. We have 2 cookies:
    code:
    SET gold, 2600
    SET 2600, rich

    #<gold> will be read by WoS as "2600", but if you write *#<gold>, then WoS will return the value of the value of gold, ie: the value of the cookie 2600, ie: "rich"

    Not that hard up to know, but...

    What the point of using pointers?

    Pointers will be usefull in complex scripts. I will try to give you some examples to show you some of the great things you can do with them.

    Example 1. I want to write a useful script for world devs to allow myself to set my own cookies on my char, and check the value of existing cookies. First, we pose an actor that asks the name of the cookie, and set it thanks to the lastAsk trick:

    code:
    ACTOR 1, etc
    1: name of the cookie you want to set?
    ASK 30
    ; here I should compare if the player has said something or not
    ; but well... that's just an exercise
    SET cookiename, #<lastAsk>
    1: Value of the cookie?
    ASK 30
    SET #<cookiename>, #<lastAsk>
    OK, now we want to check the value of a cookie:
    code:
    1: Name of the cookie?
    ASK 30
    1: The value of the cookie #<lastAsk> is *#<lastAsk>
    See how it works? But we can use cooke pointers for more complex scripts:

    Example 2. I want to make a generic script for all the healing scenes of my world, that will allow the player to kill the healer and replace him by another actor if you do so. Weird, yes, but pretty complex. I will not write the whole script and post how to make a random name generators as I did in Athelias for example; I'll only focus on the basis.

    To do this, we will need to set different cookies for every scene to determine the name of the current actor, his skin, his pose, etc. And the only thing that changes in ALL the scenes is the scene ID itself. Therefore, if we use it as a part of the name of those cookies, we can be sure to have different cookies. Let's do it. We will use the following cookies: name#<scene.id>, skin#<scene.id>, and pose#<scene.id>. Of course they will be read as name22, skin22 and pose22 for example if the player is in scene 22. We will not change the coords x and y in this example.

    First we need to check if the player has already had cookies set for the actor skins/pose/etc (ie if it's the first time he goes to this scene or not). Otherwise, no actor will show up. But here appears the first problem. We don't know the scene ID as it is a generic script, and STRCMP #<skin#<scene.id>> does not work. We can't write: *skin#<scene.id> either as the pointers have to be immediatly followed by "#<>". So we need to set a new cookie, let's call it "temp.skin", whose value will be skin#<scene.id>. Then we can compare:

    code:
    SET temp.skin, skin#<scene.id>
    STRCMP, *#<temp.skin>, ""
    IF= @firsttime
    ...and we do the same with the other cooies. We have to use pointers here or WoS will check the value of temp.skin (ie: skin22 if we are in scene 22) instead of the value of the cookie scene22 itself.

    OK we are done: we are sure that it is not the first time the player comes, so we can pose the actor:

    code:
    ACTOR 1, *#<temp.name>, *#<temp.skin>, *#<temp.pose>, 25, 90
    We've just made a fully abstract actor.

    Now, I said that we wanted to allow the player to kill the healer and replace him by another actor. Very easy now:

    code:
    @eventActorAttack1
    ; The actor is dead, we have to replace his old attributes.
    ; To make the example easier, we will assume
    ; that all the actors skins name are "humanNN", 0>NN>100
    ; I'll only write the script for the skin name
    ; For some reasons (maybe I am wrong here), SET A, something%R100
    ; doesn't seem to work, while SET A, %R100 definitly does,
    ; so we have to do this:
    SET temp.number, %R99
    SET skin#<scene.id>, human#<temp.number>
    Easy, eh! Add a random name and determine the pose and you're done.

    Example 3. We want to get infos about all the monsters fought by the player in the last fight. We'll have to use the cookies monster.lastFightIdNN, monster.lastFightCount, and monster.id. First we need to know how many monsters were present to know how many times we will have to loop the script: we will set a cookie with this value, and SUB 1 to it whenever the script will be looped, when its value will be 0, we'll be done:

    code:
    @loop
    SET monsters.number, #<monster.lastFightCount>
    ; monster.lastFightCount is read only so we have
    ; to use another cookie to do math with it
    ; Now we need to check if there were actually monsters in the last fight
    ; or if we haven't already checked all the monsters
    ; (remember that this script is looped)
    COMPARE, #<monsters.number>, 0
    IF= @done
    ; We are now aure that there are monsters left.
    SET temp.ID, monster.lastFightId#<monsters.number>
    ; We are about to check the ID of the last monster fought
    ; (the #<monsters.number>th monster)
    SET monster.id, *#<temp.ID>
    N: The name of the #<monsters.number>th monster fought is #<monster.name>
    N: Its level is #<monster.level>
    ; etc. etc.
    ; Now we SUB 1 to monsters.number and loop the script
    ; to check the stats of the last but 1 monster.
    SUB monsters.number, 1
    GOTO @loop

    @done
    N: No monster left.
    END

    Written By: Sir MJ

    A pointer in any scripting language (QUEST included) is merely an indicator as to what type of data you are about to read in your code. In WoS terms they point to a "second level/ second generation/ second dimension/ floating/ yes geeks globally have that many names for it and more" cookie(variable) which is one of Uncky Dans kind way of letting us use simple scripting to 'tap into' arrays. The pointer as its name suggests simply points to whatever specific data we seek to obtain where rather than looking at the value of a cookie, we are searching for the value of a cookie the name of which is the value of the cookie we are pointing to. Think of a pointer as the pick in the Opal mine, where the array is the stash of Opals.

    An array is a group of variables (cookies in QUEST) that fit within the same general data type.




    Push/Pop Commands:
    Written by: Flamelord

    Two Well of Souls QUEST commands, PUSH and POP, are among the most useful commands, though they are not well understood.

    First, we must establish the metaphor that we will use to explain them: Imagine that there is a stack of plates. On each plate is written a string of data. The stack starts out empty.

    When we PUSH a cookie, we are taking the string it contains and writing it on a "plate" and putting it on top of the stack:

    PUSH a

    Now, the stack contains a single entry, which is whatever a contained. Let's say it contained the word "Apples". Here's our stack of plates:

    (Apples)

    So, now let's POP a cookie. When we pop a cookie, all we are doing is taking the top plate and copying it to whatever cookie we specified. So, if we POP "b" instead of "a", b would contain "Apples". Let's just pop "a" for now to keep things simple.

    POP a

    "a" now contains "Apples" again. Let's try a slightly harder example:

    PUSH a
    PUSH b

    We'll declare that before we PUSHed them, they had "Apples" and "Butter", respectively. Since we PUSHed "a" first, the stack has "Apples" on the bottom:

    (Butter)
    (Apples)

    Notice that they are in the opposite order that we PUSHED them in. Let's POP them so that they go back to the correct cookies. Since "Butter" is on top of the stack, we have to POP "b" first.

    POP b
    POP a

    So, "a" and "b" contain "Apples" and "Butter" again. Notice how we have to pop in the opposite order that we push:

    PUSH a
    PUSH b
    POP b
    POP a

    We can reverse the POPing to switch the two cookies' values if we want to:

    PUSH a
    PUSH b
    POP a
    POP b

    Apples (a)
    Butter (b)
    ```|
    ```| ;Notice how since Apples was PUSHed first, it fell first, and is on the bottom.
    ```V
    (Butter)
    (Apples)
    ```|
    ```| ;Notice that POPing takes the first off the stack and places it in the cookie specified.
    ```V
    Butter (a)
    Apples (b)

    So, POPing "a" takes the first one in the stack, which is the last one to be placed on the stack. So, if we place "b" last, we have to POP it first to get its value back. Otherwise, they will switch.

    Added by: Hesacon
    Just keep in mind at the end of the script the cookie stack will disappear.




    Server Variables
    Written by: Hesacon

    A server variable is very close to a cookie, only run through an MIX server (assuming the admin allows server variables). It's a fairly simple command that allows you to use a cookie on one player's game to affect another player's game. It's simple, there are two commands:

    SET_SERVER_VAR categoryName, variableName, value
    GET_SERVER_VAR cookiename, catagoryname, value

    Okay, so how do these work? In each one catagoryname is where the cookie will be stored in ...\WoS\variableCache\yourworld.ini This makes very little difference, but for organizational purposes it's useful.

    In the SET_SERVER_VAR command, you'll notice the variablename, this is what you call what you want your variable called. When you use the GET_SERVER_VAR command, the variable you actually want to get will be under value.

    When you DO use the GET_SERVER_VAR command, the cookie value (Which will appear without the # like if you were using the SET command), that cookie will be set to the variable's value you want.

    How about an Example?

    SET vartest1, "62"
    SET_SERVER_VAR beta, test, #<vartest1>
    1: Hold on...
    WAIT 2.0
    1: Let's see if I get it back...
    GET_SERVER_VAR vartest2, beta, test
    1: vartest1 is #<vartest1> and vartest2 is #<vartest2>!

    What happens here is you set the server variable (stored in ...\WoS\variableCache\yourworld.ini) "test" as the value for your cookie vartest1. Then, when we GET it back, we set the variable test as vartest2.

    Things to be weary of: First, you don't want to have funny characters (things that aren't letters or numbers) in your variables. You can test to see if the variable will take it, but if you want to be safe, don't. Second, server variables can be CHANGED by a server admin if he or she pleases. They probably won't, but you might want to avoid using server variables in some ban script (Admin: I don't like SOUL2625 and changing this variable bans him... I'LL DO IT!).

    Also, be weary of using a lot of these. Every time you SET (and sometimes when you GET) a server variable, the game has to talk to the server. Doing this too often can cause lag and can cause the server to run slower. Imagine a server with 30 people on it, and all are SETting and GETting information from the server every few seconds. Things won't work too well!











    Written By: Silver

    How to make a shop?

    Shops... what is a Shop?

    Basicly a Shop is a scene just like every other scene, only shop scenes are special cause they have the OFFER command in them. Basicly the OFFER and OFFER2 command are the shop, everything else is just for fun. In short a shop scene can be just 3 lines:


    SCENE 50
    OFFER 1
    END

    Basicly you have 2 types of real shops and you could make your own "shops". I'll explain the real shops first.





    Written by: Silver

    OFFER command
    Shop 1 is made with the OFFER command, the OFFER command allows you to sell certain item ID's. Also you need the OFFER command instead of the OFFER2 command with certain items, for example pets and seeds. OFFER commands work like this:

    You want to sell item ID 1,4,500,617 and 490. All you have to do is this:

    SCENE 50
    ; Here you could put actors, stuff the actors say etc.
    ; The shop won't appear till you use the OFFER or OFFER2 command
    OFFER 1,4,500,617, 490
    END

    A nice varation to make shops randomly sell items would be this script:
    SET sellA, %R25
    SET sellB, 22%r9
    SET sellC, %R100
    SET sellD, %R5%R99
    SET sellE, 5%R99

    OFFER #<sellA>,#<sellB>,#<sellC>,#<sellD>,#<sellE>
    END

    sellA randomly sells between item ID 1 - 25 (Item ID 1 is the lowest item ID it would offer and item ID 25 the highest.)
    sellB randomly sells between item ID 221 - 229.
    sellC randomly sells between item ID 1 - 100.
    sell D randomly sells between item ID 101 - 599. (%R will never give 0 as a value, the lowest it will give is 1.)
    sellE randomly sell between item ID 501 - 599.

    If items don't show up then this can happen for 3 reasons:
    1) The item ID doesn't exist. (You haven't have made this item yet, therefore it can't be sold.)
    2) The item ID has GP cost set to 0 or lower, in that case it won't be sold.
    3) sellA and sellC or sell D and sell E happen to sell the same item, but because it will only show up 1 time in a shop it looks like 1 item doesn't get offered.






    Written By: Silver

    OFFER2 command
    When you enter scene 50 now then you'll sell these items in your shops. As you can understand it's a lot of work if you want to sell certain ranges of items, like all potions from level 1 to level 25. Because of that Samsyn added the OFFER2 command.

    The OFFER2 command works like this:
    SCENE 50
    OFFER2 <start level>,<end level>,<item code>
    END

    In the example of selling all potions from level 1 to level 25 the script will look like this:
    SCENE 50
    OFFER2 1,25,0
    END

    In case you also want to sell all swords (right hand 1) from level 55 to level 85 you'll have to add this code:
    SCENE 50
    OFFER2 1,25,0, 55,85,12
    END

    In case you want to sell all items ranging from level 5 to level 15 your script will look like this:
    SCENE 50
    OFFER2 5,15
    END

    In that case you don't have to put in a third argument.

    Note that you can only put up a certain amount of items you can sell with the OFFER2 command, I believe this amount is 13 or something? I'm not sure about how much it exactly sells. Also you can't sell over a certain amount of items, I think this limit is near 100 (not sure, didn't take time to count them) all items after that just won't appear. Meaning that if you offer all swords, all bows and all shields in evergreen the script will stop showing up items halfway all shields.

    Note also that in order to sell items with the OFFER2 command you must have set both GP and FP, if the FP is set to 0 you can still sell it, but only with the OFFER command.

    A neat shop trick that always sells the right equipment for somebody is this script:
    SCENE 50
    SET shoplow, "#<num.hostLevel>"
    SET shophigh, "#<num.hostLevel>"
    SUB shoplow, "5"
    ADD shophigh, "5"
    OFFER2 #<shoplow>,#<shophigh>
    END

    This script will always sell all items 5 levels higher and 5 levels lower then the scene hosts current level.

    If you want to make shops sell only armour 5 levels lower/ higher then your current characters level then just change the script to:

    OFFER2 #<shoplow>,#<shophigh>,11
    END

    If you also want to sell helmets then change the script to:
    OFFER2 #<shoplow>,#<shophigh>,11,#<shoplow>,#<shophigh>,10
    END

    I'm sure you can figure out the rest yourself.


    Written By: Crusard

    The way OFFER2 works is:
    OFFER2 <minItemLevel>, <maxItemLevel>, <itemClass>
    (If you want more information, go to the quest lingo syntax)

    So, the way to check if a player is level, for example, over 20, would be the following,
    You need to use cookies on this one:

    ACTOR 1, "Seller", joshtownsfolk, 2, 25, 75
    ; Sets up the actor
    COMPARE #<num.hostLevel>, 20
    ; compares the player's level with number "20"
    IF> @isover20
    ; If the first value (player's level) is HIGHER than the second one (20), it goes to @isover20
    OFFER 1, 2, 3, 4
    1: Here are my potions, come back when you are level 20, and i'll offer the items 5, 6 and 7!
    END

    @isover20
    OFFER 5, 6, 7
    1: I see your level is higher than 20 now, you can buy my items!
    END


    So, if player is level 1-20, it will offer items 1, 2, 3, and 4.
    If the player is level 21-100, then it will offer 5, 6, and 7.




    Written By: Silver

    Shops that aren't real shops
    Now the last type of shops, the shops you make yourself.

    Generally this is just a lot of code, if you want to sell a certain quest item (in this example item ID 100) in combination with item ID 67 and 89 you could make a script like this:
    SCENE 50
    ACTOR 1, "Pirate",scum, 4,20,80
    1: Howdy do matey.
    1: If you want to be a pirate I suggest you buy my items.
    1: Just click on me for the shop!
    END
    @eventActorClick1
    1: I see you're intrested eh?
    MENU "Quest item=@quest","Dead shark=@item67","Pirate Head=@item89"
    END
    @quest
    1: So you want to buy the %I100 eh?
    1: That'll cost you 500,000 GP!!
    N: Do you want to buy this item? (YES/NO)
    ASK 30
    IF YES, @questyes
    1: Har har har, I'll feed you to the sharks now!
    END
    @questyes
    IF -G500000,@notenough
    1: Here you go matey.
    HOST_TAKE G500000
    HOST_GIVE I100
    END
    @notenough
    1: Are ya trying to trick meh?
    1: You don't have enough money!
    END

    @item67
    You want to buy this %I67, it costs 600 GP?
    ASK 30
    IF YES, @item67yes
    1: Argh what's wrong with these pirate wannabe's thesedays!
    END
    @item67yes
    IF -G600,@notenough
    1: Here ya go matey!
    HOST_TAKE G600
    HOST_GIVE I67
    END

    @item89
    1: You want to buy this %I89, it costs 500 GP?
    ASK 30
    IF YES, @item89yes
    1: Argh what's wrong with these pirate wannabe's thesedays?
    END
    @item89yes
    IF -G500, @notenough
    1: Here you go matey!
    HOST_TAKE G500
    HOST_GIVE I89
    END

    With the quest item you could also add in some token protection and such. Self made shops basicly give an item in return for taking money. Self made shops give you infinite freedom to ask more or lesser GP for items, for example you could make a blacksmith script that asks more money for items when the hosts character ages up more, or lesser money if you have a certain bargain skill that goes up. There a lot of possibilities.



    More info about the shop commands can be found in items.txt just above the pet item ID's.




    Written By: Silver

    How to make a pet shop?

    A lot in here is the same as in top of this page, but pet shops can be a little more confusing then normal shops.

    To make a pet shop you first need to make pets, after you made those you can just follow the descriptions for making normal shops. Remember that you can't sell pets with OFFER2, only with OFFER.

    How to make pets?

    It's pretty easy, first you'll have to make the monsters, because pets are basicly just monsters. It doesn't matter which monster ID's you use. How to make monsters is described in monsters.txt in your world folder.

    Pets are offered as items, so you'll need to make items that give you a monster. I recommend using item ID's 1024 and above, the highest item ID you can use is item ID 5119.

    First you'll have to put in the name of your pet, this shouldn't be to hard. In evergreen they have the very inspiring names Cage #1, Cage #2, in RoT they have the same name the monsters have, personally I prefer the last method because it's more user friendly to see what you're dealing with when you push the shop button.

    After that you have to put in item code 200 (this one is for pets only, item code 21 is shield, item code 0 potions, code 4 for tickets etc.).

    Now comes a confusing part which took me a few hours of finding out how it works when I first got started with this subject. The next number you have to put in is the monster ID of your pet. Instead of putting in an item pic number as you normally do, you have to put the monster ID at that place. That may sound simple now, but it's probably the largest problem of getting a pet to work effectively.

    The rest of the item is standard, just give it a nice price, and FP 0 (after all pets are unfindible, you got to buy them).

    To summarize the main problems when making a pet:

    1) You need a monster first (That isn't placed on any maps!)
    2) Instead of putting an item picture in the item line, put in the monster ID.














    The basics of Morphing (class changing)
    Written By: Silver

    Changing your class to another class is only 1 script line, but before you can change classes you probably first want to know what class to change into.

    All the classes you made are in levels.txt. Every class starts with the line:
    XX00,0, 0,0,"Class name", <magic ratio>, <prefered hand>

    XX ranges from 1 to 88, that is the class ID you'll need when you're going to change your class.

    Changing classes is probably most effective when you made the class you want to change in a hidden class, to do so you just need to add this line between the first class line and between the sub class level names; HIDDEN_CLASS <level>

    Putting a level number behind hidden class is optional, if somebody changes into that class then you can level him down, leveling up is impossible like this though. For example somebody is level 50 and you morph him into a new class with the line HIDDEN_CLASS 25, his new level will be 25. If you want to morph somebody who's level 50 in a class with the line HIDDEN_CLASS 75 then his level will stay the same (he might not morph at all, I haven't really tested it yet).

    You now found out the class ID you want to change into and you want to morph somebody in his new class, all you need to do is to set the num.hostClass cookie to a new class ID.

    For example you want to change to class 5, to do so just type this script line:
    SET num.hostClass, "5"

    Please note that you're setting a cookie and not reading it, so don't use SET #<num.hostClass> cause that won't work.

    That's basicly everything. I hope my explaining didn't make it look more difficult then it actually is...
    A few things you should keep in mind when changing to another class:
    Morphing does not work when you want to morph somebody into a class that has the lines MAX_WALLET <wallet size> and/or NO_GIFTS. If you're in a class with these class restrictions then you won't be able to change into another class either. More info about classes can be found in levels.txt, basicly everything is explained in there.




    Balancing classes
    Written By: Silver

    The /battle command is part of my method, in fact, without the /battle command I wouldn't get very far.

    The slow way is that you check every class compared to each other and try to balance all of that. Basicly you're doing a lot of work that doesn't need to be done in that case.

    My method works pretty simple, first make 1 standard class, easiest is to use class 1 because that class shows up first with the /battle command.

    Then just make all the classes you need to make, keep in mind that if you have a lot of classes some the first class battle reports won't show up, so in that case you need to balance the classes in several parts.

    Just type /battle now and let WoS do the calculating. Find the battle reports from the first class (starts with class 1 vs class 1 and ends with class 1 vs class 12 if you have 12 classes, then it continues with class 2 vs class 2, but you can skip all those.)

    Just balance class 2 to 0,0 hit advantage compared to class 1, after you get the report that class 1 vs class 2 has 0,0 hit advantage including spell fails you can move on to class 1 vs class 3.

    To balance classes you need to higher or lower the HP of all classes after class 1. You could also adjust the hand/ magic ratio's, but most likely you'd end up having the same hand/magic ratios in that case. For example, if class 2 is 0,3 hit stronger you need to take away 500 HP to make it 0,0 hit stronger then class 1. Once you figure out how to balance the HP fast you can balance up to 10 classes within 30 minutes. If you would check all class reports and balance them all 1 by 1 it would take about 3 full days and most likely you still wouldn't be done.

    I assume that if class 1 has 0,0 hit advantage vs all other classes that all those classes are then balanced to 0,0 hit advantage vs each other. There might be small minor differences of 0,1 hit advantage/ disadvantage but in PK fights you will hardly notice such advantages.

    In fact, as long as advantages are below 1 hit you shouldn't notice any real difference in PKing strength, although often fights seem to be unfair in that case and the class seems to be to strong. (A good example is a sword user fighting a maxed out scavenger in Evergreen, the scavenger has about 0,9 hit advantage.)







    Soul ID protection scripts
    Written By: Silver

    Often a world developer likes to have a little special extra thingy for him- or herself, to make sure it stays special you'll have to soul ID protect it.What you could do to keep it simple is something like this:

    Make a class for yourself, you propably want one of those anyway.

    Let's say you take class ID 21 for yourself and the other 20 classes are public. you have to hide class 21 with HIDDEN_CLASS (also use START_ELEMENT_PP and START_HAND_PP with some nice stats on this class, you'll need that because of a wos bug)

    What you also want is a ban map, for example map 99, you can use the previous maps for world maps.
    You'll have to set map flags 261576

    For the example script I'll use item ID 1000 and 1001 as special item you want to keep for yourself and spell ID 600 and 601. You also might want to protect a few tokens, with those tokens you could enter certain links and stuff. Let's say token 800 and token 801.

    To finalize the example we'll use 2 different soul ID's, gs 1800 and normal soul ID 5FE40013 (both soul IDs are random)

    Both these souls are allowed to get on this special class and have the special items, spells and tokens.
    What they have to do first is incarnate on normal class.
    Then they'll both enter a scene with the following script:

    SCENE 900, japan, SCENE, "Empty Place",0,0

    COMPARE #<num.PeopleInScene>, "1"
    IF> @tomany

    STRCMP #<str.soul>, "SOUL 1800"
    IF= @special
    STRCMP #<str.soul>, "5FE40013"
    IF= @special
    END
    @tomany
    END
    ;or if you have an actor you could make it say that there are to many ppl in the scene. Now the scene just stops.
    @special
    SET num.hostClass, 21
    HOST_GIVE I1000
    HOST_GIVE I1001
    HOST_GIVE S600
    HOST_GIVE S601
    HOST_GIVE T800
    HOST_GIVE T801
    END


    Okay, both soul ID's received their special stuff now, now to make sure that it stays special you need to put to following script lines in SCENE 1 and SCENE 2, your camp and fight scenes.
    SCENE 1

    IF I1000-C21, @ban
    IF I1001-C21, @ban
    IF S600-C21, @ban
    IF S601-C21, @ban
    IF T800-C21, @ban
    IF T801-C21, @ban
    IF C21, @protection
    @camp
    END

    @ban
    HOST_GIVE T900
    PARTY T900
    GOTO LINK 99,0,0
    END

    @protection
    STRCMP #<str.soul>, "SOUL 1800"
    IF= @camp
    STRCMP #<str.soul>, "5FE40013"
    IF= @camp
    GOTO @ban
    END
    ; This would be your camp scene if you don't put anything else in your camp scene.


    You fight scene changes a little bit in the first part:
    SCENE 2

    IF I1000-C21, @ban
    IF I1001-C21, @ban
    IF S600-C21, @ban
    IF S601-C21, @ban
    IF T800-C21, @ban
    IF T801-C21, @ban
    IF C21, @protection
    @camp
    FIGHT
    END
    ; The fight command gets added here.

    @ban
    HOST_GIVE T900
    PARTY T900
    GOTO LINK 99,0,0
    END

    @protection
    STRCMP #<str.soul>, "SOUL 1800"
    IF= @camp
    STRCMP #<str.soul>, "5FE40013"
    IF= @camp
    GOTO @ban
    END


    This script will proof to be extremely effective against, hackers, modders, world breakers and cheaters. Modders can get on your class and delete the protection script, but they will end up playing in a different version and can't enter ppl's camp in the legit version so that's a sort of ban too.







    Music.ini
    Written By: Crusard

    To set music to maps, you need the "music.ini" file first. If you don't have it, you can copy the one from Evergreen. Open it with Wordpad or Notepad.

    It goes like this, first the "common" music selection. If the game doesn't find a specific definition for a map, then it will apply this:

    [common]
    fight = mortal ;this midi is played in fight scenes on this map
    victory = orbwon.mid ;this is the fanfare played when you win a fight. When it's over, it'll play the main map music
    lost = lost.mid ;this is supposedly played when you lose a fight
    levelup = funk1.mid ;the music specified is played when you level up after a fight
    numMidi = 1 ;the number of midi files to be played on this map, you can add a whole jukebox if you like.
    midi1=scrn_overworld ;first midi to play. there should be as mani midi as specified in numMidi

    The same rules apply to individual maps, to be used instead of the common, for example the evergreen main map and Stonehenge:

    [evergreen]
    fight = mortal
    numMidi = 1
    midi1=scrn_overworld

    [stonehenge]
    fight = battle1
    numMidi = 1
    midi1=jeremy_east

    You can add more than 1 midi to the loop like this:

    [stonehenge]
    fight = battle1
    numMidi = 2
    midi1=jeremy_east
    midi2=waltz2


    I can't get my music.ini file to work! Help me!

    I get asked that alot by several different people from time to time, so I guess it's worthy to be put in here. Here are problems people have come to me with, and the solutions to each problem. There are also some important things to know.

    * Make sure your music.ini file is in your world folder and in the root directory, not stuck in a sub-folder. If you don't have a music.ini file, you have 2 options: 1) Copy the music.ini file from the Evergreen folder, or 2) Make your own music.ini file. Since most people don't know how to make an .ini file, just copy the one in Evergreen and paste it into your world folder.

    * Make sure your music.ini file is named properly. A few people have had their file named as midi.ini or music.txt. It must be music.ini and cannot be named anything else.

    Q: I've set my maps music to a certain midi, but it plays the default midi selection instead! Help!
    A: Lets open up your music.ini file and find out how it looks. Since I can't see yours, I'll use Evergreens and modify it to fit the question.

    [evergreen]
    fight = mortal
    victory = orbwon.mid
    lost = lost.mid
    numMidi = 1
    midi1=scrn_overworld

    This is how the main map for Evergreen looks. Here are some things to look out for when your file isn't playing right.

    [evergreen]

    Make sure this section is displaying the proper name. Make sure your spelling is correct and be case-sensitive just in case. If this doesn't work, perhaps you are putting the wrong mapname in. If you are unsure which mapname to put in this spot, open up your maps.txt file.

    0, evergreen.jpg, evergreen, "Evergreen", 131072

    This is Evergreens maps.txt file. The section in bold is the text you want to put in your music.ini file. So lets say instead of evergreen, it looked like this:

    0, evergreen.jpg, mainmap, "Evergreen", 131072

    In this case, your music.ini file would have to have [mainmap] instead of [evergreen].

    This is the most common error.

    I have more than 1 midi on one of my maps playlist, but only 1 plays!

    First off, to have more than 1 midi on your playlist, music.ini must look like this:

    [evergreen]
    fight = mortal
    victory = orbwon.mid
    lost = lost.mid
    numMidi = 2
    midi1=scrn_overworld
    midi2=scrn_overworld2

    Make sure your numMidi row has the correct number. If you have more than one midi listed, but only have numMidi=1, it will only play the first midi listed.

    If that isn't the problem, check your spelling. Make sure the midi name is spelled correctly and that your commands are spelled correctly (i.e. numMidi= and midi1=, etc.).

    If that still doesn't work, make sure that the midi file does not loop. If you are unsure of how to do this, contact someone who does know. If you can't find anyone who does know how, contact me a darangen@hotmail.com and include the midi in question, and I will test it out for you.

    I don't want the midi to stop playing when changing to a fight scene!

    Most people think that if they don't want the music to change in certain locations, they just put no midi in the slot like this:

    fight=

    In concept, this would work, but this is where they go wrong. WoS has certain default stock midi's that will play if no midi is given. So what you'll need to do is this:

    fight=#nochange

    This will indicate that you do not want the music to change. You can put this in any section. I do this alot in my worlds, so here's how one of my music.ini sections look like:

    [Na'ora Forest]
    numMidi=1
    midi1=dar03
    fight = #nochange
    victory = #nochange
    lost = #nochange
    levelup= #nochange

    So what WoS sees is this. Play midi dar03.mid, and never change it on that map. When you run into a battle, the music stays the same, when you win a fight, the music stays the same, if you lose or level up, the music still remains the same. If you put #nochange for midi1, like this: midi1=#nochange - then the midi from the previous map will continue to play.

    Also, if you go from a map to another map that both have the same midi selected in music.ini, that midi will remain playing without stopping. For instance:

    [map1]
    numMidi=1
    midi1=lostland

    [map2]
    numMidi=1
    midi1=lostland

    If you go from map1 to map2, or map2 to map1, you will continue hearing the midi lostland.mid without the music changing on you.

    My midi file won't play in WoS, but will play in my media player.

    This is a rare occurance, but it does happen. If you think this is happening to you, here's how to fix it. Please note that you will need the proper programs to fix this.

    Open up your midi in a music editing program. If you don't have a music editing program, skip to the next paragraph. Now, go through these steps. File - Save As - Format: Midi Format 0 - Ok - Confirm file overwrite?: YES. This should fix your midi and make it playable in WoS.

    If you don't have a music editing program, find a friend that does. If none of your friends have one, send the midi to me at darangen@hotmail.com and tell me that the midi won't play in WoS. I will then fix it and send it back to you.

    How do I set the opening midi (Title Screen) to my own custom midi?
    To determine what midi plays when your world first loads up, rename the midi you want to play to Title.mid. Make sure it's in your worlds midi folder.






    Link Creation
    Written By: Flamelord

    1. Open "My Computer" from the icon on your desktop or in your Start Menu. Navigate to your WoS folder, then to the "worlds" folder. Find the world you're working on. Open the world's folder, then open its "maps" folder. Find objects.bmp and open it in MSPaint. If you see an image you want to use for your link, close MSPaint. If not, draw an image to use, save the file, and then close MSPaint. Open WoS.

    2. If you did not draw a new image to use for your link, proceed to step 8. If you DID draw an image for the link, press the "Objects" button in the World Editor Dialog Box.

    3. Click in the Minimap area to move around the Object Map. Find your object and center the screen on it. You may need to use the "+" and "-" buttons on the Object Editor box to see the entire image. When you can see the entire image in the main area of the WoS window, proceed to step 4.

    4. Place your cursor so that it is in the corner of an imaginary box. This box will include the entire image for your link. When your cursor is in the correct location, click and drag it to create the box. Release when you have drawn the entire box. If you are unsatisfied with your rectangle, you can redraw it using the same method.

    5. In the text box labeled "Object Name:" on the Object Editor dialog box, type a name for your new image. If it is a tree, you could type "Tree" or "MyTree" for instance. Make sure your name is descriptive.

    6. Press the "Add Object" button just below the text input box. This adds your new link image to the list so you can use it later.

    7. Press the "Save Work" button so that your object will stay in the list when you close the dialog box. Once you have saved it, close the Object Editor dialog box.

    8. Use the pull-down menu on the World Editor dialog box to select the map you wish to add the link to.

    9. Press the "Links" button on the World Editor dialog box.

    10. Use the Minimap to move to the area you wish to place a link at.

    11. Click the location on the map where you wish to place the link. A box will pop up prompting you to choose an image for the link. Select the image you chose or created for this link. Press "OK".

    12. Your new link is now selected in the Link Editor Dialog Box. You may now designate which link or scene it goes to. You can name it, give it a camp background so that those near it will see a different background, or even give it a Theme, Weather, or FX. You could give it a monster group or make it require a token for it to function.

    13. When you are done customizing your new link, press the "Save Changes" button. This will ensure that your link will remain when you exit.

    Please note that if you wish to move it later, you must select it in the Link Editor dialog box before clicking and dragging it on the map. This will ensure that it doesn't get any carry-over from the previously selected link. (Carryover is when the link inherits the previously selected link's scene or link number, which most often ruins the link.)




    Q: How do I link maps together?
    Written By: Darangen

    First you'll need to be in Developing Mode (..or create your own world - Modify existing world). Make sure the 2 maps you want to link together are in maps.txt. Heres an example of that:

    maps.txt

    1 "map1.jpg", "map1", "map1"
    2 "map2.jpg", "map2", "map2"

    Those are just example names used for this example. The names don't really matter too much when setting the links.

    Now that you've put these maps into maps.txt you can set the links. (If you had to put the maps into maps.txt, type /reload into the chatbox and hit enter). In development mode there is a window that shows up as the World Editor. In that window you can select which map to view. So now you'll want to view one of the maps you want to link together, so choose map1(or whatever you named it).

    It should now load up that map. Now on the World Editor window there is a button that says "Links". Press that button. Now on the map, click where you want the link to be (where you want the player to go to leave, or where you want to appear when you get to the map). A window should now pop up asking you for an image to use. Select one from the list. Now, on the title bar of the Link Editor, it will tell you what link you are on. If this is the first link on this map, the link will be 0. You'll want to remember this.

    Now close the link editor, save your changes, and switch to map2(or whatever you named it) on the world editor. Place a link the same way you did on map1, but don't close the link editor yet. Again, look at the title bar of the link editor and remember the link number. Now in the link editor there should be a drop-box that currently says "to nowhere." Change this to "to link", then where it says 0 next to it, change it to the link number that was on map1. Then next to that there should be a drop-box with the names of all the maps you have, choose map1. Hit save, close the link editor, and go back to map1.

    Open up the link editor again and choose the link you set before from the list at the bottom. Now, in the "to nowhere" box do the same thing as you did before, only tell it to go to the link you set on map2.




    Q: How big or small can my map be?
    Written By: Darangen

    A: Maps can be any size you want them to be. The only rule is with the mapX4 maps, which MUST be EXACTLY 4x the size of the regular map




    Making Maps:
    Written By: Hesacon

    One thing everyone notices on a world is the maps, call it fate. Anyway, there are plenty of programs out there for making maps. Bryce is probably the best one you'll find, but in order to use it "legally," you have to pay for it. Other easily accessible programs are Terragen and Arcadia (Arcadia is a whole game in itself!).


    Terragen

    To make maps on terragen, you'll need to adjust the following:

    1) On the rendering control, there is a group of lines that looks like a "W." You need to left click, then right click in the middle of where you want your map to be.

    2) Under camera position on rendering control, there is an option for height above surface. Depending on how large you want it, you'll need to increase it to a few thousand. Leave target position at the surface.

    You know if its right if the camera orientation has a head of 0, a pitch of -90, and a bank of 0.

    Set the size map you want rendered, and click render image. When the image is done rendering, click "save image" and it will save as a .bmp image. Try playing around with the detail quality of the map to get better maps.


    Arcadia

    Using Arcadia to make maps

    First, download arcadia here, and install, then follow the following steps:

    1) Open Arcadia.exe

    2) Download toy 4 if you don't have it, and open the toy empyrion in solo.

    3) Click Toy specific prefereces, its the button one to the left of the "?" on the top.

    4) Click map tile generator.

    5) You can put your own map material in the ...\arcadia\toy4\textures folder

    6) Choose two layers from your textures, the first will cover all of it, the second will be a little bit on the layer.

    7) Select different seeds until you get a map you want.

    8) Edit to the size map you want and save as what you want the map to be called.

    9) Goto C:\...\Arcadia\toy4\textures and find your new map, and convert to a jpeg, and move to your worlds folder.

    And poof, you have a low quality map made by arcadia(low quality compared to bryce or terragen).



    Sorry, I don't have a good Bryce Tutorial right now (which also stems from the fact I don't *have* Bryce).




    Using MS Paint to make a map

    Written By: Flamelord

    Open a copy of MSPaint. That's right, Paint. Now, size it to 884x884 pixels (A reasonable size for a main map). Next, choose a color (A nice, bright, vivid color) and draw a few shapes in this image. These are going to be continents, islands, whatever else you want to call it: land.

    The next step is to fill in the land area with any geographic features you'd like it to have, each in a unique but consistent color (e.g. all deserts in the same electric teal). Once you've gotten that done, and know what geographic features you want, we come to the tricky part.

    We're going to create our own textures. I'm sure you're going to have a unique method of doing this by the time you've made one or two, but here is my method:

    1. Choose six colors in a range of colors to use as the texture. For grass, I normally use a range of four greens, light to dark, and two browns. With another copy of MSPaint (a 32x32 image this time), select the airbrush tool (spray paint can), and spray the colors several times, until there is no white left, the colors are distributed evenly, and it looks like grass (or other geographic feature).
            
    2. Make four unique texture images of the 32x32 size, and open them all. Open a 128x128 image in a new MSPaint window. Copy and paste the four images in a grid as such:

    1213
    3424
    4243
    3121


    This gives a loose sort of pattern, you can experiment with layouts at this level to produce some interesting patterns, but that's the one I use.

    3. Take your 128x128 image and copy/paste four of them into a 256x256 grid, then take the 256x256 and copy/paste to 512x512, then 1024x1024.

    Save this large 1024x1024 image with a title such as Grass.bmp. Save another copy as a backup so that when we paste the texturemap onto the texture, we don't need to worry if we accidentally save it.

    Now that we've created our own textures, open up a texture (We'll use Grass again) and the texture map you made earlier (the one with all the funny colors). Copy and paste the texturemap onto the texture. Notice that nothing in the texturemap changes. Select the color that you used for the grass as the background color WITHOUT deselecting the pasting, and then choose the "transparent background" option on the left (a screenshot later, that's a bit hard to describe). The texture should now show through into the spots it should be.

    Resize the texture bitmap to the map size (884x884) and copy/paste it to the next texture image. When you've gotten all the textures in, save it as a bitmap, and then as a JPG for WoS.

    It's a truly original look, and it means that your map is entirely done by you. Trust me, it looks great when your entire world has maps all in the same style, and all looking good.

    Textures in detail


    Here's that grass texture again. Notice the two browny colors along with the greens.

    For water, I used some lighter blues (think tropical water), and I think I even included white.

    Just make sure you don't get too many spots of color outside of the middle range, so you would want a small amount of the white color, and a small amount of a darker blue, but larger amounts of three or four medium-light blue colors. Snow is a very light grey/white texture:

    I cheated when I made my ice texture: I used PSP8. I took my water texture and desaturated/lightened it until it was mostly white, but still had tinges of blue, then saved it.

    I'll put up a minimap tutorial for this style of mapmaking when I get home, to explain this:

    Scroll textures are a yellowy brown; deserts and beaches are an orangy-neutral tan brown.
      
    For rocky places, I have a texture entirely in greyscale, clustering near the darker end. I put together a mountain texture (very hard to use, it's got a bunch of mountain-shaped carats (like this: ^ ) instead of a mixture of colors) for my minimap.

    So far, I've only done Demonica's main map and minimap in this style, but let me tell you something. Saving the texturemap bitmaps is about the best thing you can do for yourself. Then, when you discover that you actually need a desert there or a rocky patch of ground here, you can just call up the texturemap, make the changes, and re-texture it. For that reason, I suggest making the minimaps last, they're easier to do when you don't have to change them all the time.






    Known trouble with Actor Events
    Written By: Silver
    For the full explaining about actor events you should check the quest dictionary.

    @eventActorAttack1 (for actor 1) does not work when you don't have a weapon equiped. This is probably because WoS can't set an item ID in that case.
    Each time you hit an actor with a weapon or throw an item then the cookie #<item.id> is set to the last used weapon/ item, same goes for @eventActorSpellnn. If you hit an actor with a spell then the cookie #<spell.id> is set to this last used spells id.

    @eventActorSpellnn does not work for spell/all. If a heal/cure/disease/buff/damage all spell hits an actor then the script will not see this as an attack and won't even do anything, it's like you never even used the spell. This will not get fixed in WoS either, at least that's what Samsyn said the last time I asked him about it.

    @eventActorClick cancels out every action you're currently doing. In some worlds you have the lock used in Macgiver, when two people are PKing each other the current hit gets canceled when you click on the lock to lock the camp. This also goes for the use of spells and items.

    All events except for @eventActorClick work for everybody, not just the scene host. If a party member attacks an actor then your #<item.id> gets set to his/her used weapon. This also goes for spells and items. In RoT you can see this happening in the Drunken Iori quest, were party members can kill Iori by hitting him, or healing him with spells/ items.
    This is probably important to know if you made it optional to "kill" actors in your world, but you don't want party members to screw up for the scene host.

    As far as I know this were all the known problems regarding actor events. If you have know more problems then please post them and I'll add them here.

    Question: how can I make A @eventactorattack1 event trigger when You attack with A weapon that casts spells (Dragon Staff for example) and A different event if you cast it from the spells pannel?
    Answer: You can't, you need to trigger @eventActorSpell1 for that.







    Heal scenes/ scripts
    Written By: Silver

    SCENE 100, hospital,SCENE,0,0

    ; SCENE 100 is the scene ID
    ; hospital is the name of the jpg background pic in your scenes folder
    ; SCENE is the scene code (You can choose from SCENE (most used), WELL(only used in SCENE 0) and CUT
    ; (only used for special scenes))
    ; 0,0 = fx,weather, you should check QUEST DICTIONARY - SCENES for more info about this.

    ACTOR 1, "Doctor",docskin,4,20,80
    ; ACTOR 1 is the actor ID
    ; "Doctor" is the name of the actor, it will show up as Doctor though.
    ; docskin is the bmp name of the skin file in your monsters folder
    ; 4 is the skin frame selected (in normal skins 4 is the chat frame)
    ; 20 is the X value where your actor will start
    ; 80 is the Y value where your actor will start.
    ; For more info about ACTORS check QUEST DICTIONARY - ACTOR

    1: Hi, I'm the local doctor here, let me heal you.
    ; you can make him say whatever you want.

    WAIT 4.0
    ; in this case healing would require 4 seconds, don't make this to long or to short or it will be annoying.

    GIVE L1
    GIVE H5000
    GIVE M5000

    ; note that you first have to rez
    ; ppl by giving them L1 because else they leave the scene with only 1 HP and maybe with 0 MP (dead ppl can't get MP)

    END
    ; VERY IMPORTANT! Never forget to END a scene else you will end up running all your scenes till the script finds an END command or GOTO EXIT command.

    A small variation which you could do on your heal part of the script is this:

    HOST_GIVE L1
    HOST_GIVE H#<num.hostMaxHP>
    HOST_GIVE M#<num.hostMaxMP>


    This script will only rez the host of your scene, but will give in return always the hosts max HP and max MP. This could be very useful if your classes first have with 3000 HP at level 100 and your scripts give 3500 HP at max and later you change your classes to 5000 HP at level 100. Right now they wouldn't get fully healed if you don't change your heal scene to GIVE H5000, however with that script I gave you they will always get fully restored.

    For more info about cookies check QUEST DICTIONARY - COOKIES and STOCK COOKIE LIST

    Working with cookies can be hard though if you don't understand what you're doing, so you can stick with the normal scripts until you got used to using WoS some more.




    Changing my world's GP name
    Written By: Sir Mj

    To change the name of GP in your world make a file called config.ini. If you aren't sure how to make an .ini file, simply copy the config.ini file from Evergreen into your world folder. You should notice a line of script underneath Dan's information stating

    goldName = GP

    Simply rename GP in this entry to whatever you wish to use for your world. Note though that 5 characters seems to be about as far as you can extend it without encountering any problems.

    * NOTE *
    Changing the config.ini file to rename GP for your world DOES NOT change the scripting syntax you need to use when giving GP as a reward in a scene. To the best of my knowledge this will ALWAYS be done by :
    GIVE Gnn (to give ALL in the Scene nnGP)
    or
    HOST_GIVE Gnn (to give nnGP to the scene HOST ONLY)




    Can I script things to happen during a fight/PK fight?
    Written By: Flamelord

    No. But, you can script monsters to help you during a fight:

    FIGHT *, -<monsterIDofhelpingmonster>
    END

    FIGHT * means that you will be fighting one monster from near where you are on the map.

    the negative monster ID, for example -1 would make a monster ID 1 fight WITH you on your team.

    OR, you could do something like this:

    R15 @fight4 ;15 percent chance of going to @fight4
    R25 @fight3 ;25 percent chance of going to @fight3
    R50 @fight2 ;50 percent chance of going to @fight2
    FIGHT *, -<monsterIDofhelpingmonster>
    END
    @fight2
    FIGHT *,*, -<monsterIDofhelpingmonster>
    END
    @fight3
    FIGHT *,*,*, -<monsterIDofhelpingmonster>
    END
    @fight4
    FIGHT *,*,*,*, -<monsterIDofhelpingmonster>
    END

    When you add more * thingys to the FIGHT command, it increases the number of monsters from the map that show up in the fight.




    Level-up Script
    Written By: Crusard Here's the FINAL VERSION of my level-up script. It's fully tested and fail-proof.

    Change #<monsterID> to any other monsters you want for the fight.

    ;(Here goes the script Before the fight)
    SET LvBefore, "#<num.hostLevel>"
    FIGHT #<monsterID>
    SET LvlAfter, "#<num.hostLevel>"
    WAIT 0.1
    COMPARE #<LvBefore>, #<LvlAfter>
    IF= @LevelUpDone
    IF> @LevelUpDone
    MUSIC "LevelUp.mid"
    SET currentpoints, "0"
    ADD currentpoints, "#<num.hostSTR>"
    ADD currentpoints, "#<num.hostWIS>"
    ADD currentpoints, "#<num.hostSTA>"
    ADD currentpoints, "#<num.hostAGI>"
    ADD currentpoints, "#<num.hostDEX>"
    SET targetpoints, "#<currentpoints>
    ADD targetpoints, "10"
    SET musiccounter, 0
    @LevelUpWaitScript
    WAIT 1
    SET currentpoints, "0"
    ADD currentpoints, "#<num.hostSTR>"
    ADD currentpoints, "#<num.hostWIS>"
    ADD currentpoints, "#<num.hostSTA>"
    ADD currentpoints, "#<num.hostAGI>"
    ADD currentpoints, "#<num.hostDEX>"
    COMPARE #<currentpoints>, #<targetpoints>
    IF= @LevelUpDone
    MUSIC #silence
    @keepmusic
    GOTO @LevelUpWaitScript

    @LevelUpDone
    ;(here goes the script After the fight)




    What if I want to use a different file format than .txt for my scripts
    Written By: Flamelord

    You can. All you have to do is open notepad, open the script you want to change to a different format (or you can type a new one) Click the "File" menu, move the cursor down to "Save As..." and click it. Then, you will see a dialog box asking you where to save it, and what to call it. Just below the input area for the name of the file is a pull-down box for the file format. Pull it down. Select "All files". Type in the name of your file, and the file extension you want it to have. (You should check to make sure the file extension you want to use is not used for anything else first) Then press "Save" or hit <Enter> on the keyboard.

    When I try to open my new script file, it asks me what to open it with. How do I make it always open in notepad/wordpad?

    This is a little more complicated. I will answer this for XP only, because I don't remember the exact things on '98.

    First, open explorer.exe. You can do this by double clicking the "My Computer" icon on your desktop (Assuming you have it there. You should press "Start" and select My Computer if you do not, and are using Windows XP) Then, go to Tools>Folder Options. Select the tab that says "File Types".

    It will then find all the file types on your computer. Then, press the key that corresponds with the first letter that you used in the file extension for your script. (If the first letter was "a", you would press "a" on the keyboard). Now, scroll down until you are through that section. (If it was "a" you would scroll until the last "a"-beginning file type) If you did not see your extension in use, press the "New" button. Type in the file extension you used for your script earlier (let's say it was ".arm", which is NOT in use on most computers) and press "OK". !DO NOT PRESS "Advanced" and fiddle with that! Now, selecting your new file type from the list (.ARM for example) press "Advanced" button, just below the "Delete" button.

    This window will probably look just a little scary at first. At the top, there is an image of a "file" icon. Next to that, is a text box. In the text box, type "WoS Script File" without the quotes. That will make "WoS Script File" appear where "Text Document" does for .txt files. Do not close this dialog box yet. Next, we have to specify what it opens with. That is done with the "Actions:" list. Press the button "New" on the right of the "Actions" list.

    In the "Action:" input box, type "open" without the quotes. Next, press the "Browse" button. Browse to C:\WINNT\ and find "notepad.exe". (if you want it to use WordPad, you can find that instead of notepad.) Press the "Open" button. Press the "OK" button.

    Press the "OK" button. Press the "Close" button. You have now successfully created a new filetype, and specified what it opens with.

    Added by Hesacon: In order to have WoS actually read the new formated files, you have to make sure you go into quest.txt and have a command for "#include filename.(your new extention)" In theory, you would be able to save files such as .jpg or .cpp and use them for WoS. Of course, the .jpg file would be unreadable as an image, you may be able to use it as a script. Experiment.








    Maximum Amounts
    Written By: Darangen

    As of A80, here are the amounts:

    Terrains : 0-9
    Themes : 1-255
    Maps : 0-999
    Tokens : 1-4095
    Elements : 0-7 (Chaos : 8-255)
    Hands : 0-7
    Scenes : No Limit
    Groups : No Limit
    Spells : 1-767
    Items : 1-1023, 1024-5119
    Levels : 1-88
    Monsters : 1-4095

    Characters in an @label : 256
    Characters in a cookie name : 256
    Characters stored in cookies : 4096
    Characters stored in token descriptions : 4096


    Now for Art files. Here are the names and sizes each file must be. (As of A80)

    AMULETS.BMP Amulet items (48x48)
    ARMOR.BMP Armor items (48x64)
    BOOTS.BMP Boot Items (48x48)
    DARTS.BMP Throwable items (48x48)
    HELMETS.BMP Helmet Items (48x48)
    ITEMS.BMP General items (48x48)
    RINGS.BMP Ring Items (48x48)
    SHIELDS.BMP Shields (48x64)
    STAFFS.BMP Wizard Staffs (48x64)
    SWORDS.BMP Warrior Swords (48x64)




    How does Arg 20 in monsters.txt (monster AI) work?
    Written By: Darangen

    Samsyn has given us the awesome ability to tell monsters what spells to use, and how often to use them. It can be a little confusing unless you know what you're doing, so here's a little run through of how to set things up.

    First off, you'll need a monster with sufficient wisdom. If your monster isn't smart enough, it won't be able to use the spells you tell it to. Then you'll need to decide what spells you want your monster to use, and more specifically the spell id's. To find the spell id, open spells.txt and look at the 1-3 digit number at the beginning of the spell you want, that's it's id #.

    Now that you've chosen a monster and know what spells you want it to cast, we can start setting it's AI. Here's the basic formula for AI:

    "use #spellid,spellid,spellid,etc."

    I don't think there is a limit (if there is, it's pretty high) to how many spells you can tell it to use. Now that we know the basic formula, lets use an example and plug in some values. We'll use Evergreens spells.txt since everyone has a copy.

    Lets say we have a Death monster and he has 200 wisdom. We want him to use Sleep, Numb, Sap, Poison, and Armageddon, AND in that order of preference. By looking at Evergreens Spells.txt, we find that Sleep is 32, Numb is 31, Sap is 29, Poison is 26, and Armageddon is 49. So we have 32,31,29,26,49. Now lets plug that into the formula given earlier.

    arg 20 "use #32,31,29,26,49"

    Now the Death monster will use those spells in that preferential order, meaning he will use sleep the most, then numb the second most, and so on.

    Now, say you want him to do whatever he wants as a certain preference (follow the normal AI determined by the game engine). You would use 0 as the id. So here's an example, we'll use the same thing as before:

    arg 20 "use #32,31,29,0,26,49"

    Now the monster will use sleep, numb, sap, whatever he wants, poison, and armageddon, in that preferential order.

    I think that's everything regarding Arg 20. Please note that even if you set a spell as the number 1 choice, it still may use the last choice first, it doesn't follow the order you set exactly, but rather takes what you've set and changes it's behavior based on the spells you've given.




    What kind of music can I add to my world?
    Written By: Hesacon

    You may use .mid (MIDI) files or .wav files for your world.

    .mid files go in WoS\Worlds\(yourworld)\MIDI
    .wav files go in WoS\Worlds\(yourworld)\SFX

    You may not use .mp3 files, nor can you use .wma, .m4u, or similar file extensions.