Always snap to grid

User:SuperApe/Old Skool Monsta Toolz

From Unreal Wiki, The Unreal Engine Documentation Site

Jump to: navigation, search

Contents

Overview

Old Skool Monsta Toolz (OSMT) is a toolset for UT2004 that is designed to reintroduce old skool Unreal monster AI and it's related actors for use in any gametype. These tools mimic the original Unreal actors and settings so that "old timers" can easily pick it up and "newcomers" have lots of online reference documentation already available. The toolset also includes a new gametype, OSM Adventure (OSM), which makes use of all classes in the toolset to facilitate story-driven adventures through progressive Objectives comprised of puzzles, traps and monsters. I humbly thank Steven Polge and the rest of the team at Epic for the original design plan for the AI. This toolset is a loving adaptation of the original work.

The project's aim is to allow UT2004 mappers to create maps that take advantage of this well-designed AI scheme in any gametype, especially in story-driven adventures.

As a side note, I'd like to mention that while I've been aware of Unreal and UT for a long time and have become familiar with the original code through UnrealWiki, I never had these games so I relied on online documentation and second-hand accounts of the AI behavior and functionality to help develop this toolset.SuperApe

Latest Version

The public release version has been made available. An OSM Adventure Map Pack will also be available soon.

OSMT v1.4

The UT2004 mapping toolset for implementing old skool Unreal-style creature AI in any gametype.

OSMT_v1.4.zip (~499k)

Update: OSMT v1.5 is now in open beta. You can download it and help finish the project just by commenting! Go right now to the beta testing thread on Unreal Playground. See the included DevLog.txt for current details on this update, particularly what needs testing (marked with ">"). All changes are backwards compatible.

OSM Adventure Map Pack

A collection of maps demonstrating a variety of story-driven adventures possible with the OSM Adventure gametype.

An OSM Adventure Mapping Competition just finished on UnrealPlayground Forums. Once the judging is complete, all the entries will be compiled and released as an OSM Adventure Map Pack. You can keep tabs on the progress on the Old Skool Monsta Toolz Subforum.

Known Bugs

Any official bugs found (by SuperApe) with the current version are listed here, along with workarounds.

  • UT2004 Invasion Monsters will conflict with these new monsters. For that reason, the Invasion gametype is not well-suited for custom maps that include these monsters.
  • Headshots on ScriptedCharacters do not remove the original head, but still produce a head gib. No workaround.
  • Strafing behavior problems on ScriptedMonsters in Charging state. Required ScriptedMonsterController Charging state fixes, etc. No workaround.
  • Some 3rd party weapons mutators (ones with weapons not derived from the Weapon base class) do not spawn weapons from ThingFactory actors. No workaround.

The Toolset

This is a package that includes a full toolset for mappers to implement Old Skool-style Unreal Monsters in maps. In early versions of Unreal, the Monsters were a subclass of ScriptedPawn, an all-purpose scripted character class that contained sophisticated AI. In later versions of Unreal, a new scheme split much of the functionality of ScriptedPawns into Pawn and Controller classes. In UT2004, some of the original monster models were re-introduced in a gametype called Invasion, where these monsters simply attack the players in a succession of waves. However, the UT2004 Invasion Monsters were not meant to be used in any other gametype or in custom maps.

This toolset redefines the available Monsters (and their MonsterController) to mimic the original ScriptedPawn functionality along with all the original unique monster behaviors and functionality. To do this, a new Monster class (ScriptedMonster) and a new Controller class (ScriptedMonsterController) work in concert with several recreated UT Actors to provide the same sophisticated toolset that the early versions of Unreal had.

The goal of this project is twofold. First, to restore the Monsters to their original state, with all the properties, Orders, states and behaviors that mappers of early versions of Unreal will recognize. Second, to further these Monster's behaviors, components and attributes, where appropriate and in line with the original flavor of the Monsters. All of the new Monsters re-enable animations that are available in UT2004, but are unused in Invasion. Some Monsters are recreated variations of existing Invasion Monsters. Most of the new Monsters have re-introduced properties and behaviors along with some new complementary behaviors.

ScriptedMonster & ScriptedMonsterController

These two actors redefine the behavior and capabilities of UT2004 Invasion monsters so that they may be placed and set up to perform complex actions. They are an attempt to restore the abilities of Unreal's old ScriptedPawn.

For a detailed reference on all ScriptedMonster classes, see OSMT Monster Manual

ScriptedMonster Orders and states

The Orders property is one of the most powerful "new" Old Skool Monster features. In conjunction with the OrderTag, other properties and other actors, the Orders property can dramatically change the way ScriptedMonsters behave in your map. Here are some of the available valid Orders:

Waiting 
(default) Wander or Camp nearby the placed spot until an Enemy is detected. Attack and freely roam afterwards.
Ambushing 
Travel to an AmbushPoint (or spawn at one at map start) whose Tag matches OrderTag, wait for an Enemy, then Attack. Find another AmbushPoint after combat and wait again.
Guarding 
Guard an actor whose Tag matches OrderTag. They will remain near and return to their placed spot after combat.
Patroling 
Travel from one PatrolPoint (or spawn at one at map start) whose Tag matches OrderTag to the NextPatrol in a series, leave for combat and return to patrol after combat.

Other behaviors ScriptedMonsters will automatically demonstrate include the Retreating state, where hurt (and afraid) monsters will flee to a HomeBase whose Tag matches the monster's Tag, and the Alarm states (TriggerAlarm and AlarmPaused), where an "alarmed" monster (one who has seen an Enemy for the first time) moves to an AlarmPoint, whose Tag matches the monster's AlarmTag, at all costs and possibly shoot a target, activate a trigger, etc.

In addition to these general behaviors, individual monsters may also have special Orders or behaviors. A couple examples include, the Krall which have a "Sleeping" Order that can be used in conjunction with one of the sleeping animations set in the StartingAnim property, and the Warlord has a "Mutilating" Order that will cause the Warlord to continually kick, punch and munch on a long dead carcass until an Enemy is seen.

ScriptedMonster Skill, Intelligence and AttitudeToPlayer

ScriptedMonsters have Skill and Intelligence properties. The Skill set on creature will be added to the starting game difficulty to make them greater at combat tactics. The Intelligence can rank from Amoeba (or insect-like) to Human. More intelligent creatures have the ability remember Player positions longer as well as take advantage of various abilities. ScriptedMonsters also make use of a property, AttitudeToPlayer, to allow more flexibility to the mapper in terms of setting up complex behavior. The Attitudes a creature can have toward players can vary from Fear to Hate to Ignore to Friendly and even Follow. Friendly and Following creatures will greet players in some way instead of attacking. This can change the Alarm behavior of creatures to lead Players to desirable items, etc. More intelligent creatures set to Follow will then join the Player, following them around, attacking those who their Leader attacks, threatening "wild" creatures, etc. Although these creatures act a little like Players, they are not Players, so they are not able to pickup items, drive vehicles, score points or achieve game objectives.

AI-Related Actors

A full set of actors is included that replicate the support actors used in old skool Unreal AI.

Keypoints

ThingFactory 
This keypoint is designed to spawn actors. It can be set to spawn automatically or by trigger. Associate Thing and CreatureFactories to SpawnPoints by matching their Tag values. Up to 16 SpawnPoints can be associated to a Factory.
CreatureFactory 
This is a variation of ThingFactory designed specifically to spawn ScriptedMonsters. Killing a creature spawned from this factory will trigger another creature to be spawned automatically, if bAutoRespawn is True and if it's Capacity hasn't been met.

NavPoints

AlarmPoint 
This is a spot that an "Alarmed" creature (one who sees an Enemy) will move to and Attack from. It can be used to have the creature activate a trigger when an Enemy is detected.
AmbushPoint 
This is a spot that an Ambushing creature will wait for an Enemy at.
GuardPoint 
A spot to guard an item from. This actor is automatically placed by the Controller code and should not be placed by the mapper.
HomeBase 
This is a spot that a hurt or fearfull creature will Retreat to.
PatrolPoint 
This is a spot that a Patrolling creature will move to, wait a bit and move from to the next PatrolPoint in a series.
SpawnPoint 
This is a spot that a ThingFactory or CreatureFactory spawns things and creatures from.

Miscellaneous Objects

This section highlights some of the uniquely useful extras this toolset provides.

OSMT ScriptedActions

This toolset includes many ScriptedActions meant to augment the AI system. If scripted behavior is desired over the AI system's behaviors, such as situations like acting in a cutscene, or performing a specific behavior repeatedly, the ScriptedActions ACTION_PossessPawn and ACTION_Monsterize can allow ScriptedSequences to "catch" ScriptedMonsters, control them, then "release" them back to a ScriptedMonsterController.

Some of these ScriptedActions are meant specifically for OSM Adventure, but plenty are useful in other gametypes as well. Some are specifically used by ScriptedCharacters to use vehicles, such as ACTION_TryToDrive, ACTION_VehicleFire and ACTION_ExitVehicle. Other ScriptedActions of note are ACTION_AssignMonsterToTeam, ACTION_SetOrders and the conditionals. (ACTION_If...)

IMPORTANT: If you go that route of possessing the NPC mid-game, use the included Dummy Pawn as a placeholder for that NPC, by setting its AI->AIScriptTag to the Tag of the ScriptedSequence. Otherwise, the ScriptedSequence will be invalid and be removed at map start.) Remember, you can use ACTION_Monsterize to return the NPC to "normal" control.

Incidentally, this set of ScriptedActions includes the original attempt to implement UT2004 Monsters in non-Invasion gametypes. Together with the Dummy Pawn, they provided a rudimentary method of spawning, controlling, unleashing and re-possessing Invasion Monsters. This scheme originally used the standard Invasion Monsters and MonsterControllers, but these ScriptedActions have been modified to work only with the new ScriptedMonster and ScriptedMonsterController classes.

HintItem

This is an actor that represents a hint, clue or item that can be held or inspected closer. A player can enter it's collision radius and press the Use key to toggle a HUD Overlay on, an image which is normally just a closer and more detailed view of the item. If the player leaves the radius or presses the Use key again, the HUD Overlay image is removed. Other options can offer a hint to the player ("Hey! I'm a clue!") or toggle the visibility off on the HintItem mesh itself, to further the illusion that it is being held by the player. Sounds can also be set for both the pickup and drop.

Poison / Antedote

A poison system is included in OSMT allowing Poisoned damage, PoisonPickups, AntedotePickups, and a PoisonTrigger. Players will be drained of health once per second as they see a faint green damage flash on their HUD and their Pawns convulse. Options include rate of damage and length of time the poison lasts.

Triggers

A host of triggers are available to help mappers. The ExclusionTrigger allows a ClassProximity of all but the configured subclasses, which can come in handy to detect xPawn that aren't Monsters, for example. The PlayerUseTrigger detects Human Player and Use key presses, but ignores all others, such as Bots or Monsters.

Mapping with OSMT

The Old Skool Monsta Toolz can be used in any gametype. However, it is up to the mapper / level designer to implement them in a way that offers more interest and challenge to players, rather than serving to frustrate and distract from player's enjoyment of the gametype.

Instructions

Unless you edit your UT2004 configuration settings to include OSMT.u as an editpackage (and if you don't know what I'm talking about, don't do it), you will need to open OSMT.u through your Actor Browser in Ued each time to you open Ued, to have the full list of Old Skool Monsta Toolz components available to work with. Once you've opened OSMT.u, you will be able to add OSMT components to your map, configure them and save.

Quick Start

Follow the instructions on the ReadMe.txt file to install OSMT. Launch Ued and use the Actor Browser to open the OSMT.u package file. Expand the class heirarchy for the ScriptedMonster parent class: Pawn -> UnrealPawn -> xPawn -> Monster -> ScriptedMonster. Select any of the available OSMT creatures, then place it in the map by clicking on a spot on the ground in the perspective viewport and using the rick-click menu to "Place <your selected class> Here". You can then playtest it by hitting the Playtest button, which looks like a joystick. Now back in Ued, you can begin to tweak the properties, follow the Basic ScriptedPawn Tutorial to explore other behavior, test out the other creatures, and start to use more and more of the included components (See OSMT Class Tree below), or even the try your hand at the OSM Adventure gametype.

Guidelines

Unless the ScriptedAction ACTION_AssignMonsterToTeam is used or AttitudeToPlayer is set to make creatures follow and fight alongside a player, be aware that monsters will attack all players equally. In general, the monsters should be used to guard powerful alternative items or routes to game objectives, rather than to guard the game objectives themselves. Be aware that gametypes that allow vehicles are inheritently more dangerous for players and monsters alike. Most monsters are no match for vehicle weaponry and should be appropriately supported against players with vehicles.

The OSM Adventure Gametype

The OSM Adventure gametype is a story-driven gametype that can create single player or cooperative adventures in UT2004. It is designed for players to "run the gauntlet" among monsters, traps and puzzles to get to the end and win. They are given a limited number of lives, an optional timelimit, but no goal (score) limit.

See also Mapping for OSM Adventure.

Tweaking OSMT

OSMT is a mapping toolset, but in following Epic's open-ended structure of the Unreal Engine, it also allows mappers to expand on the toolset to create brand new features, creatures and behaviors. The AI and tools available give a solid foundation to add your own custom content, custom creatures, NPCs, behaviors, etc.

Custom Creatures

Because ScriptedMonster allows for a wide variety of behavior (friendly to players, intelligent, skillful, etc.), just by subclassing it you get a good head start in creating a custom creature. You will need to define standard properties and methods, such as the DeathAnim properties, various sounds, Play(Behavior Anim) functions, etc. By taking a look at how other creatures in this toolset were set up, you can get a good idea of what you'll need. Does your custom creature fly? Take a look at SmartFly, SmartManta or SmartWarlord.

The foundation this toolset supplies is fairly complete, allowing you to simply supply the artwork and decide how the stock AI should behave. But, if you feel you need more than what ScriptedMonsters do normally, you may want special behaviors for your particular custom creature.

Custom Orders (Behavior States)

ScriptedMonster and ScriptedMonsterController are base classes that allow you to build new creatures easily that will be able to perform the basic behaviors (such as Patroling, Guarding, etc.) and still have their own individual behaviors as well. The creatures in this toolset also have individual behaviors, like the Krall DiceGames, Warlord Mutilating, etc. This is achieved through special pawn-specific Orders (states) and a simple mechanism in ScriptedMonster that checks to see if an Order is standard or unique to that Pawn class.

Just add an individual state to your ScriptedMonster subclass. That state name is the Order you assign to send it to that state at map start. It's pretty simple. Once the code recognizes that pawn's individual behavior state, it will suspend the ScriptedMonsterController in a "PawnSpecific" state, until the ScriptedMonster class relinquishes control. This makes it easy to add new behaviors without modifying the Controller class.

Custom Games

Custom gametypes, game prototypes and game styles, can be developed using OSMT as a base, but only with expressed permission by me (please contact me for permission to use OSMT as a base for your mod), which I usually give with just a request to be credited properly, etc. While adding on top of OSMT may be allowed, changing or duplicating the code will not be. For more infomation, please refer to my Legal Info below.

Whether you're developing your own game demo and need a base for your custom content (creatures, cinematics, etc) or you're changing the whole style of Unreal gameplay from a first person shooter to something very different, such as a platformer, a racing game or what have you, Old Skool Monsta Toolz can help to deal with NPC/Monster AI and serve as the foundation of some of the common related gameplay features.

Distributing Guidelines

Mappers are free to use these tools and the components in their custom maps. However, the complete OSMT.zip file, *must* be included in the distribution of that custom map. In addition, I give permission for mappers to use these tools in their custom map if they will also please credit me in their own ReadMe file for that custom map.

To use this toolset, simply install the package file in your .../UT2004/System directory. In Ued, you will be able to open the OSMT.u package file from the Actor browser. Once the package has been opened, all the toolset actors will be available to add to your custom map.

Warning: Any map that uses the components found in this toolset *must* be able to access to the OSMT.u, OSMT.ucl and OSMTex.utx package files or the map will fail to load properly. Do not attempt to distribute a custom map with these components without the OSMT .zip file and installation instuctions or you will get complaints by end users that your map won't load.

Map Distribution

Your custom map should always be distributed with a ReadMe.txt file. In that file, along with map information, your information, etc., you should always include installation instuctions. To make distribution easier to remember and to avoid confusion by keeping OSMT elements separate from your map components, just add the OSMT .zip file to your map's .zip file. Below is an example set of instructions that include installation of the required OSMT package files, so that your custom map will run properly on the end user's machine.

Example Installation Instructions

For the custom map named, "DM-Foo.ut2":

  1. Unzip "DM-Foo.zip".
  2. Place "DM-Foo.ut2" in your .../UT2004/Maps directory.
  3. Unzip "OSMT_v1.4.zip" (or whichever version you include)
  4. Place "OSMT.u" and "OSMT.ucl" in your .../UT2004/System directory.
  5. Place "OSMTex.utx" in your .../UT2004/Textures directory.

OSMT Class Tree (v1.4)

This tree lists the classes available in the OSMT toolset. Exclusive OSMT objects are bolded. UT-related classes are linked, although some differences may exist.

NOTE: If you don't see everything on this list in your UnrealEd session, simply re-open OSMT.u from your Actor Browser. A more permanent fix is available by editing your UT2004.ini, but it is recommended for advanced users only.

 (Object)
 +- (Actor)
 |  +- (Controller)
 |  |  +- (AIController)
 |  |     +- (ScriptedController)
 |  |        +- (MonsterController)
 |  |           +- ScriptedMonsterController
 |  +- (DamageType)
 |  |  +- (Burned)
 |  |  |  +- Burning
 |  |  +- Poisoned
 |  |  +- Poisoning
 |  +- (Decoration)
 |  |  +- Carcass
 |  +- (Effects)
 |  |  +- PoisonEffect
 |  +- (Emitters)
 |  |  +- CarcassFlies
 |  |  +- KrallDice
 |  |  +- VehicleFactorySpawnEFX
 |  +- HintItem
 |  +- (Info)
 |  |  +- (GameInfo)
 |  |  |  +- (UnrealMPGameInfo)
 |  |  |     +- (Deathmatch)
 |  |  |        +- OSMGame
 |  |  +- OSMObjectiveManager
 |  |  +- (MapList)
 |  |  |  +- MapList_OSMAdventure
 |  |  +- (Mutator)
 |  |  |  +- OSMMutator
 |  |  +- (ReplicationInfo)
 |  |     +- (GameReplicationInfo)
 |  |        +- OSMGameReplicationInfo
 |  +- (Inventory)
 |  |  +- (Ammo)
 |  |  |  +- (KrallAmmo)
 |  |  |     +- EliteKrallAmmo
 |  |  +- Poison
 |  +- (KeyPoint)
 |  |  +- ThingFactory
 |  |     +- CreatureFactory
 |  +- (Mover)
 |  |  +- VariableTimedMover
 |  +- (NavigationPoint)
 |  |  +- AlarmPoint
 |  |  +- AmbushPoint
 |  |  +- GuardPoint
 |  |  +- HomeBase
 |  |  +- PatrolPoint
 |  |  +- SpawnPoint
 |  |     +- PortableSpawnPoint
 |  +- (Pawn)
 |  |  +- Dummy
 |  |  +- (UnrealPawn)
 |  |     +- (xPawn)
 |  |        +- (Monster)
 |  |           +- ScriptedMonster (see also ScriptedPawn)
 |  |              +- ScriptedCharacter
 |  |              +- SmartBrute (see also Brute)
 |  |              |  +- SmartBehemoth
 |  |              |  +- SmartLesserBrute
 |  |              +- SmartFly
 |  |              +- SmartGasbag
 |  |              |  +- SmartGiantGasbag
 |  |              +- SmartKrall (see also Krall)
 |  |              |  +- SmartEliteKrall
 |  |              +- SmartManta
 |  |              |  +- SmartCaveManta
 |  |              |  +- SmartGiantManta
 |  |              +- SmartNaliCow (see also Cow)
 |  |              +- SmartPupae
 |  |              +- SmartSkaarj (see also Skaarj)
 |  |              |  +- SmartIceSkaarj
 |  |              |  +- SmartSkaarjAssassin
 |  |              |  +- SmartSkaarjBerserker
 |  |              |  +- SmartSkaarjLord
 |  |              |  +- 'SmartSkaarjScout
 |  |              +- SmartWarlord (see also WarLord)
 |  +- (Pickup)
 |  |  +- (TournamentPickUp)
 |  |     +- (TournamentHealth)
 |  |        +- (MiniHealthPack)
 |  |           +- Antedote
 |  |           +- PoisonPickup
 |  +- (Projectile)
 |  |  +- (GasbagBelch)
 |  |     +- GiantGasbagBelch
 |  +- (SVehicleFactory)
 |  |  +- TeamVehicleFactory
 |  +- (Triggers)
 |     +- PoisonTrigger
 |     +- RandomTrigger
 |     +- (Trigger)
 |     |  +- ExclusionTrigger
 |     |  +- OSMEndGameTrigger
 |     |  +- OSMObjectiveTrigger
 |     |  +- PlayerAloneTrigger
 |     +- (UseTrigger)
 |        +- PlayerUseTrigger
 +- (ScriptedAction)
    +- ACTION_AssignMonsterToTeam
    +- ACTION_DummyReset
    +- ACTION_ExitVehicle
    +- ACTION_GiveGoodie
    +- ACTION_HealPawn
    +- ACTION_IfGameDifficulty
    +- ACTION_IfMonsterSeesEnemy
    +- ACTION_IfNumPlayers
    +- ACTION_Monsterize
    +- ACTION_PossessPawn
    +- ACTION_SetEnemy
    +- ACTION_SetOrders
    +- ACTION_SpawnMonster
    +- ACTION_SubTitleSwitch
    +- ACTION_TryToDrive
    +- ACTION_VehicleFire
    +- ACTION_VehicleFireStop

Credits

The original Unreal Monsters, animations, sounds and code structure by Epic Games, Inc.

The original AI structure was masterfully created by Steven Polge.

So these monsters, tools and other actors are loving adaptations by me (SuperApe), based mostly on second-hand knowledge and accounts of the original ScriptedPawn abilities, behaviors and components.

Some miscellaneous improvements to settings, code and behaviors are original additions by me, meant only to enhance the original flavor of these creatures.

Special thanks go to the OSMT Beta Testing crew, especially Lord_Simeon, and to all the helpful members and staff of UnrealPlayground.

Very special thanks go to my wife for all her support and understanding while I worked on this.

OSMT Legal Info

Copyright ©2006 by Glenn 'SuperApe' Storm. All rights reserved.

Authors MAY use these components in custom maps with credit to me for the Old Skool Monsta Toolz toolset in their ReadMe file.

Authors may NOT use these components as a base to build additional mods, mutators, or any other content without my expressed, written permission.

You are NOT authorized to distribute this package EXCEPT in its original, unmodified form with THIS file attached in its original, unmodified form.

You are NOT authorized to charge fees for the sale, use or distribution of this mutator without our expressed, written permission. This includes, but is not limited to, compilation CD's, disks or software bundles.

Unreal Tournament 2004 ©2004 Epic Games, Inc. Raleigh, N.C. USA.

Unreal is a registered trademark of Epic Games, Inc. ALL RIGHTS RESERVED.

All other trademarks are the property of their respective owners.

This toolset is not supported by Atari, Epic, or any such parties' subsidiaries.

Resources

External Links

  • The Old Skool Monsta Toolz Subforum - Provided by UnrealPlayground. Information and discussions on using OSMT and making OSM Adventure maps.
  • Old Skool Monsta Toolz on ModDB - The modDB page offering news, downloads, an image gallery and more.
  • Old Skool Monsta Toolz - The original public thread on UnrealPlayground forums.
    • Monster Experiments - The first thread laying the AI groundwork that spawned this project, from UnrealPlayground.
    • OSM-Gauntlet - An example map for the OSM Adventure gametype, available on UnrealPlayground.
  • Unreal Creature Care and Feeding Guide, by Steven Polge - The definitive resource for the original AI design.
  • OldUnreal.com - A site dedicated to Unreal, includes walkthroughs of original levels which are excellent sources of inspiration for OSM Adventure.
  • UnrealSP.org - A site dedicated to Unreal, includes walkthroughs of original levels which are excellent sources of inspiration for OSM Adventure.
  • Blitz's Corner, by Blitz - A collection of essays and tutorials pertaining to intelligent level design.
  • Angel Mapper's Matinee Tutorial - An excellent tutorial for setting up Matinees for OSM Adventure cutscenes.
  • udn2:LevelTransitions - Using teleporters to link one OSM Adventure map to another and create a multi-map adventure.

Related Topics

Discussion

SuperApe: I have an example map available to test out the new gametype included in this toolset. Available on UnrealPlayground here. Enjoy! :)

SuperApe: I've made another OSM Adventure map to help level designers see how the various OSMT elements are used. The map, OSM-Guide, is meant to be reverse-engineered in UnrealEd and it includes many Note actors couple with various OSM Adventure elements to help demonstrate the concepts involved.

SuperApe: OSMT v1.4 released. All changes are backwards compatible.

SuperApe: Working... Please to not edit this page.

Personal tools