Description

This package for Unreal Tournament (UT99) contains the Mutator SBQueenSaver and a modified Queen.

Mutator

This Mutator runs once when a map is loaded and replaces all existing Queens with the new Queen. Also Actors that can spawn other Actors (aka "Factories") are checked if the spawn class is a Queen and if so, the spawn class is changed to the new Queen. Queens coming into game later are also replaced.

All Mutator's parameters in a nut shell:
NameValuesDefaultDescription
bActivetrue | falsetrueSet to FALSE to deactivate the mutator. Use it to disable this mutator temporarily.
bReplaceQueenSubClassesAlsotrue | falsetrueReplace also sub classes of Queens or class'Queen' only?
bUseStaticQueenDestsCount true | false true If true, function QueenDestsHave() will cache the result of first QueenDests search. Code will run faster by this, but later added QueenDests are neglected. (But: Have you ever seen a QueenDest coming in after game has started?)
Does not affect Queens that are spawned by factories.
LogLevel see LogLevel LOG_Info see LogLevel
bUseLogTimeStamptrue | falsetrueAdd a time stamp in front of every log message?
SpawnersA list of maximum 16 spawner entries. Details see Replacement in Spawning Actors
DontTreatTheseActorsA list of maximum 32 Actors that should be ignored. Details see Replacement Exceptions

LogLevel

Play with the Log level to see what is going on. Possible values and their meanings are:
LOG_NoneDon't log anything. Not recommended.
LOG_ErrorLog errors only. (An error prevents the code to continue.)
LOG_WarningLog warnings also. (A warning is issued when an unexpected circumstance occur but the operation will not being compromised.)
LOG_InfoAdditional information of what has happend is logged.
LOG_DebugAdditional information of what has NOT happend is logged. Use this to track down bugs.
LOG_AllAll logging is send to the log file. For example if a special code block is entered or left.

Replacing Queens

Replacement Exceptions

Sometimes it is not desired to do a replacement, for example if that Queen has custom code or is placed at a special location. You can prevent single Actors from treatment by putting the map and Actor name into the list DontTreatTheseActors in the INI file. All Actors given in this list with maximum 32 entries will be ignored by the Mutator.
Don't mess up the Actor name with the class name – what is needed here, is the Actor name. To find out the name of specific Actors in a map you can use UnrealEd (see window Actor Properties>Actor>Object>Name) or set the LogLevel to LOG_Debug and have a look at your UnrealTournament.log. See default values for examples.

Some other notes:

The default values are:
DontTreatTheseActors[0]=(MapName="MH-TowerOfDeath2",ActorName="Queen0")
DontTreatTheseActors[1]=(MapName="MH-Invasion_4+SBMod1",ActorName="FrozenQueen0")

Example explanation of the first entry: In map MH-TowerOfDeath2 the Actor named Queen0 will be skipped by the Mutator.

Replacement in Spawning Actors

When a map is loaded the Mutator also inspects ThingFactories and their sub classes if their Prototype is equal to the Queen of the package UnrealI. If so, the prototype will be changed to the new Queen.
Because there are other actor spawners than the well known ThingFactories, you can define up to 16 Actor classes that can spawn other Actors in the list Spawners. Additionally you have to define the property name and the value of the property. If those three matches, the property value will be changed to the new Queen.

The default values are:
Spawners[0]=(ClassName="PW_ThingSpawner",PropertyName="ThingToSpawn",PropertyValue="Class'UnrealI.Queen'")
Spawners[1]=(ClassName="B_MonsterSpawner",PropertyName="CreatureType",PropertyValue="Class'UnrealI.Queen'")
Spawners[2]=(ClassName="B_MonsterLoopSpawner",PropertyName="CreatureType",PropertyValue="Class'UnrealI.Queen'")

Example explanation of the first entry: All Actors of the class PW_ThingSpawner are checked, if the property ThingToSpawn contains the value Class'UnrealI.Queen'. If so, the value is changed to the new Queen. (PW_ThingSpawner is from package Password.u; the B_Monster-things from package BBoyShare.u.)

Exceptions

Because the replacement in spawning Actors is done by the function SetPropertyText, spawners of type array cannot be handled.

New Queen

The differences of the new Queen to the stock Queen of package UnrealI are: All new Queen's parameters:
NameValuesDefaultDescription
LogLevelsee LogLevelLOG_Infosee LogLevel
bUseLogTimeStamptrue | falsetrueAdd a time stamp in front of every log message?
MinDurationSecondsBetweenTeleportsfloat2How many seconds should at least pass between two teleports?
TeleportProbabilityfloat0.75Probability of how many teleport attampts will happen. Must be in interval [0..1].
QueenDestsTagname(None)If set, only QueenDests with this tag are used by this Queen.

Installation

Mutator installation for Client and Server

Put the files
.\System\SBQueenSaver.int
.\System\SBQueenSaverV2.u
.\System\SBQueenSaver.ini
into the System directory of your UT installation. Change the values in SBQueenSaver.ini to your needs. Documentation can also be found in there.

All other files in this package are optional.

Mutator installation on a Server

Mutator installation on a Client

Start UT and choose the Mutator "SBQueenSaver V2" for a local game.

Queen only installation for Mappers

Put the file .\System\SBQueenSaverV2.u into the System directory of your UT installation.

Queen only usage for Mappers

You can use the embedded Queen only without activating the mutator: Add SBQueenSaverV2.u in Actor Class Browser, goto Actor > Pawn > ScriptedPawn > Queen > SBQueen, add SBQueen to your map and set its properties as you like.
If you publish your map don't forget to add file SBQueenSaverV2.u to your package.

About

This package was created by Barbie.
Contact: SeriousBarbie AT Barbies DOT World

Copyright

This package is copyleft - do whatever you want.

Changelog

SBQueenSaverV2, 12 Jan 2025

Filelist:
NameSizeDateSHA1 hash
./Help/SBQueenSaver.htm143292025-01-12(this file)
./Sourcecode/Classes/SBQueenSaver.uc200612025-01-115962aa4cbb4310d147832d2ce5d626e34ce4346a
./Sourcecode/Classes/SBQueen.uc190762025-01-11df3cc15f8b73995c6ab2d9c64c377cde7ffca1ba
./Sourcecode/Classes/SharedCode.uc142312025-01-10327389cf789ae825572c9e9ee5c1607fc0020087
./Sourcecode/copyleft.txt972015-10-020e5dcc49f339d735f36e95e42ea24c81486be88e
./Sourcecode/make.ini3072025-01-11f18bcc8289dd132734912a4e87d76726eb204d28
./Sourcecode/readme.txt822016-08-211cbd672638085e4b53142ebdd86454b23e79cb69
./System/SBQueenSaver.ini33202025-01-11c5773ee96f27a876d2ecee4a35d5e3da925154f8
./System/SBQueenSaver.int1522021-01-0912d4a3416d0837afb2f5217bd2e000d35f7158d5
./System/SBQueenSaverV2.u927922025-01-111ecd401f62ca7cc42afee10db9c7af6440ce5688

SBQueenSaver-V1, 02 Oct 2018

Filelist:
NameSizeDateMD5 sum
./Help/SBQueenSaver.htm104622018-10-02a71297b9ab24ef5c976ea30f32066257
./redirect/SBQueenSaver-V1.u.uz248772018-09-099a2727a8806502a784984215874072d9
./Sourcecode/Classes/SBQueenSaver.uc148672018-09-1628c0c6219af2f2ec23d9b56770bdeab9
./Sourcecode/Classes/SBQueen.uc156842018-08-270759cd7a58c01687221c1941c9efda12
./Sourcecode/Classes/SharedCode.uc121582018-08-084838b31cc6b2c5bb2c1f15ae674b1d40
./Sourcecode/copyleft.txt972015-10-02ae5e178649b00957f4fe7af70b13bc75
./Sourcecode/make.ini3392018-08-06cd0ccc518051351da3f818a14d5dff0b
./Sourcecode/readme.txt822016-08-213d0bc407500120b372804d5452b0601f
./System/SBQueenSaver.ini27152018-09-1670c59f2fbd159113c0e4ddf3fbf102ad
./System/SBQueenSaver.int1532018-08-27d4fe90ad598706da19b37ff9b203ea7e
./System/SBQueenSaver-V1.u759642018-09-094c94bc31d2d2b4e4248bd87f50cdc817