I love the smell of UnrealEd crashing in the morning. – tarquin
User:SuperApe/Mapping For OSM Adventure
OSM Adventure 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. Players are given an optional limited number of lives, an optional timelimit, but no goal (score) limit.
Note: Old Skool Monsta Toolz (OSMT) is required to run OSM Adventure maps. See Old Skool Monsta Toolz for information and a download link.
- 1 OSMGame and Related Actors
- 2 OSM Adventure Mapping Guide
- 3 OSM Adventure Mapping FAQ
- 4 Tips
- 5 Resources
- 6 Discussion
OSMGame and Related Actors
These actors available from Old Skool Monsta Toolz help facilitate the OSM Adventure gametype.
- This is the GameInfo class for OSM. In LevelProperties -> DefaultGametype, put OSMT.OSMGame.
- This special Trigger tells the OSMGame to trigger an End Game condition. This trigger can be triggered or Touched by a player. Note: You can use more than one OSMEndGameTrigger and have different endings for your map, if desired.
- This is a special Info actor that holds a database of information for the Objectives in an OSM game. It also handles Objective reaching, score and Adrenaline awards per Objective and PlayerStart toggling, cutscene and DeathScene handling, Objective timelimit management, among other major OSM Adventure functions.
OSM Adventure Mapping Guide
OSM Adventure is a very versatile gametype that can be used to create adventures similar to a wide variety of other popular video games genres; dungeon crawlers, platformers, exploration games, etc. Level designers can very easily create simple single player or cooperative adventures with just a few added tools to a simple map. But the scope of the kind of adventure you can make is limited only by your imagination and your ability to implement custom content, such as custom player models, creatures, etc.
"The Story is the Thing"
Unlike all other UT2004 gametypes, OSM Adventure is meant to be driven by a story. Players will play the story as they progress through the map or series of maps. As such, OSM Adventures should follow a storyline with a Beginning, Middle and End. To help tell the story and allow players to immerse themselves in it, OSM Adventure takes advantage of Matinee cinematics, progressive Objectives and other tools available from OSMT. The very first thing an OSM Adventure level designer should do is consider a storyline that would be fun to play through. You can find some inspiration and development tips for your story at the External Links section at the bottom of this page.
Players should start out with a limited number of weapons and other powerup items at their disposal. The advercity they face should be likewise limited. As they progress, the monsters, traps and puzzles can get more difficult and the powerups and items they find can get more powerful to help them. At various stages within the map, after the player has achieved some goal, they should be allowed to start from that point, as opposed to starting fromt the beginning again. Monsters, traps and puzzles should be combined to offer more variety, in other words, a simple trap often seems "unfair" to players, however a trap that is combined with a puzzle or a monster can be more interesting. At the end of an adventure, use an OSMEndGameTrigger to end the map, either by leading the player to touch it or by using another trigger system (that the player instigates) to trigger it.
See also the Tips section below.
This actor is meant to handle all aspects of the Objectives players can reach in an OSM Adventure map. It is also designed to start an intro matinee cutscene for the map as well as intermediate cutscenes for each objective, if desired. Set up Matinee cutscenes as normal. The OSMObjectiveManager holds a series of optional properties for each Objective, including their ScoringValue, AdrenalineAward, PlayerStartTag (see below), NextObjectiveTimelimit and CutSceneTag. There is an additional option to display the CutScene for that objective in "Bullet Time". These Objectives can only be triggered once and the trigger should be instigated by the player, either directly or indirectly, to ensure adrenaline award, etc. The Objectives can be reached in any order.
See also OSMObjectiveManager.
Progressive PlayerStart setup
As the player achieves Objectives and reaches a new area in the map, they will expect to be able to start from that point in the level in case they die afterward. Use TriggeredPlayerStarts that will be triggered on/off as the player progresses through the level. An OSMObjectiveManager can handle the toggling of these playerstarts for each Objective reached. Make sure the only TriggeredPlayerStarts that are bEnabled at match start are the first ones. You should place multiple TriggeredPlayerStarts in each Objective's start area, all set with matching Tags to be toggled by the OSMObjectiveManager.
IntroCutScenes, Intermediate cutscenes and DeathScenes
Cutscenes are Matinees used during OSM play to give the Player important information about their place in the adventure. It's good to keep Players informed as they begin their adventure, are challenged by problems, achieve various goals and finish. No cutscenes run during online play, so Players should be given some clue as to their progress and their next objective even without them. Cutscene Matinees are set up as normal, via the Matinee gui and using the SceneManager actor. Aside from the IntroCutScene, which has it's own IntroCutSceneTag and IntroCutSceneLength properties in OSMObjectiveManager, all cutscenes are set to launch from the OSMObjectiveManager through it's Objectives array. All cutscenes must be launched by the OSMObjectiveManager; do not launch them from another trigger system. The Player's Pawn can be controlled during a cutscene by simply setting up a ScriptedSequence to control the pawn, and matching the Tag of the script to the PlayerScriptTag property on the SceneManager. As long as the cutscene is launched from the OSMObjectiveManager, it will force the script to control the Player's Pawn during the scene. Be careful not to let the Pawn script last longer than the length of the cutscene. The Intro can also include the Player's Pawn (even though it is not in game yet) by placing a ScriptedCharacter to control and giving it the Tag of "IntroCutScenePawn". Most all ScriptedActions can be used to control the Player's pawn, such as SetViewTarget, Run, Crouch, Walk, ShootTarget, etc. For proper operation online, remember never to trigger gameplay critical events from either the SceneManager or the Pawn's script because Cutscenes do not run online. Use a ScriptedTrigger for those instead. DeathScenes are just cutscenes that the OSMObjectiveManager will automatically run at death. Just create a simple, short cutscene and match the Tag of to the OSMObjectiveManager's DeathSceneTag property. DeathScenes are automatically set to BulletTime and they will be set to a fixed distance from the Player pawn, so your DeathScene movement should only be controlling the angle of view.
OSM Adventure has an added cheat code (console command).
- Comrade <CharacterName> [<bFavWeapon>] [<bFullAmmo>]
- This will spawn a ScriptedCharacter of any character profile and optionally give them their favorite weapon or full ammo. They will ally themselves with the player and follow/fight alongside. Since bots are not enabled in OSM Adventure, this is a simplified substitute for offline Cooperative play. Example: "comrade brock true true", will spawn a Brock ScriptedCharacter with his favorite weapon and given full ammo for that weapon.
OSM Adventure Mapping FAQ
What is OSM?
OSM Adventure is a new gametype that the OSMT toolset brings. It is designed to lead players to "Run the gauntlet of monsters, puzzles and traps." It is also a gametype that lends itself to telling a story. Along with the use of cutscenes, special effects, and the improved AI of the monsters, this gametype should set itself apart from all others and offer players unique gameplay experiences.
Is this a SinglePlayer gametype or Cooperative?
Both. OSM Adventure was originally designed to be a SinglePlayer, offline-only gametype, but has since evolved to an online-capable gametype that allows more than one human player. The mapper decides how many MaxPlayers their map will hold and designs the level accordingly.
How do I start mapping for OSM Adventure?
Read the section on Old Skool Monsta Toolz Mapping with OSMT : Quick Start to set up Ued with OSMT and begin to use it in your custom map. Map as normal, but use LevelProperties -> DefaultGametype OSMT.OSMGame.
What theme should my OSM map be?
Literally any theme, any environment, any setting, any time, any place. This gametype is the premiere storytelling gametype, so imagination should reign supreme.
How do I set up a story for my OSM map?
Concentrate on telling a good story, or rather, having the player play a good story. Start them off in some minor conflict, give them small Objectves to achieve. As they progress, ramp up the challenges, make things harder. Likewise, as they achieve more, give them more pieces to the puzzle of the story, give them more to work with to achieve the next goals. In the end, tie all the questions and conflicts of your story together into one final conflict or problem to solve. Make this final conflict the biggest. Once that is achieved, give the player a quick but satisfying resolution to the whole conflict or puzzle of the story and end it. For more on storytelling, search the web, there's plenty. Also check out the Story Structure links at the bottom of this page.
Do I need to have Monsters, Traps and Puzzles?
You do not really need each of these, but this is what sets OSM apart from other gametypes. It is highly recommended that you combine these elements, so that a trap is combined with a puzzle, a puzzle with a monster, etc. This makes their encounter more interesting and enjoyable for the player.
How do I set up complex Monster behavior?
Very complex monster behavior is possible with OSMT. This toolset is meant to mimic the old skool-style monster support that UT and Unreal gave. That means old-timers will recognize this stuff right away, but it also means there's plenty of info already on the 'net to help. For a quick tutorial, see Basic ScriptedPawn Tutorial. Steven Polge's Unreal Creature Care and Feeding Guide is also a great resource. See also the included Manual.
What if I also want to have "scripted" behavior, as in ScriptedSequences?
OSMT includes two key ScriptedActions, ACTION_PossessPawn and ACTION_Monsterize, that can "catch and release" NPC ScriptedMonsters. Either in a cutscene or in mid-game, you can have a ScriptedSequence possess a ScriptedMonster, control it and later monsterize it, to return control back to a ScriptedMonsterController. 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.
What are the available animations for these creatures?
OSMT creatures make use of the included UT2004 Invasion creature vertex mesh animations. To view these, you can use the Mesh Browser. (see Toolbar for a picture of the "eye" button) In UT2004, this browser does seem to have a display bug, where if a Vertex Mesh actor is in the map space already, none of the meshes display in the Mesh Browser. So to view these animations, it's usually best to simply open a fresh UnrealEd session and then open the Mesh Browser.
Do I need Bot Support in an OSM map?
It may sound strange to have Bot Support in a SinglePlayer map, but yes you need to have a botpath network in place in order to allow proper Monster navigation. Monsters use the same navigation actors as bots. The UnrealWiki is again a good place to get info, as is Blitz's Advanced Bot Pathing Tutorial.
How do I set up Puzzles or Traps?
There is no simple tutorial to make these things as they should be completely unique to your map. Liberal use of Movers and Trigger Systems is what makes these things work. The UnrealWiki can help with a lot of the issues you may run into. By in large, Puzzles will be far more complex, but IMO far more satisfying to players. Try to combine these elements (monsters, puzzles and traps) together in different ways to make things a bit more interesting.
How can I detect when a group of creatures are dead or when an area is cleared of monsters?
A group of creatures can be set with a common Event that will trigger a Counter. When the counter reaches the number of creatures in that group, the Counter will fire. If you don't know the number of monsters, but need to know if the player is alone, use the included PlayerAloneTrigger, which will only fire if only the player and friendly creatures are within its collision cylinder.
How does the player win?
A player wins an OSM map when they've achieved a final goal the mapper has set. In technical terms, an OSMEndGameTrigger is used to signal to the OSMGame that the player has won. This trigger can be Touched by the player Pawn or Triggered.
How do I set up Objectives?
Using an OSMObjectveManager simplifies most of it. You can concentrate on the points of your story, the level, the things the player needs to achieve. Then, set a Trigger for each of those Objectives to go off when the player achieves them. That trigger is used to signal to the OSMObjectiveManager that they've done it, to signal a cutscene (to tell the player they've done it), toggle new PlayerStarts, give a Score or Adrenaline award, start a timelimit to reach the next Objective, etc. Just make sure the trigger is somehow Instigated by the player so they are properly awarded points, etc. That's pretty much it.
How do I set up a player script to run during a cutscene?
You can easily control the player's pawn during your Objective cutscenes. The SceneManager already has a PlayerScriptTag property to match to your AIScript's Tag. Unfortunately, the stock code for this doesn't work. But as long as you have an OSMObjectiveManager starting the scene, it will force it to work for you. You need to use a ScriptedSequence and match the Tag to the PlayerScriptTag property for your cutscene, do not use an UnrealScriptedSequence for this purpose. You can set the ControllerClass to either None or ScriptedController, do not use an AIController for this purpose. You can do many of the ScriptedActions in your script, including SetViewActor, MoveToPoint, Crouch, Walk, PlaySound, PlayAnimation, etc. You can use the ScriptedSequence itself as the target for a MoveToPoint or SetViewTarget action. Be very careful not to let the script run longer than the cutscene. Test your cutscene with many variations on player position and status to make sure everything works. Note: Online games omit all cutscenes.
How do I set up a custom DeathScene?
A DeathScene is just another matinee cutscene. It will be played upon player death as long as you match the DeathSceneTag property on the OSMObjectiveManager to the Tag of the DeathScene matinee. DeathScenes are always played in BulletTime. It's a good idea to signal to the player they have died. For that purpose, a "YouDied" texture is included in the OSMTex texture package for the purposes of a CameraOverlay. Note that the distance from camera to carcass is locked and doesn't change, although the camera angle will according to your custom DeathScene matinee. Note: Online games omit DeathScenes.
Are vehicles allowed? Translocators?
Yes, vehicles are allowed by default. Included in the toolset is the TeamVehicleFactory, but you can also use an ONS factory or those made for VCTF. By default, no translocators are available in OSM, however if you want them in your map, just add a NewWeaponPickup and set Pickup -> PowerUp to "Transpickup".
Can I get ScriptedCharacters to drive/ride in vehicles or use a turret?
ScriptedCharacter subclasses can use vehicles or turrets via ScriptedSequences and included ScriptedActions such as ACTION_TryToDrive, ACTION_ExitVehicle, ACTION_VehicleFire, etc. Once driving, they can be directed to ACTION_MoveToPoint to go places or ACTION_SetViewTarget to aim at things. It's not the smoothest implementation of driving, it's mainly available for use in Matinee cutscenes or in other special situations (see OSM-Guide's final stages and the battle between Skaarj and Krall), but it can be used in in-game situations if you're adept at ScriptedSequence AIScripting. The reason this is a little more difficult is because the ScriptedMonsterController expects to be controlling a Monster with a mesh able to Jump, Turn, etc. as opposed to a Turret or Vehicle, which has no such movement animations.
How can I force the player to play a certain Character, have a specified Name or carry particular default weapons at map start?
The OSMObjectiveManager has properties to define the default Character, Name and Equipment (weapons). To define a custom Character, you must have a Character profile set up in a .upl file in your ...UT2004/System/ directory. When defining equipment, be aware that the property is a string variable type, expecting you to enter items in the format, PackageName.ObjectName. For example, XWeapons.LinkGun.
Can I define extra weapons once the player has reached a certain Objective?
The OSMObjectiveManager can allow mappers to define AdditionalEquipment per Objective so that if they die after reaching that Objective, they will respawn with DefaultEquipment plus this AdditionalEquipment. AdditionalEquipment is defined the same way DefaultEquipment is. (see the previous question) However, if you want this addition to be used in all subsequent Objectives, you must explicitly add them to each Objective.
How can I set up a custom loading screen for my OSM Adventure?
To set up a custom loading screen (aka, Vignette) for your OSM Adventure map, you just need to have a texture embedded (myLevel) in your map called "LoadingScreen". To match other stock loading screens, a 4:3 ratio image (say, 1024x768) is used to fill the top portion of a 1024x1024 texture. (So, the bottom 256 pixels will be blank) This is imported to the myLevel package and mipmaps are created on import. Important: This custom image must be used somewhere in the map in order to be saved. It is suggested that it simply be assigned as a Skins property on some hidden actor, like a NavigationPoint.
What should I do "extra" to make my map work as a CoOp OSM Adventure?
Cooperative play requires the mapper to take seriously the limitations of online play. First and foremost, your map should be tested thoroughly for proper online replication, so learn how to Launch A Local Netgame to test as a DedicatedServer. Second, make sure that you have set up your level to allow multiple Players, by setting MaxPlayers, placing enough TriggeredPlayerStarts, providing extra Monsters, Weapons, Ammo, etc. Also, the progressive PlayerStart setup will make the last Objective achieved the active respawning point. So if Players are allowed to split up, when they die, they will respawn whereever the last Objective achieved is. Finally, make sure your map won't frustrate Players by limiting their tactics. If you have a gate slam down after the first Player enters the room, the rest of the team could be stranded. Also, cutscenes do not run online, so make sure the Players will know what to do next even without them. Important: Do not set up critical Events to be fired by a Matinee, because Matinee cutscenes will not run online. Instead, have them triggered by a ScriptedTrigger or the like. CoOp OSM maps require extra thought, more careful design and thorough testing than SinglePlayer OSM Adventures will.
How should I prepare my OSM map for release?
Be sure to include the OSMT files with your map zip file. It is small so this shouldn't be a burden on the end user. You could include all the files in their respective folders, including the OSMT.u, OSMT.ucl, OSMTex.utx and the documation .txt files: OSMT_Dev, OSMT_Manual and OSMT_Readme. Or to make this easier and to keep your map's custom content separate from the OSMT files, you can simply add the entire OSMT .zip file to your map's .zip file. (an embedded .zip) Without including these files, your map won't open for the end user, so make sure to include simple installation instructions in your map's readme.
This is a list of useful suggestions for creating a successful singleplayer or multiplayer OSM Adventure.
- Make sure your adventure (story) has a beginning, a middle and an end. Meaning, you have your players begin the adventure with an introduction of some kind to establish the setting, pose a main conflict, puzzle or question that players must solve, and then have an initial "push" in the direction the adventure must go. Then, you have the players run through a series of objectives that get progressively harder, while showing more and more of the answers to the main conflict or question, and giving them more items/friends/clues to help them with this struggle as they go along. At the end, answer the biggest question and/or bring the main conflict to a head (a big showdown), and then quickly wrap it up with a satisfying resolution that tells the player they've set things right again, put the world back in order in some way through this struggle. This is story 101 and by figuring this out in detail ahead of time, the rest of your design work will practically fall into place, believe me.
- Draft a list of story points (objectives) according to your adventure idea. Refer to this list as you sketch out a floorplan for your map. Think of the technical things you'll need and if they seem to be more complex than you've done before, or you're just not sure they're possible, think of another way. Don't get caught in the trap of trying to construct the impossible because you said, "Well, I'll figure that out when the time comes." Do your research and do some tests to ensure what you're thinking is at least possible.
- Finish one area at a time. Begin at the beginning and move on from there. Try not to jump ahead without at least thinking about how the areas you've already worked on will be completed. That way, chances are better that you will actually reach that completed state. Don't sell yourself short. Be picky and tough on yourself before others do.
- Take a look at all the other OSM Adventures available, just to see what's been done and take a look at how they were done in the editor.
OSM Adventure Maps
- OSM Adventure Map Archive - From UnrealPlayground.
- OSM-Gauntlet - An example map for the OSM Adventure gametype, available on UnrealPlayground.
- OSM-Guide - An example map for the OSM Adventure gametype, available on UnrealPlayground. This map is designed to help mappers learn about OSM Adventure by providing Note actors that help explain the various elements involved.
- OSM-Wangara - A multi-level campaign by Lord_Simeon, available on UnrealPlayground.
- Old Skool Monsta Toolz Subforum - Provided by UnrealPlayground. A place to discuss OSM Adventure and OSMT topics.
- 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.
Links that can help develop compelling story.
- Classic Story Structure Begins with Plot
- Plot, Dialogue, Transistions, Story Structure: Beginnings, Middles, and Endings
- Teaching About Story Structure Using Fairy Tales - A lesson plan that teaches story development.
- Story Structure 106: Five Minute Pilots
- Old Skool Monsta Toolz - A hub for info on Old Skool Monsta Toolz.
- OSMT Monster Manual - A detailed reference for all OSMT creatures.
- OSMObjectiveManager - An actor that handles Objectives and other important elements of OSM Adventure maps.
- Artificial Intelligence – Main hub for Unreal AI topics.
- Trigger Systems - An overview of using triggering actors to achieve complex behavior.
- Bot Support - Hub for Unreal Bot topics, navigation path networks, etc.
- Monster Support - Hub for Unreal Monster topics.
- Basic ScriptedPawn Tutorial - A step-by-step tutorial to implement ScriptedMonsters and their related AI actors.
- NPC Support - Hub for Unreal Non-Player Character topics.
- Gametype - A hub for mapping in the various Unreal gametypes.
- Topics On Mapping - Main hub for Unreal Mapping topics.
SuperApe: Working... Please do not edit this page.