Building on OS

=Introduction=

Building on a MUSH can be a simple task or an equally difficult one depending on the approach you, as a builder, choose to take. In most cases, the process seems more complex than it really is. Much like building a house, every project is composed of a series of bricks. Unlike such an architectural endeavor, however, MUSH projects grant the luxury of time: time to plan, time to map out, time to think things through before you start and while you're working without the burdens of hurry. It also allows you to backtrack freely. It is quite the easy task if you only devote the time to it.

What follows are a series of guides to help make the process of building on a MUSH easier.

=Basic Room Creation=


 * @dig 

This will create a room without any exits and no link to your current location. Example: @dig Moon Crater
 * @dig =; ,; 

This will create a room that links to your current location. Example: @dig Moon Crater=Moon Crater;mc,Rocky Ridge;rr


 * @set here=dark 

Sets the dark flag on the room you've created, once you've gone into it.


 * @set here=roy

Sets the royalty flag on the room you've created, once you've gone into it. This flag is necessary so the room will work with the System 4.00 virtual object system.


 * @parent here=#333

This sets the room parent.


 * &desc1 here= 

This sets the description. A tab is automatically built into the room parent. Example: &desc1 here=A deep crater with a high rocky ridge encircling the caldera. This crater was apparently the product of a meteor striking the surface of the moon.


 * @open ; = 

This opens an exit towards the desired room.


 * @open ; =, ; 

This opens an exit towards the desired room and immediately opens one back to where you are.


 * @parent =#253

This sets the exit parent on doors leading to other rooms. Remember to set this!

=OSpace Space Room Creation=

=OSpace Planetary Object Creation=

Creating a planetary is for the most part a simple process. First you need to @create an object and @parent it to #26002 (Master Planet object). Secondly, you set an OS_ORBIT attribute with the dbref number of the room it will be in.

After those two things, you set it up with the things that will show up on ship +scans.

A +scan shows the following things: details, a description, the resources, the ecosystem and the lifesigns. Each of these is the result of something set on the object.

@desc - Used to set the object description, which will show up under the same category in scans.

&PD_ECOSYSTEM - The attribute where the ecosystem information is stored.

&PD_RESOURCES - The attribute where the resources information is stored.

&PD_LIFESIGNS - The attribute where the lifesigns information is stored.

&PD_DATA - The attribute where the details are stored. This attribute is set up with seven sections separated by the | symbol. The first and second sections are used to put down the type of planet it is, using both letter and word. The third is to put down the equatorial radius number, which will show up in the scans in kilometers. Fourth is the gravity. Fifth and sixth are atmosphere and composition respectively. The last is satellites. Example:

&PD_DATA ####=M|Planet|6,150|1G|N: 70% O: 26% CO2: 03% Ar: 01% H2O Vapor: Trace|Fe-O-Si planetary mass, 65% surface is water|9 Moons: The Nightstrand

This will show up on +scans as:

Name: Demaria

Location: Demaria Orbit 

Type: Class M Planet

Equatorial Radius: 6,150 km

Gravity: 1G

Atmosphere: N: 70% O: 26% CO2: 03% Ar: 01% H2O Vapor: Trace

Composition: Fe-O-Si planetary mass, 65% surface is water

Satellites: 9 Moons: The Nightstrand

After you've set the proper attributes on the object, you're almost done. Now you need to do is build the proper set of rooms and @chzone them all to the planetary object. Finally, create an exit that links the space room to the proper room where the ship will land. Now you're done, except for the attributes that show the people inside the ship or around the area what is happening. These are entirely optional. In most cases, a ship cannot land on a planet or enter a dock if its shields are up. To set things up like that use the following attributes (or, depending on your choices, alter them accordingly):

First, lock the exit like this: @lock ####=FN_PASS/1. This means in order to be entered, the exit will check the FN_PASS attribute, which you must set like this: &FN_PASS ####=[or([not([hasattr(%#,OS_SHIELDSTAT)])],[eq([get(%#/OS_SHIELDSTAT)],0)],[eq([get(%#/OS_SHIELDSTAT)],2)])]. If the shields are lowered, the ship will be able to land.

These are the attributes that will display the success or failure: &FAILURE and &SUCCESS will show the proper messages to the people inside the vessel. &OFAILURE and &OSUCCESS will show the people outside, or on other ships, what happens.

=OSpace Ship Template Creation=

Ship templates are master objects which a Shipyard Console will copy when the +ship/clone command is used. The process of creating them may seem complicated, but is in reality quite simple.

The person building a template must understand a ship is basically the sum of two main components: the ship rooms, which represent the inside of the vessel, and the ship object, which represents the outside and is used to manage code-wise the activities of the ship.

ROOMS
Using basic MUSH building codes, create, describe and link all the rooms you wish the template to have. Remember to use the following naming format: Room Name . Example: Bridge . In this case, Cawabonga is what will become the Class or Type of template. The name between the brackets will be replaced in clones after they have been properly named.

Once you are done with the rooms, all linked and properly described, you must create the ship object and name it Name Template. Example: Calliope Template, Cawabonga Template, etc. After the object has been created and named, use the @chzone command (help @chzone) to link all the template rooms to the main object.

SHIP OBJECT: MAIN STRUCTURE
First of all, set the ship object LISTEN_PARENT and MONITOR. This can be done by using the @set command: @set Object=FLAG. Now proceed to set a description on the object.

Now comes the part where all the proper attributes are set on the ship object so the system will recognize it as a ship. To set attributes, you put use the & symbol, followed by the name of the attribute and then its contents. Example: &ATTRIBUTE_NAME=A lot of stuff.

Remember that some of these attributes are not required unless the system they are pertinent to will be inherently a part of the template. Read the descriptions carefully.

1. LS_LISTEN: ^*:[remit([v(SH_BRIDGE)],[ansi(h,>> Outside the Ship:)] %0 )]

This attribute will allow all poses and events outside the ship to be seen by people on the bridge.

2. OS_LIFESTAT: 0, 1 or 2

This attribute allows the system to know whether life support is working or not.

0 - Offline

1 - Online

2 - Disabled (Damaged and no longer functional)

3. OS_POWERSTAT: 0 or 1

This attribute signals the powering of the ship.

0 - Powered down

1 - Online

4. OS_SHIELDSTAT: 0, 1 or 2

This one shows the status of the shields. Set this only if your template comes equipped at least with some sort of shield generator.

0 - Offline

1 - Online

2 - Disabled (No longer functional)

5. SH_ISAERO: 0 or 1

This one shows if the ship is capable of atmospheric flight.

0 - Incapable

1 - Capable

6. SH_SECURITY: 0 or 1

Tracks the ship's security status.

0 - Unlocked

1 - Locked

I suggest making this attribute 0. There is no reason to set the template as locked and the clone can later be locked as needed.


 * SH_CLASSNUM: #

This attribute is meant to identifiy the ship's class. When someone uses the +shipsheet command or any command that mentiones the Class, this number will be the one that gives those commands a name. The list can be found in the OSpace Ship Attributes object under the ZZ_CLASSNAMES attribute.

READ THIS: If your template will have all of the above things from the start and you want to save yourself the trouble of setting the first six attributes, just use the @parent command to parent the object to the Basic Template Object (@parent Object=#22081).

7. SH_SECCODE: codeword

Used to set the password of the ship. Not really needed for the template.

8. SH_ROOMS: #11111 #22222 #33333

This attribute is used to list all the dbref numbers of all the rooms belonging to the template. So, basically, every room that is part of the ship must have it's dbref listed here. This will then allow you to use the +ship/roomlist command (+space/roomlist) to see all the rooms and their numbers, making it easier to set the following attributes.

9.

SH_AIRLOCK: #11111

SH_BRIDGE: #22222

SH_CARGO: #33333

SH_DOCKBAY: #44444

These attributes allow you to set each location properly.

10.

SH_CARGOCAP: ##

This attribute will define the capacity the cargo area has. This number is defined depending on the capacity of the template.

SH_BAYCAPACITY: ##|##

This one states the capacity the dock bay has. The format is |. Example: 50|48.

11. SH_CURRFUEL: ##

Sets the fuel capacity. Usually the template's Power Plant level times 10.

At this point you have pretty much created the main structure of your template object. If your template comes without any natural equipment, you should have set it properly so far and can just skip to the end of this guide. If not, continue to read.

SHIP OBJECT: INHERENT STATS AND EQ
12. SH_SHIPSTAT: 3 3 3 3 3 3 3 3|0 0 0 0 0 0 0 0|3 3 3 3 3 3 3 3

This attribute is used to list the level of the template's statistics. Remember that if you set this on the template object, every clone will have them the same way by default. Each of the eight numbers in every group represent one of the statistics listed on the DT_SHIPSTAT attribute on the OSpace Database. The order is as follows:

Computer Rating Sensor Rating Reliability Maximum Speed Acceleration Maneuverability Ship Size Power Plant

The first group represents the base level of each stat. The last group represents the level each stat is currently at. The group in middle defines whether each stat is milspec or civspec. 1 is used for military stats and 0 for civilian.

13. SH_SYSNAME: MKIII_Microframe Series_3_Longscan Level_3_Toolkit MkIII_Insystem_Drive MIII_Primary_Thrusters Type_3_Multi-thruster_Pack Small Type_3_Fusion_Reactor

This attribute lists the IC description of each of the eight systems listed in the SH_SHIPSTAT attribute. The example given above is the default, but for the purpose of creating templates and as such new ships, it can be altered at whim.

14. SH_SHIPESTAT: 3 3 3|3 3 3

This attribute designates and maintains the levels of each piece of equipment installed on the ship. The first group is the base level and the second the current level. The names and order for each equipment is set on the SH_SHIPEQUIP attribute.

15. SH_SHIPEQUIP: Armor Deflector_Shields Fire_Control_Computer

This attribute is used to list the type of equipment that has been installed on the ship. Lists of possible equipment can be found on +space/spacecraft and by checking various +shipsheets.

16. SH_SHIPENAME: MK5_Composite_Armor Mk5_Deflector_Shields SCIV_Targeting_System

This is the IC descriptive name given to each piece of equipment.

17. SH_STARDRIVE: Jumpdrive

Indicates the ship has one.

18. SH_STARDNAME: Moebius_Drive

Designates the name and type of stardrive. This must be set to a stardrive name that the +jump command recognizes.

19. SH_STARSAIL: Jump_Sails

Indicates that the ship is equipped with a starsail. Starsails are not yet implemented.

20. SH_SAILNAME: Rimjammer_Starsail_Rig

Designates the name and type of starsail. Starsails are not yet implemented.

21. SH_WEAPLEVEL: 3 3 3 3|3 3 3 3

This attribute designates and maintains the levels of each weapon installed on the ship. First group is base level, second is current one. Order and type is shown on the SH_WEAPONS attribute. If the ship has no weapons, this attribute is not required.

22. SH_WEAPONS: Pulse_Cannon Pulse_Cannon Pulse_Cannon Pulse_Cannon

This attribute lists the types of weapons which have been installed on the ship. If the ship has no weapons, this attribute should be set to Unarmed. +space/weapons for a list.

23. SH_WEANAME: MKIII_Turbocannon MKV_Turbocannon MKV_Turbocannon Super_Soaker_Jiffy_Gun

Used for IC names. If no weapons, set to None.

24. SH_WEAPSTAT: 3 0 2 1

Maintain the status of each weapon.

0 - Offline

1 - Damaged

2 - Charging

3 - Charged

25. SH_WEAPONASSIGN: #11111|1 unassigned unassigned unassigned

This attribute tracks the allocation of a ship's weapon system to the ship's weapons consoles. When you first set it, there must be one 'unassigned' for each weapon. Once the +console/arm command is used, it will be set appropriately.

FINAL THINGS
Once you have your Template ready, you need to make the Shipyard recognize it. For this reason, the &TEMPNAME, &TEMPDBREF, &TEMPCOST and &TEMPTYPE attributes on the Shipyard Room must be changed to reflect the existence of your Template so it can be cloned. A WIZARD must do this.

This concludes this basic guide for Template Construction. If you have any problems, feel free to use the +STR system to make it known to those who can help. Remember that the OSpace System was coded by Russkaya.

=Tips for Room Descriptions=


 * If you are building something that involves more than two or three rooms, take the time to map it out on a piece of paper. Look at it. Examine it. Feel you are inside that unstarted project. As you start out, you will find that even more ideas come to mind and the process will still run smoothly because you have a firm grasp on what it is you want to do.