Mapping Doc


  1. ONP-Levelinfo
  2. Follower
  3. Cannons
  4. Mover
  5. Zoneinfos
  6. Inventory Items
  7. Decorations
  8. Trigger
  9. Code Console
  10. ConsoleCommandTrigger
  11. FollowerStopper
  12. PlayerMotionFreeze
  13. WorkingTriggeredAmbientSound
  14. SpecialerEvent
  15. SpeedSwapper
  16. TVTutEvent
  17. FadeoutTeleporter
  18. CoopInterpolationPoint
  19. TelsaBolt
  20. TheCar (not working)
  21. BlockShip
  22. L33tPalm
  23. PlayerAlterZone
  24. FollowerToggler
  25. NoSoundExplosion
  26. NoAmmoDPistol
  27. Battlebrute
  28. PulsegunBeam
  29. ScriptedHumans
  30. HumanSpeechTrigger
  31. SecretAreaActor

-The name of your map files should start with ONP, like "ONP-YourMission" in order to be listed in the pulldown menu "onp custom maps"!!

-To get to the ONP scripts “open olextras.u” in the Classes browser.

-About maps: make defaultgametype always be tvsp (gameinfo->unrealgameinfo->singleplayer).
(The coop game info is olextras.tvcoop)

The base of everything. ONPLevelInfo
This info actor allows the mapper to set special options for the map that cannot be performed under default UT. Simply add it somewhere in the level (it will have a weapon texture) and edit the default properties to set up options:

Under Inventory:
DefaultInventory (20 elements): (class type) All of these items will be added to the players inventory, if they are not already present at the start of the map. (Thus you can only use this to add weapons and pickups, but adding ammo/charge will not work).
InventoryToDestroy (8 elements): (class type) These items will be removed from the player's inventory. If you wish to remove EVERYTHING, add the the inventory class itself, to element 0. Be sure that these items are not present in default inventory.
bAkimboEnforcers (bool): If enforcer's are present at start or added here, should they be forced to akimbo (2 of them)mode?
NetOptions (28 elements; enumeration): This is basically "net variance". The first 20 control the default inventory options and the last 8 control the inventorytodestroyoptions, respectfully. (an element per element basis. i.e. element 3 controls defaultinventory element 3 and element 21 controls inventorytodestroy element 1.
Used_ALL means that the addition/destruction occurs in singleplayer and co-op.
Used_SPOnly means that the addition/destruction for that element occurs only in singleplayer.
Used_CoopOnly means that the addition/destruction for that element occurs only in a co-operative game.
Used_None: Do not use this option! (meaningless and very buggy).
DefaultWeapon: Under what netmode should the default weapon (normally the dispersion pistol but user-added mutators can change this) be given to the player?

PlayerMod(ification) options:
bCutScene: Is the level a cutscene itself? This causes the HUD to be hidden, and the fade in to work somewhat differently.
bJet: Should the player be a space ship? (i.e. np03davidm( (HUD will also be a little different). Also note that if a ship crashes, the player will simply be repawned, rather than being forced to restart the level.
FadeInTime: How long should the complete fade in be (player can move when this is 1/2 complete). Applies only to singleplayer games.
bVrikersTypeStart: When the player "awakens", like in vortex2.
MaxHealth: What is the maximum health a player can have when entering the level? For instance, a true vortex riker game would set this to 12; as the player will only have 12 health when awakening. Applies only to singleplayer games.


(All under SpeedRun):
-GoalTime: The time the player must hit (in seconds) to start getting bonus points. This should be a realistic time where no shortcuts are used, but not much effort is taken to save health/kill enemies/pick up stuff.
-GoalPoints (default: 1000) Points given for hitting the goaltime.
-GoalMult: (default: 2.6) Multiplier of seconds faster than goal time. i.e. if I beat the goal time by 2 seconds, I get 1000 points + the goalmultiplier multiplied by 2. (thus, with defaults I get 1005 points).
-UberGoalTime: The time the palyer must hit (in seconds) to get an extreme amount of points. This should be an extremely difficult time to attain that involves using every shortcut, including jumping on ships, hugging cliffs to slow yourself down, rocket jumping, shock jumping, krall boosting, etc. In other words, a goal Unreal-Done-Quick time. For the record, not every map should have one. (i.e. maps without any real shortcuts, like np02davidm). Most later maps will have one though, thx to the power of rocket jumping.
-UberGoalPoints (default: 6000): Points given for hitting ubergoaltime.
UberGoalMult (default: 7.1): No need to get into description.


The Followers:
Custom scriptedpawns exist in ONP and they are designed to follow the player and fight his enemies.
The current ones are:
-NaliTrooper (a nali which holds a UT weapon. under nali).
-FollowingMercenary (under mercenary)
-FollowingMercenaryElite (under followingmercenary)
-RebelSkaarj (i.e. rebelling against the main skaarj collective and thus helps the player. under skaarjberserker (not berserk though. only there so other skaarj hate him). He has the properties of an iceskaarj (i.e. skin and resistance to freeze attacks (whatever that might be :p ) You can always change its skin in the display options...
-RebelSkaarjTrooper: (under rebelskaarj). a rebellious trooper


Like scripted pawns, they can be given pre-player sight orders (wait/patrol whatever).
Also, their skill level is inverse to difficulty (better AI at lower difficulty levels).

Options:
GreetAnim: Animation to play when greeting (seeing for first time) the player. Sounds are hard-coded...
bShouldWait: If the player must order the creature to follow first, before it will follow.
CanAnger: Can the follower get pissed off at the player if the player shoots him too much? (pissed off=attack player)
bCoward: If this is true, the follower will not help the player. This also allows it to use alarm tags and such as a friendly creature. (like a nali would...)
Menuname (pawn catagory): Give the follower a unique name that will be used in the HUD! All followers probably should be given names...
RebelSkaarj (not trooper!) and followingmercenary only:
bCheckFriendlyFire: If true, merc bullets cannot hurt its controller. Also, projectile firing (skaarj bolts and merc rockets) is aborted if it appears that the projectile would hit the player.
NaliTrooper/RebelSkaarjTrooper only (under that catagory?):
WeaponType: What weapon class will it have? Be sure to use olweapons/olextras classes if needed.
NaliTrooper Only:
Evil: Is this nali evil (hates player?) If so, it basically is just another enemy (used in np04hyperion)
Note: The player can have a max of 8 followers following at once. They will move to the next level.
FollowerStopper:
This will stop followers, and thus they cannot go to the next level. Use this when the followers cannot possibly see the player (for instance, an area too low for a nali to fit into).
FollowerTag: The tag of followers to stop. If set to 'All', all followers in the level still stop.
bAllowTouch: This allows the player to activate it by touching, rather than just triggering the actor, which is normally needed.

About warlord guard: IT follows the player, but has crappy AI and is not part of the main follower system. =test and DO NOT USE IT!

Cannons:
-Cannons have been made that will attack the player or his enemies. They can also be destoryed.
For the spcannon and spminiguncannon, set myteam to 0 for it to attack a player/allies and myteam to 1, for it to attack the player's enemies. Note: followers will attack cannons.
Triggering still will disable them for 8 or so seconds, like normal cannons.

Movers:
Several special movers have been created. If olextras is loaded in ued, they will appear when right clicking the mover button in ued:
SmokeAttachMover: This is an attach mover, basically. However, it also has options that are exactly the same as smokegenerator. As a note, like the smokegenerator, rising velocity will only affect the generated actor if the Generation type is a SpriteSmokePuff or UT_SpriteSmokePuff. (or subclasses).
LoopAttach: This is a loopmover that has an attachtag (thus combining it with an attachmover). You can also set bsmoke to true. This allows it to emit smoke, using the properties given.
LightAttachMover: Requested by chico. Allows lights to be attached in co-op games (client-side).

Zoneinfos:

GunFireSensorZone: If a player inside the zone fires a weapon inside this zone, it will trigger the zone's event.
Vars:
bActive: Whether or not the zone is active (will trigger event). Trigger the zone itself to toggle this option in-game.
EventCallDelay: How long from a player firing a gun should the event be triggered?
bCallEventOnceOnly: If true, and once the event is called, it will never trigger actors of its event again if a player fires.
bTriggerOnceOnly: If true, the zone (bactive toggle) can only be triggered once.

WaterToggleZone: A zone that, upon triggering, will convert to a waterzone or vice-versa. It may still be complex to have true rising waters (you will probably need two movable sheets with special options or something like that (one for the zone boundry and the other for the water).
Options:
bWaterZone (under zoneinfo): Set to true for the zone to initially be water and then dry up. If false, the reverse will occur.
bTriggerOnceOnly: Can only trigger zone once (i.e. water/land change occurs once at max).


Inventory Items:
SuperAmmoShockRifle: Exactly like the normal supershockrifle, only this one uses ammo with each shot.
SPEnf: An enforcer that will keep the akimbo properties when the level changes. Note that the mutator will handle this cahnge on its own, but the level will load 0.01% faster if you use this weapon instead of the normal enforcer.
About weapons: Be sure to also with the osshockrifle and ospulsegun (these weapons support the amp). Again, the mutator will exchange them, but blah, blah....
TVTranslocator: This translocator has a different disc, which will bounce of pawns and decorations, rather than traveling through them. USe this, as in ONP, enemies may not be telefragged (translocation will simply fail, like what occurs when trying to translocate into a teammate).
Ducksize: An old item to allow duck collision to work. DO NOT USE.
(part of oldskool): scorekeeper: Added by the gameinfo, holds the player's score stats. Again, do not add to the world.

Decorations:
TranslatorBook (under book): I always found it stupid how translatorevents did not move when a book was shot. A translatorbook spawns a translatorevent (with the given options which are identical to translatorevent's, including the tag of the book) itself. The transevent will move with the book....

TDBarrel, TDChest, TDWoodenBox, TDMedWoodBox, TDSmallWoodBox:
They will look exactly like thieir non-TD-in-name parent. However, they automatically break apart when the player comes in contact (well, in col. radius ). This can be accomplished also by triggering a normal deco, but I figure that this is faster to create (you probably will need to enlarge the col. radius however...).

Triggers:
Many new triggers have been added:

CodeConsole: This is not truly a trigger. Rather it is a user input security pass system. Upon touching the trigger, the user is prompted with a code screen. He must enter the correct numeric code (randomly generated at start of level) for the event to be called (and thus opening doors or whatever...):
Options (many):
MinNumber: The lowest number the random number gen can return to be used as the code.
MaxNumber: The highest number the random number gen can return to be used as the code.
TranslatorTag: Obviously, the code must be found SOMEWHERE (unless you want an impossible to get past door). Set a translatorevent's tag to the translatortag of the codeconsole. Where you place "%c" (no quotes!) in the message/altmessage, the random code will be inserted there.
ClearenceMessage: IF the player enters the correct code, he receives this message.
ClearenceSound: Sound to play on correct code entry.
FailureMessage: Message recieved on incorrect code entry.
FailureSound: Sound received on incorrect..
SecurityPrompt: Message written in the prompt screen.
PromptSound: Sound played when console is touched by a player.
KeyEnterSound:sound played when a number key is depressed while in the prompt screen.
FailureEvent: If the incorrect code is entered, actors with this tag are triggered (i.e. alarms/factories?)
Event: If correct code is entered, actors with this tag are triggered (door most likely).
bEnabled: Is it activated at start? Triggering the console toggles this in-game.
MessageType: The "type" of message. See top of this doc.
LinkedTag: If you wish multiple codeconsoles to have the same code, you must set their linktag to their tag. (i.e. tag and linktag must be the same in EVERY codeconsole that has the same code). Yes, this isn't the best way to have programed this, but I'm not going to rewrite it now
Thus if consoleA and consoleB are to have the same code, set consoleA AND consoleB's tag AND linktag to something.
DisableOnCorrect: If true, the console will be disabled when correct code is entered (thus setting benabled to false) Set this to false for control of doors/lifts that close after opening.

ConsoleCommandTrigger:
I am apprehensive about making this, but here it is.
Command: On triggering this actor, this console command will be called (consolecommand=command a user inputs into console). Do not be a f*cking retard and put exit, debug gpf, setname Moron, etc. into it!

FollowerStopper: now part of ONPlevelinfo, prevents Followers from following to the next map if true
KeysInverter: Best trigger ever!
If triggered, it will invert the triggerer's keys (all players if bInvertAllPlayers is true). up will mean down, down mean up, viewing up will view down, etc.! (maybe in a drug area or something?).
States (one must be set!):
TriggerToggled: Triggering this toggles between invert/norm.
InvertWhileTriggered: Triggering will invert the players keys and untriggering returns them to normal. Note that if this state is set and binvertallplayers is true, a non-player can trigger this.

MP3Event: Don't use! Mp3 support in UT sux too much so I disabled the system entirely.

PlayerMotionFreeze: VERY USEFUL for mid-level cutscenes. When triggered, a player's motion/weapon keys are locked (all players if bFreezeAllPlayers is true). Thus, preventing him from moving (other keys such as looking and input commands will still work). This ALSO will hide the HUD when activated.
States (one must be set!):
The same as KeysInverter!

WorkingTriggeredAmbientSound:
This can turn an ambient sound on/off by triggering.
bInitiallyPlaying: IS the sound playing at the beginning of level?
TheSound: Will become the ambientsound.
States follow the same concepts as keysinverter. Toggle enables/disables and OppositeWhileTriggered will toggle when triggered and return when untriggered.

SpecialerEvent: Even more special than special event!
New:
Option: MyMessageType allows you to set the type of message that the message will be (see top).
Playerpath supports co-op.
State VaporizeInstigator will vaporize (kill without a carcass being created) a non-player instigator.

-DoubleVolume: If true, a playerplaysound type is doubled.

SpeedSwapper:
Triggering can change around gamespeed/"pause".
Options:
TriggerOnceOnly: Take a guess. 'Nuf said.
Pause: if true, triggering causes playersonly to be activated.
Speed: If pause is false, than what speed will the game change to? Set this to 0 to use default speed at start of level.
Time: If pause is true, how long does it take to disable playersonly after it was used.
If pause is false, then how long does the transition take to the new speed? Remember, the game will speed up/slow down during the transition until it reaches the desired speed.
Obviously setting this to 0 means instaneous change.

TVtutEvent: Only used in tutorial map. And only works in tutorial map (well tvtutorial gameinfo). so, uh, don't use

Miscellaneous actors:

fadeoutTeleporter:
This is meant ONLY as a teleporter at the end of level to go on to the next. It should be used at the end of ALL maps. The game will fade out and then the new level will load.
Options:
TargetFlash: The viewflash the zone will become. Really should not be altered.
FadeSeconds: How long does fade take?
CoopURL (under teleporter): If a co-op game, then this will be used instead of the normal URL. It MUST be set!
ViewFlash, ViewFog: Does nothing

CoopInterpolationPoint: For support of co-op interpolation. Use this instead of the normal point.

PatrolKillPoint: Supposed to be able to kill a patroller, but doesn't work at time of writing.


-TELSA BOLT!
Add a telsa keypoint into the world. A beam is fired from it and will run after the player, as long as the player is close enough. Just look at it yourself.
MUCH THANKS to M.C. Spanky for the rotation code (I suck at vector cross products)
Using the telsa:
-bEnabled: Is it enabled? Triggering will toggle this!
-bTriggerOnceOnly: Self-Explainatory
-MaxBolts: Maximum bolts the telsa can fire. Can be 1-8. Only 1 bolt per target...
-AttackPlayers: Can it attack players?
-AttackAllies: Attack players allies? Not yet implemented. Will be upon massive follower rewrite I promised

-AttackEnemies: Attack other scripted pawns?
-BeamOffset: Offset of beam in local (not world!) vector coordinates.
-HasCap: If true, the beam will have a cap (like the pulse beam) if it ends in the air. If false, it will hide (more realisitic)
-RotSpeed: Maximum rotational speed of the beam in radians per second. That is RADIANS, NOT UNREAL ROTATOR UNITS! (0.4 is about the speed of the player in the spule level)
-MaxLength: The maximum bolt length. Ideally, should be a multiple of 81. If the value is not a multiple of 81, it will be rounded. (a pulsebeam is 81 units long..)
-MaxDamage: The maximum damage the beam can cause per second. I suppose this requires an explaination. I made use of Ohm's law, where voltage/resistance=current. This translates into the electric power formula, where Watts(power)=voltage&2/resistance. Resistance increases when the length between opposing charges is longer. As anything but resistance is a constant, I have simply made the damage formula be:
maxdamage/currrentlength As length increases, damage decreases. The damage at the maximum beam length of course is maxdamage/maxlength, a ratio which defaults to 1 unit of damage per second. Yet, as you close in on the beam, it causes more damage (ex. at 1/2 of maxlength it will deal 2 un./s)

Network:
Untested, but should work. The beam will look like crap in high pings though. I'll write some nice netcode for it in the future.

-EL COCHE! (the car): (not working)
For my physics project, I created a car with relatively realistic physics. I have since placed it in ONP. However, I stress that this is an alpha, AND ONLY A PHYSICS MODEL. No effects are currently present, or even sounds. A damage model does not even yet exist. Yet, the physics model should satisfy you enough. Also, I left the sim console commands and hud in. The HUD will be updated soon (I'll need cool graphics though). PLEASE GIVE ME YOUR POINTERS!
Note that it is not actually a car in the normal sense. Rather, it has two jet engines on each side to propel it. Uneven thrust results in turns.
-Be sure to add a tvdrivablecar! Tvvehicle is merely an abstract class, where other vehicles (I plan to move the plane there), can be under.
Car variables:
-Mass: Still under movement. However, unlike normal UT, this plays a HUGE role in the physics, at least in regards to max/min force.
MaxForce: Maximum forward force that can be exerted by the forward engines. (in newtons).
MinForce: Maximum reverse force that cab be exerted by the reverse engines (in newtons).
EngineRate: How fast holding down forward/back results in engine force changes (Newtons/s)
Gravity: Yes, I probably should use zonegravity, but you can use this to alter Z acceleration from gravity. I will utilitize zonegravity in the future... I promise (vary gravity thoughout level) In unreal units per second^2
EnergyLoss: Console commands set this value to the inputted value, which represents the percentage of kinetic energy lost in collisions. However, as a mapper, simply input the multiplier of velocity in collisions (i.e. what number*oldspeed will new speed be)
Meiu: Coefficient of kinetic frictional acceleration. Kinetic frictional acceleration is defined as Meui*gravity*sin(Normal to road) Future versions will use zonegroundfriction to allow for varying meius thoughout the level.
ARCoef: Coefficeint of air resistance, where air resistance is defined as ArCoef*speed^2. THIS IS WHAT LIMITS THE SPEED OF THE CAR AND ONLY THIS. If you set the value to 0, the car will be able to accelerate forever, so do not do that.

Network:
Absolutely none. For the car to have net support, I need my map

Block Ship Actor
-Simply blocks ship, but does not destroy it.
Use like any other actor. 

 
LEETPALM
Note about palm: 
Using shadow generator: (not working properly)
-Set LightTag to the tag of some actor. That actor is used to calculate the direction and length of the shadow. In other words, think of that actor as the light source.
-bShadowImportant: A true setting means the shadow will show up even if the user is not in high detail mode. (I don't know which one.. but you get the point...)

Issues with shadow generator (plenty):
-Shadows use scriptedtextures, which are voracious eaters of FPS. Having 3 shadows on screen slowed my FPS by 19 (from 85 to 65). In other words, do not use shadows too frequently! I wouldn't allow more than two on screen at once ever. (although in low poly areas you can go higher). In maps, like np06heiko, I don't even know how well 1 will be handled....
-May have wierd marks on them... you'll have to test yourself
-Occasionally are slightly off the tree base. Try rotating the tree.. I really dunno what the problem is.
-Length is calculated by the angle between the light source and collisionheight above the tree base. Note that the texture will never really deform at all. Thus, it is really a pseudo-shadow at best. Yet as long as light is between 30 and 60 degrees, it should be fine..
-The shadow can only bend maximum 45 degrees from its center. Hard-coded UT limit in C++: nothing I can do. Thus, if you have a wall at a right angle to the floor, it will only be on the floor or wall, not both. HOWEVER, you can get around this by placing a 45 degree slope between the wall and floor. As long as the center of the shadow is on that slope, it will appear on all 3 surfaces.
-The shadow can attach to a maximum of 13 different non-coplanar surfaces. If for some insane reason, you need this higher, I'll change it. (BTW, the normal level for decals is 5 :p)
-There is a way I can possibly get around the angle limits and FPS drain. If I make a DLL exclusively for the shadow, I can access C++ code and change a lot (This is assuming that Epic does send me the needed code... I'll email them if you agree with this idea). However, the DLL will only work on windows UT 432 and 436. Thus two versions will need to be released, one with and one without the DLL. Oh, and mac/linux users will have no shadows...  

-PlayerAlterZone: This zone can set various player properties when a player enters. They are reset on leaving.
-JumpZ: Alters incoming player's jumpz to this number.
-JumpSounds array: Sets incoming player's 3 random jumpsounds to these.

-FollowerToggler: Toggles Followers from coward to follower, etc.
-FollowerTag: Tag of follower to alter
-Become: Thing this follower should become. Note that non-aggressive means that the follower will not attack first.
-bAutoFollowTriggerer: If true and the follower is becoming a follower, it will automatically follow the player when it becomes a follower (ya.. I confused you).

-NoSoundlExplosion: DrPest requested this . A flame explosion without the sound.....

-NoAmmoDPistol: Use this instead of dispersion pistol, although the mutator will auto-change. The dispersion pistol now has infinite ammo! In fact, it doesn't use ammo at all or even have ammo


-BattleBrute:
-SeekingOdds: Odds of firing a seeking rocket at easy difficulty. Note that it must have a ranged projectile of rocket or rocket_mk2 to have seeking rockets.
-SeekingDifficultyVariation: Varies odds by this number per difficulty. i.e. medium difficulty odds of seeking are seekingodds+seekingdifficultyvariation*1

Pulsegun beam

Actor->Projectile->TelsaBolt->LaserBeam.
I got sick of all the fak1sh laser beams in npdavidm27 and the mcpest map. This is a REAL LASER!

Advantages:
-Will not go through player.
-Pretty much perfect collision detection.
-Very easy to set up.
-Doesn't stop in mid-air
-Easy to set up triggering system
etc.

To use, simply add a laserbeam onto one side (the generator of the laser). Rotate it so the arrow points to where you want it to go. (the receiving area of the laser)

Some useful properties:
-bActive: Is this initially active? Trigger the beam to toggle this.
-TriggeringType: Like the trigger one. TT_GoodGuyProximity means follower or player.
ClassProximityType: again, like trigger (if TT_ClassProximity is selected for triggeringtype).
-Event: event to call when something gets in way of the beam and passes the triggering type stuff.
-CallEventOnceOnly: This causes the event to be called only once. Otherwise, it will be called each frame as the thing is being hit.
-Damage (under projectile): Amount of damage the beam deals per second.
-bWallHitEffect: Show the telsa/pulse beam wall hit effect on each end?
You can also change the mesh of the beam and light hue and such. (as to use that red beam thing and such).
You will also need to set:
-BeamSize: Amount of uu's one beam takes up.
-MaxPos: Maxiumum individual beams in a series allowed (for instance the pulse beam is actually made of 10 individual 81 uu beams).
-SpriteAnim: The animations changed every 50 ms. If you want just one skin, fill all 5 spots in.
-AmbientSound: Sound beam uses. (keep none if none).

Ok, that should be enough. enjoy.

Be sure to use the lasers in the mines (for the laser activated lift) and the death-lasers in mcpest (set damage to 10000 or so)

-SCRIPTED HUMANS

They are under scriptedpawn->follower->weaponholder->scriptedhuman->scripted(fe)male.

As these are only planned for one level (atje's), there are some slight issues to them:

1) Do not support travelling. I could add it, but if it is in only one level, I may as well save time and not add support :p
2) Do take more time to set up than normal scriptedpawns, but not that much of an issue.
3) Only support default UT models (female commando, female soldier, male commando, male soldier, and boss).

Whatever.. lets describe how to use them:

Add a scriptedmale if you want to add a male model or a scriptedfemale if you want to add a female.

-Note that you will see an unskinned green mesh. This is normal.

-Under display set the mesh to which female/male model you want (again scriptedmales must use male meshes and females must use female. failure to do this will screw stuff up!)

-Now you must set each multiskin from 0 to 3. Load the skin pack for the model (available ones: soldierskins.utx, commandoskins.utx, fcommandoskins.utx, sgirlskins.utx)
Set each multiskin element to the skin number one above.
i.e. you will see skin names like blkt1 or blkt1t_3. You use those in the multiskin(0). similary, blkt3 or blkt3t_1, goes on multiskin(2). The various faces are for multiskin(3). Also note that the t_# is the team color. I recommend keeping the pattern the same for all multiskins....


Note that failure to set multiskins will cause the code to simply select the default skin with a random color. bad idea...

And now you have a propertly skinned model. BUT PAY ATTENTION TO INFO BELOW!

Additional properties:
-Standard follower properties still apply to the humans.
-Can set Evil as true for them to be enemies.
-WeaponType (in weaponholder) is their weapon.
Special human properties:
-various ones added to the sounds. no need to get into detail with these.
-FollowerIcon: This is the texture that will appear in the HUD as the "follower face". Select the texture (with a 5 in it) that coincides with the face chosen. It'll be pretty obvious what you want to select. If you don't set this, cliffy B face will be used :p
-Voice: I simply love this feature! Humans use the voice packs to taunt stuff they kill, scream that you are an idiot shooting them, shout "incoming" when they see enemies, etc.
Simply set this to anything under info->voicepack->challengevoicepack (must be lowest order!).
Realistically, you should only use:
-VoiceMaleOne
-VoiceMaleTwo
-VoiceFeMaleOne
-VoiceFeMaleTwo

-VoiceBoss will also work.

-Animated Face system (SpeechFaces, SpeechTime):

As David simply wanted random faces, this pulls it off. You are allowed up to 6 unique "talking faces". Just plug each texture int he speechfaces. Speechtime is how long each face stays on as the human talks.
-The human will use a talking face when screaming as well. However, it does not move (kinda like a guy with his mouth wide open).


That should cover everything. If you need something else with the humans, please tell me. (you might need some speech trigger? dunno).

-Feel free to just summon olextras.scriptedmale or olextras.scriptedfemale in game for an example (note that defaults have no animated faces)

-HumanSpeechTrigger (under triggers):
Use this to activate scriptedhuman speech.

vars:
-Speech: the actual sound
-SpeechVolume: Volume of sound
-SpeechRadius: Radius that sound can be heard within
-FaceLastingTime: Amount of time per face before it changes.
-HumanTag: Tag of the human to talk.

-Secret area level actor (under keypoint). These secret areas are recorded in the stats. It is possible to do a "secret secret area" that won't be initially in the stats (i.e. x secrets found/total) with thingfactories.

Properties:
-FoundMessage: Message to give player when it is found.
-FoundMessageType: MessageType of message (similar to specialerevent)
-FoundSound: Sound to play when found.
-Points: Number of points to give player for finding the area. The %i in foundmessage is replaced with this number.
-Event: Triggered when secret area is found.

-Added MENUS! Just hit the start button in the ONP level pack. Enjoy them. Advanced stats in the high score menu will come later. The hardest part is out of the way at least.