Edited wiki page BuildingOnMac through web user interface.
<wiki:toc max_depth="3" />
== Global available Constants ==
<blockquote><tt>LAND_WIDTH</tt>, <tt>LAND_HEIGHT</tt>
</blockquote>
Game flags:
<blockquote><tt>gfForts, gfMultiWeapon, gfSolidLand, gfDivideTeams, gfLowGravity, gfLaserSight, gfInvulnerable, gfMines, gfVampiric, gfKarma, gfArtillery, gfOneClanMode, gfRandomOrder, gfKing, gfPlaceHog, gfSharedAmmo, gfDisableGirders, gfExplosives, gfDisableLandObjects, gfAISurvival, gfInfAttack, gfResetWeps, gfPerHogAmmo, gfDisableWind</tt></blockquote>
More constants at [GearTypes Gear Types] , [AmmoTypes Ammo Types], [Sounds], [States]
Additional global changing variables accessible:
* <tt>!ClansCount</tt> - number of clans in the game (teams with the same color belong to one clan)
* <tt>!TeamsCount</tt> - number of teams in the game
* <tt>!TurnTimeLeft</tt> - number of game ticks left until the current turn ends
* <tt>!GameTime</tt> - number of total game ticks
* <tt>!RealTime</tt> - number of total ticks
* <tt>!TotalRounds</tt> - number of round that has passed
== Event Handlers ==
=== <tt>onGameInit()</tt> ===
<blockquote>This function is called before the game loads its resources. One can modify various game variables here:
</blockquote>
* <tt>Seed = 0</tt> - sets the seed of the random number generator
* <tt>!GameFlags = gfSolidLand + gfArtillery + …</tt> - sets the gameflags, see above for the available flags
* <tt>!TurnTime = 60000</tt> - set the turntime in ms
* <tt>!CaseFreq = 0</tt> - frequency of crate drops
* <tt>!HealthCaseProb = 35</tt> - chance of receiving a health crate
* <tt>!HealthCaseAmount = 25</tt> - amount of health in a health crate
* <tt>!DamagePercent = 100</tt> - percent of damage to inforce
* <tt>!MinesNum = 0</tt> - number of mines being placed (before 0.9.14 !LandAdds)
* <tt>!MinesTime = 3</tt> - time for a mine to explode from activated, -1 for random
* <tt>!MineDudPercent = 0</tt> - chance of mine being a dud
* <tt>Explosives = 0</tt> - number of explosives being placed
* <tt>Delay = 0</tt> - delay between each round
* <tt>!SuddenDeathTurns = 30</tt> - turns until sudden death begins
* <tt>!WaterRise = 47</tt> - height of water rise at sudden death in pixels
* <tt>!HealthDecrease = 5</tt> - amount of health decreased on sudden death
* <tt>Map = "Bamboo"</tt> - the map being played
* <tt>Theme = "Bamboo"</tt> - the theme to be used
If you want to add teams or hogs manually you have to do it here.
=== <tt>onGameStart()</tt> ===
<blockquote>This function is called when the first round starts.
</blockquote>
Can be used to show the mission and for more setup, for example initial target spawning.
=== <tt>onGameTick()</tt> ===
<blockquote>This function is called on every game tick, i.e. 1000 times a second.
</blockquote>
=== <tt>onGearAdd(gearUid)</tt> ===
<blockquote>This function is called when a new gear is added. Useful in
combination with <tt>!GetGearType(gearUid)</tt>.
</blockquote>
=== <tt>onGearDelete(gearUid)</tt> ===
<blockquote>This function is called when a new gear is deleted. Useful in
combination with <tt>!GetGearType(gearUid)</tt>.
</blockquote>
=== <tt>onAmmoStoreInit()</tt> ===
<blockquote>This function is called when the game is initialized to request the available ammo and ammo probabilities. Use !SetAmmo here.
</blockquote>
== Functions for creating gears ==
=== <tt>!AddGear(x, y, gearType, state, dx, dy, timer)</tt> ===
<blockquote>This creates a new gear at position x,y (measured from top left) of kind gearType (see [GearTypes Gear Types]). The initial velocities are dx and dy. All arguments are numbers. The function returns the uid of the gear created.
</blockquote>
Example:
<code lang="lua"> local gear = !AddGear(0, 0, gtTarget, 0, 0, 0, 0)
!FindPlace(gear, true, 0, LAND_WIDTH)</code>
=== <tt>!SpawnHealthCrate(x, y)</tt> (0.9.14) ===
<blockquote>Spawns a health crate at the specified position.
</blockquote>
=== <tt>!SpawnAmmoCrate(x, y, ammoType)</tt> (0.9.14) ===
<blockquote>Spawns an ammo crate at the specified position with content of ammoType (see [AmmoTypes Ammo Types]). Because by default settings the number of ammo in crates is zero it has to be increased to at least one with SetAmmo first, see the example:
</blockquote>
Example:
<code lang="lua"> !SetAmmo(amGrenade, 0, 0, 0, 1) -- see below
!SpawnAmmoCrate(0, 0, amGrenade) -- x=y=0 means random position on map</code>
=== <tt>!SpawnUtilityCrate(x, y, ammoType)</tt> (0.9.14) ===
<blockquote>Spawns an utility crate at specified position with content of ammoType.
</blockquote>
Example:
<code lang="lua"> !SetAmmo(amLaserSight, 0, 0, 0, 1)
!SpawnUtilityCrate(0, 0, amLaserSight)</code>
=== <tt>!AddTeam(teamname, color, grave, fort, voicepack)</tt> ===
<blockquote>Adds a new team. Note that this can only be done in onGameInit(), not at a later time. First argument is the team name followed by color, grave, fort and voicepack settings.
</blockquote>
Notice: This works only for singleplayers training missions for now and will desync multiplayer games.
Example:
<code lang="lua"> !AddTeam("team 1", 14483456, "Simple", "Island", "Default")</code>
=== <tt>!AddHog(hogname, botlevel, health, hat)</tt> ===
<blockquote>Adds a new hedgehog for current team (last created one), with botlevel and specified health also head.
</blockquote>
Notice: This works only for singleplayers training missions for now and will desync multiplayer games.
Example:
<code lang="lua"> local player = !AddHog("HH 1", 0, 100, "!NoHat") -- botlevel 0 means human player
!SetGearPosition(player, 1500, 1000)</code>
== Functions to get gear properties ==
=== <tt>!GetGearType(gearUid)</tt> ===
<blockquote>returns one of [GearTypes Gear Types] for the specified gear
</blockquote>
=== <tt>!GetGearPosition(gearUid)</tt> ===
<blockquote>returns tuple of x,y coordinates for the specified gear
</blockquote>
=== <tt>!GetHogClan(gearUid)</tt> ===
<blockquote>returns the clan id of the specified hedgehog gear
</blockquote>
=== <tt>!GetHogTeamName(gearUid)</tt> ===
<blockquote>returns the name of the specified hedgehog gear's team
</blockquote>
=== <tt>!GetHogName(gearUid)</tt> ===
<blockquote>returns the name of the specified hedgehog gear
</blockquote>
=== <tt>GetX(gearUid)</tt> ===
<blockquote>returns x coordinate of the gear
</blockquote>
=== <tt>GetY(gearUid)</tt> ===
<blockquote>returns y coordinate of the gear
</blockquote>
=== <tt>!GetState(gearUid)</tt> ===
<blockquote>returns the state of the gear. This is one of [States]
</blockquote>
=== <tt>!GetFollowGear(gearUid)</tt> ===
<blockquote>Returns the uid of the gear that is currently being followed.
</blockquote>
=== <tt>!GetTimer(gearUid)</tt> (0.9.14) ===
<blockquote>returns the timer of the gear. This is for example the time it takes for watermelon, mine, etc. to explode. This is also the time used to specify the blowtorch or rcplane time.
</blockquote>
=== <tt>!GetHealth(gearUid)</tt> (0.9.14) ===
<blockquote>returns the health of the gear
</blockquote>
=== <tt>!GetBotLevel(gearUid)</tt> (0.9.14) ===
<blockquote>returns the bot level from 0 to 5. 0 means human player.
</blockquote>
== Functions to modify gears ==
=== <tt>!FindPlace(gearUid, fall, left, right)</tt> ===
<blockquote>Finds a place for the specified gear between x=left and x=right and places it there.
</blockquote>
Example:
<code lang="lua"> gear = !AddGear(…)
!FindPlace(gear, true, 0, LAND_WIDTH) -- places the gear randomly between 0 and LAND_WIDTH</code>
=== <tt>!SetGearPosition(gearUid, x, y)</tt> ===
<blockquote>Places the specified gear exactly at the position (x,y).
</blockquote>
=== <tt>!SetAmmo(ammoType, count, probability, delay, numberInCrate)</tt> ===
<blockquote>This updates the settings for a specified [AmmoTypes Ammo Type] as of count available for players, spawn probability, availability delay in turns, and the number available in crates. This is supposed to be used in the onAmmoStoreInit() even handler.
</blockquote>
Example:
<code lang="lua"> !SetAmmo(amShotgun, 9, 0, 0, 0) -- unlimited amount of shotgun ammo for players
!SetAmmo(amGrenade, 0, 0, 0, 3) -- crates should contain always three grenade</code>
=== <tt>!SetHealth(gearUid, health)</tt> ===
<blockquote>Sets the health of the specified gear.
</blockquote>
=== <tt>!SetEffect(gearUid, effect, true/false)</tt> (0.9.14) ===
<blockquote>Enables (true) or disables (false) one of the effects <tt>heInvulnerable, heResurrectable, hePoisoned</tt> for the specified hedgehog gear.
</blockquote>
Example: (sets all bots poisoned)
<code lang="lua"> function onGearAdd(gear)
if (!GetGearType(gear) === gtHedgehog) and (!GetBotLevel(gear) > 0) then
!SetEffect(gear, hePoisoned, true)
end
end</code>
=== <tt>CopyPV(gearUid, gearUid)</tt> ===
<blockquote>This sets the position and velocity of the second gear to the first one.
</blockquote>
=== <tt>CopyPV2(gearUid, gearUid)</tt> ===
<blockquote>This sets the position of the second gear to that of the first one, but makes its velocity twice the one of the first.
</blockquote>
=== <tt>!FollowGear(gearUid)</tt> ===
<blockquote>Makes the gameclient follow the specifiec gear.
</blockquote>
=== <tt>!SetState(gearUid, state)</tt> ===
<blockquote>Sets the state of the specified gear to one of [States].
</blockquote>
=== <tt>!SetTag(gearUid, tag)</tt> ===
<blockquote>Sets the tag of the specified gear, different for every gear.
</blockquote>
=== <tt>!SetTimer(gearUid, timer)</tt> (0.9.14) ===
<blockquote>Sets the timer of the specified gear. Also see !GetTimer.
</blockquote>
== Other Functions ==
=== <tt>!EndGame()</tt> ===
<blockquote>Makes the game end.
</blockquote>
=== <tt>!ParseCommand(string)</tt> ===
<blockquote>Makes the gameclient parse the specified custom command.
</blockquote>
=== <tt>!ShowMission(caption, subcaption, text, icon, time)</tt> ===
<blockquote>Use to tell the player what he is supposed to do.
</blockquote>
=== <tt>!HideMission()</tt> ===
<blockquote>Hides the mission.
</blockquote>
=== <tt>!AddCaption(text)</tt> (0.9.14) ===
<blockquote>Display event text in the upper part of the screen.
</blockquote>
=== <tt>!PlaySound(soundId)</tt> ===
<blockquote>Plays the specified sound.
</blockquote>
=== <tt>!SetZoom(zoomLevel)</tt> (0.9.14) ===
<blockquote>Sets the zoom level. The value for maximum zoom is currently 1.0 and for minimum 3.0 The default zoom level is 2.0
</blockquote>
=== <tt>!GetZoom()</tt> (0.9.14) ===
<blockquote>Returns the current zoom level
</blockquote>
=== <tt>!GetRandom(number)</tt> (0.9.14) ===
<blockquote>Returns a randomly generated number in the range of 0 to number - 1.
</blockquote>
== Debugging Functions ==
=== <tt>!WriteLnToConsole(string)</tt> (0.9.14) ===
<blockquote>Guess :D
</blockquote>