|
|
(11 intermediate revisions by 4 users not shown) |
Line 1: |
Line 1: |
− | __NOTOC__ __NOEDITSECTION__
| + | #REDIRECT [[User:00zX]] |
− | ===Who am I===
| + | |
− | | + | |
− | :Well Im OlympusMons thats who :P Ive done a fair bit over the years regarding making games and such. Unfortunally none of it has really been completed, mainly because of a lack of organisation on my part. Ive been an active member on the unreal wiki for some time and am glad to be contributing something back now that my skills are better.
| + | |
− | | + | |
− | ::[http://www.wikipedia.org/wiki/Olympus_Mons Olympus Mons]
| + | |
− | | + | |
− | <br>
| + | |
− | ===Work Ive done===
| + | |
− | | + | |
− | =====Graphics / Modelling=====
| + | |
− | :http://www.3dmpg.com/ is based in Perth, Australia.
| + | |
− | | + | |
− | =====Mods=====
| + | |
− | ======Mutators======
| + | |
− | :[http://utforums.epicgames.com/showthread.php?t=602815 MotionBlurPC]
| + | |
− | :[http://utforums.epicgames.com/showthread.php?t=587881 Newtators Mutator pack for UT3]
| + | |
− | | + | |
− | ======UC2004======
| + | |
− | ::I am inactive atm but I spent alot of time with a mod called UC2004 [[http://www.UC2004.com/|UC2004]] which is a remake of ''Unreal Championship 2'' for PC using the [[Legacy:UT2004|UT2004]] engine.
| + | |
− | | + | |
− | =====UnrealWiki Contributions=====
| + | |
− | ======UT3======
| + | |
− | *[[UE3:UTMutator_MotionBlurPC (UT3)|UE3:UTMutator_MotionBlurPC (UT3)]]
| + | |
− | | + | |
− | ======UT2004======
| + | |
− | *[[UE2:Using_the_UT2004_mod_system|Using the UT2004 mod system]]
| + | |
− | **[[UE2:UT2k4Mod.ini|UT2k4Mod.ini]] - Another kinda usless page, good for beginners and people who dont know how to use -mod=<br>
| + | |
− | **[[UE2:UT2004 Default.ini|UT2004 Default.ini]] - First page I contributed, mainly ripped from other tuts and the udn but a good page I think.<br>
| + | |
− | **[[Legacy:Compiling With UCC|Compiling With UCC]]<br>
| + | |
− | | + | |
− | <br>
| + | |
− | ===Work Im doing===
| + | |
− | | + | |
− | =====Mods=====
| + | |
− | ======Project: Triggerman======
| + | |
− | ::
| + | |
− | | + | |
− | ======Gametypes======
| + | |
− | :[http://utforums.epicgames.com/showthread.php?t=615554 Attrition Gametype for UT3]
| + | |
− | | + | |
− | ======Mutators======
| + | |
− | :[ Mutatoes Mutator pack for UT3]
| + | |
− | | + | |
− | <br>
| + | |
− | ===Skills===
| + | |
− | | + | |
− | ====Modelling====
| + | |
− | :Ive been modelling in 3dsmax since version 2.5, developed a small menu plugin called ''Quadmx7'' which isnt publicly released. More recently this plugin has been upgraded for 3dsmax 9, now called QMX9.
| + | |
− | | + | |
− | ====Graphics====
| + | |
− | :I learnt the Adobe Suite while doing a few TAFE courses, Photoshop and Illustrator are my strong points, I can use Premiere and Indesign also. Ive learnt alot more since doing these courses and am always looking to expand my skills. The Visual Arts and Technology course I did covered alot of stuff though not related directly to technology like design fundamentals, drawing foundations and design visualisation. There was some art critique involved but I really didnt like that as I prefer to do critiques on stuff where my knowledge is best, namely the interactive entertainment industry.
| + | |
− | | + | |
− | ====UnrealScript====
| + | |
− | :For the last few years and I dabble in unreal scripting, Im really happy at where this is going and thanks to you guys Im 10x better than when I started. UT3 is proving to be really good for me and having started with UT2003 I think Ive come along way in that time, its good to finally get into alittle UE3 stuff. Its great to finally be able to see and use the upgrades to Unreal Script.
| + | |
− | | + | |
− | <br>
| + | |
− | ===Rants===
| + | |
− | :[[Legacy:OlympusMons/Rants|OlympusMons/Rants]]
| + | |
− | ::[[Legacy:OlympusMons/Rants#Platforms_and_crossing_the_border.21_.2821.2F04.2F2007.29|'''(21/04/2007)''' Platforms and crossing the border! ]]
| + | |
− | ::[[Legacy:OlympusMons/Rants#Epic.2C_UE3.2C_UT2007_and_the_future..._.2827.2F10.2F2006.29|'''(27/10/2006)''' Epic, UE3, UT2007 and the future... ]]
| + | |
− | ::[[Legacy:OlympusMons/Rants#Total_Conversion_Woes_.2811.2F09.2F2006.29|'''(11/09/2006)''' Total Conversion Woes]]
| + | |
− | <br>
| + | |
− | ===Conclusion===
| + | |
− | | + | |
− | :My knowledge of games and game design is quite large but theres always more to learn. Thats what really attracted me to the wiki, this is a great place for people of all skills and skill levels to come, learn and contribute. I hope to add a little to the wiki myself and as time goes by, I hope to improve on my skills as well as help others improve on thiers.
| + | |
− | | + | |
− | :Anyways you've probably heard enough by now.
| + | |
− | | + | |
− | :Off you go do some modding! ;)
| + | |
− | <br>
| + | |
− | ===Contact Me===
| + | |
− | ======Forum======
| + | |
− | MonsOlympus on [http://forums.beyondunreal.com/member.php?u=42745 Beyondunreal Forums] and [http://utforums.epicgames.com/member.php?u=267217 Epic Games Forums]
| + | |
− | ======IRC======
| + | |
− | MonsOlympus on [irc://irc.enterthegame.com EnterTheGame]
| + | |
− | ;* [irc://irc.enterthegame.com/unrealscript #unrealscript on EnterTheGame]
| + | |
− | ;* [irc://irc.enterthegame.com/unrealscript #unrealwiki on EnterTheGame]
| + | |
− | ======Email======
| + | |
− | (only via the Unreal Wiki's [[Special:Emailuser/OlympusMons|E-mail user]] feature)
| + | |
− | | + | |
− | <br>
| + | |
− | ====Mutator Framework====
| + | |
− | Custom UT3-specific classes<br>
| + | |
− | +Object
| + | |
− | ++'''UTData''' : Buffer Class
| + | |
− | +++[[User:OlympusMons#UTGame_Data|UTGame_Data]] : Might rename to UTData_Game
| + | |
− | ++++[[User:OlympusMons/UTD_Game_Vampire|UTD_Game_Vampire]] : Example of UTGame_Data Subclass
| + | |
− | +++[[User:OlympusMons/UTData_FactoryReplacer|UTData_FactoryReplacer]]
| + | |
− | ++++[[User:OlympusMons/UTData_VehicleTeamSwap|UTData_VehicleTeamSwap]]
| + | |
− | ++Actor
| + | |
− | +++Info
| + | |
− | ++++GameRules
| + | |
− | +++++[[User:OlympusMons#UTGameRules_Info|UTGameRules_Info]]
| + | |
− | ++++Mutator
| + | |
− | +++++[[User:OlympusMons#UTMutator_GameExpansion|UTMutator_GameExpansion]]
| + | |
− | ++++'''UTInfo''' : Buffer Class
| + | |
− | +++++[[User:OlympusMons/UTInfo_Weapon|UTInfo_Weapon]]
| + | |
− | ++++++[[User:OlympusMons/UTI_Weapon_SwitchSpeed|UTI_Weapon_SwitchSpeed]]
| + | |
− | | + | |
− | <br>
| + | |
− | [[Image:DbMutator_GameX-Flow.gif]]
| + | |
− | <br>
| + | |
− | | + | |
− | =====UTGame_Data=====
| + | |
− | <uscript>
| + | |
− | //===================================================
| + | |
− | // Class: UTGame_Data
| + | |
− | // Creation date: 11/12/2008 21:03
| + | |
− | // Last updated: 20/12/2008 00:30
| + | |
− | // Contributors: OlympusMons(/d!b\)
| + | |
− | //---------------------------------------------------
| + | |
− | //Cutdown Version
| + | |
− | //===================================================
| + | |
− | class UTGame_Data extends UTData;
| + | |
− | | + | |
− | //---------------------------------------------------
| + | |
− | var string CurrentMap; /// Name of the Loaded Map
| + | |
− | | + | |
− | /** Factory Replacement/Per Map Factory Replacement */
| + | |
− | var UTData_FactoryReplacer FactoryData;
| + | |
− | var class<UTData_FactoryReplacer> FactoryReplacerDataClass;
| + | |
− | | + | |
− | /** This mutator uses Per Map Setting from the FactoryReplacer */
| + | |
− | var config bool bUse_PM_Set;
| + | |
− | | + | |
− | //---------------------------------------------------
| + | |
− | | + | |
− | function InitFactoryReplacer(string CurrentMap){
| + | |
− | local int iMap;
| + | |
− | | + | |
− | // CurrentMap = WorldInfo.GetMapName(true);
| + | |
− | | + | |
− | if(FactoryReplacerClass != None) FactoryData = new(self) FactoryReplacerClass;
| + | |
− | if(FactoryData == None) return;
| + | |
− | | + | |
− | if(FactoryData.bUsePerMapSettings) {
| + | |
− | `logd("Using Per Map Factory Replacer Settings!",,'GameData');
| + | |
− | //TODO: Parse commandline options for this?
| + | |
− | iMap = FactoryReplacer.PerMapFactorySettings.Find('Map', CurrentMap);
| + | |
− | if(iMap != INDEX_NONE) {
| + | |
− | FactoryData.SetupPerMapData(iMap);
| + | |
− | }else {
| + | |
− | `logd("Using Global Factory Replacer Settings!",,'GameData');
| + | |
− | FactoryData.AddDummyMapEntry(CurrentMap);
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | //FactoryReplacer.ReplacementFactories.FactoriesToReplace
| + | |
− | }
| + | |
− | | + | |
− | //TODO: Support for any factory, vehicles, weapons, etc
| + | |
− | function FactoryReplacement(NavigationPoint Other){
| + | |
− | local int j, iMap, iFactory;
| + | |
− | | + | |
− | if(FactoryData == None) return;
| + | |
− | | + | |
− | if(FactoryData.FactoryGroup != 'FT_Vehicle') {
| + | |
− | //Replace Factory
| + | |
− | for(j = 0;j < FactoryData.Length();j++) {
| + | |
− | if(Other.IsA(FactoryData.ReplacerFactories[j].ReplacedFactory) &&
| + | |
− | !Other.IsA(FactoryData.ReplacerFactories[j].ReplacedWithFactory))
| + | |
− | {
| + | |
− | ReplaceWith(Other, FactoryData.ReplacerFactories[j].ReplacedWithFactoryPath);
| + | |
− | `logd("Factory: "$Other$" Replaced With: "$FactoryData.ReplacerFactories[j].ReplacedWithFactoryPath,,'FactoryReplacer');
| + | |
− | return false; //NewFactory.InitializePickup();
| + | |
− | }
| + | |
− | // else if(ReplacementFactories[j].ReplacedWithFactory ~= "Remove"){
| + | |
− | // Factory.Deactivate(); //Deactivate Factory!
| + | |
− | // }
| + | |
− | }
| + | |
− | | + | |
− | iMap = FactoryData.PM_FactorySet.Find('Map', CurrentMap);
| + | |
− | if(iMap != INDEX_NONE) {
| + | |
− | //TODO: Will add entry for every factory in the map, do not want!
| + | |
− | iFactory = FactoryData.PM_FactorySet[iMap].FactoriesToReplace.Find('ReplacedFactory', PickupFactory(Other).Name);
| + | |
− | if(iFactory == INDEX_NONE) {
| + | |
− | FactoryData.AddPerMapEntry(iMap, PickupFactory(Other));
| + | |
− | }
| + | |
− | else if(iFactory != INDEX_NONE) {
| + | |
− | FactoryData.UpdatePerMapEntry(iMap, PickupFactory(Other));
| + | |
− | }
| + | |
− | }
| + | |
− | }else{
| + | |
− | if(UTVehicleFactory(Other) != UTVehicleFactory_TrackTurretBase(Other))
| + | |
− | ReplaceVehicle(UTVehicleFactory(Other)); //Mutator
| + | |
− | // ModifyVehicle(UTVehicle(Other));
| + | |
− | }
| + | |
− | }
| + | |
− | </uscript>
| + | |
− | <br>
| + | |
− | =====UTGameRules_Info=====
| + | |
− | <uscript>
| + | |
− | //===================================================
| + | |
− | // Class: UTGameRules_Info
| + | |
− | // Creation date: 12/12/2008 19:35
| + | |
− | // Last updated: 12/12/2008 19:35
| + | |
− | // Contributors: OlympusMons(/d!b\)
| + | |
− | //---------------------------------------------------
| + | |
− | //===================================================
| + | |
− | class UTGameRules_Info extends GameRules;
| + | |
− | | + | |
− | //Dont really need the mutator, link through mut to get at gamedata?
| + | |
− | var UTGame_Data Gamed;
| + | |
− | | + | |
− | //WorldInfo.Game
| + | |
− | | + | |
− | function bool OverridePickupQuery(Pawn Other, class<Inventory> ItemClass, Actor Pickup, out byte bAllowPickup)
| + | |
− | {
| + | |
− | //Only Pawns have inventory managers?
| + | |
− | InvMgr = UTInventoryManager(Other.InvManager);
| + | |
− | | + | |
− | if(Pickup != None && UTPawn(Other) != None)
| + | |
− | return super.OverridePickupQuery;
| + | |
− | | + | |
− | if((NextGameRules != None) && NextGameRules.OverridePickupQuery(Other, ItemClass, Pickup, bAllowPickup))
| + | |
− | return true;
| + | |
− | }
| + | |
− | | + | |
− | function NetDamage(int OriginalDamage, out int Damage, pawn injured, Controller instigatedBy, vector HitLocation, out vector Momentum, class<DamageType> DamageType)
| + | |
− | {
| + | |
− | var PlayerReplicationInfo EnemyPRI;
| + | |
− | var PlayerReplicationInfo InjuredPRI;
| + | |
− | // var PlayerController EnemyPC;
| + | |
− | var Pawn EnemyP;
| + | |
− | var bool bEnemyIsInfantry;
| + | |
− | var bool bEnemyIsBot;
| + | |
− | var int EnemyTeam;
| + | |
− | | + | |
− | //if(NextGameRules != None)
| + | |
− | // NextGameRules.NetDamage(OriginalDamage,Damage,injured,instigatedBy,HitLocation,Momentum,DamageType);
| + | |
− | | + | |
− | if(!WorldInfo.Game.IsInState('MatchInProgress') ||
| + | |
− | (injured == None && instigatedBy == None))
| + | |
− | {
| + | |
− | Damage = 0;
| + | |
− | return;
| + | |
− | }
| + | |
− | | + | |
− | EnemyPRI = instigatedBy.PlayerReplicationInfo;
| + | |
− | InjuredPRI = injured.PlayerReplicationInfo;
| + | |
− | //EnemyPC = PlayerController(instigatedBy);
| + | |
− | EnemyP = InstigatedBy.Pawn;
| + | |
− | | + | |
− | if(EnemyP == UTPawn(InstigatedBy.Pawn))
| + | |
− | bEnemyIsInfantry = true;
| + | |
− | else if(EnemyP == UTVehicle(InstigatedBy.Pawn))
| + | |
− | bEnemyIsInfantry = false;
| + | |
− | else
| + | |
− | bEnemyIsInfantry = true;
| + | |
− | | + | |
− | //Enemy isA UTBot
| + | |
− | if(UTBot(instigatedBy) != None && UTBot(injured.controller) == None &&
| + | |
− | UTBot(injured.controller) != UTBot(instigatedBy))
| + | |
− | {
| + | |
− | bEnemyIsBot = true;
| + | |
− | }
| + | |
− | | + | |
− | if(instigatedBy != None) {
| + | |
− | if(EnemyP == injured) { //Self-Damage
| + | |
− | if(EnemyIsInfantry) Gamed.DoInfantrySelfDmg(bEnemyIsBot);
| + | |
− | else Gamed.DoVehicleSelfDmg(bEnemyIsBot);
| + | |
− | }
| + | |
− | //Damage From EnemyPawn
| + | |
− | else if(injured != instigatedBy) {
| + | |
− | //Team Damage
| + | |
− | if(InstigatedBy.GetTeamNum() != Injured.GetTeamNum()) {
| + | |
− | Gamed.DmgFromEnemyTeam(Injured, EnemyP, EnemyTeam, bEnemyIsInfantry, bEnemyIsBot)
| + | |
− | }else{
| + | |
− | //Gamed.DmgFromInjuredTeam(EnemyP, EnemyTeam, bEnemyIsInfantry, bEnemyIsBot)
| + | |
− | }
| + | |
− | | + | |
− | //Old Team Damage
| + | |
− | //if((EnemyPRI != None) && (injured.PlayerReplicationInfo != None) &&
| + | |
− | // ((EnemyPRI.Team == None) || (EnemyPRI.Team != injured.PlayerReplicationInfo.Team)))
| + | |
− | | + | |
− | //Gamed.DamageFromEnemy(EnemyP,EnemyPRI,bEnemyIsInfantry,bEnemyIsBot)
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | function ScoreKill (Controller Killer, Controller Killed)
| + | |
− | {
| + | |
− | //Links to Game_Data
| + | |
− | }
| + | |
− | </uscript>
| + | |
− | <br>
| + | |
− | =====UTMutator_GameExpansion=====
| + | |
− | <uscript>
| + | |
− | //===================================================
| + | |
− | // Class: UTMutator_GameExpansion
| + | |
− | // Creation date: 06/12/2007 08:10
| + | |
− | // Last updated: 03/01/2009 10:25
| + | |
− | // Contributors: OlympusMons(/d!b\)
| + | |
− | //---------------------------------------------------
| + | |
− | //SuperClass for all Game Expansion types
| + | |
− | //covers alot of the base functionality which will
| + | |
− | //be reused alot through these.
| + | |
− | //TODO: Can be used to auto assign groups based on what
| + | |
− | //adjustments are made.
| + | |
− | //===================================================
| + | |
− | class UTMutator_GameExpansion extends UTMutator
| + | |
− | abstract;
| + | |
− | | + | |
− | /** Version number for this Game Expasion Mutator. */
| + | |
− | var int Mut_Ver;
| + | |
− | | + | |
− | /** */
| + | |
− | var UTGame_Data UTGameData;
| + | |
− | var class<UTGame_Data> UTGameDataClass;
| + | |
− | | + | |
− | /** Controller for this Mutator. Not a good idea to use this unless you have to! */
| + | |
− | //var class<PlayerController> PCClass;
| + | |
− | var Controller aPlayer;
| + | |
− | | + | |
− | //---------------------------------------------------
| + | |
− | /** Name of the Loaded Map */
| + | |
− | //var string CurrentMap;
| + | |
− | //---------------------------------------------------
| + | |
− | /** Logging */
| + | |
− | var UTPawn LastLoggedPawn;
| + | |
− | var string LastLoggedMap;
| + | |
− | //---------------------------------------------------
| + | |
− | | + | |
− | ////
| + | |
− | function GetServerDetails(out GameInfo.ServerResponseLine ServerState)
| + | |
− | {
| + | |
− | local int i;
| + | |
− | | + | |
− | Super.GetServerDetails(ServerState);
| + | |
− | | + | |
− | i = ServerState.ServerInfo.Length;
| + | |
− | | + | |
− | ServerState.ServerInfo.Length = i+1;
| + | |
− | ServerState.ServerInfo[i].Key = "MF Version";
| + | |
− | ServerState.ServerInfo[i++].Value = "v0.4";
| + | |
− | // ServerState.ServerInfo[i++].Value = ""$(Mutator_VERSION / 10)$"."$int(Mutator_VERSION % 10);
| + | |
− | }
| + | |
− | | + | |
− | ////
| + | |
− | function InitMutator(string Options, out string ErrorMessage){
| + | |
− | local UTGame Game;
| + | |
− | local int i, MapIndex;
| + | |
− | | + | |
− | if(UTGameDataClass != None) {
| + | |
− | UTGameData = new(self) UTGameDataClass;
| + | |
− | `logd("Game Data: "$UTGameData,,'GameExpansion');
| + | |
− | }
| + | |
− | | + | |
− | //CurrentMap = WorldInfo.GetMapName(true);
| + | |
− | // `logd("Current Map: "$CurrentMap,,'GameExpansion');
| + | |
− | | + | |
− | Game = UTGame(WorldInfo.Game);
| + | |
− | if(Game != None) {
| + | |
− | Game.bAllowTranslocator = UTGameData.bAllowTranslocator;
| + | |
− | | + | |
− | if(UTGameData.PClass != None) Game.DefaultPawnClass = UTGameData.PClass;
| + | |
− | if(UTGameData.PCClass != None) Game.PlayerControllerClass = UTGameData.PCClass;
| + | |
− | if(UTGameData.HUDClass != None) Game.HUDType = UTGameData.HUDClass;
| + | |
− | | + | |
− | if(bUseNewDefaultInventory) {
| + | |
− | if(NewDefaultInventory.length > 1){
| + | |
− | `logd("NewDefaultInventory",,'GameExpansion');
| + | |
− | Game.DefaultInventory.length = NewDefaultInventory.length;
| + | |
− | | + | |
− | for(i = 0; i < Game.DefaultInventory.length; i++){
| + | |
− | Game.DefaultInventory[i] = NewDefaultInventory[i];
| + | |
− | `logd("DefaultLoadout: "$Game.DefaultInventory[i]);
| + | |
− | /* i = Game.DefaultInventory.Length + 1;
| + | |
− | Game.DefaultInventory[i+1] = class'GravBelt.GravBelt';*/
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | if(UTGameData.GRClass != None){
| + | |
− | WorldInfo.Game.AddGameRules(UTGameData.GRClass);
| + | |
− | //TODO: Search linkedlist and `log all GameRules
| + | |
− | `log("GameRules: "$UTGameData.GRClass.Name,,'GameExpansion');
| + | |
− | }
| + | |
− | | + | |
− | Super.InitMutator(Options, ErrorMessage);
| + | |
− | }
| + | |
− | | + | |
− | ////
| + | |
− | //Replacement functions
| + | |
− | function bool CheckReplacement(Actor Other){
| + | |
− | local int i, j, MapIndex, FactoryIndex;
| + | |
− | local UTPlayerController UTPlayer;
| + | |
− | | + | |
− | UTPlayer = UTPlayerController(Controller(other));
| + | |
− | if(UTPlayer != None && CMClass != None){
| + | |
− | UTPlayer.CheatClass = CMClass;
| + | |
− | }
| + | |
− | | + | |
− | //Factory Replacement! TODO: Check for pathing issues with doing this
| + | |
− | //TODO:
| + | |
− | //UTGameData.FactoryReplacement(NavigationPoint(Other))
| + | |
− | | + | |
− | // if(UTVehicleFactory(Other) != UTVehicleFactory_TrackTurretBase(Other))
| + | |
− | // ReplaceVehicle(UTVehicleFactory(Other));
| + | |
− | | + | |
− | // ModifyVehicle(UTVehicle(Other));
| + | |
− | | + | |
− | if(UTGameData == None)
| + | |
− | return true;
| + | |
− | | + | |
− | //Spawn/Attach Info's
| + | |
− | for(i = 0;i < UTGameData.Info_Attachments.Length;i++){
| + | |
− | if(Other.IsA(UTGameData.Info_Attachments[i].AttachedToActor)){
| + | |
− | Spawn(UTGameData.Info_Attachments[i].AttachedInfo, Other);
| + | |
− | `logd("Info: "$UTGameData.Info_Attachments[i].AttachedInfo$" Attached to: "$UTGameData.Info_Attachments[i].AttachedToActor$"."$Other,,'Info Attachment');
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | return true;
| + | |
− | }
| + | |
− | | + | |
− | function ReplaceVehicle(UTVehicleFactory Factory){
| + | |
− | if(Factory == None && Factory.VehicleClass == None)
| + | |
− | return;
| + | |
− | | + | |
− | `logd("Factory: "$Factory$"."$Factory.VehicleClass,,'Replacement');
| + | |
− | }
| + | |
− | | + | |
− | ////
| + | |
− | //Modify functions
| + | |
− | function ModifyPlayer(Pawn Other){
| + | |
− | local UTPawn P;
| + | |
− | //TODO: Add Modify.Controller()
| + | |
− | | + | |
− | P = UTPawn(Other);
| + | |
− | if(P != None){
| + | |
− | ModifyPawn(P);
| + | |
− | | + | |
− | //TODO: Support for Spawning PawnInfo's
| + | |
− | // Spawn(Class'HammerPlayerInfo', Other);
| + | |
− | // `logd("FireInfoSpawned",,'FastWeapSwitch');
| + | |
− | }
| + | |
− | | + | |
− | Super.ModifyPlayer(Other);
| + | |
− | }
| + | |
− | | + | |
− | function ModifyPawn(UTPawn P){
| + | |
− | if(P == None)
| + | |
− | return;
| + | |
− | | + | |
− | if(LastLoggedPawn != P) {
| + | |
− | // `logd("Pawn: "$P,,'Modify');
| + | |
− | LastLoggedPawn = P;
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | /*function ModifyVehicle(UTVehicle V){
| + | |
− | V = UTVehicle(Other);
| + | |
− | if (V != None){
| + | |
− | `log("Vehicle: "$V);
| + | |
− | }
| + | |
− | }*/
| + | |
− | | + | |
− | ////
| + | |
− | /** Added to allow Gametype hook to UTLinkedReplicationInfo.
| + | |
− | Similar to Info attachment method but instead links a replication info to the PRI.*/
| + | |
− | //NOTE: Should be called from check replacement!
| + | |
− | function AddReplicationInfo(Actor Other)
| + | |
− | {
| + | |
− | local UTLinkedReplicationInfo LRI;
| + | |
− | local UTPlayerReplicationInfo PRI;
| + | |
− | | + | |
− | // foreach dynamicactors(class'PlayerController', pc) {
| + | |
− | | + | |
− | PRI = UTPlayerReplicationInfo(Other);
| + | |
− | if(PRI != None && LRIPath != None) {
| + | |
− | if(PRI.CustomReplicationInfo != None) {
| + | |
− | LRI = PRI.CustomReplicationInfo;
| + | |
− | // while(LRI.NextReplicationInfo != None){
| + | |
− | // LRI = LRI.NextReplicationInfo;
| + | |
− | // }
| + | |
− | LRI.NextReplicationInfo = Spawn(LRIPath, Other.Owner);
| + | |
− | `logd("NextReplicationInfo: "$LRI.NextReplicationInfo,,'GameExpansion');
| + | |
− | }else{
| + | |
− | PRI.CustomReplicationInfo = Spawn(LRIPath, Other.Owner);
| + | |
− | `logd("CustomReplicationInfo: "$PRI.CustomReplicationInfo,,'GameExpansion');
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | defaultproperties
| + | |
− | {
| + | |
− | FactoryReplacerDataClass=None
| + | |
− | | + | |
− | PClass=None
| + | |
− | PCClass=None
| + | |
− | GRClass=None
| + | |
− | LRIPath=None
| + | |
− | HUDClass=None
| + | |
− | CMClass=None
| + | |
− | bUseNewDefaultInventory=False
| + | |
− | NewBootInventoryType=None
| + | |
− | }
| + | |
− | </uscript>
| + | |
− | <br>
| + | |
− | <uscript>
| + | |
− | //===================================================
| + | |
− | // Class: UCSpecies
| + | |
− | // Creation date: 08/12/2008 15:29
| + | |
− | // Last updated: 20/12/2008 00:30
| + | |
− | // Contributors: OlympusMons(/d!b\)
| + | |
− | //---------------------------------------------------
| + | |
− | //===================================================
| + | |
− | class UCSpecies extends UTInfo
| + | |
− | config(UCSpecies);
| + | |
− | | + | |
− | //UTFamilyInfo_Human
| + | |
− | enum KnownFactions{
| + | |
− | Ironguard, //Human
| + | |
− | Necris, //Human (Black Legion) (Phayder Corporation)
| + | |
− | TwinSouls, //Human
| + | |
− | Krall,
| + | |
− | Liandri, //Robotic (Liandri Mining Corporation)
| + | |
− | COG, //Human
| + | |
− | Locust,
| + | |
− | Egyptian,
| + | |
− | Nakhti,
| + | |
− | Rodent,
| + | |
− | Nali,
| + | |
− | Skaarj,
| + | |
− | Genmokai,
| + | |
− | Juggernaut, //Human / ExoSkeleton (Geneboosted)
| + | |
− | Corrupt, //Cybernetic
| + | |
− | Axon, //Vehicles / first Mk3 Armour
| + | |
− | ThunderCrash, //Malcolm, Othello, etc
| + | |
− | Mercenary, //Blood Reavers,
| + | |
− | Hellions, //Punks
| + | |
− | Nightmare //Necris experiment?
| + | |
− | }
| + | |
− | | + | |
− | enum KnownSpecies{
| + | |
− | Human, //Ironguard, TwinSouls?,
| + | |
− | ClonedHuman, //juggernauts?
| + | |
− | UndeadHuman,
| + | |
− | Robotic, //Corrupt, Liandri, Axon?
| + | |
− | Alien
| + | |
− | }
| + | |
− | | + | |
− | struct transient Species{
| + | |
− | var string SpeciesName;
| + | |
− | var KnownSpecies Species;
| + | |
− | var KnownFactions Faction;
| + | |
− | var array< class<UTFamilyInfo> > FamilyInfo;
| + | |
− | };var array<Species> SpeciesTypes;
| + | |
− | | + | |
− | struct transient SpeciesStats{
| + | |
− | var SpeciesTypes Faction;
| + | |
− | // var class<UTFamilyInfo> Species;
| + | |
− | var class<UCAbility_Armour> ArmourClass;
| + | |
− | | + | |
− | // var float SpeciesScale;
| + | |
− | // CharacterScale
| + | |
− | | + | |
− | var float AC, //AirControl
| + | |
− | // DAC, //DefaultAirControl //Uses AirControl
| + | |
− | GS, //GroundSpeed
| + | |
− | WS, //WaterSpeed
| + | |
− | JZ, //JumpZ
| + | |
− | MJB, //MultiJumpBoost
| + | |
− | // RDS, //ReceivedDamageScaling //Depreciated
| + | |
− | // DS, //DamageScaling //Depreciated
| + | |
− | AR, //AccelRate
| + | |
− | // WPct, //WalkingPct //No walking Anims
| + | |
− | // CPct, //CrouchedPct
| + | |
− | DS, //DodgeSpeed
| + | |
− | DSZ; //DodgeSpeedZ
| + | |
− | //Mass,wdsf, wdsz, dz, wdz;
| + | |
− | };var config array<SpeciesStats> SS;
| + | |
− | | + | |
− | //var() config float AC, AS, GS, WS, JZ, RDS, DS, AR, WPct,CPct,DSF, DSZ, Mass,wdsf, wdsz, dz, wdz;
| + | |
− | //var() config int h, hm, shm, hps, beh, eh, mfs, ca, mjr,mmj,mjb, mwd;
| + | |
− | //var() config int cr,pcr,phr, ch,pch,phh; //Collision
| + | |
− | // var bool bDJ, bDDJ, bBD, bC, bCL, bPI, bS, bWD, bWOL, bSF;
| + | |
− | | + | |
− | /** Player Class / Incarnation */
| + | |
− | var class<UCSpecies_Ability> AbilityList;
| + | |
− | | + | |
− | var bool bAllowSpeciesAbilities;
| + | |
− | var bool bAllowSpeciesArmour;
| + | |
− | var bool bAllowSpeciesStats;
| + | |
− | | + | |
− | static function SetSpecies(class<UTFamilyInfo> FamilyInfo, UTPawn P){
| + | |
− | local int i,j;
| + | |
− | local int TotalPossibles;
| + | |
− | | + | |
− | if(FamilyInfo == None)
| + | |
− | return;
| + | |
− | | + | |
− | for(i = 0; i < SS.length; i++) {
| + | |
− | if(SS[i].Species == FamilyInfo) {
| + | |
− | P.AirControl = P.Default.AirControl * SS[i].AC;
| + | |
− | P.DefaultAirControl = P.Default.DefaultAirControl * SS[i].AC;
| + | |
− | P.GroundSpeed = P.Default.GroundSpeed * SS[i].GS;
| + | |
− | P.WaterSpeed = P.Default.WaterSpeed * SS[i].WS;
| + | |
− | P.JumpZ = P.Default.JumpZ * SS[i].JZ;
| + | |
− | P.MultiJumpBoost = P.Default.MultiJumpBoost * SS[i].MJB;
| + | |
− | P.AccelRate = P.Default.AccelRate * SS[i].AR;
| + | |
− | // P.WalkingPct = P.Default.WalkingPct * WPcnt;
| + | |
− | // P.CrouchedPct = P.Default.CrouchedPct * CPcnt;
| + | |
− | P.DodgeSpeed = P.Default.DodgeSpeed * SS[i].DS;
| + | |
− | P.DodgeSpeedZ = P.Default.DodgeSpeedZ * SS[i].DSZ;
| + | |
− | | + | |
− | `logd("Species: "$SS[i].Faction,,'UCSpecies');
| + | |
− | `logd("AirControl: "$P.AirControl$" DefaultAirControl: "$P.DefaultAirControl,,'UCSpecies');
| + | |
− | `logd("GroundSpeed: "$P.GroundSpeed$" JumpZ: "$P.JumpZ$" MultiJumpBoost: "$P.MultiJumpBoost,,'UCSpecies');
| + | |
− | `logd("DodgeSpeed: "$P.DodgeSpeed$" DodgeSpeedZ: "$P.DodgeSpeedZ,,'UCSpecies');
| + | |
− | | + | |
− | if(SS[i].Species == class'UTFamilyInfo_Krall_Male')
| + | |
− | P.bStopOnDoubleLanding=False;
| + | |
− | | + | |
− | //Check INFO's for how to run from there
| + | |
− | //Info.Controller
| + | |
− | | + | |
− | TotalPossibles=SS[i].length * SpeciesTypes.length;
| + | |
− | | + | |
− | //for(j = 0; j < SS[i].Faction.FamilyInfo.length; j++)
| + | |
− | // if (SS[i].Faction.FamilyInfo[j]==SpeciesTypes)
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | defaultproperties
| + | |
− | {
| + | |
− | bAllowSpeciesAbilities=True
| + | |
− | bAllowSpeciesArmour=True
| + | |
− | bAllowSpeciesStats=True
| + | |
− | | + | |
− | //TODO: Could assign stats to Species and Faction seperate
| + | |
− | // for individual characters see customchardata
| + | |
− | SS(0)=(Faction=SpeciesTypes(0),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Ironguard_ArmourInfo',AC=1.0,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.1,DSZ=1.0)
| + | |
− | SS(1)=(Faction=SpeciesTypes(1),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Necris_ArmourInfo',AC=0.9,GS=1.1,WS=0.8,JZ=1.05,MJB=0.95,AR=1.0,DS=0.9,DSZ=1.1)
| + | |
− | SS(2)=(Faction=SpeciesTypes(2),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_TwinSouls_ArmourInfo',AC=1.1,GS=1.0,WS=1.0,JZ=1.0,MJB=1.0,AR=1.0,DS=1.0,DSZ=1.0)
| + | |
− | SS(3)=(Faction=SpeciesTypes(3),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Krall_ArmourInfo',AC=0.9,GS=1.15,WS=1.0,JZ=0.9,MJB=1.12,AR=1.0,DS=0.94,DSZ=1.0)
| + | |
− | SS(4)=(Faction=SpeciesTypes(4),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',AC=0.9,GS=1.1,WS=1.0,JZ=0.86,MJB=1.08,AR=1.0,DS=0.86,DSZ=1.0)
| + | |
− | // SS(5)=(Species=SpeciesTypes(5),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',)
| + | |
− | // SS(5)=(Species=SpeciesTypes(6),AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Liandri_ArmourInfo',)
| + | |
− | | + | |
− | ///UT3 Family
| + | |
− | //UTFamilyInfo_Necris, UTFamilyInfo_Ironguard, UTFamilyInfo_TwinSouls, UTFamilyInfo_Krall, UTFamilyInfo_Liandri
| + | |
− | SpeciesTypes(0)=(SpeciesName='', Species=Human, Faction=Ironguard,(FamilyInfo(0)=class'UTFamilyInfo_Ironguard_Female',FamilyInfo(1)=class'UTFamilyInfo_Ironguard_Male'))
| + | |
− | SpeciesTypes(1)=(SpeciesName='', Species=UndeadHuman, Faction=Necris,(FamilyInfo(0)=class'UTFamilyInfo_Necris_Female',FamilyInfo(1)=class'UTFamilyInfo_Necris_Male'))
| + | |
− | SpeciesTypes(2)=(SpeciesName='', Species=Human, Faction=TwinSouls,(FamilyInfo(0)=class'UTFamilyInfo_TwinSouls_Female',FamilyInfo(1)=class'UTFamilyInfo_TwinSouls_Male'))
| + | |
− | SpeciesTypes(3)=(SpeciesName='', Species=Alien, Faction=Krall,(FamilyInfo(0)=class'UTFamilyInfo_Krall_Male'))
| + | |
− | SpeciesTypes(4)=(SpeciesName='', Species=Robotic, Faction=Liandri,(FamilyInfo(0)=class'UTFamilyInfo_Liandri_Male'))
| + | |
− | | + | |
− | ///GOW Family
| + | |
− | // SpeciesTypes(5)=(SpeciesName='', Species=Human, Faction=COG,(FamilyInfo(0)=class'UTFamilyInfo_COG_Marcus',FamilyInfo(1)=class'UTFamilyInfo_COG_Kim',FamilyInfo(2)=class'UTFamilyInfo_COG_Gus',FamilyInfo(3)=class'UTFamilyInfo_COG_Baird',FamilyInfo(4)=class'UTFamilyInfo_COG_Dom',FamilyInfo(5)=class'UTFamilyInfo_COG_Carmine',FamilyInfo(6)=class'UTFamilyInfo_COG_Hoffman'))
| + | |
− | // SpeciesTypes(6)=(SpeciesName='', Species=Alien, Faction=Locust,(FamilyInfo(0)=class'UTFamilyInfo_Locust',FamilyInfo(1)=class'UTFamilyInfo_LocustB',FamilyInfo(2)=class'UTFamilyInfo_LocustC',FamilyInfo(3)=class'UTFamilyInfo_LocustD'))
| + | |
− | | + | |
− | //Egyptian Faction
| + | |
− | // SS(30)=(Species=class'UT3_Family_Egypt.UTFamilyInfo_Egypt',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_TwinSouls_ArmourInfo'AC=0.9,GS=1.1,WS=0.8,JZ=1.1,MJB=1.0,AR=1.0,DS=0.9,DSZ=1.1)
| + | |
− | | + | |
− | //Rodent Faction
| + | |
− | // SS(40)=(Species=class'UT3_Family_Rodent.UTFamilyInfo_Rodent',AbilityList=None,ArmourClass=class'Mutatoes.UCSpecies_Krall_ArmourInfo',AC=0.9,GS=1.4,WS=1.2,JZ=0.86,MJB=1.08,AR=1.0,DS=1.0,DSZ=1.0)
| + | |
− | }
| + | |
− | </uscript>
| + | |
− | http://i10.photobucket.com/albums/a123/OlympusMons/SpeciesArmour.jpg
| + | |