<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.minegoboom.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dr+Brain</id>
		<title>ASSS Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.minegoboom.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dr+Brain"/>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php/Special:Contributions/Dr_Brain"/>
		<updated>2026-05-05T17:16:17Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Wormhole&amp;diff=5973</id>
		<title>Wormhole</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Wormhole&amp;diff=5973"/>
				<updated>2008-08-05T12:16:57Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added link to physics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''wormhole''' is a special tile on a [[map]] that attracts ships and weapons. It will absorb weapons and will drop ships elsewhere that it sucks in. Different ships have different gravity settings so that some can be more resistant to wormholes than others.&lt;br /&gt;
&lt;br /&gt;
You can change a wormhole's animation by replacing over5.bm2 withan [[LVZ]]. Also note the trick with wormholes used in [[Hyperspace]].&lt;br /&gt;
&lt;br /&gt;
See [[Physics]] for the gravity formula.&lt;br /&gt;
&lt;br /&gt;
[[Category:Map]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Physics&amp;diff=5972</id>
		<title>Physics</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Physics&amp;diff=5972"/>
				<updated>2008-08-05T12:16:04Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added wormhole physics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[SubSpace]] works on its own special unit scales. This is a collection of observed units and other special physics that SubSpace uses.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Bounce Formula : SpeedAfter = SpeedBefore * (16 / BounceFactor) (See [[Misc Settings]].)&lt;br /&gt;
&lt;br /&gt;
; Rotation : 90Â° rotation in 1/100th of a second, ''ie: Set rotation to 400, can do a full rotation of 360Â° in one second.''&lt;br /&gt;
&lt;br /&gt;
:: In packets, rotation of a player's ship is a number 0-39... where 0 is straight up and proceeding clockwise. This corresponds to which of the 40 degree graphics to display.&lt;br /&gt;
&lt;br /&gt;
: degrees per tick = rotation_setting / 1000&lt;br /&gt;
&lt;br /&gt;
; Speed : Pixels traveled in 10 seconds.&lt;br /&gt;
&lt;br /&gt;
: pixels per tick = speed_setting / 1000&lt;br /&gt;
&lt;br /&gt;
; Thrust : '''Speed''' increased every 1/100th of a second.&lt;br /&gt;
&lt;br /&gt;
:: ''Sample: Thrust of 10 applied for a second increases your speed by 1000''&lt;br /&gt;
&lt;br /&gt;
; Tick : 1/100th of a second, ''i.e. 0.01s or 10ms.''&lt;br /&gt;
&lt;br /&gt;
; Recharge : Amount of energy units gained in 10 seconds.&lt;br /&gt;
&lt;br /&gt;
; Ball Friction : The amount subtracted from a timer per tick. This timer is initialised to 1 million when the ball is fired, and multiplied with the ball x and y speeds separately on each tick. See also [[Ball Friction]].&lt;br /&gt;
&lt;br /&gt;
; Gravity : The amount of velocity applied per tick (thrust) is 1000*Gravity/(Distance^2) where Distance is the distance between the player and the [[Wormhole]] in pixels. GravityTopSpeed will be added to a player's top speed as long as at least one Wormhole is applying a thrust of 1 or more. The tile radius of the top speed effect is tiles=1.976*(g^.5).&lt;br /&gt;
[[Category:Game Intricacies]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=5125</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=5125"/>
				<updated>2005-03-25T04:55:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Filled in some of the more recent history&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt [[ASSS]].&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=3&amp;gt;&amp;lt;h3&amp;gt;Sysops&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;[[User:Dr Brain|Dr Brain]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Picano&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=3&amp;gt;&amp;lt;h3&amp;gt;Smods&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;D1st0rt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=4&amp;gt;&amp;lt;h3&amp;gt;Moderators&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Coenny&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Quigybobo&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;FunkmastaD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Lanvalk&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
Hyperspace started life as a LAN zone played by a small group of friends, Dr Brain among them. They eventually decided to put it online to try and get more players in it. Having something of a scientific bent, they decided to name it ''Event Horizon'' after the point of no return surrounding black holes. The zone, once online never took off. It was briefly hosted on Can-Link before the hosting service imploded. After considering that the zone had only reached a maximum population of 4 players, the zone was abandoned and the group perused more rewarding games such as Infantry and Starcraft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
Months later, Dr Brain revived the zone under the name ''Dog Fight'' with a new map. Again, nothing happened with the zone and it was closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
In order to experiment with [[Subgame2]] Dr Brain again hosted Dog Fight under the new name ''Jeff's Stupid Zone''. After some days of fiddling, Dr Brain finally figured out how to make Hypertunnels work. He remade the map and added some Hypertunnels around the very edge of the map. The zone's population doubled to a whole 6 players at peak times. Encouraged by this incredible population boost, more Hypertunnels were added and the zone was renamed to ''Jeff's Zone''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
Ever since the collapse of Can-Link, the zone had been hosted by Dr Brain on his cable connection. This lead to occasional downtime because of computer crashes and also to more lag than was preferable. SSDZ offered its services and the zone was moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
Dr Brain felt, now that the zone was picking up, that the name ''Jeff's Zone'' was no longer good enough. So, he started asking the player population about new name ideas. Someone suggested the name ''Hyperspeed'' and everyone agreed that it was a great name. Somehow, Dr Brain forgot the exact details of the name and changed the name to ''Hyperspace''. Only later did he realize that everyone had agreed to ''Hyperspeed'', but by then, it was too late to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
This zone was created mainly for graphics testing but later on became  &amp;quot;known&amp;quot; for a small heavily bot maintained arena called Warp2 (warpto joke).  Many colorful graphics and anime girls (specifically catgirls) were featured here.&lt;br /&gt;
&lt;br /&gt;
Average population was around eight and at max 14, not counting 6 bots (only 1 full time).&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
The intermittent failures of SSDZ lead Dr Brain and picano2.0 to search for new hosting. SSXH under Delta_5 agreed to host the zone and a long period of  prosperity for Hyperspace started.&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Eventually, SSXH decided to close down. A new host was needed and the SSDX network accepted Hyperspace. After a merger between SSDX and SSN, and several moves between servers on the SSN network, Hyperspace eventually settled down. Unfortunatly, the peace was not to last. Within weeks of quieting down, SSN closed down for no obvious reason.&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
Due to the collapse of SSN, Hyperspace was again hostless and had to be hosted by Dr Brain's less-than-perfect connection. Eventually, hosting was secured from SSI (run by 1stStrike and Argyle). Again, the zone flourished.&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
Slowly, over time, the zone's regular population grew large enough to warrant inclusion on the SSC billing network. However, once the zone received SSC billing, the population went down to virtually zero. Something new had to be introduced or the zone would vanish into nothingness.&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
As part of the SSI hosting package, Hyperspace developers were given access to the [[TWCore]] bot system (at the time, it was not public access). With this system, Nikon F5 and Dr Brain built a warping bot named AreaBot in the angelmass arena to help stimulate population. Eventually, this warping bot was extended to include a system to buy powerups. The system was again extended to include tracking of money and powerups across sessions using a MySQL database. The bot grew in complexity until eventually it housed a fully featured buy system and three discrete methods of warping. Once introduced into the public arena, the zone's population took off.&lt;br /&gt;
&lt;br /&gt;
All was not well with the AreaBot, though. Because of the huge packet processing demands made on the TWCore system, a modified version of the TWCore was needed. The modified version was not as stable as the standard version, though, and reliability problems plagued the bot. The warping and buying parts of AreaBot were separated out into two bots to help alleviate some of the strain on the system. Mods were needed online 24/7 to restart the bots when they crashed. Obviously, this couldn't continue. The decision was made to move the zone to ASSS and hopefully solve the reliability problems of AreaBot.&lt;br /&gt;
&lt;br /&gt;
=== ASSS ===&lt;br /&gt;
&lt;br /&gt;
The port from Java based TWCore to C based ASSS was not easy, especially because there were only a few people with any experience in ASSS. Dr Brain was the programmer in charge of the porting. After a few weeks of stop and go, both a direct port of the buy system and a scaled back version of the warper were both ready to go.&lt;br /&gt;
&lt;br /&gt;
The old subgame was shutdown and the new ASSS was started. Everything worked at first, but then disaster struck. The lag coma bug that would plague the zone for the next year had started its reign of terror. A lag coma is what happens when a player stops receiving reliable packets from the server. This means that a player can still fly around and shoot, but cannot change ship or see anyone else's messages. The only remedy for a lag comaed player was for them to exit and re-enter the zone. The bug seemed to only happen when there were ten or more players on the server, so the zone's former evening peak of 45 players quickly became an evening peak of 15, and slowly kept decreasing.&lt;br /&gt;
&lt;br /&gt;
It was about this time that SSI's servers were upgraded from Microsoft Windows 2000 to Microsoft Windows 2003 Server. When this happened, the carefully compiled Windows version of ASSS would no longer run, and the zone was forced to close once more.&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
Hearing of the trouble Hyperspace was in, hosting was offered from the people at SSCX who were in the process of setting up a new server running Linux, ASSS's native platform.&lt;br /&gt;
&lt;br /&gt;
-add more&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=1513</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=1513"/>
				<updated>2005-01-18T13:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Had the link backwards&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The first thing you should do is check with Dr Brain to make sure someone else isn't already making a similar module. The best way to contact him is in [[Hyperspace|SSCX-A Hyperspace]] via PM, ?message or with AIM/ICQ (check the Hyperspace news file for AIM name and ICQ number).&lt;br /&gt;
&lt;br /&gt;
== General Info ==&lt;br /&gt;
&lt;br /&gt;
In general, hard coding values is frowned upon. Please try to use the arena and global configs wherever possible. Put a sensible default into the '''GetInt''' so that not every config entry needs to be present for the module to work.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
Because of module naming conflicts, all official Hyperspace related modules are prefixed with hs_. So, for example, a kill spree module becomes hs_spree. This is not required for module submissions. You are free to name your module whatever you wish.&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
There is a Hyperspace standard style for formatting code, but it is completely optional. You should make your interface headers easy to read, though.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Hyperspace official style:&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HS_TWOWORDS_H&lt;br /&gt;
#define HS_TWOWORDS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HS_TWOWORDS &amp;quot;hs_twowords-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihstwowords&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*interfaceFunction)(Player *p);&lt;br /&gt;
} Ihstwowords;&lt;br /&gt;
&lt;br /&gt;
#endif //HS_TWOWORDS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt; //optional. others added as needed&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hs_twowords.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iconfig *cfg;&lt;br /&gt;
local Icmdman *cmd;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int interfaceFunction(Player *p);&lt;br /&gt;
&lt;br /&gt;
local helptext_t twoWordsHelp =&lt;br /&gt;
&amp;quot;Targets: player\n&amp;quot;&lt;br /&gt;
&amp;quot;Args: none\n&amp;quot;&lt;br /&gt;
&amp;quot;Who knows? This is just a template file.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
local void twoWordsCommand(const char *command, const char *params, Player *p, const Target *target)&lt;br /&gt;
{&lt;br /&gt;
	if (target-&amp;gt;type == T_PLAYER) //private command&lt;br /&gt;
	{&lt;br /&gt;
		Player *t = target-&amp;gt;u.p;&lt;br /&gt;
&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
	else //not private&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p, &amp;quot;You must target a player.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int interfaceFunction(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	if (something) //space between if and ()&lt;br /&gt;
	{&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihstwowords interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HS_TWOWORDS, &amp;quot;hs_twowords&amp;quot;)&lt;br /&gt;
	interfaceFunction&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hs_twowords(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		cfg = mm-&amp;gt;GetInterface(I_CONFIG, ALLARENAS);&lt;br /&gt;
		cmd = mm-&amp;gt;GetInterface(I_CMDMAN, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !cfg || !cmd || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;AddCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS, twoWordsHelp);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;RemoveCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Required Files ==&lt;br /&gt;
&lt;br /&gt;
Downloadable versions of the files can be found [http://hyperspace.sscentral.com/hscore/ here].&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;hscore_types.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;hscore_money.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore_items.h&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_types.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_TYPES_H&lt;br /&gt;
#define HSCORE_TYPES_H&lt;br /&gt;
&lt;br /&gt;
typedef enum EventAction&lt;br /&gt;
{&lt;br /&gt;
	//removes event-&amp;gt;data amount of the items from the ship's inventory&lt;br /&gt;
	ACTION_REMOVE_ITEM = 0,&lt;br /&gt;
&lt;br /&gt;
	//removes event-&amp;gt;data amount of the item's ammo type from inventory&lt;br /&gt;
	ACTION_REMOVE_ITEM_AMMO,&lt;br /&gt;
&lt;br /&gt;
	//sends prize #event-&amp;gt;data to the player&lt;br /&gt;
	ACTION_PRIZE,&lt;br /&gt;
&lt;br /&gt;
	//sets the item's inventory data to event-&amp;gt;data. This is useful with&lt;br /&gt;
	//the &amp;quot;purchace&amp;quot; event.&lt;br /&gt;
	ACTION_SET_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//does a ++ on inventory data.&lt;br /&gt;
	ACTION_INCREMENT_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//does a -- on inventory data. A &amp;quot;datazero&amp;quot; event may be generated as a result.&lt;br /&gt;
	ACTION_DECREMENT_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//Specs the player.&lt;br /&gt;
	ACTION_SPEC,&lt;br /&gt;
&lt;br /&gt;
	//sends a shipreset packet and reprizes all items (antideath, really)&lt;br /&gt;
	ACTION_SHIP_RESET&lt;br /&gt;
&lt;br /&gt;
	//we need a lot more&lt;br /&gt;
} EventAction;&lt;br /&gt;
&lt;br /&gt;
typedef struct Event&lt;br /&gt;
{&lt;br /&gt;
	char event[16]; //something like &amp;quot;death&amp;quot; or &amp;quot;datazero&amp;quot;&lt;br /&gt;
	EventAction action;&lt;br /&gt;
&lt;br /&gt;
	int data; //action dependent&lt;br /&gt;
&lt;br /&gt;
	char message[200]; //if == to &amp;quot;&amp;quot; then nothing will be sent.&lt;br /&gt;
} Event;&lt;br /&gt;
&lt;br /&gt;
typedef struct Property&lt;br /&gt;
{&lt;br /&gt;
	char name[16];&lt;br /&gt;
	int value;&lt;br /&gt;
} Property;&lt;br /&gt;
&lt;br /&gt;
typedef struct ItemType&lt;br /&gt;
{&lt;br /&gt;
	char name[32];&lt;br /&gt;
	int max; //maximum total of this item type on a ship before ?buy denies purchace&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} ItemType;&lt;br /&gt;
&lt;br /&gt;
typedef struct Item&lt;br /&gt;
{&lt;br /&gt;
	char name[16];&lt;br /&gt;
	char shortDesc[32]; //displayed inline in the ?buy menu&lt;br /&gt;
	char longDesc[200]; //displayed as part of ?iteminfo&lt;br /&gt;
	int buyPrice;&lt;br /&gt;
	int sellPrice;&lt;br /&gt;
&lt;br /&gt;
	int expRequired; //requirement to own&lt;br /&gt;
&lt;br /&gt;
	int shipsAllowed; //bit positions represent each ship. bit 0 = warbird.&lt;br /&gt;
&lt;br /&gt;
	LinkedList propertyList;&lt;br /&gt;
&lt;br /&gt;
	LinkedList eventList;&lt;br /&gt;
&lt;br /&gt;
	ItemType *type1, *type2;&lt;br /&gt;
	int typeDelta1, typeDelta2;&lt;br /&gt;
&lt;br /&gt;
	int max;&lt;br /&gt;
&lt;br /&gt;
	//if changes to this item should be delayed until a complete save (like on exit).&lt;br /&gt;
	//This is a necessity when dealing with ammo. We don't want to update MySQL every&lt;br /&gt;
	//time a gun is fired.&lt;br /&gt;
	int delayStatusWrite;&lt;br /&gt;
&lt;br /&gt;
	struct Item *ammo; //can be NULL, only for use by events.&lt;br /&gt;
	int ammoID; //used for post processing ONLY&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} Item;&lt;br /&gt;
&lt;br /&gt;
typedef struct InventoryEntry&lt;br /&gt;
{&lt;br /&gt;
	Item *item;&lt;br /&gt;
	int count;&lt;br /&gt;
&lt;br /&gt;
	int data; //persistent int for use by the event system.&lt;br /&gt;
} InventoryEntry;&lt;br /&gt;
&lt;br /&gt;
typedef struct ShipHull&lt;br /&gt;
{&lt;br /&gt;
	LinkedList inventoryEntryList;&lt;br /&gt;
&lt;br /&gt;
	//NOTE: no need for ship #, as it's defined by the array index (when loaded by hscore_database)&lt;br /&gt;
&lt;br /&gt;
	//if we compile a hashmap of properties, it can go in here.&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} ShipHull;&lt;br /&gt;
&lt;br /&gt;
typedef struct Category&lt;br /&gt;
{&lt;br /&gt;
	char name[32]; //displayed on ?buy&lt;br /&gt;
	char description[64]; //displayed inline on the ?buy menu&lt;br /&gt;
&lt;br /&gt;
	LinkedList itemList; //a list of member items that are displayed&lt;br /&gt;
&lt;br /&gt;
	int id; //mysql use&lt;br /&gt;
} Category;&lt;br /&gt;
&lt;br /&gt;
typedef struct Store&lt;br /&gt;
{&lt;br /&gt;
	char name[32]; //displayed in ?buysell location errors&lt;br /&gt;
	char description[200]; //displayed in ?storeinfo&lt;br /&gt;
	char region[16]; //region that defines the store&lt;br /&gt;
&lt;br /&gt;
	LinkedList itemList; //a list of items that can be purchaced here&lt;br /&gt;
&lt;br /&gt;
	int id; //mysql use&lt;br /&gt;
} Store;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_TYPES_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the ''hscore_money.h'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_MONEY_H&lt;br /&gt;
#define HSCORE_MONEY_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_MONEY &amp;quot;hscore_money-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef enum MoneyType&lt;br /&gt;
{&lt;br /&gt;
	//for /?give&lt;br /&gt;
	MONEY_TYPE_GIVE = 0,&lt;br /&gt;
&lt;br /&gt;
	//for /?grant&lt;br /&gt;
	MONEY_TYPE_GRANT,&lt;br /&gt;
&lt;br /&gt;
	//for ?buy and ?sell&lt;br /&gt;
	MONEY_TYPE_BUYSELL,&lt;br /&gt;
&lt;br /&gt;
	//for money from kills&lt;br /&gt;
	MONEY_TYPE_KILL,&lt;br /&gt;
&lt;br /&gt;
	//for money from flag games&lt;br /&gt;
	MONEY_TYPE_FLAG,&lt;br /&gt;
&lt;br /&gt;
	//for money from soccer games&lt;br /&gt;
	MONEY_TYPE_BALL,&lt;br /&gt;
&lt;br /&gt;
	//for money from module driven events&lt;br /&gt;
	MONEY_TYPE_EVENT&lt;br /&gt;
} MoneyType;&lt;br /&gt;
&lt;br /&gt;
#define MONEY_TYPE_COUNT 7&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoremoney&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	void (*giveMoney)(Player *p, int amount, MoneyType type);&lt;br /&gt;
	void (*setMoney)(Player *p, int amount, MoneyType type); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getMoney)(Player *p);&lt;br /&gt;
	int (*getMoneyType)(Player *p, MoneyType type); //used only for /?money -d&lt;br /&gt;
&lt;br /&gt;
	void (*giveExp)(Player *p, int amount);&lt;br /&gt;
	void (*setExp)(Player *p, int amount); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getExp)(Player *p);&lt;br /&gt;
} Ihscoremoney;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_MONEY_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_item.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_ITEMS_H&lt;br /&gt;
#define HSCORE_ITEMS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_ITEMS &amp;quot;hscore_items-3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoreitems&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*getItemCount)(Player *p, Item *item, int ship);&lt;br /&gt;
	void (*addItem)(Player *p, Item *item, int ship, int amount);&lt;br /&gt;
&lt;br /&gt;
	Item * (*getItemByName)(const char *name, Arena *arena);&lt;br /&gt;
&lt;br /&gt;
	int (*getPropertySum)(Player *p, int ship, const char *prop); //properties ARE case sensitive&lt;br /&gt;
&lt;br /&gt;
	void (*triggerEvent)(Player *p, int ship, const char *event);&lt;br /&gt;
	void (*triggerEventOnItem)(Player *p, Item *item, int ship, const char *event);&lt;br /&gt;
&lt;br /&gt;
	int (*getFreeItemTypeSpots)(Player *p, ItemType *type, int ship);&lt;br /&gt;
&lt;br /&gt;
	//more required, i'm sure&lt;br /&gt;
} Ihscoreitems;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_ITEMS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optional Files ==&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_moneystub.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local void giveMoney(Player *p, int amount, MoneyType type);&lt;br /&gt;
local void setMoney(Player *p, int amount, MoneyType type);&lt;br /&gt;
local int getMoney(Player *p);&lt;br /&gt;
local int getMoneyType(Player *p, MoneyType type);&lt;br /&gt;
local void giveExp(Player *p, int amount);&lt;br /&gt;
local void setExp(Player *p, int amount);&lt;br /&gt;
local int getExp(Player *p);&lt;br /&gt;
&lt;br /&gt;
local void giveMoney(Player *p, int amount, MoneyType type)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;hscore_moneystub.c: giveMoney(%i) called.&amp;quot;, amount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void setMoney(Player *p, int amount, MoneyType type)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;setMoney should not be used.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getMoney(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	return 0; //change for testing&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getMoneyType(Player *p, MoneyType type)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;getMoneyType should not be used.&amp;quot;);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void giveExp(Player *p, int amount)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;hscore_moneystub.c: giveExp(%i) called.&amp;quot;, amount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void setExp(Player *p, int amount)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;setExp should not be used.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getExp(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	return 0; //change for testing&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihscoremoney interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HSCORE_MONEY, &amp;quot;hscore_moneystub&amp;quot;)&lt;br /&gt;
	giveMoney, setMoney, getMoney, getMoneyType,&lt;br /&gt;
	giveExp, setExp, getExp,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hscore_moneystub(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_itemsstub.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int getItemCount(Player *p, Item *item, int ship);&lt;br /&gt;
local void addItem(Player *p, Item *item, int ship, int amount);&lt;br /&gt;
local Item * getItemByName(const char *name, Arena *arena);&lt;br /&gt;
local int getPropertySum(Player *p, int ship, const char *prop);&lt;br /&gt;
local void triggerEvent(Player *p, int ship, const char *event);&lt;br /&gt;
local void triggerEventOnItem(Player *p, Item *item, int ship, const char *event);&lt;br /&gt;
local int getFreeItemTypeSpots(Player *p, ItemType *type, int ship);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local int getItemCount(Player *p, Item *item, int ship)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;getItemCount should not be used by non-core modules!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void addItem(Player *p, Item *item, int ship, int amount)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;addItem should not be used by non-core modules!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Item * getItemByName(const char *name, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendArenaMessage(arena, &amp;quot;Tried to getItemByName(%s)&amp;quot;, name);&lt;br /&gt;
&lt;br /&gt;
	return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getPropertySum(Player *p, int ship, const char *propString)&lt;br /&gt;
{&lt;br /&gt;
	if (propString == NULL)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogP(L_ERROR, &amp;quot;hscore_itemsstub&amp;quot;, p, &amp;quot;asked to get props for NULL string.&amp;quot;);&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (ship &amp;lt; 0 || 7 &amp;lt; ship)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogP(L_ERROR, &amp;quot;hscore_itemsstub&amp;quot;, p, &amp;quot;asked to get props on ship %i&amp;quot;, ship);&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//change this value for testing&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void triggerEvent(Player *p, int ship, const char *event)&lt;br /&gt;
{&lt;br /&gt;
	if (ship &amp;lt; 0 || 7 &amp;lt; ship)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogP(L_ERROR, &amp;quot;hscore_itemsstub&amp;quot;, p, &amp;quot;asked to get props on ship %i&amp;quot;, ship);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (event == NULL)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogP(L_ERROR, &amp;quot;hscore_itemsstub&amp;quot;, p, &amp;quot;asked to trigger event with NULL string.&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;triggered event %s!&amp;quot;, event);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void triggerEventOnItem(Player *p, Item *item, int ship, const char *event)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;triggerEventOnItem should not be used by non-core modules!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getFreeItemTypeSpots(Player *p, ItemType *type, int ship)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;getFreeItemTypeSpots should not be used by non-core modules!&amp;quot;);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihscoreitems interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HSCORE_ITEMS, &amp;quot;hscore_itemsstub&amp;quot;)&lt;br /&gt;
	getItemCount, addItem, getItemByName, getPropertySum,&lt;br /&gt;
	triggerEvent, triggerEventOnItem, getFreeItemTypeSpots,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hscore_itemsstub(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Money and Experience ==&lt;br /&gt;
&lt;br /&gt;
Money and experience points (aka exp) are what make the Hyperspace world go 'round. Nearly every Hyperspace module has some dealings with money/exp transactions of some kind.&lt;br /&gt;
&lt;br /&gt;
=== Giving exp ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveExp(p, 10); //gives player p 10 exp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving money ===&lt;br /&gt;
&lt;br /&gt;
The first thing to decide is which money type to give. This is mainly used for tracking purposes. If in doubt, choose '''MONEY_TYPE_EVENT'''.&lt;br /&gt;
&lt;br /&gt;
*'''MONEY_TYPE_GIVE''' is for money moving from one player to another.&lt;br /&gt;
*'''MONEY_TYPE_GRANT''' is for money coming from a grant command&lt;br /&gt;
*'''MONEY_TYPE_BUYSELL''' is for ?buying and ?selling.&lt;br /&gt;
*'''MONEY_TYPE_KILL''' is for money gained from kills.&lt;br /&gt;
*'''MONEY_TYPE_FLAG''' is for money earned from winning flag games or other flag rewards.&lt;br /&gt;
*'''MONEY_TYPE_BALL''' is for money received from goals.&lt;br /&gt;
*'''MONEY_TYPE_EVENT''' is for subarena events.&lt;br /&gt;
&lt;br /&gt;
Then you can simply call:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveMoney(p, 1000, MONEY_TYPE_EVENT); //gives player p $1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using Items ==&lt;br /&gt;
&lt;br /&gt;
Items are the most important part of Hyperspace after money and exp. There are two parts of items that addon modules will use. These are checking for properties and calling events. While module writers cannot directly create items, they can request item modification/addition from subarena owners.&lt;br /&gt;
&lt;br /&gt;
=== Item properties ===&lt;br /&gt;
&lt;br /&gt;
Most items define properties that are used to change the player's ship. Properties are totalled for each ship and are checked per ship rather than per item. Most properties are related to the spawning module. However, any item can define custom properties. For example, if you have a subway system, a module could check if a player has at least one subway token property. You can check if the property sum on the player's current ship for &amp;quot;subway&amp;quot; is greater than 0, and if it is, let them ride.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;getPropertySum(p, p-&amp;gt;p_ship, &amp;quot;someproperty&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Item events ===&lt;br /&gt;
&lt;br /&gt;
Items define actions that happen on certain events. Any module can trigger an event. Some modules, for example, have actions on the ''death'' event. Triggering an event is as simple as making a function call to the '''hscore_item''' module. If no items have actions on the called event, nothing will happen (so make sure you don't typo the event name). Following on the previous example, when a player rides the subway, then you can call the &amp;quot;ridesubway&amp;quot; event. The Subway Token items can define an action of self removal on that event.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;triggerEvent(p, p-&amp;gt;p_ship, &amp;quot;someevent&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;br /&gt;
&lt;br /&gt;
Once your module is working properly and seems to have no bugs, then you can submit the source to Dr Brain or MichaelG for a source check. Once that's completed, the module will be compiled for the Hyperspace server and installed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=1089</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=1089"/>
				<updated>2005-01-18T13:58:59Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added stub files and rearranged the files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The first thing you should do is check with Dr Brain to make sure someone else isn't already making a similar module. The best way to contact him is in [[SSCX-A Hyperspace|Hyperspace]] via PM, ?message or with AIM/ICQ (check the Hyperspace news file for AIM name and ICQ number).&lt;br /&gt;
&lt;br /&gt;
== General Info ==&lt;br /&gt;
&lt;br /&gt;
In general, hard coding values is frowned upon. Please try to use the arena and global configs wherever possible. Put a sensible default into the '''GetInt''' so that not every config entry needs to be present for the module to work.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
Because of module naming conflicts, all official Hyperspace related modules are prefixed with hs_. So, for example, a kill spree module becomes hs_spree. This is not required for module submissions. You are free to name your module whatever you wish.&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
There is a Hyperspace standard style for formatting code, but it is completely optional. You should make your interface headers easy to read, though.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Hyperspace official style:&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HS_TWOWORDS_H&lt;br /&gt;
#define HS_TWOWORDS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HS_TWOWORDS &amp;quot;hs_twowords-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihstwowords&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*interfaceFunction)(Player *p);&lt;br /&gt;
} Ihstwowords;&lt;br /&gt;
&lt;br /&gt;
#endif //HS_TWOWORDS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt; //optional. others added as needed&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hs_twowords.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iconfig *cfg;&lt;br /&gt;
local Icmdman *cmd;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int interfaceFunction(Player *p);&lt;br /&gt;
&lt;br /&gt;
local helptext_t twoWordsHelp =&lt;br /&gt;
&amp;quot;Targets: player\n&amp;quot;&lt;br /&gt;
&amp;quot;Args: none\n&amp;quot;&lt;br /&gt;
&amp;quot;Who knows? This is just a template file.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
local void twoWordsCommand(const char *command, const char *params, Player *p, const Target *target)&lt;br /&gt;
{&lt;br /&gt;
	if (target-&amp;gt;type == T_PLAYER) //private command&lt;br /&gt;
	{&lt;br /&gt;
		Player *t = target-&amp;gt;u.p;&lt;br /&gt;
&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
	else //not private&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p, &amp;quot;You must target a player.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int interfaceFunction(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	if (something) //space between if and ()&lt;br /&gt;
	{&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihstwowords interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HS_TWOWORDS, &amp;quot;hs_twowords&amp;quot;)&lt;br /&gt;
	interfaceFunction&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hs_twowords(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		cfg = mm-&amp;gt;GetInterface(I_CONFIG, ALLARENAS);&lt;br /&gt;
		cmd = mm-&amp;gt;GetInterface(I_CMDMAN, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !cfg || !cmd || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;AddCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS, twoWordsHelp);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;RemoveCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Required Files ==&lt;br /&gt;
&lt;br /&gt;
Downloadable versions of the files can be found [http://hyperspace.sscentral.com/hscore/ here].&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;hscore_types.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;hscore_money.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore_items.h&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_types.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_TYPES_H&lt;br /&gt;
#define HSCORE_TYPES_H&lt;br /&gt;
&lt;br /&gt;
typedef enum EventAction&lt;br /&gt;
{&lt;br /&gt;
	//removes event-&amp;gt;data amount of the items from the ship's inventory&lt;br /&gt;
	ACTION_REMOVE_ITEM = 0,&lt;br /&gt;
&lt;br /&gt;
	//removes event-&amp;gt;data amount of the item's ammo type from inventory&lt;br /&gt;
	ACTION_REMOVE_ITEM_AMMO,&lt;br /&gt;
&lt;br /&gt;
	//sends prize #event-&amp;gt;data to the player&lt;br /&gt;
	ACTION_PRIZE,&lt;br /&gt;
&lt;br /&gt;
	//sets the item's inventory data to event-&amp;gt;data. This is useful with&lt;br /&gt;
	//the &amp;quot;purchace&amp;quot; event.&lt;br /&gt;
	ACTION_SET_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//does a ++ on inventory data.&lt;br /&gt;
	ACTION_INCREMENT_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//does a -- on inventory data. A &amp;quot;datazero&amp;quot; event may be generated as a result.&lt;br /&gt;
	ACTION_DECREMENT_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//Specs the player.&lt;br /&gt;
	ACTION_SPEC,&lt;br /&gt;
&lt;br /&gt;
	//sends a shipreset packet and reprizes all items (antideath, really)&lt;br /&gt;
	ACTION_SHIP_RESET&lt;br /&gt;
&lt;br /&gt;
	//we need a lot more&lt;br /&gt;
} EventAction;&lt;br /&gt;
&lt;br /&gt;
typedef struct Event&lt;br /&gt;
{&lt;br /&gt;
	char event[16]; //something like &amp;quot;death&amp;quot; or &amp;quot;datazero&amp;quot;&lt;br /&gt;
	EventAction action;&lt;br /&gt;
&lt;br /&gt;
	int data; //action dependent&lt;br /&gt;
&lt;br /&gt;
	char message[200]; //if == to &amp;quot;&amp;quot; then nothing will be sent.&lt;br /&gt;
} Event;&lt;br /&gt;
&lt;br /&gt;
typedef struct Property&lt;br /&gt;
{&lt;br /&gt;
	char name[16];&lt;br /&gt;
	int value;&lt;br /&gt;
} Property;&lt;br /&gt;
&lt;br /&gt;
typedef struct ItemType&lt;br /&gt;
{&lt;br /&gt;
	char name[32];&lt;br /&gt;
	int max; //maximum total of this item type on a ship before ?buy denies purchace&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} ItemType;&lt;br /&gt;
&lt;br /&gt;
typedef struct Item&lt;br /&gt;
{&lt;br /&gt;
	char name[16];&lt;br /&gt;
	char shortDesc[32]; //displayed inline in the ?buy menu&lt;br /&gt;
	char longDesc[200]; //displayed as part of ?iteminfo&lt;br /&gt;
	int buyPrice;&lt;br /&gt;
	int sellPrice;&lt;br /&gt;
&lt;br /&gt;
	int expRequired; //requirement to own&lt;br /&gt;
&lt;br /&gt;
	int shipsAllowed; //bit positions represent each ship. bit 0 = warbird.&lt;br /&gt;
&lt;br /&gt;
	LinkedList propertyList;&lt;br /&gt;
&lt;br /&gt;
	LinkedList eventList;&lt;br /&gt;
&lt;br /&gt;
	ItemType *type1, *type2;&lt;br /&gt;
	int typeDelta1, typeDelta2;&lt;br /&gt;
&lt;br /&gt;
	int max;&lt;br /&gt;
&lt;br /&gt;
	//if changes to this item should be delayed until a complete save (like on exit).&lt;br /&gt;
	//This is a necessity when dealing with ammo. We don't want to update MySQL every&lt;br /&gt;
	//time a gun is fired.&lt;br /&gt;
	int delayStatusWrite;&lt;br /&gt;
&lt;br /&gt;
	struct Item *ammo; //can be NULL, only for use by events.&lt;br /&gt;
	int ammoID; //used for post processing ONLY&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} Item;&lt;br /&gt;
&lt;br /&gt;
typedef struct InventoryEntry&lt;br /&gt;
{&lt;br /&gt;
	Item *item;&lt;br /&gt;
	int count;&lt;br /&gt;
&lt;br /&gt;
	int data; //persistent int for use by the event system.&lt;br /&gt;
} InventoryEntry;&lt;br /&gt;
&lt;br /&gt;
typedef struct ShipHull&lt;br /&gt;
{&lt;br /&gt;
	LinkedList inventoryEntryList;&lt;br /&gt;
&lt;br /&gt;
	//NOTE: no need for ship #, as it's defined by the array index (when loaded by hscore_database)&lt;br /&gt;
&lt;br /&gt;
	//if we compile a hashmap of properties, it can go in here.&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} ShipHull;&lt;br /&gt;
&lt;br /&gt;
typedef struct Category&lt;br /&gt;
{&lt;br /&gt;
	char name[32]; //displayed on ?buy&lt;br /&gt;
	char description[64]; //displayed inline on the ?buy menu&lt;br /&gt;
&lt;br /&gt;
	LinkedList itemList; //a list of member items that are displayed&lt;br /&gt;
&lt;br /&gt;
	int id; //mysql use&lt;br /&gt;
} Category;&lt;br /&gt;
&lt;br /&gt;
typedef struct Store&lt;br /&gt;
{&lt;br /&gt;
	char name[32]; //displayed in ?buysell location errors&lt;br /&gt;
	char description[200]; //displayed in ?storeinfo&lt;br /&gt;
	char region[16]; //region that defines the store&lt;br /&gt;
&lt;br /&gt;
	LinkedList itemList; //a list of items that can be purchaced here&lt;br /&gt;
&lt;br /&gt;
	int id; //mysql use&lt;br /&gt;
} Store;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_TYPES_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the ''hscore_money.h'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_MONEY_H&lt;br /&gt;
#define HSCORE_MONEY_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_MONEY &amp;quot;hscore_money-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef enum MoneyType&lt;br /&gt;
{&lt;br /&gt;
	//for /?give&lt;br /&gt;
	MONEY_TYPE_GIVE = 0,&lt;br /&gt;
&lt;br /&gt;
	//for /?grant&lt;br /&gt;
	MONEY_TYPE_GRANT,&lt;br /&gt;
&lt;br /&gt;
	//for ?buy and ?sell&lt;br /&gt;
	MONEY_TYPE_BUYSELL,&lt;br /&gt;
&lt;br /&gt;
	//for money from kills&lt;br /&gt;
	MONEY_TYPE_KILL,&lt;br /&gt;
&lt;br /&gt;
	//for money from flag games&lt;br /&gt;
	MONEY_TYPE_FLAG,&lt;br /&gt;
&lt;br /&gt;
	//for money from soccer games&lt;br /&gt;
	MONEY_TYPE_BALL,&lt;br /&gt;
&lt;br /&gt;
	//for money from module driven events&lt;br /&gt;
	MONEY_TYPE_EVENT&lt;br /&gt;
} MoneyType;&lt;br /&gt;
&lt;br /&gt;
#define MONEY_TYPE_COUNT 7&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoremoney&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	void (*giveMoney)(Player *p, int amount, MoneyType type);&lt;br /&gt;
	void (*setMoney)(Player *p, int amount, MoneyType type); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getMoney)(Player *p);&lt;br /&gt;
	int (*getMoneyType)(Player *p, MoneyType type); //used only for /?money -d&lt;br /&gt;
&lt;br /&gt;
	void (*giveExp)(Player *p, int amount);&lt;br /&gt;
	void (*setExp)(Player *p, int amount); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getExp)(Player *p);&lt;br /&gt;
} Ihscoremoney;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_MONEY_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_item.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_ITEMS_H&lt;br /&gt;
#define HSCORE_ITEMS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_ITEMS &amp;quot;hscore_items-3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoreitems&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*getItemCount)(Player *p, Item *item, int ship);&lt;br /&gt;
	void (*addItem)(Player *p, Item *item, int ship, int amount);&lt;br /&gt;
&lt;br /&gt;
	Item * (*getItemByName)(const char *name, Arena *arena);&lt;br /&gt;
&lt;br /&gt;
	int (*getPropertySum)(Player *p, int ship, const char *prop); //properties ARE case sensitive&lt;br /&gt;
&lt;br /&gt;
	void (*triggerEvent)(Player *p, int ship, const char *event);&lt;br /&gt;
	void (*triggerEventOnItem)(Player *p, Item *item, int ship, const char *event);&lt;br /&gt;
&lt;br /&gt;
	int (*getFreeItemTypeSpots)(Player *p, ItemType *type, int ship);&lt;br /&gt;
&lt;br /&gt;
	//more required, i'm sure&lt;br /&gt;
} Ihscoreitems;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_ITEMS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optional Files ==&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_moneystub.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local void giveMoney(Player *p, int amount, MoneyType type);&lt;br /&gt;
local void setMoney(Player *p, int amount, MoneyType type);&lt;br /&gt;
local int getMoney(Player *p);&lt;br /&gt;
local int getMoneyType(Player *p, MoneyType type);&lt;br /&gt;
local void giveExp(Player *p, int amount);&lt;br /&gt;
local void setExp(Player *p, int amount);&lt;br /&gt;
local int getExp(Player *p);&lt;br /&gt;
&lt;br /&gt;
local void giveMoney(Player *p, int amount, MoneyType type)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;hscore_moneystub.c: giveMoney(%i) called.&amp;quot;, amount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void setMoney(Player *p, int amount, MoneyType type)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;setMoney should not be used.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getMoney(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	return 0; //change for testing&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getMoneyType(Player *p, MoneyType type)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;getMoneyType should not be used.&amp;quot;);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void giveExp(Player *p, int amount)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;hscore_moneystub.c: giveExp(%i) called.&amp;quot;, amount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void setExp(Player *p, int amount)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;setExp should not be used.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getExp(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	return 0; //change for testing&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihscoremoney interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HSCORE_MONEY, &amp;quot;hscore_moneystub&amp;quot;)&lt;br /&gt;
	giveMoney, setMoney, getMoney, getMoneyType,&lt;br /&gt;
	giveExp, setExp, getExp,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hscore_moneystub(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_itemsstub.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int getItemCount(Player *p, Item *item, int ship);&lt;br /&gt;
local void addItem(Player *p, Item *item, int ship, int amount);&lt;br /&gt;
local Item * getItemByName(const char *name, Arena *arena);&lt;br /&gt;
local int getPropertySum(Player *p, int ship, const char *prop);&lt;br /&gt;
local void triggerEvent(Player *p, int ship, const char *event);&lt;br /&gt;
local void triggerEventOnItem(Player *p, Item *item, int ship, const char *event);&lt;br /&gt;
local int getFreeItemTypeSpots(Player *p, ItemType *type, int ship);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local int getItemCount(Player *p, Item *item, int ship)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;getItemCount should not be used by non-core modules!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void addItem(Player *p, Item *item, int ship, int amount)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;addItem should not be used by non-core modules!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Item * getItemByName(const char *name, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendArenaMessage(arena, &amp;quot;Tried to getItemByName(%s)&amp;quot;, name);&lt;br /&gt;
&lt;br /&gt;
	return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getPropertySum(Player *p, int ship, const char *propString)&lt;br /&gt;
{&lt;br /&gt;
	if (propString == NULL)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogP(L_ERROR, &amp;quot;hscore_itemsstub&amp;quot;, p, &amp;quot;asked to get props for NULL string.&amp;quot;);&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (ship &amp;lt; 0 || 7 &amp;lt; ship)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogP(L_ERROR, &amp;quot;hscore_itemsstub&amp;quot;, p, &amp;quot;asked to get props on ship %i&amp;quot;, ship);&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//change this value for testing&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void triggerEvent(Player *p, int ship, const char *event)&lt;br /&gt;
{&lt;br /&gt;
	if (ship &amp;lt; 0 || 7 &amp;lt; ship)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogP(L_ERROR, &amp;quot;hscore_itemsstub&amp;quot;, p, &amp;quot;asked to get props on ship %i&amp;quot;, ship);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (event == NULL)&lt;br /&gt;
	{&lt;br /&gt;
		lm-&amp;gt;LogP(L_ERROR, &amp;quot;hscore_itemsstub&amp;quot;, p, &amp;quot;asked to trigger event with NULL string.&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;triggered event %s!&amp;quot;, event);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local void triggerEventOnItem(Player *p, Item *item, int ship, const char *event)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;triggerEventOnItem should not be used by non-core modules!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int getFreeItemTypeSpots(Player *p, ItemType *type, int ship)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p, &amp;quot;getFreeItemTypeSpots should not be used by non-core modules!&amp;quot;);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihscoreitems interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HSCORE_ITEMS, &amp;quot;hscore_itemsstub&amp;quot;)&lt;br /&gt;
	getItemCount, addItem, getItemByName, getPropertySum,&lt;br /&gt;
	triggerEvent, triggerEventOnItem, getFreeItemTypeSpots,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hscore_itemsstub(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Money and Experience ==&lt;br /&gt;
&lt;br /&gt;
Money and experience points (aka exp) are what make the Hyperspace world go 'round. Nearly every Hyperspace module has some dealings with money/exp transactions of some kind.&lt;br /&gt;
&lt;br /&gt;
=== Giving exp ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveExp(p, 10); //gives player p 10 exp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving money ===&lt;br /&gt;
&lt;br /&gt;
The first thing to decide is which money type to give. This is mainly used for tracking purposes. If in doubt, choose '''MONEY_TYPE_EVENT'''.&lt;br /&gt;
&lt;br /&gt;
*'''MONEY_TYPE_GIVE''' is for money moving from one player to another.&lt;br /&gt;
*'''MONEY_TYPE_GRANT''' is for money coming from a grant command&lt;br /&gt;
*'''MONEY_TYPE_BUYSELL''' is for ?buying and ?selling.&lt;br /&gt;
*'''MONEY_TYPE_KILL''' is for money gained from kills.&lt;br /&gt;
*'''MONEY_TYPE_FLAG''' is for money earned from winning flag games or other flag rewards.&lt;br /&gt;
*'''MONEY_TYPE_BALL''' is for money received from goals.&lt;br /&gt;
*'''MONEY_TYPE_EVENT''' is for subarena events.&lt;br /&gt;
&lt;br /&gt;
Then you can simply call:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveMoney(p, 1000, MONEY_TYPE_EVENT); //gives player p $1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using Items ==&lt;br /&gt;
&lt;br /&gt;
Items are the most important part of Hyperspace after money and exp. There are two parts of items that addon modules will use. These are checking for properties and calling events. While module writers cannot directly create items, they can request item modification/addition from subarena owners.&lt;br /&gt;
&lt;br /&gt;
=== Item properties ===&lt;br /&gt;
&lt;br /&gt;
Most items define properties that are used to change the player's ship. Properties are totalled for each ship and are checked per ship rather than per item. Most properties are related to the spawning module. However, any item can define custom properties. For example, if you have a subway system, a module could check if a player has at least one subway token property. You can check if the property sum on the player's current ship for &amp;quot;subway&amp;quot; is greater than 0, and if it is, let them ride.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;getPropertySum(p, p-&amp;gt;p_ship, &amp;quot;someproperty&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Item events ===&lt;br /&gt;
&lt;br /&gt;
Items define actions that happen on certain events. Any module can trigger an event. Some modules, for example, have actions on the ''death'' event. Triggering an event is as simple as making a function call to the '''hscore_item''' module. If no items have actions on the called event, nothing will happen (so make sure you don't typo the event name). Following on the previous example, when a player rides the subway, then you can call the &amp;quot;ridesubway&amp;quot; event. The Subway Token items can define an action of self removal on that event.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;triggerEvent(p, p-&amp;gt;p_ship, &amp;quot;someevent&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;br /&gt;
&lt;br /&gt;
Once your module is working properly and seems to have no bugs, then you can submit the source to Dr Brain or MichaelG for a source check. Once that's completed, the module will be compiled for the Hyperspace server and installed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Talk:BanG&amp;diff=949</id>
		<title>Talk:BanG</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Talk:BanG&amp;diff=949"/>
				<updated>2005-01-15T14:23:25Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Smong|Smong]]: This page shows how to bypass. Reword it and clean the wiki log?&lt;br /&gt;
&lt;br /&gt;
How about putting a copy of the BanG command listing here instead?&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=1142</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=1142"/>
				<updated>2005-01-14T02:41:35Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: /* SSXH */  spelling fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt [[ASSS]].&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=3&amp;gt;&amp;lt;h3&amp;gt;Sysops&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;[[User:Dr Brain|Dr Brain]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Picano&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=3&amp;gt;&amp;lt;h3&amp;gt;Smods&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Nerusai&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=4&amp;gt;&amp;lt;h3&amp;gt;Moderators&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;D1st0rt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Coenny&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Quigybobo&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Bomook&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Wargh&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;FunkmastaD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;[[User:Nikegurl|nikegurl]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Lanvalk&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
Hyperspace started life as a LAN zone played by a small group of friends, Dr Brain among them. They eventually decided to put it online to try and get more players in it. Having something of a scientific bent, they decided to name it ''Event Horizon'' after the point of no return surrounding black holes. The zone, once online never took off. It was briefly hosted on Can-Link before the hosting service imploded. After considering that the zone had only reached a maximum population of 4 players, the zone was abandoned and the group persued more rewarding games such as Infantry and Starcraft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
Months later, Dr Brain revived the zone under the name ''Dog Fight'' with a new map. Again, nothing happened with the zone and it was closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
In order to experiment with [[Subgame2]] Dr Brain again hosted Dog Fight under the new name ''Jeff's Stupid Zone''. After some days of fiddling, Dr Brain finally figured out how to make Hypertunnels work. He remade the map and added some Hypertunnels around the very edge of the map. The zone's population doubled to a whole 6 players at peak times. Encouraged by this incredible population boost, more hypertunnels were added and the zone was renamed to ''Jeff's Zone''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
Ever since the collapse of Can-Link, the zone had been hosted by Dr Brain on his cable connection. This lead to occasional downtime because of computer crashes and also to more lag than was preferable. SSDZ offered its services and the zone was moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
Dr Brain felt, now that the zone was picking up, that the name ''Jeff's Zone'' was no longer good enough. So, he started asking the player population about new name ideas. Someone suggested the name ''Hyperspeed'' and everyone agreed that it was a great name. Somehow, Dr Brain forgot the exact details of the name and changed the name to ''Hyperspace''. Only later did he realize that everyone had agreed to ''Hyperspeed'', but by then, it was too late to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
This zone was created mainly for graphics testing but later on became  &amp;quot;known&amp;quot; for a small heavily bot maintained arena called Warp2 (warpto joke).  Many colorful graphics and anime girls (specifically catgirls) were featured here.&lt;br /&gt;
&lt;br /&gt;
Average population was around eight and at max 14, not counting 6 bots (only 1 full time).&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
The intermittent failures of SSDZ lead Dr Brain and picano2.0 to search for new hosting. SSXH under Delta_5 agreed to host the zone and a long period of  prosperity for Hyperspace started.&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Eventually, SSXH decided to close down. A new host was needed and the SSDX network accepted Hyperspace. After a merger between SSDX and SSN, and several moves between servers on the SSN network, Hyperspace eventually settled down. Unfortuantly, the peace was not to last. Within weeks of quieting down, SSN closed down for no obvious reason.&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
Due to the collapse of SSN, Hyperspace was again hostless and had to be hosted by Dr Brain's less-than-perfect connection. Eventually, hosting was secured from SSI (run by 1stStrike and Argyle). Again, the zone flourished.&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
As part of the SSI hosting package, Hyperspace developers were given access to the [[TWCore]] bot system (at the time, it was not public access). Everything was great for a while with small populations, but changes were needed to support the growing population. Initially, all kills gave 50 'HS Bucks'. This was changed to an earnings formula by [[User:D1st0rt|D1st0rt]] which was roughly 1+(killed bty / killer bty) * 50. Eventually, as winnings increased, all accounts were reset and prices were raised significantly. As the population in a single arena approached 30, the strain on the AreaBot became too great and it would cease to function. The ?help command was flooded with &amp;quot;FIX THE BOT NOW N00B STAFFS!!!&amp;quot; while available mods scrambled to kill the existing bot and spawn another from the hub. Over time, it got so bad that the hub itself died and had to be manually restarted by 1stStrike. This is considered the &amp;quot;Dark Age&amp;quot; of Hyperspace for the moderating team. In response to the situation, Dr Brain began working on a new system for the then unheard of and highly experimental [[ASSS]] server. The zone took a leave of absence for a few months before re-emerging as SSCX-A.&lt;br /&gt;
&lt;br /&gt;
-add more-&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=761</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=761"/>
				<updated>2005-01-14T02:33:58Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Moved smods to a seperate table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt [[ASSS]].&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=3&amp;gt;&amp;lt;h3&amp;gt;Sysops&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;[[User:Dr Brain|Dr Brain]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Picano&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=3&amp;gt;&amp;lt;h3&amp;gt;Smods&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Nerusai&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=4&amp;gt;&amp;lt;h3&amp;gt;Moderators&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;D1st0rt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Coenny&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Quigybobo&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Bomook&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Wargh&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;FunkmastaD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;[[User:Nikegurl|nikegurl]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Lanvalk&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
Hyperspace started life as a LAN zone played by a small group of friends, Dr Brain among them. They eventually decided to put it online to try and get more players in it. Having something of a scientific bent, they decided to name it ''Event Horizon'' after the point of no return surrounding black holes. The zone, once online never took off. It was briefly hosted on Can-Link before the hosting service imploded. After considering that the zone had only reached a maximum population of 4 players, the zone was abandoned and the group persued more rewarding games such as Infantry and Starcraft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
Months later, Dr Brain revived the zone under the name ''Dog Fight'' with a new map. Again, nothing happened with the zone and it was closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
In order to experiment with [[Subgame2]] Dr Brain again hosted Dog Fight under the new name ''Jeff's Stupid Zone''. After some days of fiddling, Dr Brain finally figured out how to make Hypertunnels work. He remade the map and added some Hypertunnels around the very edge of the map. The zone's population doubled to a whole 6 players at peak times. Encouraged by this incredible population boost, more hypertunnels were added and the zone was renamed to ''Jeff's Zone''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
Ever since the collapse of Can-Link, the zone had been hosted by Dr Brain on his cable connection. This lead to occasional downtime because of computer crashes and also to more lag than was preferable. SSDZ offered its services and the zone was moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
Dr Brain felt, now that the zone was picking up, that the name ''Jeff's Zone'' was no longer good enough. So, he started asking the player population about new name ideas. Someone suggested the name ''Hyperspeed'' and everyone agreed that it was a great name. Somehow, Dr Brain forgot the exact details of the name and changed the name to ''Hyperspace''. Only later did he realize that everyone had agreed to ''Hyperspeed'', but by then, it was too late to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
This zone was created mainly for graphics testing but later on became  &amp;quot;known&amp;quot; for a small heavily bot maintained arena called Warp2 (warpto joke).  Many colorful graphics and anime girls (specifically catgirls) were featured here.&lt;br /&gt;
&lt;br /&gt;
Average population was around eight and at max 14, not counting 6 bots (only 1 full time).&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
The intermittent failures of SSDZ lead Dr Brain and picano2.0 to search for new hosting. SSXH under Delta_5 agreed to host the zone and a long period of properity for Hyperspace started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Eventually, SSXH decided to close down. A new host was needed and the SSDX network accepted Hyperspace. After a merger between SSDX and SSN, and several moves between servers on the SSN network, Hyperspace eventually settled down. Unfortuantly, the peace was not to last. Within weeks of quieting down, SSN closed down for no obvious reason.&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
Due to the collapse of SSN, Hyperspace was again hostless and had to be hosted by Dr Brain's less-than-perfect connection. Eventually, hosting was secured from SSI (run by 1stStrike and Argyle). Again, the zone flourished.&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
As part of the SSI hosting package, Hyperspace developers were given access to the [[TWCore]] bot system (at the time, it was not public access). Everything was great for a while with small populations, but changes were needed to support the growing population. Initially, all kills gave 50 'HS Bucks'. This was changed to an earnings formula by [[User:D1st0rt|D1st0rt]] which was roughly 1+(killed bty / killer bty) * 50. Eventually, as winnings increased, all accounts were reset and prices were raised significantly. As the population in a single arena approached 30, the strain on the AreaBot became too great and it would cease to function. The ?help command was flooded with &amp;quot;FIX THE BOT NOW N00B STAFFS!!!&amp;quot; while available mods scrambled to kill the existing bot and spawn another from the hub. Over time, it got so bad that the hub itself died and had to be manually restarted by 1stStrike. This is considered the &amp;quot;Dark Age&amp;quot; of Hyperspace for the moderating team. In response to the situation, Dr Brain began working on a new system for the then unheard of and highly experimental [[ASSS]] server. The zone took a leave of absence for a few months before re-emerging as SSCX-A.&lt;br /&gt;
&lt;br /&gt;
-add more-&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=758</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=758"/>
				<updated>2005-01-14T02:30:35Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Linked nikegurl&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt [[ASSS]].&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=3&amp;gt;&amp;lt;h3&amp;gt;Sysops and Smods&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;[[User:Dr Brain|Dr Brain]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Picano&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Nerusai&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 frame=void rules=cols width=50%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center colspan=4&amp;gt;&amp;lt;h3&amp;gt;Moderators&amp;lt;/h3&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;D1st0rt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Coenny&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Quigybobo&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Bomook&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Wargh&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;FunkmastaD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;[[User:Nikegurl|nikegurl]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=center&amp;gt;Lanvalk&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
Hyperspace started life as a LAN zone played by a small group of friends, Dr Brain among them. They eventually decided to put it online to try and get more players in it. Having something of a scientific bent, they decided to name it ''Event Horizon'' after the point of no return surrounding black holes. The zone, once online never took off. It was briefly hosted on Can-Link before the hosting service imploded. After considering that the zone had only reached a maximum population of 4 players, the zone was abandoned and the group persued more rewarding games such as Infantry and Starcraft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
Months later, Dr Brain revived the zone under the name ''Dog Fight'' with a new map. Again, nothing happened with the zone and it was closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
In order to experiment with [[Subgame2]] Dr Brain again hosted Dog Fight under the new name ''Jeff's Stupid Zone''. After some days of fiddling, Dr Brain finally figured out how to make Hypertunnels work. He remade the map and added some Hypertunnels around the very edge of the map. The zone's population doubled to a whole 6 players at peak times. Encouraged by this incredible population boost, more hypertunnels were added and the zone was renamed to ''Jeff's Zone''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
Ever since the collapse of Can-Link, the zone had been hosted by Dr Brain on his cable connection. This lead to occasional downtime because of computer crashes and also to more lag than was preferable. SSDZ offered its services and the zone was moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
Dr Brain felt, now that the zone was picking up, that the name ''Jeff's Zone'' was no longer good enough. So, he started asking the player population about new name ideas. Someone suggested the name ''Hyperspeed'' and everyone agreed that it was a great name. Somehow, Dr Brain forgot the exact details of the name and changed the name to ''Hyperspace''. Only later did he realize that everyone had agreed to ''Hyperspeed'', but by then, it was too late to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
This zone was created mainly for graphics testing but later on became  &amp;quot;known&amp;quot; for a small heavily bot maintained arena called Warp2 (warpto joke).  Many colorful graphics and anime girls (specifically catgirls) were featured here.&lt;br /&gt;
&lt;br /&gt;
Average population was around eight and at max 14, not counting 6 bots (only 1 full time).&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
The intermittent failures of SSDZ lead Dr Brain and picano2.0 to search for new hosting. SSXH under Delta_5 agreed to host the zone and a long period of properity for Hyperspace started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Eventually, SSXH decided to close down. A new host was needed and the SSDX network accepted Hyperspace. After a merger between SSDX and SSN, and several moves between servers on the SSN network, Hyperspace eventually settled down. Unfortuantly, the peace was not to last. Within weeks of quieting down, SSN closed down for no obvious reason.&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
Due to the collapse of SSN, Hyperspace was again hostless and had to be hosted by Dr Brain's less-than-perfect connection. Eventually, hosting was secured from SSI (run by 1stStrike and Argyle). Again, the zone flourished.&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
As part of the SSI hosting package, Hyperspace developers were given access to the [[TWCore]] bot system (at the time, it was not public access). Everything was great for a while with small populations, but changes were needed to support the growing population. Initially, all kills gave 50 'HS Bucks'. This was changed to an earnings formula by [[User:D1st0rt|D1st0rt]] which was roughly 1+(killed bty / killer bty) * 50. Eventually, as winnings increased, all accounts were reset and prices were raised significantly. As the population in a single arena approached 30, the strain on the AreaBot became too great and it would cease to function. The ?help command was flooded with &amp;quot;FIX THE BOT NOW N00B STAFFS!!!&amp;quot; while available mods scrambled to kill the existing bot and spawn another from the hub. Over time, it got so bad that the hub itself died and had to be manually restarted by 1stStrike. This is considered the &amp;quot;Dark Age&amp;quot; of Hyperspace for the moderating team. In response to the situation, Dr Brain began working on a new system for the then unheard of and highly experimental [[ASSS]] server. The zone took a leave of absence for a few months before re-emerging as SSCX-A.&lt;br /&gt;
&lt;br /&gt;
-add more-&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=User:Nikegurl&amp;diff=756</id>
		<title>User:Nikegurl</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=User:Nikegurl&amp;diff=756"/>
				<updated>2005-01-14T02:29:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Moved from SSCX-A Hyperspace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== History with SSCX-A Hyperspace ==&lt;br /&gt;
&lt;br /&gt;
nikegurl (originally NiKe G u R L 637) has been old, old friends with picano and other members of Hyperspace for quite some time, stemming back from their Lasertag years (a TW subarena). When Lasertag was collapsing and becoming less and less popular, nikegurl wanted to search for a new, just as close-knite and welcoming zone. Power_P invited her to &amp;quot;Hyperspace&amp;quot;, and when she arrived, he promptly granted her $10,000.&lt;br /&gt;
 &lt;br /&gt;
Originally, &amp;quot;Nike&amp;quot; was not too into Hyperspace, as she didn't really know anyone, and was much less outgoing than she is now. She also disliked the frequent bot-crashing (botRdead again). She quit Subspace for a long time during the time that Hyperspace was changing from SSI to SSCX, and then came back when Hyperspace was up again.&lt;br /&gt;
 &lt;br /&gt;
But something had changed this time. She was much more friendly and talkative, and made &amp;quot;friends&amp;quot; easily among the staff (=P). Soon, the staff began appreciating her beauty and devotion (or maybe something else...) and voted her in as a junior-moderator with FunkmastaD (much to the disgust of then known as Siaon). Many accused her of using her feminine charms to obtain votes, but this isn't true. At all. Yup.&lt;br /&gt;
 &lt;br /&gt;
She had a lot to learn. Soon enough, she became a popular and well-loved and just mod, that was a little ban-happy. But she upheld the rules, and that made staff happy. There were many incidents during her time, such as many pictures of males shown to her, several of her pictures been shown and sold (including photoshopped catgirl ones, to the delight of picano), and catgirl stuff, and many really sexual-related quotes now floating around quotes.ssforum.net&lt;br /&gt;
 &lt;br /&gt;
One of her main roles in HS is banning people, throwing jalapenos in player's eyes, making totally random arena messages, keeping the staff chat lively and NC-17, and being on winning flagging teams.&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=749</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=749"/>
				<updated>2005-01-14T02:11:42Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: /* Dr Brain */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt ASSS.&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
=== Sysops and Smods ===&lt;br /&gt;
&lt;br /&gt;
==== Dr Brain ====&lt;br /&gt;
&lt;br /&gt;
Dr Brain is the founder of Hyperspace and one of the two zone owners. He has been with the zone since it was just a LAN server between friends.&lt;br /&gt;
&lt;br /&gt;
Dr Brain was one of the writers of the Area bots that gave Hyperspace the buy system that now defines it. He also ported the bot to a set of ASSS modules when the zone switched to SSCX-A.&lt;br /&gt;
&lt;br /&gt;
He, along with Nerusai, oversee the continuing development of the Hyperspace modules.&lt;br /&gt;
&lt;br /&gt;
His offical job in the zone is to maintain and develop the public arena. This includes settings, map, and graphics.&lt;br /&gt;
&lt;br /&gt;
He is also the only surviving member of the squad Darksaber.&lt;br /&gt;
&lt;br /&gt;
==== Picano ====&lt;br /&gt;
&lt;br /&gt;
==== Nerusai ====&lt;br /&gt;
&lt;br /&gt;
=== Moderators ===&lt;br /&gt;
&lt;br /&gt;
==== D1st0rt ====&lt;br /&gt;
&lt;br /&gt;
==== Coenny ====&lt;br /&gt;
&lt;br /&gt;
==== Quigybobo ====&lt;br /&gt;
&lt;br /&gt;
==== Bomook ====&lt;br /&gt;
&lt;br /&gt;
==== Wargh ====&lt;br /&gt;
&lt;br /&gt;
==== FunkmastaD ====&lt;br /&gt;
&lt;br /&gt;
==== nikegurl ====&lt;br /&gt;
&lt;br /&gt;
==== Lanvalk ====&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
Hyperspace started life as a LAN zone played by a small group of friends, Dr Brain among them. They eventually decided to put it online to try and get more players in it. Having something of a scientific bent, they decided to name it ''Event Horizon'' after the point of no return surrounding black holes. The zone, once online never took off. It was briefly hosted on Can-Link before the hosting service imploded. After considering that the zone had only reached a maximum population of 4 players, the zone was abandoned and the group persued more rewarding games such as Infantry and Starcraft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
Months later, Dr Brain revived the zone under the name ''Dog Fight'' with a new map. Again, nothing happened with the zone and it was closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
In order to experiment with [[Subgame2]] Dr Brain again hosted Dog Fight under the new name ''Jeff's Stupid Zone''. After some days of fiddling, Dr Brain finally figured out how to make Hypertunnels work. He remade the map and added some Hypertunnels around the very edge of the map. The zone's population doubled to a whole 6 players at peak times. Encouraged by this incredible population boost, more hypertunnels were added and the zone was renamed to ''Jeff's Zone''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
Ever since the collapse of Can-Link, the zone had been hosted by Dr Brain on his cable connection. This lead to occasional downtime because of computer crashes and also to more lag than was preferable. SSDZ offered its services and the zone was moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
Dr Brain felt, now that the zone was picking up, that the name ''Jeff's Zone'' was no longer good enough. So, he started asking the player population about new name ideas. Someone suggested the name ''Hyperspeed'' and everyone agreed that it was a great name. Somehow, Dr Brain forgot the exact details of the name and changed the name to ''Hyperspace''. Only later did he realize that everyone had agreed to ''Hyperspeed'', but by then, it was too late to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
This zone was created mainly for graphics testing but later on became  &amp;quot;known&amp;quot; for a small heavily bot maintained arena called Warp2 (warpto joke).  Many colorful graphics and anime girls (specifically catgirls) were featured here.&lt;br /&gt;
&lt;br /&gt;
Average population was around eight and at max 14, not counting 6 bots (only 1 full time).&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
The intermittent failures of SSDZ lead Dr Brain and picano2.0 to search for new hosting. SSXH under Delta_5 agreed to host the zone and a long period of properity for Hyperspace started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Eventually, SSXH decided to close down. A new host was needed and the SSDX network accepted Hyperspace. After a merger between SSDX and SSN, and several moves between servers on the SSN network, Hyperspace eventually settled down. Unfortuantly, the peace was not to last. Within weeks of quieting down, SSN closed down for no obvious reason.&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
Due to the collapse of SSN, Hyperspace was again hostless and had to be hosted by Dr Brain's less-than-perfect connection. Eventually, hosting was secured from SSI (run by 1stStrike and Argyle). Again, the zone flourished.&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
As part of the SSI hosting package, Hyperspace developers were given access to the [[TWCore]] bot system (at the time, it was not public access).&lt;br /&gt;
&lt;br /&gt;
-add more-&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=746</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=746"/>
				<updated>2005-01-14T02:05:56Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Fixed the nikegurl mess&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt ASSS.&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
=== Sysops and Smods ===&lt;br /&gt;
&lt;br /&gt;
==== Dr Brain ====&lt;br /&gt;
&lt;br /&gt;
==== Picano ====&lt;br /&gt;
&lt;br /&gt;
==== Nerusai ====&lt;br /&gt;
&lt;br /&gt;
=== Moderators ===&lt;br /&gt;
&lt;br /&gt;
==== D1st0rt ====&lt;br /&gt;
&lt;br /&gt;
==== Coenny ====&lt;br /&gt;
&lt;br /&gt;
==== Quigybobo ====&lt;br /&gt;
&lt;br /&gt;
==== Bomook ====&lt;br /&gt;
&lt;br /&gt;
==== Wargh ====&lt;br /&gt;
&lt;br /&gt;
==== FunkmastaD ====&lt;br /&gt;
&lt;br /&gt;
==== nikegurl ====&lt;br /&gt;
&lt;br /&gt;
==== Lanvalk ====&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
Hyperspace started life as a LAN zone played by a small group of friends, Dr Brain among them. They eventually decided to put it online to try and get more players in it. Having something of a scientific bent, they decided to name it ''Event Horizon'' after the point of no return surrounding black holes. The zone, once online never took off. It was briefly hosted on Can-Link before the hosting service imploded. After considering that the zone had only reached a maximum population of 4 players, the zone was abandoned and the group persued more rewarding games such as Infantry and Starcraft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
Months later, Dr Brain revived the zone under the name ''Dog Fight'' with a new map. Again, nothing happened with the zone and it was closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
In order to experiment with [[Subgame2]] Dr Brain again hosted Dog Fight under the new name ''Jeff's Stupid Zone''. After some days of fiddling, Dr Brain finally figured out how to make Hypertunnels work. He remade the map and added some Hypertunnels around the very edge of the map. The zone's population doubled to a whole 6 players at peak times. Encouraged by this incredible population boost, more hypertunnels were added and the zone was renamed to ''Jeff's Zone''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
Ever since the collapse of Can-Link, the zone had been hosted by Dr Brain on his cable connection. This lead to occasional downtime because of computer crashes and also to more lag than was preferable. SSDZ offered its services and the zone was moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
Dr Brain felt, now that the zone was picking up, that the name ''Jeff's Zone'' was no longer good enough. So, he started asking the player population about new name ideas. Someone suggested the name ''Hyperspeed'' and everyone agreed that it was a great name. Somehow, Dr Brain forgot the exact details of the name and changed the name to ''Hyperspace''. Only later did he realize that everyone had agreed to ''Hyperspeed'', but by then, it was too late to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
This zone was created mainly for graphics testing but later on became  &amp;quot;known&amp;quot; for a small heavily bot maintained arena called Warp2 (warpto joke).  Many colorful graphics and anime girls (specifically catgirls) were featured here.&lt;br /&gt;
&lt;br /&gt;
Average population was around eight and at max 14, not counting 6 bots (only 1 full time).&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
The intermittent failures of SSDZ lead Dr Brain and picano2.0 to search for new hosting. SSXH under Delta_5 agreed to host the zone and a long period of properity for Hyperspace started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Eventually, SSXH decided to close down. A new host was needed and the SSDX network accepted Hyperspace. After a merger between SSDX and SSN, and several moves between servers on the SSN network, Hyperspace eventually settled down. Unfortuantly, the peace was not to last. Within weeks of quieting down, SSN closed down for no obvious reason.&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
Due to the collapse of SSN, Hyperspace was again hostless and had to be hosted by Dr Brain's less-than-perfect connection. Eventually, hosting was secured from SSI (run by 1stStrike and Argyle). Again, the zone flourished.&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
As part of the SSI hosting package, Hyperspace developers were given access to the [[TWCore]] bot system (at the time, it was not public access).&lt;br /&gt;
&lt;br /&gt;
-add more-&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=732</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=732"/>
				<updated>2005-01-13T19:21:53Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: /* SSND/SSDX */ Minor historical note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt ASSS.&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
=== Sysops and Smods ===&lt;br /&gt;
&lt;br /&gt;
==== Dr Brain ====&lt;br /&gt;
&lt;br /&gt;
==== Picano ====&lt;br /&gt;
&lt;br /&gt;
==== Nerusai ====&lt;br /&gt;
&lt;br /&gt;
=== Moderators ===&lt;br /&gt;
&lt;br /&gt;
==== D1st0rt ====&lt;br /&gt;
&lt;br /&gt;
==== Coenny ====&lt;br /&gt;
&lt;br /&gt;
==== Quigybobo ====&lt;br /&gt;
&lt;br /&gt;
==== Bomook ====&lt;br /&gt;
&lt;br /&gt;
==== Wargh ====&lt;br /&gt;
&lt;br /&gt;
==== FunkmastaD ====&lt;br /&gt;
&lt;br /&gt;
==== nikegurl ====&lt;br /&gt;
&lt;br /&gt;
==== Lanvalk ====&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
Hyperspace started life as a LAN zone played by a small group of friends, Dr Brain among them. They eventually decided to put it online to try and get more players in it. Having something of a scientific bent, they decided to name it ''Event Horizon'' after the point of no return surrounding black holes. The zone, once online never took off. It was briefly hosted on Can-Link before the hosting service imploded. After considering that the zone had only reached a maximum population of 4 players, the zone was abandoned and the group persued more rewarding games such as Infantry and Starcraft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
Months later, Dr Brain revived the zone under the name ''Dog Fight'' with a new map. Again, nothing happened with the zone and it was closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
In order to experiment with [[Subgame2]] Dr Brain again hosted Dog Fight under the new name ''Jeff's Stupid Zone''. After some days of fiddling, Dr Brain finally figured out how to make Hypertunnels work. He remade the map and added some Hypertunnels around the very edge of the map. The zone's population doubled to a whole 6 players at peak times. Encouraged by this incredible population boost, more hypertunnels were added and the zone was renamed to ''Jeff's Zone''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
Ever since the collapse of Can-Link, the zone had been hosted by Dr Brain on his cable connection. This lead to occasional downtime because of computer crashes and also to more lag than was preferable. SSDZ offered its services and the zone was moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
Dr Brain felt, now that the zone was picking up, that the name ''Jeff's Zone'' was no longer good enough. So, he started asking the player population about new name ideas. Someone suggested the name ''Hyperspeed'' and everyone agreed that it was a great name. Somehow, Dr Brain forgot the exact details of the name and changed the name to ''Hyperspace''. Only later did he realize that everyone had agreed to ''Hyperspeed'', but by then, it was too late to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
-add more-&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
The intermittent failures of SSDZ lead Dr Brain and picano2.0 to search for new hosting. SSXH under Delta_5 agreed to host the zone and a long period of properity for Hyperspace started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Eventually, SSXH decided to close down. A new host was needed and the SSDX network accepted Hyperspace. After a merger between SSDX and SSN, and several moves between servers on the SSN network, Hyperspace eventually settled down. Unfortuantly, the peace was not to last. Within weeks of quieting down, SSN closed down for no obvious reason.&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
Due to the collapse of SSN, Hyperspace was again hostless and had to be hosted by Dr Brain's less-than-perfect connection. Eventually, hosting was secured from SSI (run by 1stStrike and Argyle). Again, the zone flourished.&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
As part of the SSI hosting package, Hyperspace developers were given access to the [[TWCore]] bot system (at the time, it was not public access).&lt;br /&gt;
&lt;br /&gt;
-add more-&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=721</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=721"/>
				<updated>2005-01-13T19:19:31Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added more content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt ASSS.&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
=== Sysops and Smods ===&lt;br /&gt;
&lt;br /&gt;
==== Dr Brain ====&lt;br /&gt;
&lt;br /&gt;
==== Picano ====&lt;br /&gt;
&lt;br /&gt;
==== Nerusai ====&lt;br /&gt;
&lt;br /&gt;
=== Moderators ===&lt;br /&gt;
&lt;br /&gt;
==== D1st0rt ====&lt;br /&gt;
&lt;br /&gt;
==== Coenny ====&lt;br /&gt;
&lt;br /&gt;
==== Quigybobo ====&lt;br /&gt;
&lt;br /&gt;
==== Bomook ====&lt;br /&gt;
&lt;br /&gt;
==== Wargh ====&lt;br /&gt;
&lt;br /&gt;
==== FunkmastaD ====&lt;br /&gt;
&lt;br /&gt;
==== nikegurl ====&lt;br /&gt;
&lt;br /&gt;
==== Lanvalk ====&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
Hyperspace started life as a LAN zone played by a small group of friends, Dr Brain among them. They eventually decided to put it online to try and get more players in it. Having something of a scientific bent, they decided to name it ''Event Horizon'' after the point of no return surrounding black holes. The zone, once online never took off. It was briefly hosted on Can-Link before the hosting service imploded. After considering that the zone had only reached a maximum population of 4 players, the zone was abandoned and the group persued more rewarding games such as Infantry and Starcraft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
Months later, Dr Brain revived the zone under the name ''Dog Fight'' with a new map. Again, nothing happened with the zone and it was closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
In order to experiment with [[Subgame2]] Dr Brain again hosted Dog Fight under the new name ''Jeff's Stupid Zone''. After some days of fiddling, Dr Brain finally figured out how to make Hypertunnels work. He remade the map and added some Hypertunnels around the very edge of the map. The zone's population doubled to a whole 6 players at peak times. Encouraged by this incredible population boost, more hypertunnels were added and the zone was renamed to ''Jeff's Zone''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
Ever since the collapse of Can-Link, the zone had been hosted by Dr Brain on his cable connection. This lead to occasional downtime because of computer crashes and also to more lag than was preferable. SSDZ offered its services and the zone was moved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
Dr Brain felt, now that the zone was picking up, that the name ''Jeff's Zone'' was no longer good enough. So, he started asking the player population about new name ideas. Someone suggested the name ''Hyperspeed'' and everyone agreed that it was a great name. Somehow, Dr Brain forgot the exact details of the name and changed the name to ''Hyperspace''. Only later did he realize that everyone had agreed to ''Hyperspeed'', but by then, it was too late to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
-add more-&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
The intermittent failures of SSDZ lead Dr Brain and picano2.0 to search for new hosting. SSXH under Delta_5 agreed to host the zone and a long period of properity for Hyperspace started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Eventually, SSXH decided to close down. A new host was needed and the SSDX network accepted Hyperspace. After several moves between servers on the SSN network, Hyperspace eventually settled down.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
Due to the collapse of SSN, Hyperspace was again hostless and had to be hosted by Dr Brain's less-than-perfect connection. Eventually, hosting was secured from SSI (run by 1stStrike and Argyle). Again, the zone flourished.&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
As part of the SSI hosting package, Hyperspace developers were given access to the [[TWCore]] bot system (at the time, it was not public access).&lt;br /&gt;
&lt;br /&gt;
-add more-&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=720</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=720"/>
				<updated>2005-01-13T18:33:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added some early history&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt ASSS.&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
=== Sysops and Smods ===&lt;br /&gt;
&lt;br /&gt;
==== Dr Brain ====&lt;br /&gt;
&lt;br /&gt;
==== Picano ====&lt;br /&gt;
&lt;br /&gt;
==== Nerusai ====&lt;br /&gt;
&lt;br /&gt;
=== Moderators ===&lt;br /&gt;
&lt;br /&gt;
==== D1st0rt ====&lt;br /&gt;
&lt;br /&gt;
==== Coenny ====&lt;br /&gt;
&lt;br /&gt;
==== Quigybobo ====&lt;br /&gt;
&lt;br /&gt;
==== Bomook ====&lt;br /&gt;
&lt;br /&gt;
==== Wargh ====&lt;br /&gt;
&lt;br /&gt;
==== FunkmastaD ====&lt;br /&gt;
&lt;br /&gt;
==== nikegurl ====&lt;br /&gt;
&lt;br /&gt;
==== Lanvalk ====&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
Hyperspace started life as a LAN zone played by a small group of friends, Dr Brain among them. They eventually decided to put it online to try and get more players in it. Having something of a scientific bent, they decided to name it ''Event Horizon'' after the point of no return surrounding black holes. The zone, once online never took off. It was briefly hosted on Can-Link before the hosting service imploded. After considering that the zone had only reached a maximum population of 4 players, the zone was abandoned and the group persued more rewarding games such as [[Infantry]] and Starcraft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
Months later, Dr Brain revived the zone under the name ''Dog Fight'' with a new map. Again, nothing happened with the zone and it was closed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
In order to experiment with [[Subgame2]] Dr Brain again hosted Dog Fight under the new name ''Jeff's Stupid Zone''. After some days of fiddling, Dr Brain finally figured out how to make Hypertunnels work. He remade the map and added some Hypertunnels around the very edge of the map. The zone's population doubled to a whole 6 players at peak times. Encouraged by this incredible population boost, More hypertunnels were added and the zone was renamed to ''Jeff's Zone''.&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
SSDZ &lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
Delta_5&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Orion Pax &amp;amp; AMT&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
1stStrike &amp;amp; Argyle&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=719</id>
		<title>Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Hyperspace&amp;diff=719"/>
				<updated>2005-01-13T15:38:48Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added outline&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSCX-A Hyperspace was one of the first zones to adopt ASSS.&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
== Staff ==&lt;br /&gt;
&lt;br /&gt;
=== Sysops and Smods ===&lt;br /&gt;
&lt;br /&gt;
==== Dr Brain ====&lt;br /&gt;
&lt;br /&gt;
==== Picano ====&lt;br /&gt;
&lt;br /&gt;
==== Nerusai ====&lt;br /&gt;
&lt;br /&gt;
=== Moderators ===&lt;br /&gt;
&lt;br /&gt;
==== D1st0rt ====&lt;br /&gt;
&lt;br /&gt;
==== Coenny ====&lt;br /&gt;
&lt;br /&gt;
==== Quigybobo ====&lt;br /&gt;
&lt;br /&gt;
==== Bomook ====&lt;br /&gt;
&lt;br /&gt;
==== Wargh ====&lt;br /&gt;
&lt;br /&gt;
==== FunkmastaD ====&lt;br /&gt;
&lt;br /&gt;
==== nikegurl ====&lt;br /&gt;
&lt;br /&gt;
==== Lanvalk ====&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Event Horizon ===&lt;br /&gt;
&lt;br /&gt;
=== Dog Fight ===&lt;br /&gt;
&lt;br /&gt;
=== Jeff's Zone ===&lt;br /&gt;
&lt;br /&gt;
=== Hosting, at last ===&lt;br /&gt;
&lt;br /&gt;
SSDZ &lt;br /&gt;
&lt;br /&gt;
=== Hyperspace ===&lt;br /&gt;
&lt;br /&gt;
=== Project 0 ===&lt;br /&gt;
&lt;br /&gt;
=== SSXH ===&lt;br /&gt;
&lt;br /&gt;
Delta_5&lt;br /&gt;
&lt;br /&gt;
=== SSND/SSDX ===&lt;br /&gt;
&lt;br /&gt;
Orion Pax &amp;amp; AMT&lt;br /&gt;
&lt;br /&gt;
=== SSI ===&lt;br /&gt;
&lt;br /&gt;
1stStrike &amp;amp; Argyle&lt;br /&gt;
&lt;br /&gt;
=== TWCore &amp;amp; AreaBot ===&lt;br /&gt;
&lt;br /&gt;
=== Getting SSC ===&lt;br /&gt;
&lt;br /&gt;
=== SSCX-A ===&lt;br /&gt;
&lt;br /&gt;
[[Category: Zones]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Zones&amp;diff=715</id>
		<title>Zones</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Zones&amp;diff=715"/>
				<updated>2005-01-13T15:14:58Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added a link to Hyperspace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A zone is an independently developed game that is playable through [[Continuum]].  Zones are hosted on [[servers]], and each zone is unique to the next. [[SSC]] Zones are all on the Subspace Central network.  This is the most secure network to play on, and is the oldest.  Most zones strive to attain quality in order to become an [[SSC]] zone.&lt;br /&gt;
&lt;br /&gt;
==SSC Zones==&lt;br /&gt;
===SFSS Zones===&lt;br /&gt;
*SFSS  Ground Warfare (SSC)&lt;br /&gt;
*SFSS Star Wars (SSC)&lt;br /&gt;
*SFSS SuB-iCiDe (SSC)&lt;br /&gt;
===SSCC Zones===&lt;br /&gt;
*SSCC Halo CTF&lt;br /&gt;
*SSCC Metal Gear CTF&lt;br /&gt;
===SSCE Zones===&lt;br /&gt;
*SSCE Hockey Zone&lt;br /&gt;
===SSCI Zones===&lt;br /&gt;
*SSCI Dragonball Z&lt;br /&gt;
*SSCI Gundam Wing&lt;br /&gt;
*SSCI Super Ships&lt;br /&gt;
===SSCU Zones===&lt;br /&gt;
*[[17th Parallel|SSCU 17th Parallel]]&lt;br /&gt;
*SSCU Death Star Battle&lt;br /&gt;
*[[Redstar|SSCU Redstar]]&lt;br /&gt;
*SSCU Trench Wars&lt;br /&gt;
&lt;br /&gt;
===SSCX Zones===&lt;br /&gt;
*SSCX Alpha West SVS&lt;br /&gt;
*SSCX Chaos/League Zone SVS&lt;br /&gt;
*SSCX Dueling Arizona SVS&lt;br /&gt;
*SSCX Extreme-Games&lt;br /&gt;
*SSCX Powerball&lt;br /&gt;
*SSCX Star Wars Realm&lt;br /&gt;
*SSCX Star Warzone&lt;br /&gt;
*SSCX Warzone/ASWZ CTF&lt;br /&gt;
*SSCX-A BattleZone&lt;br /&gt;
*SSCX-A GTA&lt;br /&gt;
*[[Hyperspace|SSCX-A Hyperspace]]&lt;br /&gt;
===T3===&lt;br /&gt;
*T3 The Gauntlet! (SSC)&lt;br /&gt;
&lt;br /&gt;
==Non SSC Zones==&lt;br /&gt;
===SSI Zones===&lt;br /&gt;
*SSI Flagging Turmoil&lt;br /&gt;
===SSN Zones===&lt;br /&gt;
*SSN Assault&lt;br /&gt;
*SSN South Tejas&lt;br /&gt;
*SSN Trust &amp;amp; Betrayal&lt;br /&gt;
*SSN Ultima Fire&lt;br /&gt;
*SSN Sniper&lt;br /&gt;
===SSZ Zones===&lt;br /&gt;
*SSZ Battle Field 1942&lt;br /&gt;
*SSZ Counter Strike&lt;br /&gt;
*SSZ Desert Storm&lt;br /&gt;
*SSZ FLAG HELL&lt;br /&gt;
*SSZ Lethal Weapon&lt;br /&gt;
*SSZ Mystic Kingdom&lt;br /&gt;
*[http://www.omega-fire.com SSZ Omega Fire]&lt;br /&gt;
*SSZ RPG World&lt;br /&gt;
*SSZ Zelda MotW&lt;br /&gt;
&lt;br /&gt;
==League Zones==&lt;br /&gt;
===SSCU Zones===&lt;br /&gt;
*DSB LEAGUE&lt;br /&gt;
===SSCX Zones===&lt;br /&gt;
*Star Warzone League&lt;br /&gt;
&lt;br /&gt;
==Development/Test Zones==&lt;br /&gt;
===SSI Zones===&lt;br /&gt;
*TWDev Testing&lt;br /&gt;
===SSZ Zones===&lt;br /&gt;
*Beef's Dev zone 1.0&lt;br /&gt;
*SSZ United Development&lt;br /&gt;
===Unknown Server===&lt;br /&gt;
*A81&amp;gt; Test Zone&lt;br /&gt;
*asss test server&lt;br /&gt;
*asss test (powerball arena)&lt;br /&gt;
*Hyperspace Test&lt;br /&gt;
&lt;br /&gt;
[[Category: Definitions]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=User:Dr_Brain&amp;diff=748</id>
		<title>User:Dr Brain</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=User:Dr_Brain&amp;diff=748"/>
				<updated>2005-01-11T23:20:54Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Rewrote for the third person.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dr Brain is the owner and operator of SSCX-A Hyperspace. He was one of the first zone owners to switch over to ASSS. He is rarely seen outside of Hyperspace, though on the few occasions that it happens it is usually to help someone debug their ASSS setup.&lt;br /&gt;
&lt;br /&gt;
Dr Brain oversees all ASSS related activity that happens in Hyperspace and is the person you should contact if you are interested in writing modules for HS.&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=1088</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=1088"/>
				<updated>2005-01-11T19:19:26Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added detail the the item stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The first thing you should do is check with Dr Brain to make sure someone else isn't already making a similar module. The best way to contact him is either in game (PM/?message) or via AIM/ICQ (check the Hyperspace news file).&lt;br /&gt;
&lt;br /&gt;
== General Info ==&lt;br /&gt;
&lt;br /&gt;
In general, hard coding values is frowned upon. Please try to use the arena and global configs wherever possible. Put a sensible default into the '''GetInt''' so that not every config entry needs to be present for the module to work.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
Because of module naming conflicts, all official Hyperspace related modules are prefixed with hs_. So, for example, a kill spree module becomes hs_spree. This is not required for module submissions. You are free to name your module whatever you wish.&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
There is a Hyperspace standard style for formatting code, but it is completely optional. You should make your interface headers easy to read, though.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Hyperspace official style:&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HS_TWOWORDS_H&lt;br /&gt;
#define HS_TWOWORDS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HS_TWOWORDS &amp;quot;hs_twowords-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihstwowords&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*interfaceFunction)(Player *p);&lt;br /&gt;
} Ihstwowords;&lt;br /&gt;
&lt;br /&gt;
#endif //HS_TWOWORDS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt; //optional. others added as needed&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hs_twowords.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iconfig *cfg;&lt;br /&gt;
local Icmdman *cmd;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int interfaceFunction(Player *p);&lt;br /&gt;
&lt;br /&gt;
local helptext_t twoWordsHelp =&lt;br /&gt;
&amp;quot;Targets: player\n&amp;quot;&lt;br /&gt;
&amp;quot;Args: none\n&amp;quot;&lt;br /&gt;
&amp;quot;Who knows? This is just a template file.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
local void twoWordsCommand(const char *command, const char *params, Player *p, const Target *target)&lt;br /&gt;
{&lt;br /&gt;
	if (target-&amp;gt;type == T_PLAYER) //private command&lt;br /&gt;
	{&lt;br /&gt;
		Player *t = target-&amp;gt;u.p;&lt;br /&gt;
&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
	else //not private&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p, &amp;quot;You must target a player.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int interfaceFunction(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	if (something) //space between if and ()&lt;br /&gt;
	{&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihstwowords interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HS_TWOWORDS, &amp;quot;hs_twowords&amp;quot;)&lt;br /&gt;
	interfaceFunction&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hs_twowords(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		cfg = mm-&amp;gt;GetInterface(I_CONFIG, ALLARENAS);&lt;br /&gt;
		cmd = mm-&amp;gt;GetInterface(I_CMDMAN, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !cfg || !cmd || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;AddCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS, twoWordsHelp);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;RemoveCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Required Files ==&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;hscore_types.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;hscore_money.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore_items.h&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_types.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_TYPES_H&lt;br /&gt;
#define HSCORE_TYPES_H&lt;br /&gt;
&lt;br /&gt;
typedef enum EventAction&lt;br /&gt;
{&lt;br /&gt;
	//removes event-&amp;gt;data amount of the items from the ship's inventory&lt;br /&gt;
	ACTION_REMOVE_ITEM = 0,&lt;br /&gt;
&lt;br /&gt;
	//removes event-&amp;gt;data amount of the item's ammo type from inventory&lt;br /&gt;
	ACTION_REMOVE_ITEM_AMMO,&lt;br /&gt;
&lt;br /&gt;
	//sends prize #event-&amp;gt;data to the player&lt;br /&gt;
	ACTION_PRIZE,&lt;br /&gt;
&lt;br /&gt;
	//sets the item's inventory data to event-&amp;gt;data. This is useful with&lt;br /&gt;
	//the &amp;quot;purchace&amp;quot; event.&lt;br /&gt;
	ACTION_SET_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//does a ++ on inventory data.&lt;br /&gt;
	ACTION_INCREMENT_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//does a -- on inventory data. A &amp;quot;datazero&amp;quot; event may be generated as a result.&lt;br /&gt;
	ACTION_DECREMENT_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//Specs the player.&lt;br /&gt;
	ACTION_SPEC,&lt;br /&gt;
&lt;br /&gt;
	//sends a shipreset packet and reprizes all items (antideath, really)&lt;br /&gt;
	ACTION_SHIP_RESET&lt;br /&gt;
&lt;br /&gt;
	//we need a lot more&lt;br /&gt;
} EventAction;&lt;br /&gt;
&lt;br /&gt;
typedef struct Event&lt;br /&gt;
{&lt;br /&gt;
	char event[16]; //something like &amp;quot;death&amp;quot; or &amp;quot;datazero&amp;quot;&lt;br /&gt;
	EventAction action;&lt;br /&gt;
&lt;br /&gt;
	int data; //action dependent&lt;br /&gt;
&lt;br /&gt;
	char message[200]; //if == to &amp;quot;&amp;quot; then nothing will be sent.&lt;br /&gt;
} Event;&lt;br /&gt;
&lt;br /&gt;
typedef struct Property&lt;br /&gt;
{&lt;br /&gt;
	char name[16];&lt;br /&gt;
	int value;&lt;br /&gt;
} Property;&lt;br /&gt;
&lt;br /&gt;
typedef struct ItemType&lt;br /&gt;
{&lt;br /&gt;
	char name[32];&lt;br /&gt;
	int max; //maximum total of this item type on a ship before ?buy denies purchace&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} ItemType;&lt;br /&gt;
&lt;br /&gt;
typedef struct Item&lt;br /&gt;
{&lt;br /&gt;
	char name[16];&lt;br /&gt;
	char shortDesc[32]; //displayed inline in the ?buy menu&lt;br /&gt;
	char longDesc[200]; //displayed as part of ?iteminfo&lt;br /&gt;
	int buyPrice;&lt;br /&gt;
	int sellPrice;&lt;br /&gt;
&lt;br /&gt;
	int expRequired; //requirement to own&lt;br /&gt;
&lt;br /&gt;
	int shipsAllowed; //bit positions represent each ship. bit 0 = warbird.&lt;br /&gt;
&lt;br /&gt;
	LinkedList propertyList;&lt;br /&gt;
&lt;br /&gt;
	LinkedList eventList;&lt;br /&gt;
&lt;br /&gt;
	ItemType *type1, *type2;&lt;br /&gt;
	int typeDelta1, typeDelta2;&lt;br /&gt;
&lt;br /&gt;
	int max;&lt;br /&gt;
&lt;br /&gt;
	//if changes to this item should be delayed until a complete save (like on exit).&lt;br /&gt;
	//This is a necessity when dealing with ammo. We don't want to update MySQL every&lt;br /&gt;
	//time a gun is fired.&lt;br /&gt;
	int delayStatusWrite;&lt;br /&gt;
&lt;br /&gt;
	struct Item *ammo; //can be NULL, only for use by events.&lt;br /&gt;
	int ammoID; //used for post processing ONLY&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} Item;&lt;br /&gt;
&lt;br /&gt;
typedef struct InventoryEntry&lt;br /&gt;
{&lt;br /&gt;
	Item *item;&lt;br /&gt;
	int count;&lt;br /&gt;
&lt;br /&gt;
	int data; //persistent int for use by the event system.&lt;br /&gt;
} InventoryEntry;&lt;br /&gt;
&lt;br /&gt;
typedef struct ShipHull&lt;br /&gt;
{&lt;br /&gt;
	LinkedList inventoryEntryList;&lt;br /&gt;
&lt;br /&gt;
	//NOTE: no need for ship #, as it's defined by the array index (when loaded by hscore_database)&lt;br /&gt;
&lt;br /&gt;
	//if we compile a hashmap of properties, it can go in here.&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} ShipHull;&lt;br /&gt;
&lt;br /&gt;
typedef struct Category&lt;br /&gt;
{&lt;br /&gt;
	char name[32]; //displayed on ?buy&lt;br /&gt;
	char description[64]; //displayed inline on the ?buy menu&lt;br /&gt;
&lt;br /&gt;
	LinkedList itemList; //a list of member items that are displayed&lt;br /&gt;
&lt;br /&gt;
	int id; //mysql use&lt;br /&gt;
} Category;&lt;br /&gt;
&lt;br /&gt;
typedef struct Store&lt;br /&gt;
{&lt;br /&gt;
	char name[32]; //displayed in ?buysell location errors&lt;br /&gt;
	char description[200]; //displayed in ?storeinfo&lt;br /&gt;
	char region[16]; //region that defines the store&lt;br /&gt;
&lt;br /&gt;
	LinkedList itemList; //a list of items that can be purchaced here&lt;br /&gt;
&lt;br /&gt;
	int id; //mysql use&lt;br /&gt;
} Store;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_TYPES_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Money and Experience ==&lt;br /&gt;
&lt;br /&gt;
Money and experience points (aka exp) are what make the Hyperspace world go 'round. Nearly every Hyperspace module has some dealings with money/exp transactions of some kind.&lt;br /&gt;
&lt;br /&gt;
Here is the '''hscore_money.h''' contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_MONEY_H&lt;br /&gt;
#define HSCORE_MONEY_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_MONEY &amp;quot;hscore_money-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef enum MoneyType&lt;br /&gt;
{&lt;br /&gt;
	//for /?give&lt;br /&gt;
	MONEY_TYPE_GIVE = 0,&lt;br /&gt;
&lt;br /&gt;
	//for /?grant&lt;br /&gt;
	MONEY_TYPE_GRANT,&lt;br /&gt;
&lt;br /&gt;
	//for ?buy and ?sell&lt;br /&gt;
	MONEY_TYPE_BUYSELL,&lt;br /&gt;
&lt;br /&gt;
	//for money from kills&lt;br /&gt;
	MONEY_TYPE_KILL,&lt;br /&gt;
&lt;br /&gt;
	//for money from flag games&lt;br /&gt;
	MONEY_TYPE_FLAG,&lt;br /&gt;
&lt;br /&gt;
	//for money from soccer games&lt;br /&gt;
	MONEY_TYPE_BALL,&lt;br /&gt;
&lt;br /&gt;
	//for money from module driven events&lt;br /&gt;
	MONEY_TYPE_EVENT&lt;br /&gt;
} MoneyType;&lt;br /&gt;
&lt;br /&gt;
#define MONEY_TYPE_COUNT 7&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoremoney&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	void (*giveMoney)(Player *p, int amount, MoneyType type);&lt;br /&gt;
	void (*setMoney)(Player *p, int amount, MoneyType type); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getMoney)(Player *p);&lt;br /&gt;
	int (*getMoneyType)(Player *p, MoneyType type); //used only for /?money -d&lt;br /&gt;
&lt;br /&gt;
	void (*giveExp)(Player *p, int amount);&lt;br /&gt;
	void (*setExp)(Player *p, int amount); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getExp)(Player *p);&lt;br /&gt;
} Ihscoremoney;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_MONEY_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving exp ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveExp(p, 10); //gives player p 10 exp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving money ===&lt;br /&gt;
&lt;br /&gt;
The first thing to decide is which money type to give. This is mainly used for tracking purposes. If in doubt, choose '''MONEY_TYPE_EVENT'''.&lt;br /&gt;
&lt;br /&gt;
*'''MONEY_TYPE_GIVE''' is for money moving from one player to another.&lt;br /&gt;
*'''MONEY_TYPE_GRANT''' is for money coming from a grant command&lt;br /&gt;
*'''MONEY_TYPE_BUYSELL''' is for ?buying and ?selling.&lt;br /&gt;
*'''MONEY_TYPE_KILL''' is for money gained from kills.&lt;br /&gt;
*'''MONEY_TYPE_FLAG''' is for money earned from winning flag games or other flag rewards.&lt;br /&gt;
*'''MONEY_TYPE_BALL''' is for money received from goals.&lt;br /&gt;
*'''MONEY_TYPE_EVENT''' is for subarena events.&lt;br /&gt;
&lt;br /&gt;
Then you can simply call:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveMoney(p, 1000, MONEY_TYPE_EVENT); //gives player p $1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using Items ==&lt;br /&gt;
&lt;br /&gt;
Items are the most important part of Hyperspace after money and exp. There are two parts of items that addon modules will use. These are checking for properties and calling events. While module writers cannot directly create items, they can request item modification/addition from subarena owners.&lt;br /&gt;
&lt;br /&gt;
Here is a copy of ''hscore_item.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_ITEMS_H&lt;br /&gt;
#define HSCORE_ITEMS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_ITEMS &amp;quot;hscore_items-3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoreitems&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*getItemCount)(Player *p, Item *item, int ship);&lt;br /&gt;
	void (*addItem)(Player *p, Item *item, int ship, int amount);&lt;br /&gt;
&lt;br /&gt;
	Item * (*getItemByName)(const char *name, Arena *arena);&lt;br /&gt;
&lt;br /&gt;
	int (*getPropertySum)(Player *p, int ship, const char *prop); //properties ARE case sensitive&lt;br /&gt;
&lt;br /&gt;
	void (*triggerEvent)(Player *p, int ship, const char *event);&lt;br /&gt;
	void (*triggerEventOnItem)(Player *p, Item *item, int ship, const char *event);&lt;br /&gt;
&lt;br /&gt;
	int (*getFreeItemTypeSpots)(Player *p, ItemType *type, int ship);&lt;br /&gt;
&lt;br /&gt;
	//more required, i'm sure&lt;br /&gt;
} Ihscoreitems;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_ITEMS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Item properties ===&lt;br /&gt;
&lt;br /&gt;
Most items define properties that are used to change the player's ship. Properties are totalled for each ship and are checked per ship rather than per item. Most properties are related to the spawning module. However, any item can define custom properties. For example, if you have a subway system, a module could check if a player has at least one subway token property. You can check if the property sum on the player's current ship for &amp;quot;subway&amp;quot; is greater than 0, and if it is, let them ride.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;getPropertySum(p, p-&amp;gt;p_ship, &amp;quot;someproperty&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Item events ===&lt;br /&gt;
&lt;br /&gt;
Items define actions that happen on certain events. Any module can trigger an event. Some modules, for example, have actions on the ''death'' event. Triggering an event is as simple as making a function call to the '''hscore_item''' module. If no items have actions on the called event, nothing will happen (so make sure you don't typo the event name). Following on the previous example, when a player rides the subway, then you can call the &amp;quot;ridesubway&amp;quot; event. The Subway Token items can define an action of self removal on that event.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;triggerEvent(p, p-&amp;gt;p_ship, &amp;quot;someevent&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;br /&gt;
&lt;br /&gt;
Once your module is working properly and seems to have no bugs, then you can submit the source to Dr Brain or MichaelG for a source check. Once that's completed, the module will be compiled for the Hyperspace server and installed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=324</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=324"/>
				<updated>2005-01-11T18:42:27Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: added missing hscore headers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The first thing you should do is check with Dr Brain to make sure someone else isn't already making a similar module. The best way to contact him is either in game (PM/?message) or via AIM/ICQ (check the Hyperspace news file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Info ==&lt;br /&gt;
&lt;br /&gt;
In general, hard coding values is frowned upon. Please try to use the arena and global configs wherever possible. Put a sensible default into the '''GetInt''' so that not every config entry needs to be present for the module to work.&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
Because of module naming conflicts, all official Hyperspace related modules are prefixed with hs_. So, for example, a kill spree module becomes hs_spree. This is not required for module submissions. You are free to name your module whatever you wish.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
There is a Hyperspace standard style for formatting code, but it is completely optional. You should make your interface headers easy to read, though.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Hyperspace official style:&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HS_TWOWORDS_H&lt;br /&gt;
#define HS_TWOWORDS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HS_TWOWORDS &amp;quot;hs_twowords-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihstwowords&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*interfaceFunction)(Player *p);&lt;br /&gt;
} Ihstwowords;&lt;br /&gt;
&lt;br /&gt;
#endif //HS_TWOWORDS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt; //optional. others added as needed&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hs_twowords.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iconfig *cfg;&lt;br /&gt;
local Icmdman *cmd;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int interfaceFunction(Player *p);&lt;br /&gt;
&lt;br /&gt;
local helptext_t twoWordsHelp =&lt;br /&gt;
&amp;quot;Targets: player\n&amp;quot;&lt;br /&gt;
&amp;quot;Args: none\n&amp;quot;&lt;br /&gt;
&amp;quot;Who knows? This is just a template file.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
local void twoWordsCommand(const char *command, const char *params, Player *p, const Target *target)&lt;br /&gt;
{&lt;br /&gt;
	if (target-&amp;gt;type == T_PLAYER) //private command&lt;br /&gt;
	{&lt;br /&gt;
		Player *t = target-&amp;gt;u.p;&lt;br /&gt;
&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
	else //not private&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p, &amp;quot;You must target a player.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int interfaceFunction(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	if (something) //space between if and ()&lt;br /&gt;
	{&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihstwowords interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HS_TWOWORDS, &amp;quot;hs_twowords&amp;quot;)&lt;br /&gt;
	interfaceFunction&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hs_twowords(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		cfg = mm-&amp;gt;GetInterface(I_CONFIG, ALLARENAS);&lt;br /&gt;
		cmd = mm-&amp;gt;GetInterface(I_CMDMAN, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !cfg || !cmd || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;AddCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS, twoWordsHelp);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;RemoveCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Required Files ==&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;hscore_types.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;hscore_money.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore_items.h&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is ''hscore_types.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_TYPES_H&lt;br /&gt;
#define HSCORE_TYPES_H&lt;br /&gt;
&lt;br /&gt;
typedef enum EventAction&lt;br /&gt;
{&lt;br /&gt;
	//removes event-&amp;gt;data amount of the items from the ship's inventory&lt;br /&gt;
	ACTION_REMOVE_ITEM = 0,&lt;br /&gt;
&lt;br /&gt;
	//removes event-&amp;gt;data amount of the item's ammo type from inventory&lt;br /&gt;
	ACTION_REMOVE_ITEM_AMMO,&lt;br /&gt;
&lt;br /&gt;
	//sends prize #event-&amp;gt;data to the player&lt;br /&gt;
	ACTION_PRIZE,&lt;br /&gt;
&lt;br /&gt;
	//sets the item's inventory data to event-&amp;gt;data. This is useful with&lt;br /&gt;
	//the &amp;quot;purchace&amp;quot; event.&lt;br /&gt;
	ACTION_SET_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//does a ++ on inventory data.&lt;br /&gt;
	ACTION_INCREMENT_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//does a -- on inventory data. A &amp;quot;datazero&amp;quot; event may be generated as a result.&lt;br /&gt;
	ACTION_DECREMENT_INVENTORY_DATA,&lt;br /&gt;
&lt;br /&gt;
	//Specs the player.&lt;br /&gt;
	ACTION_SPEC,&lt;br /&gt;
&lt;br /&gt;
	//sends a shipreset packet and reprizes all items (antideath, really)&lt;br /&gt;
	ACTION_SHIP_RESET&lt;br /&gt;
&lt;br /&gt;
	//we need a lot more&lt;br /&gt;
} EventAction;&lt;br /&gt;
&lt;br /&gt;
typedef struct Event&lt;br /&gt;
{&lt;br /&gt;
	char event[16]; //something like &amp;quot;death&amp;quot; or &amp;quot;datazero&amp;quot;&lt;br /&gt;
	EventAction action;&lt;br /&gt;
&lt;br /&gt;
	int data; //action dependent&lt;br /&gt;
&lt;br /&gt;
	char message[200]; //if == to &amp;quot;&amp;quot; then nothing will be sent.&lt;br /&gt;
} Event;&lt;br /&gt;
&lt;br /&gt;
typedef struct Property&lt;br /&gt;
{&lt;br /&gt;
	char name[16];&lt;br /&gt;
	int value;&lt;br /&gt;
} Property;&lt;br /&gt;
&lt;br /&gt;
typedef struct ItemType&lt;br /&gt;
{&lt;br /&gt;
	char name[32];&lt;br /&gt;
	int max; //maximum total of this item type on a ship before ?buy denies purchace&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} ItemType;&lt;br /&gt;
&lt;br /&gt;
typedef struct Item&lt;br /&gt;
{&lt;br /&gt;
	char name[16];&lt;br /&gt;
	char shortDesc[32]; //displayed inline in the ?buy menu&lt;br /&gt;
	char longDesc[200]; //displayed as part of ?iteminfo&lt;br /&gt;
	int buyPrice;&lt;br /&gt;
	int sellPrice;&lt;br /&gt;
&lt;br /&gt;
	int expRequired; //requirement to own&lt;br /&gt;
&lt;br /&gt;
	int shipsAllowed; //bit positions represent each ship. bit 0 = warbird.&lt;br /&gt;
&lt;br /&gt;
	LinkedList propertyList;&lt;br /&gt;
&lt;br /&gt;
	LinkedList eventList;&lt;br /&gt;
&lt;br /&gt;
	ItemType *type1, *type2;&lt;br /&gt;
	int typeDelta1, typeDelta2;&lt;br /&gt;
&lt;br /&gt;
	int max;&lt;br /&gt;
&lt;br /&gt;
	//if changes to this item should be delayed until a complete save (like on exit).&lt;br /&gt;
	//This is a necessity when dealing with ammo. We don't want to update MySQL every&lt;br /&gt;
	//time a gun is fired.&lt;br /&gt;
	int delayStatusWrite;&lt;br /&gt;
&lt;br /&gt;
	struct Item *ammo; //can be NULL, only for use by events.&lt;br /&gt;
	int ammoID; //used for post processing ONLY&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} Item;&lt;br /&gt;
&lt;br /&gt;
typedef struct InventoryEntry&lt;br /&gt;
{&lt;br /&gt;
	Item *item;&lt;br /&gt;
	int count;&lt;br /&gt;
&lt;br /&gt;
	int data; //persistent int for use by the event system.&lt;br /&gt;
} InventoryEntry;&lt;br /&gt;
&lt;br /&gt;
typedef struct ShipHull&lt;br /&gt;
{&lt;br /&gt;
	LinkedList inventoryEntryList;&lt;br /&gt;
&lt;br /&gt;
	//NOTE: no need for ship #, as it's defined by the array index (when loaded by hscore_database)&lt;br /&gt;
&lt;br /&gt;
	//if we compile a hashmap of properties, it can go in here.&lt;br /&gt;
&lt;br /&gt;
	int id; //MySQL use only&lt;br /&gt;
} ShipHull;&lt;br /&gt;
&lt;br /&gt;
typedef struct Category&lt;br /&gt;
{&lt;br /&gt;
	char name[32]; //displayed on ?buy&lt;br /&gt;
	char description[64]; //displayed inline on the ?buy menu&lt;br /&gt;
&lt;br /&gt;
	LinkedList itemList; //a list of member items that are displayed&lt;br /&gt;
&lt;br /&gt;
	int id; //mysql use&lt;br /&gt;
} Category;&lt;br /&gt;
&lt;br /&gt;
typedef struct Store&lt;br /&gt;
{&lt;br /&gt;
	char name[32]; //displayed in ?buysell location errors&lt;br /&gt;
	char description[200]; //displayed in ?storeinfo&lt;br /&gt;
	char region[16]; //region that defines the store&lt;br /&gt;
&lt;br /&gt;
	LinkedList itemList; //a list of items that can be purchaced here&lt;br /&gt;
&lt;br /&gt;
	int id; //mysql use&lt;br /&gt;
} Store;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_TYPES_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Money and Experience ==&lt;br /&gt;
&lt;br /&gt;
Money and experience points (aka exp) are what make the Hyperspace world go 'round. Nearly every Hyperspace module has some dealings with money/exp transactions of some kind.&lt;br /&gt;
&lt;br /&gt;
Here is the '''hscore_money.h''' contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_MONEY_H&lt;br /&gt;
#define HSCORE_MONEY_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_MONEY &amp;quot;hscore_money-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef enum MoneyType&lt;br /&gt;
{&lt;br /&gt;
	//for /?give&lt;br /&gt;
	MONEY_TYPE_GIVE = 0,&lt;br /&gt;
&lt;br /&gt;
	//for /?grant&lt;br /&gt;
	MONEY_TYPE_GRANT,&lt;br /&gt;
&lt;br /&gt;
	//for ?buy and ?sell&lt;br /&gt;
	MONEY_TYPE_BUYSELL,&lt;br /&gt;
&lt;br /&gt;
	//for money from kills&lt;br /&gt;
	MONEY_TYPE_KILL,&lt;br /&gt;
&lt;br /&gt;
	//for money from flag games&lt;br /&gt;
	MONEY_TYPE_FLAG,&lt;br /&gt;
&lt;br /&gt;
	//for money from soccer games&lt;br /&gt;
	MONEY_TYPE_BALL,&lt;br /&gt;
&lt;br /&gt;
	//for money from module driven events&lt;br /&gt;
	MONEY_TYPE_EVENT&lt;br /&gt;
} MoneyType;&lt;br /&gt;
&lt;br /&gt;
#define MONEY_TYPE_COUNT 7&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoremoney&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	void (*giveMoney)(Player *p, int amount, MoneyType type);&lt;br /&gt;
	void (*setMoney)(Player *p, int amount, MoneyType type); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getMoney)(Player *p);&lt;br /&gt;
	int (*getMoneyType)(Player *p, MoneyType type); //used only for /?money -d&lt;br /&gt;
&lt;br /&gt;
	void (*giveExp)(Player *p, int amount);&lt;br /&gt;
	void (*setExp)(Player *p, int amount); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getExp)(Player *p);&lt;br /&gt;
} Ihscoremoney;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_MONEY_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving exp ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveExp(p, 10); //gives player p 10 exp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving money ===&lt;br /&gt;
The first thing to decide is which money type to give. This is mainly used for tracking purposes. If in doubt, choose '''MONEY_TYPE_EVENT'''.&lt;br /&gt;
&lt;br /&gt;
*'''MONEY_TYPE_GIVE''' is for money moving from one player to another.&lt;br /&gt;
*'''MONEY_TYPE_GRANT''' is for money coming from a grant command&lt;br /&gt;
*'''MONEY_TYPE_BUYSELL''' is for ?buying and ?selling.&lt;br /&gt;
*'''MONEY_TYPE_KILL''' is for money gained from kills.&lt;br /&gt;
*'''MONEY_TYPE_FLAG''' is for money earned from winning flag games or other flag rewards.&lt;br /&gt;
*'''MONEY_TYPE_BALL''' is for money received from goals.&lt;br /&gt;
*'''MONEY_TYPE_EVENT''' is for subarena events.&lt;br /&gt;
&lt;br /&gt;
Then you can simply call:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveMoney(p, 1000, MONEY_TYPE_EVENT); //gives player p $1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using Items ==&lt;br /&gt;
&lt;br /&gt;
Items are the most important part of Hyperspace after money and exp. There are two parts of items that addon modules will use. These are checking for properties and calling events.&lt;br /&gt;
&lt;br /&gt;
Here is a copy of ''hscore_item.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_ITEMS_H&lt;br /&gt;
#define HSCORE_ITEMS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_ITEMS &amp;quot;hscore_items-3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoreitems&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*getItemCount)(Player *p, Item *item, int ship);&lt;br /&gt;
	void (*addItem)(Player *p, Item *item, int ship, int amount);&lt;br /&gt;
&lt;br /&gt;
	Item * (*getItemByName)(const char *name, Arena *arena);&lt;br /&gt;
&lt;br /&gt;
	int (*getPropertySum)(Player *p, int ship, const char *prop); //properties ARE case sensitive&lt;br /&gt;
&lt;br /&gt;
	void (*triggerEvent)(Player *p, int ship, const char *event);&lt;br /&gt;
	void (*triggerEventOnItem)(Player *p, Item *item, int ship, const char *event);&lt;br /&gt;
&lt;br /&gt;
	int (*getFreeItemTypeSpots)(Player *p, ItemType *type, int ship);&lt;br /&gt;
&lt;br /&gt;
	//more required, i'm sure&lt;br /&gt;
} Ihscoreitems;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_ITEMS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Item properties ===&lt;br /&gt;
&lt;br /&gt;
Most items define properties that are used to change the player's ship. Properties are totalled for each ship and are checked per ship rather than per item. Most properties are related to the spawning module. However, any item can define custom properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;getPropertySum(p, p-&amp;gt;p_ship, &amp;quot;someproperty&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Item events ===&lt;br /&gt;
&lt;br /&gt;
Items define actions that happen on certain events. Any module can trigger an event. Some modules, for example, have actions on the ''death'' event. Triggering an event is as simple as making a function call to the '''hscore_item''' module. If no items have actions on the called event, nothing will happen (so make sure you don't typo the event name).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;triggerEvent(p, p-&amp;gt;p_ship, &amp;quot;someevent&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;br /&gt;
&lt;br /&gt;
Once your module is working properly and seems to have no bugs, then you can submit the source to Dr Brain or MichaelG for a source check. Once that's completed, the module will be compiled for the Hyperspace server and installed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Server_General_Faq&amp;diff=619</id>
		<title>Server General Faq</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Server_General_Faq&amp;diff=619"/>
				<updated>2005-01-11T17:08:47Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: /* Why not just use a bot? */  Removed false statements and added some better ones&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is ASSS? ==&lt;br /&gt;
A Small Subspace Server (ASSS) is a replacement for subgame. It is not a clone therefore somethings will be different such as commands or the format of output from commands (grr).&lt;br /&gt;
&lt;br /&gt;
I expect it uses less system resources to run as well (unlike cpu hogging subgame). '''Someone confirm this please'''&lt;br /&gt;
&lt;br /&gt;
== Why is ASSS better than subgame? ==&lt;br /&gt;
&lt;br /&gt;
== Does it run on Windows? ==&lt;br /&gt;
&lt;br /&gt;
Yes. Grelminar maintains a windows build in addition to his linux build.&lt;br /&gt;
&lt;br /&gt;
== Does it run on Linux? ==&lt;br /&gt;
&lt;br /&gt;
Yes. ASSS was designed primarily for Linux and therefore works wonderfully on it.&lt;br /&gt;
&lt;br /&gt;
== How hard is it to install? ==&lt;br /&gt;
Dead simple if you know what you are doing. But it can be like moving a mountain if you don't know how to double click.&lt;br /&gt;
&lt;br /&gt;
== Why not just use a bot? ==&lt;br /&gt;
&lt;br /&gt;
ASSS can simply do more than bots can.&lt;br /&gt;
&lt;br /&gt;
*Because modules are a direct part of the server, things like stats and points can be easily manipulated using ASSS.&lt;br /&gt;
*New game types can be added so that they mesh seamlessly with everything else.&lt;br /&gt;
*Spawning new bots for every new subarena is not only a pain, it is sometime impractical. ASSS modules are there as soon as the new subarena is created.&lt;br /&gt;
*You can use server side commands. You won't ever have to cycle through your recent private message list to PM a bot again.&lt;br /&gt;
&lt;br /&gt;
[[Category: Server]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=311</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=311"/>
				<updated>2005-01-11T16:59:57Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Removed edit lock text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The first thing you should do is check with Dr Brain to make sure someone else isn't already making a similar module. The best way to contact him is either in game (PM/?message) or via AIM/ICQ (check the Hyperspace news file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Info ==&lt;br /&gt;
&lt;br /&gt;
In general, hard coding values is frowned upon. Please try to use the arena and global configs wherever possible. Put a sensable default into the '''GetInt''' so that not every config entry needs to be present for the module to work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
Because of module naming conflicts, all official Hyperspace related modules are prefixed with hs_. So, for example, a kill spree module becomes hs_spree. This is not required for module submissions. You are free to name your module whatever you wish.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
There is a Hyperspace standard style for formatting code, but it is completely optional. You should make your interface headers easy to read, though.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Hyperspace official style:&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HS_TWOWORDS_H&lt;br /&gt;
#define HS_TWOWORDS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HS_TWOWORDS &amp;quot;hs_twowords-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihstwowords&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*interfaceFunction)(Player *p);&lt;br /&gt;
} Ihstwowords;&lt;br /&gt;
&lt;br /&gt;
#endif //HS_TWOWORDS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt; //optional. others added as needed&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hs_twowords.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iconfig *cfg;&lt;br /&gt;
local Icmdman *cmd;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int interfaceFunction(Player *p);&lt;br /&gt;
&lt;br /&gt;
local helptext_t twoWordsHelp =&lt;br /&gt;
&amp;quot;Targets: player\n&amp;quot;&lt;br /&gt;
&amp;quot;Args: none\n&amp;quot;&lt;br /&gt;
&amp;quot;Who knows? This is just a template file.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
local void twoWordsCommand(const char *command, const char *params, Player *p, const Target *target)&lt;br /&gt;
{&lt;br /&gt;
	if (target-&amp;gt;type == T_PLAYER) //private command&lt;br /&gt;
	{&lt;br /&gt;
		Player *t = target-&amp;gt;u.p;&lt;br /&gt;
&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
	else //not private&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p, &amp;quot;You must target a player.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int interfaceFunction(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	if (something) //space between if and ()&lt;br /&gt;
	{&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihstwowords interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HS_TWOWORDS, &amp;quot;hs_twowords&amp;quot;)&lt;br /&gt;
	interfaceFunction&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hs_twowords(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		cfg = mm-&amp;gt;GetInterface(I_CONFIG, ALLARENAS);&lt;br /&gt;
		cmd = mm-&amp;gt;GetInterface(I_CMDMAN, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !cfg || !cmd || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;AddCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS, twoWordsHelp);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;RemoveCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Money and Experience ==&lt;br /&gt;
&lt;br /&gt;
Money and experience points (aka exp) are what make the Hyperspace world go 'round. Nearly every Hyperspace module has some dealings with money/exp transactions of some kind.&lt;br /&gt;
&lt;br /&gt;
Here is the '''hscore_money.h''' contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_MONEY_H&lt;br /&gt;
#define HSCORE_MONEY_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_MONEY &amp;quot;hscore_money-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef enum MoneyType&lt;br /&gt;
{&lt;br /&gt;
	//for /?give&lt;br /&gt;
	MONEY_TYPE_GIVE = 0,&lt;br /&gt;
&lt;br /&gt;
	//for /?grant&lt;br /&gt;
	MONEY_TYPE_GRANT,&lt;br /&gt;
&lt;br /&gt;
	//for ?buy and ?sell&lt;br /&gt;
	MONEY_TYPE_BUYSELL,&lt;br /&gt;
&lt;br /&gt;
	//for money from kills&lt;br /&gt;
	MONEY_TYPE_KILL,&lt;br /&gt;
&lt;br /&gt;
	//for money from flag games&lt;br /&gt;
	MONEY_TYPE_FLAG,&lt;br /&gt;
&lt;br /&gt;
	//for money from soccer games&lt;br /&gt;
	MONEY_TYPE_BALL,&lt;br /&gt;
&lt;br /&gt;
	//for money from module driven events&lt;br /&gt;
	MONEY_TYPE_EVENT&lt;br /&gt;
} MoneyType;&lt;br /&gt;
&lt;br /&gt;
#define MONEY_TYPE_COUNT 7&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoremoney&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	void (*giveMoney)(Player *p, int amount, MoneyType type);&lt;br /&gt;
	void (*setMoney)(Player *p, int amount, MoneyType type); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getMoney)(Player *p);&lt;br /&gt;
	int (*getMoneyType)(Player *p, MoneyType type); //used only for /?money -d&lt;br /&gt;
&lt;br /&gt;
	void (*giveExp)(Player *p, int amount);&lt;br /&gt;
	void (*setExp)(Player *p, int amount); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getExp)(Player *p);&lt;br /&gt;
} Ihscoremoney;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_MONEY_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving exp ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveExp(p, 10); //gives player p 10 exp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving money ===&lt;br /&gt;
The first thing to decide is which money type to give. This is mainly used for tracking purposes. If in doubt, choose '''MONEY_TYPE_EVENT'''.&lt;br /&gt;
&lt;br /&gt;
*'''MONEY_TYPE_GIVE''' is for money moving from one player to another.&lt;br /&gt;
*'''MONEY_TYPE_GRANT''' is for money coming from a grant command&lt;br /&gt;
*'''MONEY_TYPE_BUYSELL''' is for ?buying and ?selling.&lt;br /&gt;
*'''MONEY_TYPE_KILL''' is for money gained from kills.&lt;br /&gt;
*'''MONEY_TYPE_FLAG''' is for money earned from winning flag games or other flag rewards.&lt;br /&gt;
*'''MONEY_TYPE_BALL''' is for money received from goals.&lt;br /&gt;
*'''MONEY_TYPE_EVENT''' is for subarena events.&lt;br /&gt;
&lt;br /&gt;
Then you can simply call:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveMoney(p, 1000, MONEY_TYPE_EVENT); //gives player p $1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using Items ==&lt;br /&gt;
&lt;br /&gt;
Items are the most important part of Hyperspace after money and exp. There are two parts of items that addon modules will use. These are checking for properties and calling events.&lt;br /&gt;
&lt;br /&gt;
Here is a copy of ''hscore_item.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_ITEMS_H&lt;br /&gt;
#define HSCORE_ITEMS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_ITEMS &amp;quot;hscore_items-3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoreitems&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*getItemCount)(Player *p, Item *item, int ship);&lt;br /&gt;
	void (*addItem)(Player *p, Item *item, int ship, int amount);&lt;br /&gt;
&lt;br /&gt;
	Item * (*getItemByName)(const char *name, Arena *arena);&lt;br /&gt;
&lt;br /&gt;
	int (*getPropertySum)(Player *p, int ship, const char *prop); //properties ARE case sensitive&lt;br /&gt;
&lt;br /&gt;
	void (*triggerEvent)(Player *p, int ship, const char *event);&lt;br /&gt;
	void (*triggerEventOnItem)(Player *p, Item *item, int ship, const char *event);&lt;br /&gt;
&lt;br /&gt;
	int (*getFreeItemTypeSpots)(Player *p, ItemType *type, int ship);&lt;br /&gt;
&lt;br /&gt;
	//more required, i'm sure&lt;br /&gt;
} Ihscoreitems;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_ITEMS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Item properties ===&lt;br /&gt;
&lt;br /&gt;
Most items define properties that are used to change the player's ship. Properties are totalled for each ship and are checked per ship rather than per item. Most properties are related to the spawning module. However, any item can define custom properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;getPropertySum(p, p-&amp;gt;p_ship, &amp;quot;someproperty&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Item events ===&lt;br /&gt;
&lt;br /&gt;
Items define actions that happen on certain events. Any module can trigger an event. Some modules, for example, have actions on the ''death'' event. Triggering an event is as simple as making a function call to the '''hscore_item''' module. If no items have actions on the called event, nothing will happen (so make sure you don't typo the event name).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;triggerEvent(p, p-&amp;gt;p_ship, &amp;quot;someevent&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;br /&gt;
&lt;br /&gt;
Once your module is working properly and seems to have no bugs, then you can submit the source to Dr Brain or MichaelG for a source check. Once that's completed, the module will be compiled for the Hyperspace server and installed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=293</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=293"/>
				<updated>2005-01-11T16:59:13Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added all the content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am editing. This may take a while. -- Dr Brain&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The first thing you should do is check with Dr Brain to make sure someone else isn't already making a similar module. The best way to contact him is either in game (PM/?message) or via AIM/ICQ (check the Hyperspace news file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Info ==&lt;br /&gt;
&lt;br /&gt;
In general, hard coding values is frowned upon. Please try to use the arena and global configs wherever possible. Put a sensable default into the '''GetInt''' so that not every config entry needs to be present for the module to work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
Because of module naming conflicts, all official Hyperspace related modules are prefixed with hs_. So, for example, a kill spree module becomes hs_spree. This is not required for module submissions. You are free to name your module whatever you wish.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
There is a Hyperspace standard style for formatting code, but it is completely optional. You should make your interface headers easy to read, though.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Hyperspace official style:&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HS_TWOWORDS_H&lt;br /&gt;
#define HS_TWOWORDS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HS_TWOWORDS &amp;quot;hs_twowords-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihstwowords&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*interfaceFunction)(Player *p);&lt;br /&gt;
} Ihstwowords;&lt;br /&gt;
&lt;br /&gt;
#endif //HS_TWOWORDS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''hs_twowords.c'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt; //optional. others added as needed&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hs_twowords.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iconfig *cfg;&lt;br /&gt;
local Icmdman *cmd;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int interfaceFunction(Player *p);&lt;br /&gt;
&lt;br /&gt;
local helptext_t twoWordsHelp =&lt;br /&gt;
&amp;quot;Targets: player\n&amp;quot;&lt;br /&gt;
&amp;quot;Args: none\n&amp;quot;&lt;br /&gt;
&amp;quot;Who knows? This is just a template file.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
local void twoWordsCommand(const char *command, const char *params, Player *p, const Target *target)&lt;br /&gt;
{&lt;br /&gt;
	if (target-&amp;gt;type == T_PLAYER) //private command&lt;br /&gt;
	{&lt;br /&gt;
		Player *t = target-&amp;gt;u.p;&lt;br /&gt;
&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
	else //not private&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p, &amp;quot;You must target a player.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int interfaceFunction(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	if (something) //space between if and ()&lt;br /&gt;
	{&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihstwowords interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HS_TWOWORDS, &amp;quot;hs_twowords&amp;quot;)&lt;br /&gt;
	interfaceFunction&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hs_twowords(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		cfg = mm-&amp;gt;GetInterface(I_CONFIG, ALLARENAS);&lt;br /&gt;
		cmd = mm-&amp;gt;GetInterface(I_CMDMAN, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !cfg || !cmd || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;AddCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS, twoWordsHelp);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;RemoveCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Money and Experience ==&lt;br /&gt;
&lt;br /&gt;
Money and experience points (aka exp) are what make the Hyperspace world go 'round. Nearly every Hyperspace module has some dealings with money/exp transactions of some kind.&lt;br /&gt;
&lt;br /&gt;
Here is the '''hscore_money.h''' contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_MONEY_H&lt;br /&gt;
#define HSCORE_MONEY_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_MONEY &amp;quot;hscore_money-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef enum MoneyType&lt;br /&gt;
{&lt;br /&gt;
	//for /?give&lt;br /&gt;
	MONEY_TYPE_GIVE = 0,&lt;br /&gt;
&lt;br /&gt;
	//for /?grant&lt;br /&gt;
	MONEY_TYPE_GRANT,&lt;br /&gt;
&lt;br /&gt;
	//for ?buy and ?sell&lt;br /&gt;
	MONEY_TYPE_BUYSELL,&lt;br /&gt;
&lt;br /&gt;
	//for money from kills&lt;br /&gt;
	MONEY_TYPE_KILL,&lt;br /&gt;
&lt;br /&gt;
	//for money from flag games&lt;br /&gt;
	MONEY_TYPE_FLAG,&lt;br /&gt;
&lt;br /&gt;
	//for money from soccer games&lt;br /&gt;
	MONEY_TYPE_BALL,&lt;br /&gt;
&lt;br /&gt;
	//for money from module driven events&lt;br /&gt;
	MONEY_TYPE_EVENT&lt;br /&gt;
} MoneyType;&lt;br /&gt;
&lt;br /&gt;
#define MONEY_TYPE_COUNT 7&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoremoney&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	void (*giveMoney)(Player *p, int amount, MoneyType type);&lt;br /&gt;
	void (*setMoney)(Player *p, int amount, MoneyType type); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getMoney)(Player *p);&lt;br /&gt;
	int (*getMoneyType)(Player *p, MoneyType type); //used only for /?money -d&lt;br /&gt;
&lt;br /&gt;
	void (*giveExp)(Player *p, int amount);&lt;br /&gt;
	void (*setExp)(Player *p, int amount); //beware. know what you're doing&lt;br /&gt;
&lt;br /&gt;
	int (*getExp)(Player *p);&lt;br /&gt;
} Ihscoremoney;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_MONEY_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving exp ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveExp(p, 10); //gives player p 10 exp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Giving money ===&lt;br /&gt;
The first thing to decide is which money type to give. This is mainly used for tracking purposes. If in doubt, choose '''MONEY_TYPE_EVENT'''.&lt;br /&gt;
&lt;br /&gt;
*'''MONEY_TYPE_GIVE''' is for money moving from one player to another.&lt;br /&gt;
*'''MONEY_TYPE_GRANT''' is for money coming from a grant command&lt;br /&gt;
*'''MONEY_TYPE_BUYSELL''' is for ?buying and ?selling.&lt;br /&gt;
*'''MONEY_TYPE_KILL''' is for money gained from kills.&lt;br /&gt;
*'''MONEY_TYPE_FLAG''' is for money earned from winning flag games or other flag rewards.&lt;br /&gt;
*'''MONEY_TYPE_BALL''' is for money received from goals.&lt;br /&gt;
*'''MONEY_TYPE_EVENT''' is for subarena events.&lt;br /&gt;
&lt;br /&gt;
Then you can simply call:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
money-&amp;gt;giveMoney(p, 1000, MONEY_TYPE_EVENT); //gives player p $1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using Items ==&lt;br /&gt;
&lt;br /&gt;
Items are the most important part of Hyperspace after money and exp. There are two parts of items that addon modules will use. These are checking for properties and calling events.&lt;br /&gt;
&lt;br /&gt;
Here is a copy of ''hscore_item.h'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HSCORE_ITEMS_H&lt;br /&gt;
#define HSCORE_ITEMS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HSCORE_ITEMS &amp;quot;hscore_items-3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihscoreitems&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*getItemCount)(Player *p, Item *item, int ship);&lt;br /&gt;
	void (*addItem)(Player *p, Item *item, int ship, int amount);&lt;br /&gt;
&lt;br /&gt;
	Item * (*getItemByName)(const char *name, Arena *arena);&lt;br /&gt;
&lt;br /&gt;
	int (*getPropertySum)(Player *p, int ship, const char *prop); //properties ARE case sensitive&lt;br /&gt;
&lt;br /&gt;
	void (*triggerEvent)(Player *p, int ship, const char *event);&lt;br /&gt;
	void (*triggerEventOnItem)(Player *p, Item *item, int ship, const char *event);&lt;br /&gt;
&lt;br /&gt;
	int (*getFreeItemTypeSpots)(Player *p, ItemType *type, int ship);&lt;br /&gt;
&lt;br /&gt;
	//more required, i'm sure&lt;br /&gt;
} Ihscoreitems;&lt;br /&gt;
&lt;br /&gt;
#endif //HSCORE_ITEMS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Item properties ===&lt;br /&gt;
&lt;br /&gt;
Most items define properties that are used to change the player's ship. Properties are totalled for each ship and are checked per ship rather than per item. Most properties are related to the spawning module. However, any item can define custom properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;getPropertySum(p, p-&amp;gt;p_ship, &amp;quot;someproperty&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Item events ===&lt;br /&gt;
&lt;br /&gt;
Items define actions that happen on certain events. Any module can trigger an event. Some modules, for example, have actions on the ''death'' event. Triggering an event is as simple as making a function call to the '''hscore_item''' module. If no items have actions on the called event, nothing will happen (so make sure you don't typo the event name).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
item-&amp;gt;triggerEvent(p, p-&amp;gt;p_ship, &amp;quot;someevent&amp;quot;); //Beware of spectators.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;br /&gt;
&lt;br /&gt;
Once your module is working properly and seems to have no bugs, then you can submit the source to Dr Brain or MichaelG for a source check. Once that's completed, the module will be compiled for the Hyperspace server and installed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=291</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=291"/>
				<updated>2005-01-11T16:01:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: /* Style */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am editing. This may take a while. -- Dr Brain&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The first thing you should do is check with Dr Brain to make sure someone else isn't already making a similar module. The best way to contact him is either in game (PM/?message) or via AIM/ICQ (check the Hyperspace news file).&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
Because of module naming conflicts, all official Hyperspace related modules are prefixed with hs_. So, for example, a kill spree module becomes hs_spree. This is not required for module submissions. You are free to name your module whatever you wish.&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
There is a Hyperspace standard style for formatting code, but it is completely optional. You should make your interface headers easy to read, though.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Hyperspace official style:&lt;br /&gt;
&lt;br /&gt;
hs_twowords.h:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HS_TWOWORDS_H&lt;br /&gt;
#define HS_TWOWORDS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HS_TWOWORDS &amp;quot;hs_twowords-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihstwowords&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*interfaceFunction)(Player *p);&lt;br /&gt;
} Ihstwowords;&lt;br /&gt;
&lt;br /&gt;
#endif //HS_TWOWORDS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
hs_twowords.c:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt; //optional. others added as needed&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hs_twowords.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iconfig *cfg;&lt;br /&gt;
local Icmdman *cmd;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int interfaceFunction(Player *p);&lt;br /&gt;
&lt;br /&gt;
local helptext_t twoWordsHelp =&lt;br /&gt;
&amp;quot;Targets: player\n&amp;quot;&lt;br /&gt;
&amp;quot;Args: none\n&amp;quot;&lt;br /&gt;
&amp;quot;Who knows? This is just a template file.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
local void twoWordsCommand(const char *command, const char *params, Player *p, const Target *target)&lt;br /&gt;
{&lt;br /&gt;
	if (target-&amp;gt;type == T_PLAYER) //private command&lt;br /&gt;
	{&lt;br /&gt;
		Player *t = target-&amp;gt;u.p;&lt;br /&gt;
&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
	else //not private&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p, &amp;quot;You must target a player.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int interfaceFunction(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	if (something) //space between if and ()&lt;br /&gt;
	{&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihstwowords interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HS_TWOWORDS, &amp;quot;hs_twowords&amp;quot;)&lt;br /&gt;
	interfaceFunction&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hs_twowords(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		cfg = mm-&amp;gt;GetInterface(I_CONFIG, ALLARENAS);&lt;br /&gt;
		cmd = mm-&amp;gt;GetInterface(I_CMDMAN, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !cfg || !cmd || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;AddCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS, twoWordsHelp);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;RemoveCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Money and Experience ==&lt;br /&gt;
&lt;br /&gt;
Money and experience points (aka exp) are what make the Hyperspace world go 'round. Nearly every Hyperspace module has some dealings with money/exp transactions of some kind.&lt;br /&gt;
&lt;br /&gt;
-Fill in how to use money-&lt;br /&gt;
&lt;br /&gt;
== Items &amp;amp; Properties ==&lt;br /&gt;
&lt;br /&gt;
-Add more-&lt;br /&gt;
&lt;br /&gt;
== Item events ==&lt;br /&gt;
&lt;br /&gt;
Items define actions that happen on certain events. Any module can trigger an event. Some modules, for example, have actions on the ''death'' event. Triggering an event is as simple as making a function call to the '''hscore_item''' module.&lt;br /&gt;
&lt;br /&gt;
-Add more-&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;br /&gt;
&lt;br /&gt;
-Add more-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=271</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=271"/>
				<updated>2005-01-11T15:58:42Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: /* Item events */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am editing. This may take a while. -- Dr Brain&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The first thing you should do is check with Dr Brain to make sure someone else isn't already making a similar module. The best way to contact him is either in game (PM/?message) or via AIM/ICQ (check the Hyperspace news file).&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
Because of module naming conflicts, all official Hyperspace related modules are prefixed with hs_. So, for example, a kill spree module becomes hs_spree. This is not required for module submissions. You are free to name your module whatever you wish.&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
There is a Hyperspace standard style for formatting code, but it is completely optional. You should make your interface headers easy to read, though.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
hs_twowords.h:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HS_TWOWORDS_H&lt;br /&gt;
#define HS_TWOWORDS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HS_TWOWORDS &amp;quot;hs_twowords-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihstwowords&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*interfaceFunction)(Player *p);&lt;br /&gt;
} Ihstwowords;&lt;br /&gt;
&lt;br /&gt;
#endif //HS_TWOWORDS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
hs_twowords.c:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt; //optional. others added as needed&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hs_twowords.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iconfig *cfg;&lt;br /&gt;
local Icmdman *cmd;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int interfaceFunction(Player *p);&lt;br /&gt;
&lt;br /&gt;
local helptext_t twoWordsHelp =&lt;br /&gt;
&amp;quot;Targets: player\n&amp;quot;&lt;br /&gt;
&amp;quot;Args: none\n&amp;quot;&lt;br /&gt;
&amp;quot;Who knows? This is just a template file.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
local void twoWordsCommand(const char *command, const char *params, Player *p, const Target *target)&lt;br /&gt;
{&lt;br /&gt;
	if (target-&amp;gt;type == T_PLAYER) //private command&lt;br /&gt;
	{&lt;br /&gt;
		Player *t = target-&amp;gt;u.p;&lt;br /&gt;
&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
	else //not private&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p, &amp;quot;You must target a player.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int interfaceFunction(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	if (something) //space between if and ()&lt;br /&gt;
	{&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihstwowords interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HS_TWOWORDS, &amp;quot;hs_twowords&amp;quot;)&lt;br /&gt;
	interfaceFunction&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hs_twowords(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		cfg = mm-&amp;gt;GetInterface(I_CONFIG, ALLARENAS);&lt;br /&gt;
		cmd = mm-&amp;gt;GetInterface(I_CMDMAN, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !cfg || !cmd || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;AddCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS, twoWordsHelp);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;RemoveCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Money and Experience ==&lt;br /&gt;
&lt;br /&gt;
Money and experience points (aka exp) are what make the Hyperspace world go 'round. Nearly every Hyperspace module has some dealings with money/exp transactions of some kind.&lt;br /&gt;
&lt;br /&gt;
-Fill in how to use money-&lt;br /&gt;
&lt;br /&gt;
== Items &amp;amp; Properties ==&lt;br /&gt;
&lt;br /&gt;
-Add more-&lt;br /&gt;
&lt;br /&gt;
== Item events ==&lt;br /&gt;
&lt;br /&gt;
Items define actions that happen on certain events. Any module can trigger an event. Some modules, for example, have actions on the ''death'' event. Triggering an event is as simple as making a function call to the '''hscore_item''' module.&lt;br /&gt;
&lt;br /&gt;
-Add more-&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;br /&gt;
&lt;br /&gt;
-Add more-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=267</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=267"/>
				<updated>2005-01-11T15:58:19Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added some content. Still more to go.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am editing. This may take a while. -- Dr Brain&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The first thing you should do is check with Dr Brain to make sure someone else isn't already making a similar module. The best way to contact him is either in game (PM/?message) or via AIM/ICQ (check the Hyperspace news file).&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
Because of module naming conflicts, all official Hyperspace related modules are prefixed with hs_. So, for example, a kill spree module becomes hs_spree. This is not required for module submissions. You are free to name your module whatever you wish.&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
There is a Hyperspace standard style for formatting code, but it is completely optional. You should make your interface headers easy to read, though.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
hs_twowords.h:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef HS_TWOWORDS_H&lt;br /&gt;
#define HS_TWOWORDS_H&lt;br /&gt;
&lt;br /&gt;
#define I_HS_TWOWORDS &amp;quot;hs_twowords-1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
typedef struct Ihstwowords&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_DECL&lt;br /&gt;
&lt;br /&gt;
	int (*interfaceFunction)(Player *p);&lt;br /&gt;
} Ihstwowords;&lt;br /&gt;
&lt;br /&gt;
#endif //HS_TWOWORDS_H&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
hs_twowords.c:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt; //optional. others added as needed&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hscore.h&amp;quot;&lt;br /&gt;
#include &amp;quot;hs_twowords.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//modules&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ilogman *lm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
local Iconfig *cfg;&lt;br /&gt;
local Icmdman *cmd;&lt;br /&gt;
local Iplayerdata *pd;&lt;br /&gt;
&lt;br /&gt;
//interface prototypes&lt;br /&gt;
local int interfaceFunction(Player *p);&lt;br /&gt;
&lt;br /&gt;
local helptext_t twoWordsHelp =&lt;br /&gt;
&amp;quot;Targets: player\n&amp;quot;&lt;br /&gt;
&amp;quot;Args: none\n&amp;quot;&lt;br /&gt;
&amp;quot;Who knows? This is just a template file.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
local void twoWordsCommand(const char *command, const char *params, Player *p, const Target *target)&lt;br /&gt;
{&lt;br /&gt;
	if (target-&amp;gt;type == T_PLAYER) //private command&lt;br /&gt;
	{&lt;br /&gt;
		Player *t = target-&amp;gt;u.p;&lt;br /&gt;
&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
	else //not private&lt;br /&gt;
	{&lt;br /&gt;
		chat-&amp;gt;SendMessage(p, &amp;quot;You must target a player.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local int interfaceFunction(Player *p)&lt;br /&gt;
{&lt;br /&gt;
	if (something) //space between if and ()&lt;br /&gt;
	{&lt;br /&gt;
		//do something&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Ihstwowords interface =&lt;br /&gt;
{&lt;br /&gt;
	INTERFACE_HEAD_INIT(I_HS_TWOWORDS, &amp;quot;hs_twowords&amp;quot;)&lt;br /&gt;
	interfaceFunction&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
EXPORT int MM_hs_twowords(int action, Imodman *_mm, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = _mm;&lt;br /&gt;
&lt;br /&gt;
		lm = mm-&amp;gt;GetInterface(I_LOGMAN, ALLARENAS);&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT, ALLARENAS);&lt;br /&gt;
		cfg = mm-&amp;gt;GetInterface(I_CONFIG, ALLARENAS);&lt;br /&gt;
		cmd = mm-&amp;gt;GetInterface(I_CMDMAN, ALLARENAS);&lt;br /&gt;
		pd = mm-&amp;gt;GetInterface(I_PLAYERDATA, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!lm || !chat || !cfg || !cmd || !pd)&lt;br /&gt;
		{&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
			mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;RegInterface(&amp;amp;interface, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;AddCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS, twoWordsHelp);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{&lt;br /&gt;
		if (mm-&amp;gt;UnregInterface(&amp;amp;interface, ALLARENAS))&lt;br /&gt;
		{&lt;br /&gt;
			return MM_FAIL;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		cmd-&amp;gt;RemoveCommand(&amp;quot;twowords&amp;quot;, twoWordsCommand, ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(lm);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cfg);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(cmd);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(pd);&lt;br /&gt;
&lt;br /&gt;
		return MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	return MM_FAIL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Money and Experience ==&lt;br /&gt;
&lt;br /&gt;
Money and experience points (aka exp) are what make the Hyperspace world go 'round. Nearly every Hyperspace module has some dealings with money/exp transactions of some kind.&lt;br /&gt;
&lt;br /&gt;
-Fill in how to use money-&lt;br /&gt;
&lt;br /&gt;
== Items &amp;amp; Properties ==&lt;br /&gt;
&lt;br /&gt;
-Add more-&lt;br /&gt;
&lt;br /&gt;
== Item events ==&lt;br /&gt;
&lt;br /&gt;
Items define actions that happen on certain events. Any module can trigger an event. Some modules, for example, have actions on the ''death'' event. Triggering an event is as simple as making a function call to the '''item''' module.&lt;br /&gt;
&lt;br /&gt;
-Add more-&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;br /&gt;
&lt;br /&gt;
-Add more-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Using_Custom_Modules&amp;diff=277</id>
		<title>Using Custom Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Using_Custom_Modules&amp;diff=277"/>
				<updated>2005-01-11T15:35:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Are people avoiding this page because you don't know what to put here? Is it going to be list of all publicly available custom modules and their documentation? --Smong&lt;br /&gt;
&lt;br /&gt;
Yes. That was my impression. Module writers should make a link to a new page for thier module's setup/config/docs. --Dr Brain&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
To use a custom module you first need to install it, see [[Installing New Modules]].&lt;br /&gt;
&lt;br /&gt;
Then you need to read the documentation that came with it so you know the settings and commands it uses.&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=247</id>
		<title>Writing Modules for Hyperspace</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_for_Hyperspace&amp;diff=247"/>
				<updated>2005-01-11T14:01:16Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added basic layout&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am editing. This may take a while. -- Dr Brain&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
== Style ==&lt;br /&gt;
&lt;br /&gt;
== Money ==&lt;br /&gt;
&lt;br /&gt;
== Items &amp;amp; Properties ==&lt;br /&gt;
&lt;br /&gt;
== Submission ==&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules&amp;diff=640</id>
		<title>Writing Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules&amp;diff=640"/>
				<updated>2005-01-11T13:59:54Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Added writing modules for hyperspace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ASSS modules can be written in either C or Python. &lt;br /&gt;
&lt;br /&gt;
C modules are best suited for large, complex modules that need direct access to the core features of ASSS.&lt;br /&gt;
&lt;br /&gt;
The preferred language for simple modules is Python, because a poorly written module will not crash the entire server (Python is a safe language), while this is not the case for modules written in C.&lt;br /&gt;
&lt;br /&gt;
*[[Writing Modules In C]]&lt;br /&gt;
*[[Writing Modules In Python]]&lt;br /&gt;
*[[Writing Modules for Hyperspace]] - Should this go somewhere else?&lt;br /&gt;
&lt;br /&gt;
See also: [[Module Creation FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Module]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules_In_C&amp;diff=30</id>
		<title>Writing Modules In C</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules_In_C&amp;diff=30"/>
				<updated>2005-01-10T23:31:19Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: /* Using Interfaces */  Changed mapdata to game, as that's what it is.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm editing this page right now... please don't change it till i'm done. I'll remove this when I finish. -Bak&lt;br /&gt;
&lt;br /&gt;
The easiest way to write a module in C is to work off a template, as certain parts of all modules are identical. Here is a template that does nothing more than connect with the server:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Template Module ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Template Module&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;asss.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Interfaces&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
&lt;br /&gt;
// The entry point:&lt;br /&gt;
EXPORT int MM_template(int action, Imodman *mm_, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	int rv = MM_FAIL; // return value&lt;br /&gt;
&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = mm_;&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{	&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_ATTACH)&lt;br /&gt;
	{		&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_DETACH)&lt;br /&gt;
	{&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return rv;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This modules loading function is called MM_template, and it is to be saved int template.c. This will make our module name be template when we are interested in loading it into a server. This is a good place to make sure that your module compiles, and that it loads into a server.&lt;br /&gt;
&lt;br /&gt;
== Using Interfaces ==&lt;br /&gt;
Interfaces are your way of interacting with what happens in the game. Want to send a chat message to a player? You need an chat interface. Want to warp a player to (512,512)? You need a game interface. Want to toggle a lvz object? You get the idea...&lt;br /&gt;
&lt;br /&gt;
The first thing you need to do is add your interface as a global like variable (We already have one interface, the module manager). Let's make a chat interface, so we can send chat text for the rest of this tutorial. Let's add our interface definition in our interfaces section:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Interfaces&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
local Ichat *chat;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we have a place to store the interface, let's get the interface. This is done when our function is loading, in the MM_template function. Here's the new MM_template function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// The entry point:&lt;br /&gt;
EXPORT int MM_template(int action, Imodman *mm_, Arena *arena)&lt;br /&gt;
{&lt;br /&gt;
	int rv = MM_FAIL; // return value&lt;br /&gt;
&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = mm_;&lt;br /&gt;
&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT,ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!chat) // check interfaces&lt;br /&gt;
			rv = MM_FAIL;&lt;br /&gt;
		else&lt;br /&gt;
			rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{	&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_ATTACH)&lt;br /&gt;
	{		&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_DETACH)&lt;br /&gt;
	{&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return rv;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here you can see use getting the interface from the module manager, checking if we actually got it (some servers chose to omit certain modules, so you could actually make a server without chat). You must also release the interface when the module unloads. If your module prevents the server from loading, chances are an interface it is using isn't loaded.&lt;br /&gt;
&lt;br /&gt;
You can see exactly what each interface does, and what functions are available by each interface by viewing the appropriate header file. In chat.h we see the defintion for Ichat, which includes a function pointer to a function we'll use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
// Send a green arena message to a player.&lt;br /&gt;
void (*SendMessage)(Player *p, const char *format, ...)&lt;br /&gt;
	ATTR_FORMAT(printf, 2, 3);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Okay, so where do we send this message? We can't really put it anywhere, since the only place our code has control is when the module is loading or unloading. We want to be able to do something like send the player a message whenever they change ships, or enter an [[ASSS Region]]. For something like this we need a callback.&lt;br /&gt;
&lt;br /&gt;
== Listening For Callbacks ==&lt;br /&gt;
Callbacks are your way of listening for events. These include, a player entering an arena, changing ship, entering / exiting an [[ASSS Region]]. We'll handle a simple one, players changing ships. Whenever a player changes their ship we will message them that they changed ships (using our Ichat interface). Each callback has a callback function, which will be called when an event occurs. We pass a pointer to this function when we declare our callback. Here's the new code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Interfaces&lt;br /&gt;
local Imodman *mm;&lt;br /&gt;
&lt;br /&gt;
// Functions&lt;br /&gt;
local void ShipChange(Player *p,int ship, int newfreq)&lt;br /&gt;
{&lt;br /&gt;
	chat-&amp;gt;SendMessage(p,&amp;quot;You have changed ships.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// The entry point:&amp;lt;br&amp;gt;&lt;br /&gt;
EXPORT int MM_template(int action, Imodman *mm_, Arena *arena)&amp;lt;br&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	int rv = MM_FAIL; // return value&lt;br /&gt;
&lt;br /&gt;
	if (action == MM_LOAD)&lt;br /&gt;
	{&lt;br /&gt;
		mm = mm_;&lt;br /&gt;
&lt;br /&gt;
		chat = mm-&amp;gt;GetInterface(I_CHAT,ALLARENAS);&lt;br /&gt;
&lt;br /&gt;
		if (!chat) // check interfaces&lt;br /&gt;
			rv = MM_FAIL;&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			m-&amp;gt;RegCallback(CB_SHIPCHANGE, ShipChange, ALLARENAS);&lt;br /&gt;
			rv = MM_OK;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_UNLOAD)&lt;br /&gt;
	{	&lt;br /&gt;
		mm-&amp;gt;UnregCallback(CB_SHIPCHANGE, ShipChange, ALLARENAS);&lt;br /&gt;
		mm-&amp;gt;ReleaseInterface(chat);&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_ATTACH)&lt;br /&gt;
	{		&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
	else if (action == MM_DETACH)&lt;br /&gt;
	{&lt;br /&gt;
		rv = MM_OK;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return rv;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the function definition for your callback, you only have to look in the appropriate header file.&lt;br /&gt;
&lt;br /&gt;
== Iterating Through Every Player / Every Arena ==&lt;br /&gt;
&lt;br /&gt;
== Declaring Arena / Player Data ==&lt;br /&gt;
&lt;br /&gt;
== Adding Timers ==&lt;br /&gt;
&lt;br /&gt;
== Adding Commands ==&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Module_Creation_FAQ&amp;diff=33</id>
		<title>Module Creation FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Module_Creation_FAQ&amp;diff=33"/>
				<updated>2005-01-10T23:24:39Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: removed editing 'lock'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What module and function do I use to send messages to players? ==&lt;br /&gt;
&lt;br /&gt;
The chat interface, '''Ichat''', is defined in ''chat.h'' and is used to send messages of all kinds.&lt;br /&gt;
&lt;br /&gt;
Most of the chat interface functions use printf like syntax in their strings.&lt;br /&gt;
&lt;br /&gt;
NOTE: You must get the '''I_CHAT''' interface from the ASSS Module Manager before using it, just like you must on every other interface.&lt;br /&gt;
&lt;br /&gt;
To send a green message to a single player, you should use code similar to one of the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chat-&amp;gt;SendMessage(p, &amp;quot;This is a message&amp;quot;);&lt;br /&gt;
chat-&amp;gt;SendMessage(p, &amp;quot;This is a message that displays an int. %i&amp;quot;, someInt);&lt;br /&gt;
chat-&amp;gt;SendMessage(p, &amp;quot;This is a message that displays a char array. %s&amp;quot;, charArray);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To send a message to an entire arena, one should use code similar to one of the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chat-&amp;gt;SendArenaMessage(p, &amp;quot;This is an arena-wide message&amp;quot;);&lt;br /&gt;
chat-&amp;gt;SendArenaMessage(p, &amp;quot;This is an arena-wide message that displays an int. %i&amp;quot;, someInt);&lt;br /&gt;
chat-&amp;gt;SendArenaMessage(p, &amp;quot;This is an arena-wide message that displays a char array. %s&amp;quot;, charArray);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I log events? ==&lt;br /&gt;
&lt;br /&gt;
The log manager's interface, '''Ilogman''', is defined in ''logman.h'' and aids in debugging and notifying zone staff of unusual activity.&lt;br /&gt;
&lt;br /&gt;
There are three log functions that are defined. '''Log''', '''LogP''' and '''LogA'''. All three have printf like syntaxes (just like the chat interfaces's functions) for easy addition of variable values to add in debugging.&lt;br /&gt;
&lt;br /&gt;
There are five log levels that can be used when calling a log function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_DRIVEL''' is for meaningless log entries. Things that no sysop will ever care about. Use this level for printing out statements to help in debugging.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_INFO''' is for things that people might care about.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_MALICIOUS''' is for events that shouldn't happen unless someone is trying to hack/cheat. This is sent to online sysops as soon as it is logged (under default settings).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_WARN''' is for things that probably shouldn't happen, but don't make a big difference.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_ERROR''' is for events that are really bad. It is sent to online sysops as soon as it is logged (under default settings).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''LogP''' is the most commonly used logging function. It should be used when you have access to a player pointer and the event relates to that player's actions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm-&amp;gt;LogP(L_DRIVEL, &amp;quot;my_module_name&amp;quot;, p, &amp;quot;A log message attached to Player *p&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LogA''' is attached to an arena rather than a player. This should be used whenever an event happens inside an arena but is tied to no specific player.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm-&amp;gt;LogA(L_DRIVEL, &amp;quot;my_module_name&amp;quot;, arena, &amp;quot;A log message attached to Arena *arena&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Log''' is attached to neither an arena nor a player.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm-&amp;gt;Log(L_DRIVEL, &amp;quot;&amp;lt;my_module_name&amp;gt; A log message&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I warp a player somewhere? ==&lt;br /&gt;
&lt;br /&gt;
The game interface, '''Igame''' defines the function '''WarpTo''' that takes a player, an x tile and a y tile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
game-&amp;gt;WarpTo(p, 512, 512); //will warp a player to the center of the map&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I give a player prizes? ==&lt;br /&gt;
&lt;br /&gt;
The game interface, '''Igame''' defines the function '''GivePrize''' that takes a '''Target''', a prize type and a prize count.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Target t;&lt;br /&gt;
t.type = T_PLAYER;&lt;br /&gt;
t.u.p = p;&lt;br /&gt;
&lt;br /&gt;
game-&amp;gt;GivePrize(t, 21, 5); //give Player p 5 repels (prize #21)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I set a player's ship? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I set a player's freq? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I check when a player has entered a region? ==&lt;br /&gt;
&lt;br /&gt;
[[ASSS Regions]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Module_Creation_FAQ&amp;diff=28</id>
		<title>Module Creation FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Module_Creation_FAQ&amp;diff=28"/>
				<updated>2005-01-10T23:17:05Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm still typing (as of 5:57 PM EST 01-10-05). I will remove this message when finished.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What module and function do I use to send messages to players? ==&lt;br /&gt;
&lt;br /&gt;
The chat interface, '''Ichat''', is defined in ''chat.h'' and is used to send messages of all kinds.&lt;br /&gt;
&lt;br /&gt;
Most of the chat interface functions use printf like syntax in their strings.&lt;br /&gt;
&lt;br /&gt;
NOTE: You must get the '''I_CHAT''' interface from the ASSS Module Manager before using it, just like you must on every other interface.&lt;br /&gt;
&lt;br /&gt;
To send a green message to a single player, you should use code similar to one of the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chat-&amp;gt;SendMessage(p, &amp;quot;This is a message&amp;quot;);&lt;br /&gt;
chat-&amp;gt;SendMessage(p, &amp;quot;This is a message that displays an int. %i&amp;quot;, someInt);&lt;br /&gt;
chat-&amp;gt;SendMessage(p, &amp;quot;This is a message that displays a char array. %s&amp;quot;, charArray);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To send a message to an entire arena, one should use code similar to one of the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chat-&amp;gt;SendArenaMessage(p, &amp;quot;This is an arena-wide message&amp;quot;);&lt;br /&gt;
chat-&amp;gt;SendArenaMessage(p, &amp;quot;This is an arena-wide message that displays an int. %i&amp;quot;, someInt);&lt;br /&gt;
chat-&amp;gt;SendArenaMessage(p, &amp;quot;This is an arena-wide message that displays a char array. %s&amp;quot;, charArray);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I log events? ==&lt;br /&gt;
&lt;br /&gt;
The log manager's interface, '''Ilogman''', is defined in ''logman.h'' and aids in debugging and notifying zone staff of unusual activity.&lt;br /&gt;
&lt;br /&gt;
There are three log functions that are defined. '''Log''', '''LogP''' and '''LogA'''. All three have printf like syntaxes (just like the chat interfaces's functions) for easy addition of variable values to add in debugging.&lt;br /&gt;
&lt;br /&gt;
There are five log levels that can be used when calling a log function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_DRIVEL''' is for meaningless log entries. Things that no sysop will ever care about. Use this level for printing out statements to help in debugging.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_INFO''' is for things that people might care about.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_MALICIOUS''' is for events that shouldn't happen unless someone is trying to hack/cheat. This is sent to online sysops as soon as it is logged (under default settings).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_WARN''' is for things that probably shouldn't happen, but don't make a big difference.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''L_ERROR''' is for events that are really bad. It is sent to online sysops as soon as it is logged (under default settings).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''LogP''' is the most commonly used logging function. It should be used when you have access to a player pointer and the event relates to that player's actions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm-&amp;gt;LogP(L_DRIVEL, &amp;quot;my_module_name&amp;quot;, p, &amp;quot;A log message attached to Player *p&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LogA''' is attached to an arena rather than a player. This should be used whenever an event happens inside an arena but is tied to no specific player.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm-&amp;gt;LogA(L_DRIVEL, &amp;quot;my_module_name&amp;quot;, arena, &amp;quot;A log message attached to Arena *arena&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Log''' is attached to neither an arena nor a player.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm-&amp;gt;Log(L_DRIVEL, &amp;quot;&amp;lt;my_module_name&amp;gt; A log message&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I warp a player somewhere? ==&lt;br /&gt;
&lt;br /&gt;
The game interface, '''Igame''' defines the function '''WarpTo''' that takes a player, an x tile and a y tile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
game-&amp;gt;WarpTo(p, 512, 512); //will warp a player to the center of the map&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I give a player prizes? ==&lt;br /&gt;
&lt;br /&gt;
The game interface, '''Igame''' defines the function '''GivePrize''' that takes a '''Target''', a prize type and a prize count.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Target t;&lt;br /&gt;
t.type = T_PLAYER;&lt;br /&gt;
t.u.p = p;&lt;br /&gt;
&lt;br /&gt;
game-&amp;gt;GivePrize(t, 21, 5); //give Player p 5 repels (prize #21)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I set a player's ship? ==&lt;br /&gt;
&lt;br /&gt;
== How do I set a player's freq? ==&lt;br /&gt;
&lt;br /&gt;
== How do I check when a player has entered a region? ==&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Module_Creation_FAQ&amp;diff=27</id>
		<title>Module Creation FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Module_Creation_FAQ&amp;diff=27"/>
				<updated>2005-01-10T22:56:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: Initial Creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What module and function do I use to send messages to players? ==&lt;br /&gt;
&lt;br /&gt;
The chat interface, '''Ichat''', is defined in ''chat.h'' and is used to send messages of all kinds.&lt;br /&gt;
&lt;br /&gt;
Most of the chat interface functions use printf like syntax in their strings.&lt;br /&gt;
&lt;br /&gt;
NOTE: You must get the '''I_CHAT''' interface from the ASSS Module Manager before using it, just like you must on every other interface.&lt;br /&gt;
&lt;br /&gt;
To send a green message to a single player, you should use code similar to one of the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chat-&amp;gt;SendMessage(p, &amp;quot;This is a message&amp;quot;);&lt;br /&gt;
chat-&amp;gt;SendMessage(p, &amp;quot;This is a message that displays an int. %i&amp;quot;, someInt);&lt;br /&gt;
chat-&amp;gt;SendMessage(p, &amp;quot;This is a message that displays a char array. %s&amp;quot;, charArray);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To send a message to an entire arena, one should use code similar to one of the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chat-&amp;gt;SendArenaMessage(p, &amp;quot;This is an arena-wide message&amp;quot;);&lt;br /&gt;
chat-&amp;gt;SendArenaMessage(p, &amp;quot;This is an arena-wide message that displays an int. %i&amp;quot;, someInt);&lt;br /&gt;
chat-&amp;gt;SendArenaMessage(p, &amp;quot;This is an arena-wide message that displays a char array. %s&amp;quot;, charArray);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I log events? ==&lt;br /&gt;
&lt;br /&gt;
The log manager's interface, '''Ilogman''', is defined in ''logman.h'' and aids in debugging and notifying zone staff of unusual activity.&lt;br /&gt;
&lt;br /&gt;
There are three log functions that are defined. '''Log''', '''LogP''' and '''LogA'''. All three have printf like syntaxes (just like the chat interfaces's functions) for easy addition of variable values to add in debugging.&lt;br /&gt;
&lt;br /&gt;
'''LogP''' is the most commonly used logging function. It should be used when you have access to a player pointer and the event relates to that player's actions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm-&amp;gt;LogP(L_DEBUG, &amp;quot;my_module_name&amp;quot;, p, &amp;quot;a log message attached to Player *p&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LogA''' is attached to an arena rather than a player. This should be used whenever an event happens inside an arena but is tied to no specific player.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm-&amp;gt;LogA(L_DEBUG, &amp;quot;my_module_name&amp;quot;, arena, &amp;quot;a log message attached to Arena *arena&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm still typing...&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules&amp;diff=74</id>
		<title>Writing Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules&amp;diff=74"/>
				<updated>2005-01-10T22:35:47Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ASSS modules can be written in either C or Python. &lt;br /&gt;
&lt;br /&gt;
C modules are best suited for large, complex modules that need direct access to the core features of ASSS.&lt;br /&gt;
&lt;br /&gt;
The preferred language for simple modules is Python, because a poorly written module will not crash the entire server (Python is a safe language), while this is not the case for modules written in C.&lt;br /&gt;
&lt;br /&gt;
[[Writing Modules In C]]&lt;br /&gt;
&lt;br /&gt;
[[Writing Modules In Python]]&lt;br /&gt;
&lt;br /&gt;
[[Module Creation FAQ]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Powerbot&amp;diff=165</id>
		<title>Powerbot</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Powerbot&amp;diff=165"/>
				<updated>2005-01-10T22:33:31Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Powerbot is a bot core written by Mr Ekted in C. It is not open source, but is fast and does not use much memory. Rival bot cores include [[TWCore]] and [[MERVCore]].&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=User:Mine_GO_BOOM&amp;diff=484</id>
		<title>User:Mine GO BOOM</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=User:Mine_GO_BOOM&amp;diff=484"/>
				<updated>2005-01-10T20:28:58Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MGB: Supreme ruler of Server Help and all that passes within its sphere of influence.&lt;br /&gt;
&lt;br /&gt;
MGB and his brother Shanky host shanky.com, minegoboom.com and a handful of other sites.&lt;br /&gt;
&lt;br /&gt;
Best known for his work in maintaining the [http://www.shanky.com/server server help site] and the [http://forums.minegoboom.com link server help forum].&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=User:Dr_Brain&amp;diff=361</id>
		<title>User:Dr Brain</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=User:Dr_Brain&amp;diff=361"/>
				<updated>2005-01-10T20:23:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a page about Dr Brain.&lt;br /&gt;
&lt;br /&gt;
Who am I? I am the owner and head honcho of SSCX-A Hyperspace. I do all the programming and settings work for the main arena. I also try my hand at mapping from time to time.&lt;br /&gt;
&lt;br /&gt;
I've been working with ASSS since its first public release. I also spearheaded the move to ASSS for Hyperspace, making it the first playable ASSS zone.&lt;br /&gt;
&lt;br /&gt;
I've written nearly all of Hyperspace's custom modules.&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Server_Setup&amp;diff=54</id>
		<title>Server Setup</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Server_Setup&amp;diff=54"/>
				<updated>2005-01-10T20:05:25Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page needs a lot :)&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Using_Custom_Modules&amp;diff=195</id>
		<title>Using Custom Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Using_Custom_Modules&amp;diff=195"/>
				<updated>2005-01-10T20:05:00Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page could link to howtos written by custom module programmers.&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules&amp;diff=18</id>
		<title>Writing Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules&amp;diff=18"/>
				<updated>2005-01-10T20:03:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ASSS modules can be written in either C or Python. &lt;br /&gt;
&lt;br /&gt;
C modules are best suited for large, complex modules that need direct access to the core features of ASSS.&lt;br /&gt;
&lt;br /&gt;
The preferred language for simple modules is Python.&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Writing_Modules&amp;diff=8</id>
		<title>Writing Modules</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Writing_Modules&amp;diff=8"/>
				<updated>2005-01-10T20:03:00Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ASSS modules can be written in either C or Python. &lt;br /&gt;
&lt;br /&gt;
C modules are best suited for large, complex modules that need direct access to the core features of ASSS.&lt;br /&gt;
&lt;br /&gt;
The preferred language for simple modules is python.&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	<entry>
		<id>http://wiki.minegoboom.com/index.php?title=Server_Admin_Tasks&amp;diff=87</id>
		<title>Server Admin Tasks</title>
		<link rel="alternate" type="text/html" href="http://wiki.minegoboom.com/index.php?title=Server_Admin_Tasks&amp;diff=87"/>
				<updated>2005-01-10T19:57:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dr Brain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Using ?putfile, ?getfile and ?putzip]]&lt;br /&gt;
&lt;br /&gt;
[[Creating New Subarenas]]&lt;br /&gt;
&lt;br /&gt;
[[Installing New Modules]]&lt;/div&gt;</summary>
		<author><name>Dr Brain</name></author>	</entry>

	</feed>