Saturday, March 31, 2012

Looking for volunteers

I'm looking for a few people who feel they have a good understanding of the xml and want to help code the existing events and jobs into xml jobs. Yes a long dull task, but I will toss them an early release of the new otherworld and the event tester to test the events they have written. Just so we are clear there are about 500 existing job events/text to incorporate and I'm not doing them all. If you feel like trying your hand please contact me directly at

as I will only be releasing the test version though a hidden ftp, if I can get it to work.

You will also need access to google docs. That means a google account and I will need that e-mail to allow you access.


Guide - Shops

Shops are rather simple to set up but they can call a large number of events depending on how you want to make them. This should allow easy quest building but if you feel that a feature or event call is missing please tell me and I will happy add it.

So like everything we should start off with where the files are...


to add new files it is


images should be in the


No real surprises there.

The top level of a shop has only 2 commands... why because all the rest are part of a room.

startroom = "front" --- room that is first seen when entered.
label = "accessoryshop" --- the label called when entered

That's it for those. Someone pressed the street button calling the label and once the label is found it goes to the room listed.

Rooms have a lot of odd ball commands to help with events that are created by the room such as not enough money etc. Also rooms can be just about any type of shop you want including a blacksmith, a realestate office, housing etc.


label = "front" --- The name of the room
up = "something"  -- where the button goes
upbutton = "buttonimage" --- the upbuttonimage
upevent = "something"    -- fire an event rather then go stratight to a new room leaving out or empty will just mean it goes straight to the room in label.
left = "none" --- pressing the button to the left will go to this room in the shop or street!
leftbutton = "#none" -- the picture for the left button, yes image replace works too
leftevent = "something"    -- fire an event rather then go stratight to a new room leaving out or empty will just mean it goes straight to the room in label.
right = "none" --- pressing the button to the right will go to this room in the shop or street!
rightbutton = "#none" -- the picture for the right button, yes image replace works too
rightevent = "something"    -- fire an event rather then go stratight to a new room leaving out or empty will just mean it goes straight to the room in label.
down = "mainstreet" --- pressing the button to the down will go to this room in the shop or street!
downbutton = "town/button/town.png" --- the picture for the down button, yes image replace works too
downevent = "something"    -- fire an event rather then go stratight to a new room leaving out or empty will just mean it goes straight to the room in label.

------------------------ Basic Commands ----------------------

info = "accessoryshopfrontinfo" --- the even if the info button is pressed
bg = "shop/accessoryshop/accessoryshop.jpg" -- the back ground image
buy = "true" -- Show the buy window and add items to buy
sell = "true" --- show the sell window and add player items
entryevent = "eventname" --- event that fires when the room is opened
peirce = "false" --- can you peirce at the shop?
carpenter = "false" --- Is this a carpenter shop?
realestate = "false" --- Is this a real estate shop?

-----------------------Frames --------------------------------

frame = "shop/redlipsstripclub/testframe.png"  -- image used as the back ground of the frame
framex = :5"   ---- x loc of name relative to top right corner  950 + st.roomFrameX
framey = :5"   ---- y loc of name relative to top right corner 60  + st.roomFrameY.

frameh = :5"   ---- height has a relative of 50  + st.roomFrameH
framew = :5"   ---200  + st.roomFrameW
name = "Entrance"  --- text put in the frame can leave out if its one solid image using frame
namecolor = "#FFFFFF" --- color of the name text in frame has a default of white
namefont = "22" --- font size defaults to 22
namex = :5"   ---- x loc of name relative to top right corner 1000 + st.roomNameX
namey = :5"   ---- y loc of name relative to top right corner 67  + st.roomNameY.
nameh = :5"   ---- height has a relative of 40  + st.roomNameH
namew = :5"   --- 150  + st.roomNameW
-----------------Buy Sell Options -----------------------

spokesman = "#utau" --- The person who is selling the items, uses name replace from textsystem
spokesmanimage = "#utau" --- the persons image uses image replace from textsystem or direct link
sellfail = "" --- this is the event text if the sell failed
markupbuy = "accessorymarkupbuy" -- adds to the price, not functional
markupsell = "accessorymarkupsell" --- decreases sell value, not functional
producer = "Accessory Shop" --- adds this text as the producer when an item is purchased.
setsort = "tattoo" --- you can set the sort box to default to this choice. If blank will go to "all"

--------------- Tattoo Commands ----------

allreadytattoo = "someevent" --- an event if you try to tattoo a girl who already has one.

--------------- pierce commands -----------

cpierce = "jewelryshopcpierce" --- an event that is run on successful clit pierce
npierce = "jewelryshopnpierce" --- an event that is run on successful nipple pierce
epierce = "jewelryshopepierce" --- an event that is run on successful ear pierce
fpierce = "jewelryshopepierce" --- an event that is run on fail pierce

--------------- Carpenter commands ---------

carpenterrequired = "someevent" --- error message if the player tries to remove a required room.

--------------- Real Estate commands --------

markupbuy = "" --- not used at this time
roomMarkUpSell - "" --- not used at this time

That's it for the room command level but each room can actually have even more commands. Items for the shops, and buttons for events.

-------------- Sorting -----------

Sorting displays all items with the tag listed in the sort. It's really that simple. For most shops they will probably sell more then one type of sorted item and that is fine.

sorter type = "ear left"
sorter type = "ear right"
sorter type = "ring left"
sorter type = "ring right"

------------- Buttons --------------

The great thing about buttons is that they wait for input and then when they receive input they trigger an event. This gives HUGE modding advantages as you can have the user triggering events outside of jobs and there easy to add.

label = "jewelryshopdefault" --- the event call
image = "#defaultbutton" --- the button image most of the time the #defaultbutton is fine
text = "Talk - Sugar" --- text displayed to float over the button may want to leave blank if your doing a custom button
side = "left" --- display the button on the left or right side of the screen
fontsize = "24" --- size of the button's text...

So now that we have it all together I just want to point out with the room system is possible to have a normal shop and in the next room a black market shop selling completely different things or even different houses. And with the buttons you can have different events firing at any time.

Last but not least I forgot to mention but there is an event that fires upon entering a shop and its the shop's label. That will probably give people some bugs... since even if you don't want anything to happen you have to make an empty event.

If a feature is missing and needed please tell me these are a work in progress and more work can be done on them. Lots of potential options that are doing nothing or not added at this time and I will fix that as needed.


4/21/12 --- added frames, names and events


Wednesday, March 28, 2012

Guide - Streets

Lets do something a little different and look at adding streets. Pretty simple to tell you the truth and a lot of fun. Streets right now go left or right with down always heading back to home. This might change with a little more flexibility later on but right now its just not needed.

First off location


and to add another street file just add it to


Lets look at the top level part of the street xml. Pretty simple here if the street goes no where in a direction leave it at none.

label = "redlightstreet" --- The name of the street that is searched for
bg = "redlight.png" --- the image used as the background
banner = "banner/RedLightStreetBanner.png" --- the image used for the top right hand corner
right = "main" --- if the right button is pressed what street do we go to / label
rightbutton = "button/mainstright2.png" -- the image for the street to the right
left = "none" --- goes no where does nothing
leftbutton = "" --- no image goes nowhere does nothing
info = "mainstreetinfo" --- the event that happens when you press the street info button (the center button in the navigation)

That's it for the top level now just to add the buttons. If anything these are even simpler.

label = "redlips" --- name of the store
open = "RedLipsButton.png" --- if it's open display this button
closed = "RedLipsNightButton.png" --- if it's closed show this one
morning = "closed" --- open / closed during this time
afternoon = "closed" --- open / closed during this time
evening = "open" --- open / closed during this time
night = "open" --- open / closed during this time
side = "right" --- display the button on the right or left side
beforeevent = "redlipsoutside" --- you can now add events before the player enters the shop

Notes on beforeevents... shops are now built by going through the event system. Leaving beforeevents out or "" will result in the shop opening with no event triggered or required by builder. This works with evekey label = "shop" arg1 = "shoplabel" arg2 = "front" arg2 defaults to front and if you leave it out the first room in a shop must be front. arg1 defaults to the last shop pressed.

That's it. Can it be any easier? If you have questions leave a comment.

-- 4/18/12 added beforeevents


Tuesday, March 27, 2012

Guide - Jobs (Personal Job Example)

Now it seems a bit unfair that your slave gets special jobs when you have the onsen house and you don't. We should probably fix that. Lets review a little on personal job flow.

Event(personal job) -> Text (Float System - Personal Job) -> Event(job chosen) -> Text (job text)

Now there are two ways to make special events for personal jobs. The first way is the one you should NEVER use. Basically personaljobs is an event as such it can be interrupted and that is done for sick. Unless you are running an event that forces the player to run a specific job this should never be changed or modified. We are not going to do it in this example.

Instead we are going to add to personal jobs a top level menu item called house job. No reason to modify the top story part at all. Don't do it, it then changes every personal job.

By now this should be pretty straight forward the majority of this is just text commands.

left = "#girlfront" --- we are showing the girl on the left side when we are over the button
image = "jobicons/homeJob.jpg" -- the button image ( a little house )
line = "Spend time with your slave in the onsen." -- Text when we are over the button
namecolor = "#ff6699" -- collar of the job name
name = "Bathe" -- name displayed in the small box
next = "bathjobs" --- the next TEXT called!!!

Then right below that you will notice we have evecheck... that's right this only happens if you are in a specific house.

label = "#house" check = "eq" vvar = "Onsen House"

I'm going to assume that it makes sense if not please go read up on evecheck.

A small note here normally there is a fg or fore ground image for personal jobs but because this is for the onsen house and that will be displayed normally as the background left it out.

So the user has pressed the button and they have the second tier.

More pretty straight forward.

label = "bathjobs" -- the label that the game is searching for when the user pressed the top level button
namecolor = "#ff6699" -- name color
top = "false" -- this is not the top level show the go back button
up = "personaljobs" -- if they pressed the go back this is the where it goes
name = "Bathe" -- text in the little box
worksafe = "true" -- worksafe
line = "Choose how #name will service you in the bath." -- flavor text in big box

Now for the buttons... we are putting up 13 of them. Wait 13? Yes 13 but the user will only see 3. Why because sex is a pain in the ass. I'm not going to put entire code in here but this shows an example of all 3 jobs. Yes the checks for sex of player and sex of girl are different and I made notes in variable replace.

I'm not going to go through all of these they should be pretty pro forma. The main difference is that the event command.

event = "bathtogether" -- calls the event.

After this is heads to the event system and then back over to the text system just like a normal room job so no reason to go into that.

If you have any questions leave a comment I will update, fix, and answer as much as I can.


Guide - Jobs (Room Jobs Text Example)

There are other guides all all the pretty features for text this is about application. Lets go back to our bath attendant job and we just fired off one of 3 text events, bathattendantjobservice, bathattendantjoboral, and bathattendantjobcleaning. I know they seem long but unique is important and description means I don't have a hard time figuring out what's calling them.

As you notice right away most stuff is just repeated. Why not?

name = "#name" --- The girls name easily provided for you.
label = "bathattendantjobservice" --- How we know to pull this text
next = "end" --- No Text after this
namecolor = "#ff6699" --- hex color of #name
fg = "#bathattendantjob" --- pulled in replacement image either generic or from the girl. There is an entire guide on this.

lline = "bath attendant job service. #showchange" --- what is displayed the #showchange shows how the girls stats were modified.

That's it believe it or not. Copy and paste is your friend here.


Guide - Text (Standard)

This is the second part of using the text system. For information about how to use image, text, and variable replacement please look at the other section on text. Special float text options are not listed here please see section on float text.

First off lets look at the top level options. There are a lot of them. But most of them are pretty self explanatory.


label = "runningthistext" -- and identification to know what text to run must be unique
worksafe = "false" --- Defaults true, if in worksafe mode and false then text is only displayed "work safe"
"next" = "anothertextlabel" --- go play another text when the next button is pressed. Useful when you wan to change images and text but not go back to the event system, such as a conversation. USE "end" IF NOTHING ELSE.


name = "talker" --- Who is talking displayed in the little box
namecolor = "#ff6699" --- Hex color the advantage is if multiple people are talking we can different colors for there names.
color = "#ff6699" --- Hex color for the main block of text will default to the otherworld yellow if you do nothing.


bg = "#image" --- the back ground image either a file path or an image replacer
fg = "#image" --- the fore ground image either a file path or an image replacer
fgleft = "#image" --- the left fore ground left image either a file path or an image replacer
fgright = "#image" --- the left fore ground right image either a file path or an image replacer
fgcenter = "#image" --- the left fore ground center image either a file path or an image replacer
fgleftflip = "true" --- default false if true image is mirrored or flipped to look the other way.
fgrightflip = "true" --- default false if true image is mirrored or flipped to look the other way.
fgcenterflip = "true" --- default false if true image is mirrored or flipped to look the other way.
reload = "true" ---- default false force the engine to reload all images... as a time saver the engine normally only reloads different images if its not working right there is a safety net.

So all those are just are basic set up. Most don't have to be used though.

Next up lets look at text. There is two ways to do text, one is line command the other is the lline command. Each has there own special use.

Best to show these the line command specifically forces the text engine to stop and then display your line exactly as you have it. If it's to long you are out of luck. On the other hand you know exactly where its going to break up the different texts.

The lline command on the other hand automates the break up at around 260 chars. Saves time will always do a full word but other then that it's up the engine where to break up your text.

That's it on text believe it or not don't forget that you can use variable and text replacement inside of it.

Next up is choices. That's right those wonderful choice questions made famous by galges. There actually very simple to set up. These are refereed to as pageevents not sure why did that months ago. Can have a max of 5.

page = "No" --- Displayed Text
label = "blacksmithintrochoiceno" - the event that is pulled if the button is selected
color = "#ff6699" --- the color of the text hex

That's it for those. Let's take a look at an example.

That's about it for text. As always if you have questions leave a commend and I will try my best to answer.


Guide - Text (Images and Variable Replace)

Text is independent of the event system and can be called directly from the game. Though in most cases that is not a good idea as running through the event system allows for custom events interrupting with special text. Most of the time though when modding an event will be calling the text. Just like events text uses a label to know it was called and has lots of customization.

Probably the most important part of text is actually the images. Text is simple images not so much. Images are broken down into 5 locations (bg, fg, fgleft, fgright, and fgcenter.)

Right now the width / height or scale is kept by the fg, fgleft, fgcenter, and fgright and then centered. While the bg is always forced to fit the full screen. I may at a later date make this user choice. If you need this feature please say so.

Next up is how to call the images. There is a nice file by the name of


You don't have to use image replace you can just put in the direct file path to the images folder but I really would appreciate if you did. That way if the image moves we only have to change it once. Also I screw up paths with the wrong .jpg or and an s or what ever so having to put it in once means that its easier to fix and you know where it is. ( I probably shouldn't mention it but you can use the image replace command in any of the text system files... but please don't.)

name = "#realestatebg" -- the label called
file = "shop/realestate/realestatebg.jpg" -- where the image is looking in the image director libs/otherlib/image

That's all there is for image replacement.

Now just as important text replacement... There are two types varreplace where you replace variables and replacer where you replace text.

A variable replacement the gold and a name replacement example.

First off replacer, its damn simple you put in a search and return a replacement. File is


though it actually works in any of the loaded in text files. But still keep the standards, it saves us from problem like misspelling Setra multiple times and then having to find it over and over and over... not that happened...

xml is so simple no reason to really worry about it.

search = "#showchange" --- what we are searching for
rep = "makechange" --- what we are changing too

Now on to variable replace

So this work exactly the same and is covered in events since they use the same things. No reason to rebuild a wheel. Really modders should probably ask me before adding these as misspellings or even bad capitalization will CRASH THE GAME! That's why I have done dozens already for you guys. File is at...


search = "#gold" -- label we are looking for
rclass = "GameData" -- The class
rep = "charGold" -- The variable in the class
name = "Gold" -- Used by the after points changes more on that in a second.

And there is still another variable replacement. No really on the fly variables those pesky ones made by modders they might want to display those too. Okay now there is a very important rule about these as a matter of fact two.

1) You can't use "#". That's a key word that is a variable replace and if used here crash.... maybe or it won't work.
2) Make sure it's unique or the text editor may end up replacing your variable everywhere.

File is at


Though of course that's a lie it can be added to any EVENT!!! xml file. That's right its not directly part of the text system because there variables created by the event system.

label = "fatiguework" --- the search label
vvar = "33" --- the starting value

Okay just one more type of replacement and that is stat changes. Which is all done internally for I hope are obvious reasons, all you have to do is add the key word, "#showchange".

That was a lot of options and explanations and we still haven't even made a single text fire in the game yet.


Guide - Jobs (Room Jobs Event Example)

Well now that images are added lets take a look at running the room job events and the way they work. If you want to know details on how each event works and its syntax there are other guides for this. This is a practical example.

As mentioned many times first events go in a fall down method. So which ever event first meets the conditions is the one that fires and all other are ignored.

Lets go look at our bath attendant job from the previous guides. First off make the xml file, i recommend copying and pasting one of the existing ones to save time but it's up to you on this one.

As a standard please add the xml file to


and don't forget to update


with the file name of the new job.

Paper work done lets go start making events. First off what if the girl is sick, this may seem weird but we need to stop anything else from happening if the girl is sick. Of course we really don't want to do much here better to just add a post event that is a standard for girl sick. Please, please, please you hold to this standard or sick girls will work themselves to death. Think of the slaves.

This really isn't a complicated system for selecting jobs were just doing a random 1 - 3. Which everyone is pulled we point out the girl and give her text. Because this isn't really a class specific job and more of a fun one no one should really care. So that is why the only real check we are doing is

evecheck label = "#rand3" check = "eq" vvar = "2"

So it chooses one and now we make some changes. The most common change is to drop the girls health... fatiguework = -33 but who knows its a variable so we can mod it if the player ever gets an item or effect with bonuses.

evechange label = "#health" check = "sub" vvar = "fatiguework"

After the default health change it's really up to the player what you want to modify plenty of examples and there is a long list of variables in


to choose from. You can assign points to classes the girl doesn't have and they will just be ignored.

Now comes the fun part post events. Most of these I have already built for you and are very generic. Does the girl get sick? Did she learn a class? Did she lose her virginity? So much fun. The only one I really want to see is sick after that it depends as you can see in our example she has the option of learning different classes based on the job performed. That's it for standard events.

Now fire the text! And that would be another tutorial all together just wanted to point out that based on which event fired we're firing a different text (bathattendantjobservice, bathattendantjoboral, bathattendantjobcleaning).

And we just wrote an entire job events. If you have any questions leave a comment I will do my best to answer.


Monday, March 26, 2012

Guide - Jobs (Adding Images)

So now that we have a new job there's a bit of issue nothing is actually connected to it. None of the girls have images for it and well that's just dull... Probably not going to add images for every girl and even then have to prevent new girls who don't have images so we need to add some generic ones.

Generics are in


at this point they are divided up by hair color and length try to keep em organized if i ever get around to it the system might care.

the xml is at


pretty straight foward xml just copy an example change the picture id and update the paths to the generic images you added.

Just about done now we just need to go do some basic linking for image replacement for the text system.


very simple name is the name for replacement used by the text system and file is the file it should look for. One major point it is required that file has a "#" so it knows not to look for a file but a replacement. Not sure if you can do direct calls from the text system for these much better to use the replacement.

And now we have generics done.

Hmm, probably should do non-generics too.

Almost the same for just adding to girls.

Image path


xml path


Adding the xml for the girls is straight forward. Use the same ID we used with the generics and put in the paths.

That's it.

We could be done but I want to just mention front images, those pulled in for personal jobs, here. Since they work almost exactly the same except a little mod.

So almost the exact same the only thing that needs to be pointed out is

id = "Job_Forward" -- should always be Job_Forward for a front job
dress = "plugsuit" -- This tells the game to show for this dress if there wearing it. Should match the item the girl is wearing for her top. The item xml will need the exact same tag.
worksafe= "true" -- worksafe?

image path = "Mugi/front/mugi1Plugsuit.png" -- can add as many as you want they will be randomly chosen.

That should be it for images. I'll try to update if I get any questions.


Sunday, March 25, 2012

Guide - Jobs (Basic)

So the actual creating of a job is way to simple and to tell you the truth I probably should make it more complex just for complexity's sake. The image files are sent to

libs/otherlib/images/ --- as a standard please use the jobsicon folder but it is not required.

the xml is located at


You can always at your own files on


if you want to but sort of pointless.

Jobs actually only have 4 tags... And they are very self explaining.

name = "bath attendant" --- The name of the job makes sure it matches the room job call
image = "jobicons/bathattendantjob.png" --- the icon image for the job
description = "The slave will provide service to those entering the bath." --- Flavor Text
event = "bathattendantjob" --- The event call for the event system when the girl is doing the job.

And that is it. A little review the flow is sort of...

House --> Room --> Job --> event --> text

so next up should probably be some examples of events...


Saturday, March 24, 2012

Guide - Rooms

After houses comes rooms, which are if anything simpler then houses. The location for the image files is the same

libs/otherlib/images/ --- as a standard please use the rooms folder but it is not required.

the xml is located at


More roomfiles can be added but not much point since they are small xml blocks just add them to


The xml is i'm hoping straight forward with lots of examples in the file.

name = "onsen" --- Name of the room
image = "rooms/onsenroom.jpg" --- where the back ground image is
description = "A large spacious bathing area fed by naturally heated water." --- flavor text
cost = "200" -- the upgrade to this room cost
defaultjob = "bath attendant" -- The most important setting when the room is purchased this is the job that the girl who is currently in the room is set too

The job tag can be used multiple times and is a list of all the jobs that a girl can do in a specified room. Simple right.

job name = "bath attendant" --- the name of the job that we are adding to the room.

That's it for rooms. Did you think it would be complicated?


Friday, March 23, 2012

Guide - Houses

Houses are one of the easiest things to add to the game. To add a house the image is added to

libs/otherlib/images/ --- as a standard please use the background folder but it is not required.

the xml is located at


More house files can be added but not much point since they are small xml blocks just add them to


Okay so that's the basics. Now lets look at the xml, remember that the greater then and less then tags are removed do to html concerns on the blog.

Tags are pretty straight forward

name = "Onsen House" --- Name of the house.
price = "500" --- Price of the house.
file = "background/houseonsen.jpg" --- Where the image for the house is located.
room = "6" --- Number of STARTING rooms.
roommax = "6" --- Max number of rooms after expansion.
master = "1" --- Number of STARTING master bedrooms.
mastermax = "2" --- Max number of master bedrooms.
description = "An inn converted into the house on the edge of the green. Has large baths." --- Flavor Text
defaultroom = "empty room" --- When they house is purchased the rooms are set to this as default. EXCEPT for the required room that will be in the first slot and so on depending on the number of required rooms.

The following can be used multiple times as necessary.

required name = "onsen" --- This room is required to the house it comes with it and can not be removed.
restricted name = "dark room" --- This room can never be added to the house.

That's it pretty simple, I think adding a house is fast and fun.


Thursday, March 22, 2012

Assistant jobs are flowing in

I got the job system to send out events for assistant jobs. That means that jobs are all up and running. But I need to spend a few days making at least one assistant job before turning everyone lose to create a standard. Should be ready in a few days.

I really don't feel like adding anything else.


Wednesday, March 21, 2012


Yah just lazy.


Tuesday, March 20, 2012

Time Frames and other crap

So I know its been a while since the last release. But were getting close to a pre-release that will allow for everyone to make events and quests and start killing bugs. The only thing I still have to do is get assistants working again. I think I can do it all through xml with a little luck hopefully that will mean a release some time in the next week or two. But it won't be a playable release at start as I am going to have to recruit a bunch of people to xml the jobs. Expect some fun. Going much faster then I expected to tell you the truth.


Monday, March 19, 2012

Guide - Personal Jobs

Okay one of my favorite parts is the personal jobs. Taking the time to fuck your slaves should be the most important part of the game. And jobs can now be added at any time through xml just like room jobs... but there a bit different in how they run.

Event Start Personal Job -> Text System then runs the personal job choices -> Event system then runs the actual job.

Personal Job is called

Top level items are then displayed selecting one goes to second level items

You can have multiple middle levels but normally at this point choosing an option will then cause an actual event

Stuff happens and then we go onto the next job or event.

The xml code is a bit fun...

The code is divided into top and then buttons.

So for the top you get

label = "personaljobs" -- this is what calls the text to start
top = "true" -- is this the top level of the personal jobs
All the rest are normal text commands to display as default.

In lower tiers you get another option

up = "personaljobs" -- if this is not the top then run we need a go back label this is the one ( If we are at crewjobs level pressing the back button will go back to personaljobs )

Next is the line command used just like anywhere else in the text system as the default text if no button is selected.


The buttons are where everything really happens. For the most part they follow the same rules as the rest of the text system. Images and colors are the same commands. New commands are:

image = "jobicons/CrewJobs.png" - the button image
next = "label" - NEXT TEXT when clicked
event = "label" - NEXT EVENT when clicked
line = "text" - the text displayed when over button

Buttons have one other really cool feature in that they know... Actually you can set them up to check just like events and only if they succeed in the check do they appear. So jobs that only exist in the day only appear. And your lesbian character suddenly doesn't start acting like a futa. Exact same syntax as the event system just added to the button.

So much fun so little time.