diff --git a/DXRBalance/DeusEx/Classes/BalanceWeaponShuriken.uc b/DXRBalance/DeusEx/Classes/BalanceWeaponShuriken.uc index 40d875f78..d8104d425 100644 --- a/DXRBalance/DeusEx/Classes/BalanceWeaponShuriken.uc +++ b/DXRBalance/DeusEx/Classes/BalanceWeaponShuriken.uc @@ -52,7 +52,7 @@ function CheckSkill() defaultproperties { PickupAmmoCount=20 - ShotTime=0.3 + ShotTime=0.5 ReloadCount=1 - HitDamage=20 + HitDamage=18 } diff --git a/DXRBalance/DeusEx/Classes/GasGrenade.uc b/DXRBalance/DeusEx/Classes/GasGrenade.uc new file mode 100644 index 000000000..42e8120d7 --- /dev/null +++ b/DXRBalance/DeusEx/Classes/GasGrenade.uc @@ -0,0 +1,20 @@ +class GasGrenade injects GasGrenade; + +function GetSpawnCloudType(out class GasType, out Name tDamageType) +{ + GasType = class'TearGas'; + tDamageType = 'TearGas'; + //GasType = class'PoisonGas'; + //tDamageType = 'Poison'; + /* // mixed clouds, might be OP + if (FRand() < 0.5) + { + GasType = class'PoisonGas'; + tDamageType = 'Poison'; + } + else + { + GasType = class'TearGas'; + tDamageType = 'TearGas'; + }*/ +} diff --git a/DXRBalance/DeusEx/Classes/ThrownProjectile.uc b/DXRBalance/DeusEx/Classes/ThrownProjectile.uc new file mode 100644 index 000000000..13dadc4f9 --- /dev/null +++ b/DXRBalance/DeusEx/Classes/ThrownProjectile.uc @@ -0,0 +1,53 @@ +class ThrownProjectile shims ThrownProjectile; + +// +// SpawnTearGas needs to happen on the server so the clouds are insync and damage is dealt out of them +// +function SpawnTearGas() +{ + local int i; + local class GasType; + local Name tDamageType; + + if ( Role < ROLE_Authority ) + return; + + for (i=0; i GasType, out Name tDamageType) +{ + GasType = class'TearGas'; + tDamageType = 'TearGas'; +} + +function SpawnCloud(class type, Name DamageType) +{ + local Vector loc; + local Cloud gas; + + loc = Location; + loc.X += FRand() * blastRadius - blastRadius * 0.5; + loc.Y += FRand() * blastRadius - blastRadius * 0.5; + loc.Z += 32; + gas = spawn(type, None,, loc); + if (gas == None) return; + + gas.DamageType = DamageType; + gas.Velocity = vect(0,0,0); + gas.Acceleration = vect(0,0,0); + gas.DrawScale = FRand() * 0.5 + 2.0; + gas.LifeSpan = FRand() * 10 + 30; + if ( Level.NetMode != NM_Standalone ) + gas.bFloating = False; + else + gas.bFloating = True; + gas.Instigator = Instigator; +} diff --git a/DXRModules/DeusEx/Classes/DXRAugmentations.uc b/DXRModules/DeusEx/Classes/DXRAugmentations.uc index 36f6a55c8..e9a91e62f 100644 --- a/DXRModules/DeusEx/Classes/DXRAugmentations.uc +++ b/DXRModules/DeusEx/Classes/DXRAugmentations.uc @@ -11,7 +11,7 @@ replication function CheckConfig() { - if( ConfigOlderThan(1,4,8,0) ) { + if( ConfigOlderThan(1,5,9,8) ) { min_aug_str = default.min_aug_str; max_aug_str = default.max_aug_str; } @@ -86,14 +86,42 @@ function RandomizeAugCannisters() } } +function static _DefaultAugsMask(DXRando dxr, out int banned[50], out int numAugs) +{ + local DXRLoadouts loadouts; + local class a; + local int i; + + loadouts = DXRLoadouts(dxr.FindModule(class'DXRLoadouts')); + for(i=0; i 0 ) - skipAugSpeed=1; - slot = staticrng(dxr, numAugs-3-skipAugSpeed) + skipAugSpeed;// exclude the 3 or 4 augs you start with, 0 is AugSpeed - if ( slot >= 11 ) slot++;// skip AugIFF - if ( slot >= 12 ) slot++;// skip AugLight - if (slot >= 18 ) slot++;// skip AugDatalink + r = staticrng(dxr, numAugs); + for(i=0; i < ArrayCount(class'#var prefix AugmentationManager'.default.augClasses); i++) { + if( banned[i] == 1 ) continue; + if( slot == r ) + break; + slot++; + } + slot = i; + if( slot >= ArrayCount(class'#var prefix AugmentationManager'.default.augClasses) ) + dxr.err("PickRandomAug WTF"); AugName = class'#var prefix AugmentationManager'.default.augClasses[slot].Name; log("Picked Aug "$ slot $"/"$numAugs$" " $ AugName, 'DXRAugmentations'); return AugName; @@ -121,17 +150,13 @@ function static Name PickRandomAug(DXRando dxr) simulated function RandoAug(Augmentation a) { - local int oldseed; if( dxr == None ) return; if( #var prefix AugSpeed(a) != None || #var prefix AugLight(a) != None || #var prefix AugHeartLung(a) != None || #var prefix AugIFF(a) != None || #var prefix AugDatalink(a) != None || AugNinja(a) != None ) return; - oldseed = dxr.SetSeed( dxr.Crc(dxr.seed $ "RandoAug " $ a.class.name ) ); RandoLevelValues(a, min_aug_str, max_aug_str, a.Description); - - dxr.SetSeed(oldseed); } simulated function string DescriptionLevel(Actor act, int i, out string word) @@ -209,17 +234,21 @@ simulated function RemoveRandomAug(#var PlayerPawn p) { local Augmentation a, b, augs[64]; local AugmentationManager am; + local DXRLoadouts loadouts; local int numAugs, slot; am = p.AugmentationSystem; + loadouts = DXRLoadouts(dxr.FindModule(class'DXRLoadouts')); for( a = am.FirstAug; a != None; a = a.next ) { if( !a.bHasIt ) continue; if( a.AugmentationLocation == LOC_Default ) continue; - if( #var prefix AugSpeed(a) != None || #var prefix AugLight(a) != None - || #var prefix AugIFF(a) != None || #var prefix AugDatalink(a) != None || AugNinja(a) != None - ) continue; + if( #var prefix AugLight(a) != None || #var prefix AugIFF(a) != None || #var prefix AugDatalink(a) != None ) + continue; + + if( loadouts != None && loadouts.StartedWithAug(a.class) ) + continue; augs[numAugs++] = a; } diff --git a/DXRModules/DeusEx/Classes/DXRBacktracking.uc b/DXRModules/DeusEx/Classes/DXRBacktracking.uc index 64ff33b09..8a21b771d 100644 --- a/DXRModules/DeusEx/Classes/DXRBacktracking.uc +++ b/DXRModules/DeusEx/Classes/DXRBacktracking.uc @@ -202,13 +202,15 @@ function AnyEntry() function FixInterpolating(#var PlayerPawn p) { + p.bDetectable = true; + p.bHidden = false; + p.Visibility = p.Default.Visibility; //err(player()$" state: "$player().GetStateName()$", Tag: "$player().tag$", NextState: "$player().NextState$", bInterpolating: "$player().bInterpolating); if( p.NextState != 'Interpolating' ) return; info("FixInterpolating(), "$p$" state: "$p.GetStateName()$", Tag: "$p.tag$", NextState: "$p.NextState$", bInterpolating: "$p.bInterpolating); p.NextState = ''; p.NextLabel = ''; p.GotoState('PlayerWalking'); - p.bDetectable = true; } function ParisMetroAnyEntry() diff --git a/DXRModules/DeusEx/Classes/DXREnemies.uc b/DXRModules/DeusEx/Classes/DXREnemies.uc index 73ba3cdd7..909e95c0e 100644 --- a/DXRModules/DeusEx/Classes/DXREnemies.uc +++ b/DXRModules/DeusEx/Classes/DXREnemies.uc @@ -447,6 +447,7 @@ function RandomizeSP(ScriptedPawn p, int percent) l("RandomizeSP("$p$", "$percent$")"); p.SurprisePeriod = rngrange(p.SurprisePeriod+0.1, 0.3, 1.2); + p.GroundSpeed = rngrange(p.GroundSpeed, 0.9, 1.1); if( IsHuman(p) == False ) return; // only give random weapons to humans if( p.IsA('MJ12Commando') || p.IsA('WIB') ) return; diff --git a/DXRModules/DeusEx/Classes/DXRFixup.uc b/DXRModules/DeusEx/Classes/DXRFixup.uc index b26c19340..5e62c32a2 100644 --- a/DXRModules/DeusEx/Classes/DXRFixup.uc +++ b/DXRModules/DeusEx/Classes/DXRFixup.uc @@ -729,6 +729,11 @@ function Vandenberg_FirstEntry() } break; + case "14_VANDENBERG_SUB": + AddSwitch( vect(3790.639893, -488.639587, -369.964142), rot(0, 32768, 0), 'Elevator1'); + AddSwitch( vect(3799.953613, -446.640015, -1689.817993), rot(0, 16384, 0), 'Elevator1'); + break; + case "14_OCEANLAB_LAB": foreach AllActors(class'ComputerSecurity', comp) { if( comp.UserList[0].userName == "Kraken" && comp.UserList[0].Password == "Oceanguard" ) { @@ -844,6 +849,13 @@ function Shipyard_FirstEntry() } AddSwitch( vect(2534.639893, 227.583054, 339.803802), rot(0,-32760,0), 'shipbelowdecks_door' ); break; + + case "09_NYC_SHIPBELOW": + foreach AllActors(class'DeusExMover', m, 'ShipBreech') { + m.bHighlight = true; + m.bLocked = true; + } + break; } } diff --git a/DXRModules/DeusEx/Classes/DXRFlags.uc b/DXRModules/DeusEx/Classes/DXRFlags.uc index cfa22d482..f0bc04c7b 100644 --- a/DXRModules/DeusEx/Classes/DXRFlags.uc +++ b/DXRModules/DeusEx/Classes/DXRFlags.uc @@ -180,20 +180,20 @@ simulated static function CurrentVersion(optional out int major, optional out in major=1; minor=5; patch=9; - build=2; + build=8;//build can't be higher than 99 } simulated static function string VersionString(optional bool full) { local int major,minor,patch,build; CurrentVersion(major,minor,patch,build); - return VersionToString(major, minor, patch, build, full) $ " Alpha"; + return VersionToString(major, minor, patch, build, full) $ ""; } function CheckConfig() { local int i; - if( ConfigOlderThan(1,5,9,2) ) { + if( ConfigOlderThan(1,5,9,8) ) { // setup default difficulties i=0; #ifndef hx diff --git a/DXRModules/DeusEx/Classes/DXRKeys.uc b/DXRModules/DeusEx/Classes/DXRKeys.uc index 6402a316a..5defbbe4d 100644 --- a/DXRModules/DeusEx/Classes/DXRKeys.uc +++ b/DXRModules/DeusEx/Classes/DXRKeys.uc @@ -18,7 +18,7 @@ var config float min_lock_adjust, max_lock_adjust, min_door_adjust, max_door_adj function CheckConfig() { local int i; - if( ConfigOlderThan(1,5,7,0) ) { + if( ConfigOlderThan(1,5,9,8) ) { for(i=0; i a; - if( ConfigOlderThan(1,5,1,0) ) { + if( ConfigOlderThan(1,5,9,8) ) { mult_items_per_level = 1; for(i=0; i < ArrayCount(item_sets); i++) { @@ -65,22 +65,26 @@ function CheckConfig() item_sets[0].name = "Randomized Starting Equipment"; - item_sets[1].name = "Stick With the Prod"; - item_sets[1].player_message = "stick with the prod!"; + item_sets[1].name = "Stick With the Prod Pure"; + item_sets[1].player_message = "Stick with the prod!"; item_sets[1].bans = "Engine.Weapon"; item_sets[1].allows = "WeaponProd"; item_sets[1].starting_equipments = "WeaponProd,AmmoBattery,AmmoBattery"; + item_sets[1].starting_augs = "AugStealth,AugMuscle"; + //item_sets[1].item_spawns = "CrateExplosiveSmall,2"; item_sets[2].name = "Stick With the Prod Plus"; - item_sets[2].player_message = "stick with the prod!"; + item_sets[2].player_message = "Stick with the prod!"; item_sets[2].bans = "Engine.Weapon,AmmoDart"; item_sets[2].allows = "WeaponProd,WeaponEMPGrenade,WeaponGasGrenade,WeaponMiniCrossbow,AmmoDartPoison,WeaponNanoVirusGrenade,WeaponPepperGun"; item_sets[2].starting_equipments = "WeaponProd,AmmoBattery"; + item_sets[2].starting_augs = "AugStealth,AugMuscle"; + //item_sets[2].item_spawns = "CrateExplosiveSmall,2"; item_sets[3].name = "Ninja JC"; item_sets[3].player_message = "I am Ninja!"; item_sets[3].bans = "Engine.Weapon"; - item_sets[3].allows = "WeaponSword,WeaponShuriken"; + item_sets[3].allows = "WeaponSword,WeaponNanoSword,WeaponShuriken,WeaponEMPGrenade,WeaponGasGrenade,WeaponNanoVirusGrenade,WeaponPepperGun,WeaponLAM"; item_sets[3].starting_equipments = "WeaponShuriken,WeaponSword,AmmoShuriken"; #ifdef hx item_sets[3].starting_augs = "HXRandomizer.AugNinja";//combines AugStealth and active AugSpeed @@ -264,8 +268,8 @@ function AddItemSpawn(int s, string type, int chances) for(i=0; i < ArrayCount(_item_sets[s].item_spawns); i++) { if( _item_sets[s].item_spawns[i] == None ) { - a = GetClassFromString(type, class'Inventory'); - _item_sets[s].item_spawns[i] = class(a); + a = GetClassFromString(type, class'Actor'); + _item_sets[s].item_spawns[i] = a; _item_sets[s].item_spawns_chances[i] = chances; return; } @@ -307,7 +311,8 @@ function bool ban(DeusExPlayer player, Inventory item) { if ( is_banned( _item_sets[loadout], item) ) { if( item_sets[loadout].player_message != "" ) { - item.ItemName = item.ItemName $ ", " $ item_sets[loadout].player_message; + //item.ItemName = item.ItemName $ ", " $ item_sets[loadout].player_message; + player.ClientMessage(item_sets[loadout].player_message, 'Pickup'); } return true; } @@ -325,19 +330,35 @@ function AdjustWeapon(DeusExWeapon w) function NinjaAdjustWeapon(DeusExWeapon w) { #ifdef injections + local DeusExWeaponShim ws; + ws = DeusExWeaponShim(w); class'Shuriken'.default.blood_mult = 2; switch(w.Class) { case class'WeaponSword': - WeaponSword(w).blood_mult = 2; - WeaponSword(w).default.blood_mult = 2; + ws.blood_mult = 3; + ws.default.blood_mult = 3; + ws.anim_speed = 1.3; + ws.default.anim_speed = 1.3; w.ShotTime=0; w.default.ShotTime=0; - w.maxRange = 96; - w.default.maxRange = 96; + w.maxRange = 110; + w.default.maxRange = 110; + w.AccurateRange = 110; + w.default.AccurateRange = 110; break; case class'WeaponNanoSword': - WeaponNanoSword(w).blood_mult = 2; - WeaponNanoSword(w).default.blood_mult = 2; + ws.blood_mult = 4; + ws.default.blood_mult = 4; + w.ShotTime=0; + w.default.ShotTime=0; + w.maxRange = 110; + w.default.maxRange = 110; + w.AccurateRange = 110; + w.default.AccurateRange = 110; + break; + case class'WeaponShuriken': + ws.anim_speed = 1.3; + ws.default.anim_speed = 1.3; break; } #endif @@ -362,6 +383,26 @@ simulated function PlayerRespawn(#var PlayerPawn p) RandoStartingEquipment(p, true); } +function bool StartedWithAug(class a) +{ + local class aclass; + local int i; + for(i=0; i < ArrayCount(_item_sets[loadout].starting_augs); i++) { + aclass = _item_sets[loadout].starting_augs[i]; + if( aclass == a ) return true; + + if( a.default.AugmentationLocation == LOC_Default ) + return true; + + //speed, stealth, ninja, muscle... + if( aclass.default.AugmentationLocation == a.default.AugmentationLocation ) { + if( class'#var prefix AugmentationManager'.default.AugLocs[a.default.AugmentationLocation].NumSlots == 1 ) + return true; + } + } + return false; +} + function AddStartingEquipment(DeusExPlayer p, bool bFrob) { local class iclass; @@ -466,10 +507,13 @@ function SpawnItems() local vector loc; local Actor a; local class aclass; + local DXRReduceItems reducer; local int i, j, chance; l("SpawnItems()"); SetSeed("SpawnItems()"); + reducer = DXRReduceItems(dxr.FindModule(class'DXRReduceItems')); + for(i=0;i 0 ) return false; if( oldpassword == "" ) return false; + if( note.bUserNote && player().CombatDifficulty > 0 ) return false; if( note.text == "") return false; #ifdef injections diff --git a/DXRModules/DeusEx/Classes/DXRReduceItems.uc b/DXRModules/DeusEx/Classes/DXRReduceItems.uc index adb94d4e0..b7c9d2dd5 100644 --- a/DXRModules/DeusEx/Classes/DXRReduceItems.uc +++ b/DXRModules/DeusEx/Classes/DXRReduceItems.uc @@ -87,6 +87,34 @@ function PostFirstEntry() SetTimer(1.0, true); } +function ReduceItem(Actor a) +{ + local int i, mission, scale; + local class c; + + mission = Clamp(dxr.dxInfo.missionNumber, 0, ArrayCount(mission_scaling)-1); + scale = mission_scaling[mission]; + + if( Ammo(a) != None ) { + _ReduceAmmo(Ammo(a), float(dxr.flags.settings.ammo*scale)/100.0/100.0); + } + else if( Weapon(a) != None ) { + _ReduceWeaponAmmo(Weapon(a), float(dxr.flags.settings.ammo*scale)/100.0/100.0); + } + else if( #var prefix Multitool(a) != None ) { + _ReduceSpawns(a, dxr.flags.settings.multitools*scale/100); + } + else if( #var prefix Lockpick(a) != None ) { + _ReduceSpawns(a, dxr.flags.settings.lockpicks*scale/100); + } + else if( #var prefix BioelectricCell(a) != None ) { + _ReduceSpawns(a, dxr.flags.settings.biocells*scale/100); + } + else if( #var prefix MedKit(a) != None ) { + _ReduceSpawns(a, dxr.flags.settings.medkits*scale/100); + } +} + simulated function PlayerAnyEntry(#var PlayerPawn p) { Super.PlayerAnyEntry(p); @@ -129,12 +157,34 @@ simulated function SetAllMaxCopies(int scale) } } +function _ReduceWeaponAmmo(Weapon w, float mult) +{ + local int i; + local float tmult; + if( w.AmmoName == None || w.PickupAmmoCount <= 0 ) return; + + tmult = rngrangeseeded(mult, min_rate_adjust, max_rate_adjust, w.AmmoName); + i = Clamp(float(w.PickupAmmoCount) * tmult, 1, 1000); + l("reducing ammo in "$ActorToString(w)$" from "$w.PickupAmmoCount$" down to "$i$", tmult: "$tmult); + w.PickupAmmoCount = i; +} + +function _ReduceAmmo(Ammo a, float mult) +{ + local int i; + local float tmult; + if( a.AmmoAmount <= 0 || CarriedItem(a) ) return; + + tmult = rngrangeseeded(mult, min_rate_adjust, max_rate_adjust, a.class.name); + i = Clamp(float(a.AmmoAmount) * tmult, 1, 1000); + l("reducing ammo in "$ActorToString(a)$" from "$a.AmmoAmount$" down to "$i$", tmult: "$tmult); + a.AmmoAmount = i; +} + function ReduceAmmo(class type, float mult) { local Weapon w; local Ammo a; - local int i; - local float tmult; l("ReduceAmmo "$mult); SetSeed( "ReduceAmmo" ); @@ -142,32 +192,32 @@ function ReduceAmmo(class type, float mult) foreach AllActors(class'Weapon', w) { if( w.AmmoName != type && ClassIsChildOf(w.AmmoName, type) == false ) continue; - if( w.PickupAmmoCount > 0 ) { - tmult = rngrangeseeded(mult, min_rate_adjust, max_rate_adjust, w.AmmoName); - i = Clamp(float(w.PickupAmmoCount) * tmult, 1, 1000); - l("reducing ammo in "$ActorToString(w)$" from "$w.PickupAmmoCount$" down to "$i$", tmult: "$tmult); - w.PickupAmmoCount = i; - } + _ReduceWeaponAmmo(w, mult); } foreach AllActors(class'Ammo', a) { if( ! a.IsA(type.name) ) continue; - if( a.AmmoAmount > 0 && ( ! CarriedItem(a) ) ) { - tmult = rngrangeseeded(mult, min_rate_adjust, max_rate_adjust, a.class.name); - i = Clamp(float(a.AmmoAmount) * tmult, 1, 1000); - l("reducing ammo in "$ActorToString(a)$" from "$a.AmmoAmount$" down to "$i$", tmult: "$tmult); - a.AmmoAmount = i; - } + _ReduceAmmo(a, mult); } ReduceSpawnsInContainers(type, mult*100.0 ); } +function _ReduceSpawns(Actor a, float percent) +{ + local float tperc; + tperc = rngrangeseeded(percent, min_rate_adjust, max_rate_adjust, a.class.name); + if( !chance_single(tperc) ) + { + l("destroying "$ActorToString(a)$", tperc: "$tperc); + DestroyActor( a ); + } +} + function ReduceSpawns(class classname, float percent) { local Actor a; - local float tperc; SetSeed( "ReduceSpawns " $ classname ); @@ -178,12 +228,7 @@ function ReduceSpawns(class classname, float percent) if( PlayerPawn(a.Owner) != None ) continue; if( ! a.IsA(classname.name) ) continue; - tperc = rngrangeseeded(percent, min_rate_adjust, max_rate_adjust, a.class.name); - if( !chance_single(tperc) ) - { - l("destroying "$ActorToString(a)$", tperc: "$tperc); - DestroyActor( a ); - } + _ReduceSpawns(a, percent); } ReduceSpawnsInContainers(classname, percent); diff --git a/DXRModules/DeusEx/Classes/DXRSwapItems.uc b/DXRModules/DeusEx/Classes/DXRSwapItems.uc index 0b5d2cc77..e18783cc7 100644 --- a/DXRModules/DeusEx/Classes/DXRSwapItems.uc +++ b/DXRModules/DeusEx/Classes/DXRSwapItems.uc @@ -5,7 +5,7 @@ var config string swap_actors[16]; function CheckConfig() { local int i; - if( config_version < 4 ) { + if( ConfigOlderThan(1,5,9,8) ) { for(i=0; i < ArrayCount(swap_actors); i++) { swap_actors[i] = ""; } diff --git a/DXRModules/DeusEx/Classes/DXRTelemetry.uc b/DXRModules/DeusEx/Classes/DXRTelemetry.uc index c7a662d05..5b19f5abd 100644 --- a/DXRModules/DeusEx/Classes/DXRTelemetry.uc +++ b/DXRModules/DeusEx/Classes/DXRTelemetry.uc @@ -12,11 +12,7 @@ var string notification_url; function CheckConfig() { - if( server == "" ) { - server = "raycarro.com"; - cache_addr = 0; - } - if( config_version < class'DXRFlags'.static.VersionNumber() ) { + if( server == "" || config_version < class'DXRFlags'.static.VersionNumber() ) { server = "raycarro.com"; cache_addr = 0; } @@ -27,12 +23,44 @@ function AnyEntry() { local #var PlayerPawn p; Super.AnyEntry(); +#ifdef hx + SetTimer(300, true); +#endif //info log player's health, item counts...? p = player(); if( p == None ) return; info("health: "$p.health$", HealthLegLeft: "$p.HealthLegLeft$", HealthLegRight: "$p.HealthLegRight$", HealthTorso: "$p.HealthTorso$", HealthHead: "$p.HealthHead$", HealthArmLeft: "$p.HealthArmLeft$", HealthArmRight: "$p.HealthArmRight); } +function Timer() +{ + local int numActors, numObjects; + local Actor a; + local Object o, last; + local name names[4096]; + local int counts[4096], slot, i; + + foreach AllObjects(class'Object', o) { + if( o.IsA('Actor') ) { + numActors++; + continue; + } + numObjects++; + last = o; + slot = Abs(dxr.Crc( String(o.class.name) )) % ArrayCount(names); + if( names[slot] == '' || names[slot] == o.class.name ) { + names[slot] = o.class.name; + counts[slot]++; + } + } + + info("numActors: "$numActors$", numObjects: "$numObjects$", last object: "$last); + for(i=0; i temp_skipactor_types[6]; local int i, t; - if( ConfigOlderThan(1,5,6,0) ) { + if( ConfigOlderThan(1,5,9,8) ) { for(i=0; i < ArrayCount(skipactor_types); i++) { skipactor_types[i] = ""; } diff --git a/DXRando/DeusEx/Classes/DXRBase.uc b/DXRando/DeusEx/Classes/DXRBase.uc index 8ac218d0c..ca85f8bdc 100644 --- a/DXRando/DeusEx/Classes/DXRBase.uc +++ b/DXRando/DeusEx/Classes/DXRBase.uc @@ -163,9 +163,11 @@ simulated function bool RandoLevelValues(Actor a, float min, float max, out stri local #var prefix Augmentation aug; local #var prefix Skill sk; local string s, word; - local int i, len; + local int i, len, oldseed; local float prev_d, d, v, min_val; + oldseed = dxr.SetSeed( dxr.Crc(dxr.seed $ " RandoLevelValues " $ a.class.name ) ); + aug = #var prefix Augmentation(a); sk = #var prefix Skill(a); @@ -191,6 +193,8 @@ simulated function bool RandoLevelValues(Actor a, float min, float max, out stri s = "(" $ word $ ": " $ s $ ")"; + dxr.SetSeed( oldseed ); + if( InStr(Desc, s) == -1 ) { Desc = Desc $ "|n|n" $ s; return true; @@ -273,7 +277,7 @@ final function Class ModifyActorClass( out Class ActorClass ) return ActorClass; } -simulated final function #var PlayerPawn player() +simulated final function #var PlayerPawn player(optional bool quiet) { local #var PlayerPawn p; //p = #var PlayerPawn (GetPlayerPawn()); @@ -282,7 +286,7 @@ simulated final function #var PlayerPawn player() p = #var PlayerPawn (GetPlayerPawn()); dxr.Player = p; } - if( p == None ) err("player() found None", true); + if( p == None && !quiet ) warning("player() found None"); return p; } diff --git a/DXRando/DeusEx/Classes/DXRando.uc b/DXRando/DeusEx/Classes/DXRando.uc index cfb9c2648..d5823b5ec 100644 --- a/DXRando/DeusEx/Classes/DXRando.uc +++ b/DXRando/DeusEx/Classes/DXRando.uc @@ -106,7 +106,7 @@ function CheckConfig() { local int i; - if( class'DXRFlags'.static.VersionOlderThan(config_version, 1,5,7,0) ) { + if( class'DXRFlags'.static.VersionOlderThan(config_version, 1,5,9,8) ) { for(i=0; i < ArrayCount(modules_to_load); i++) { modules_to_load[i] = ""; } diff --git a/DXRando/DeusEx/Classes/DataStorage.uc b/DXRando/DeusEx/Classes/DataStorage.uc index ddfe5219c..503007ec8 100644 --- a/DXRando/DeusEx/Classes/DataStorage.uc +++ b/DXRando/DeusEx/Classes/DataStorage.uc @@ -56,6 +56,13 @@ simulated function AddNote(Name textTag, bool bUserNote, String text) } } } + else { + for(i=0; i