Skip to content

Commit

Permalink
v2.7.1.3 Beta Merge pull request #730 from Die4Ever/develop
Browse files Browse the repository at this point in the history
* Add new colour-coded barrel skins that are enabled by default in
Speedrun mode, but off by default in other game modes.  Option available
in config to turn them on or off fully.

* Make sure barrel texture gets updated if carried between levels.  Fix
typo in WaltonWare Hardcore

* Don't look up DXRFlags if Barrel Textures are forced enabled or disabled

* Change red explosive barrel label to the red flame label

* weapons that fall out of enemy hands due to damage should have ammo
vanilla's DeusExWeapon DropFrom function sets the ammo to 0 because it assumes the player is doing this

* looting carcass only get ammo from first of each weapon type

* Merge poison/biohazard barrels and the flammable solid/liquid/explosive
barrels into just one type of barrel each.

* DXRReduceItems refactor, use smart random rounding so the item amounts more accurately reflect the expected percentage

* Wooden barrels (that somehow actually exist in-game) now break into
wooden pieces when destroyed

* installer backup DXRSplits.ini

* speedrun splits start keeping track of average times for each split

* Wine bottles and wooden barrels now spill wine when broken

* Actually include the wine puddle class and texture

* Make sure wine bottles only leave a puddle when actually broken, not
when getting picked up sometimes

* fix looting LAW/PS40 due to bug with weapons with no ammo

* gunther infolink to tell you when you're close, also fix skillawardtrigger collision size

* Silo: Howard radio room closer to window, added computer in machine shop

* barrel names

* Make sure all explosive barrels have the same number of hitpoints

* Make sure UNATCO computer on Superfreighter is actually Chinese.  Fix
Revision build.

* Fix the Barrel Texture menu choice for non-vanilla better (in case we
choose to replace the barrels)

* Add hover hints for mission 9 weld points (and the holes that aren't
weld points)

* fix NSFHQ falling tnt crates

* Guards in Maggie Chow's apartment now get their barks removed until you
trigger an alarm or enter the back area.  #723

* installer keep dated backups of configs, also don't overwrite config twice (Install.py old lines 175 and 201, used to write default config on top of old config, then modify config values and write again)

* tests to call BackupFile from class and instance (I saw something about static function before Python 3.9)

* Remove projectiles from the list of possible actors on the main menu
(since they explode or fly away)

* fix num_random_actor_classes in DXRMemes

* Add option to automatically put away in-hand items when trying to pick
up decorations

* nerf power recirc again

* undo carcass multiple weapon looting change, for now

* fix chargedpickups showing in hand after use

* new console commands for MoveClass and RotateClass

* fill in ship weld points

* don't show bingo notifications in Zero Rando

* More Goal Failures (#731)

* add DXREvents.MapBingoFailEvents and numerous goal failure detections based on kills/knockouts

* add more bingo failures, not just based on death

* allow more logic for bingo failures

* correct maggie

* GetFailedBingoGoals fix missing break

* refactor GetBingoFailedGoals to use returns

---------

Co-authored-by: Die4Ever <30947252+Die4Ever@users.noreply.github.com>
Co-authored-by: Die4Ever <die4ever2005@gmail.com>

---------

Co-authored-by: theastropath@gmail.com <theastropath@gmail.com>
Co-authored-by: Jeffrey Thomas Piercy <mqduck@mqduck.net>
  • Loading branch information
3 people authored May 1, 2024
2 parents 2aa9de7 + 13106a7 commit 2d9a0f2
Show file tree
Hide file tree
Showing 54 changed files with 1,115 additions and 129 deletions.
2 changes: 1 addition & 1 deletion DXRBalance/DeusEx/Classes/AugDisplayWindow.uc
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ function _DrawActor(GC gc, Actor A, float DrawGlow)
}
else {
SetSkins(A, oldSkins);
gc.DrawActor(A, False, False, True, 1.0, DrawGlow, None);
gc.DrawActor(A, False, False, True, 1.0, DrawGlow/4, None);
ResetSkins(A, oldSkins);
}
}
Expand Down
4 changes: 2 additions & 2 deletions DXRBalance/DeusEx/Classes/AugPower.uc
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ simulated function SetAutomatic()
if(energyRate == 0) {
default.LevelValues[0] = 0.92;
default.LevelValues[1] = 0.85;
default.LevelValues[2] = 0.7;
default.LevelValues[3] = 0.5;
default.LevelValues[2] = 0.75;
default.LevelValues[3] = 0.6;
} else {
default.LevelValues[0] = 0.9;
default.LevelValues[1] = 0.8;
Expand Down
6 changes: 5 additions & 1 deletion DXRBalance/DeusEx/Classes/ChargedPickup.uc
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@ function ChargedPickupBegin(DeusExPlayer Player)
{
local Human p;
if(bOneUseOnly) {
bDisplayableInv = false;
p = Human(Owner);
if( p != None ) {
if(p.InHand == self) {
p.PutInHand(None);
p.UpdateInHand();
}
p.HideInventory(self);
}
bDisplayableInv = false;
}
_ChargedPickupBegin(Player);
}
Expand Down
14 changes: 14 additions & 0 deletions DXRBalance/DeusEx/Classes/CloudFixTimer.uc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class DXRCloud injects Cloud;

// HACK: duplicate the Flying state for savegame compatibility
auto simulated state Flying
{
}

simulated function Touch(actor Other)
{
Super.Touch(Other);
if(ScriptedPawn(Other) != None) {
Other.TakeDamage(Damage, Instigator, Other.Location, vect(0,0,0), damageType);
}
}
19 changes: 19 additions & 0 deletions DXRBalance/DeusEx/Classes/WineBottle.uc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,25 @@
//=============================================================================
class WineBottle extends HealingItem;

simulated function BreakItSmashIt(class<fragment> FragType, float size)
{
local Vector HitLocation, HitNormal, EndTrace;
local Actor hit;
local WinePool pool;

// trace down about 20 feet if we're not in water
if (!Region.Zone.bWaterZone)
{
EndTrace = Location - vect(0,0,320);
hit = Trace(HitLocation, HitNormal, EndTrace, Location, False);
pool = spawn(class'WinePool',,, HitLocation+HitNormal, Rotator(HitNormal));
if (pool != None)
pool.maxDrawScale = CollisionRadius / 5.0;
}

Super.BreakItSmashIt(FragType, size);
}

defaultproperties
{
bBreakable=True
Expand Down
1 change: 1 addition & 0 deletions DXRCore/DeusEx/Classes/DXRActorsBase.uc
Original file line number Diff line number Diff line change
Expand Up @@ -927,6 +927,7 @@ function #var(prefix)Containers AddBox(class<#var(prefix)Containers> c, vector l
local #var(prefix)Containers box;
box = #var(prefix)Containers(_AddActor(Self, c, loc, rotate));
box.bInvincible = true;
box.bIsSecretGoal = true;
return box;
}

Expand Down
2 changes: 1 addition & 1 deletion DXRCore/DeusEx/Classes/DXRVersion.uc
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ simulated static function CurrentVersion(optional out int major, optional out in
major=2;
minor=7;
patch=1;
build=2;//build can't be higher than 99
build=3;//build can't be higher than 99
}

simulated static function bool VersionIsStable()
Expand Down
17 changes: 16 additions & 1 deletion DXRFixes/DeusEx/Classes/Carcass.uc
Original file line number Diff line number Diff line change
Expand Up @@ -338,19 +338,34 @@ function bool TryLootWeapon(DeusExPlayer player, DeusExWeapon item)
local DXRando dxr;
local DXRLoadouts loadout;
local DeusExWeapon W;
local Inventory otheritem;

if (item.PickupAmmoCount < 0) {
DeleteInventory(item);
item.Destroy();
return false;
}

// Grenades and LAMs always pickup 1
if (item.IsA('WeaponNanoVirusGrenade') ||
item.IsA('WeaponGasGrenade') ||
item.IsA('WeaponEMPGrenade') ||
item.IsA('WeaponLAM'))
item.IsA('WeaponLAM')) {
item.PickupAmmoCount = 1;
}

dxr = class'DXRando'.default.dxr;
loadout = DXRLoadouts(dxr.FindModule(class'DXRLoadouts'));
if (loadout != None && loadout.is_banned(item.AmmoName))
item.PickupAmmoCount = 0;

// TODO: don't loot ammo from duplicate weapons, also carcass destruction, and pawn gibbing throwing items would need to do this
/*for(otheritem=item.Inventory; otheritem!=None; otheritem=otheritem.Inventory) {
if(otheritem.class.name == item.class.name) {
DeusExWeapon(otheritem).PickupAmmoCount = -1;
}
}*/

// Okay, check to see if the player already has this weapon. If so,
// then just give the ammo and not the weapon. Otherwise give
// the weapon normally.
Expand Down
1 change: 1 addition & 0 deletions DXRMapFixups/DeusEx/Classes/DXRFixupM03.uc
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ function PostFirstEntryMapFixes()
a = AddActor(class'Barrel1', vect(-27.953907, -3493.229980, 45.101418));
Barrel1(a).SkinColor = SC_Explosive;
a.BeginPlay();
a.PostPostBeginPlay();
}
break;

Expand Down
5 changes: 5 additions & 0 deletions DXRMapFixups/DeusEx/Classes/DXRFixupM04.uc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ function PreTravelMapFixes()

function PreFirstEntryMapFixes()
{
local Actor a;
local #var(prefix)FlagTrigger ft;
local #var(prefix)DatalinkTrigger dt;
local OrdersTrigger ot;
Expand Down Expand Up @@ -124,6 +125,10 @@ function PreFirstEntryMapFixes()
if(#var(prefix)BoxLarge(c) != None || #var(prefix)BoxSmall(c) != None
|| #var(prefix)CrateUnbreakableLarge(c) != None || #var(prefix)CrateUnbreakableMed(c) != None)
{
c.SetCollision(false,false,false);
foreach c.BasedActors(class'Actor', a) {
a.SetLocation(a.Location - c.CollisionHeight*vect(0,0,2));
}
c.Event = '';
c.Destroy();
}
Expand Down
26 changes: 26 additions & 0 deletions DXRMapFixups/DeusEx/Classes/DXRFixupM06.uc
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ function PreFirstEntryMapFixes()
break;

case "06_HONGKONG_WANCHAI_STREET":
SetupMaggieGuardBarkFix();
foreach AllActors(class'#var(prefix)WeaponNanoSword', dts) {
dts.bIsSecretGoal = true;// just in case you don't have DXRMissions enabled
}
Expand Down Expand Up @@ -609,6 +610,31 @@ function PostFirstEntryMapFixes()
}
}

function SetupMaggieGuardBarkFix()
{
local #var(prefix)MJ12Troop t;
local BarkBindTrigger bbt;

foreach AllActors(class'#var(prefix)MJ12Troop',t,'MaggieTroop')
{
//Remove their default bark bind names
t.BarkBindName=""; //Default is "MJ12Troop"
t.ConBindEvents();
}

//Add BarkBindTriggers
//Main entrance
class'BarkBindTrigger'.static.Create(self,'MaggieTroop',"MJ12Troop", vectm(-943,-448,2024),50,40);
//Buddha entrance
class'BarkBindTrigger'.static.Create(self,'MaggieTroop',"MJ12Troop", vectm(-1295, -1174, 2024),50,40);
//Rooftop entrance
class'BarkBindTrigger'.static.Create(self,'MaggieTroop',"MJ12Troop", vectm(-1297,-1268,2405),50,40);
//Floor below entrance
bbt=class'BarkBindTrigger'.static.Create(self,'MaggieTroop',"MJ12Troop", vectm(-1203, -934, 1736),50,40);

bbt.Tag = 'Onalert'; //Make the triggers also go off when the alarm triggers
}

function FixMaggieMoveSpeed()
{
local #var(prefix)MaggieChow maggie;
Expand Down
7 changes: 7 additions & 0 deletions DXRMapFixups/DeusEx/Classes/DXRFixupM09.uc
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,12 @@ function PreFirstEntryMapFixes()
}
}

foreach AllActors(class'ComputerSecurity',cs){
if (cs.ComputerNode==CN_UNATCO){
cs.ComputerNode=CN_China;
}
}

rg=Spawn(class'#var(prefix)RatGenerator',,, vectm(-738,-1412,-474));//Near sewer grate
rg.MaxCount=1;

Expand Down Expand Up @@ -291,6 +297,7 @@ function PreFirstEntryMapFixes()
barrel = #var(prefix)Barrel1(AddActor(class'#var(prefix)Barrel1', vect(-1112.480469,1120.735840,29.096186)));
barrel.SkinColor = SC_Explosive;
barrel.BeginPlay();
barrel.PostPostBeginPlay();

// just in case the gate keeper gets stuck, or if you wanna go fast!
foreach AllActors(class'#var(prefix)FlagTrigger', ft, 'CheckGateFlag') {
Expand Down
1 change: 1 addition & 0 deletions DXRMissions/DeusEx/Classes/DXRMissionsM02.uc
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ function ReplaceBatteryParkSubwayTNT()
if (barrel!=None){
barrel.bIsSecretGoal=True;
barrel.BeginPlay();
barrel.PostPostBeginPlay();
barrel.Tag='ExplosiveCrate';
}

Expand Down
145 changes: 145 additions & 0 deletions DXRMissions/DeusEx/Classes/DXRMissionsM09.uc
Original file line number Diff line number Diff line change
Expand Up @@ -338,8 +338,153 @@ function AfterMoveGoalToLocation(Goal g, GoalLocation Loc)
// spawn the MAHOGANY desk (CreateGoal only gets called for different maps)
g.actors[1].a = Spawnm(class'MahoganyDesk',,,Loc.positions[1].pos, Loc.positions[1].rot);
}

if (g.name=="Weld Point 1" ||
g.name=="Weld Point 2" ||
g.name=="Weld Point 3" ||
g.name=="Weld Point 4" ||
g.name=="Weld Point 5")
{
class'DXRHoverHint'.static.Create(self, g.name, Loc.positions[0].pos, 40, 40, g.actors[0].a);
}
}

function AfterShuffleGoals(int goalsToLocations[32])
{
local int g, roll, xmin, xmax, ymin, ymax;
local bool l1,l2,l3,l4,l5,create;
local string texture;
local Vector loc;
local float scale;
local bool RevisionMaps;

RevisionMaps = class'DXRMapVariants'.static.IsRevisionMaps(player());

if (dxr.localURL == "09_NYC_SHIPBELOW"){
for(g=0; g<num_goals; g++) {
switch(locations[goalsToLocations[g]].name)
{
case "NW Engine Room":
l1=True;
break;
case "NE Electical Room":
l2=True;
break;
case "East Helipad":
l3=True;
break;
case "Bilge Pumps":
l4=True;
break;
case "SW Engine Room":
l5=True;
break;
}
}
for(g=0; g<num_locations; g++) {
create=False;
texture = "Metal.BoilerDetail_C";
loc = locations[g].positions[0].pos;
roll = 0;
scale = 3;
xmin=0;
xmax=0;
ymin=0;
ymax=0;
switch(locations[g].name)
{
case "NW Engine Room":
if (l1==False){
create=True;
texture = "CoreTexMetal.Metal.BoilerDetail_C";
loc -= vect(0,0,26);
}
break;
case "NE Electical Room":
if (l2==False){
create=True;
texture = "Supertanker.Metal.N_ShWall_C";
roll = 16384;
loc += vect(-116, 0, 17);
scale = 4;
xmin=-1;
}
break;
case "East Helipad":
if (l3==False){
create=True;
texture = "Supertanker.Metal.N_ShWall_B";
roll = 16384;
loc += vect(0,-41,-32);
scale = 2.5;
xmin=-1;
ymax=1;
}
break;
case "Bilge Pumps":
if (l4==False){
create=True;
texture = "Supertanker.Metal.N_ShWall_C";
roll = 16384;
loc += vect(50, 0, 26);
scale = 2.6;
xmin=-1;
ymin=-1;
}
break;
case "SW Engine Room":
if (l5==False){
create=True;
texture = "CoreTexMetal.Metal.BoilerDetail_C";
loc -= vect(0,0,57);
ymin=-1;
ymax=1;
}
break;
}
if (create){
if(RevisionMaps) {
class'DXRHoverHint'.static.Create(self, "Not a Weld Point", locations[g].positions[0].pos, 40, 40);
} else {
PatchHole(loc, locations[g].positions[0].rot, texture, roll, scale, xmin, xmax, ymin, ymax);
}
}
}
}
}

function PatchHole(Vector baseloc, Rotator baserot, string texture, int roll, float scale, int xmin, int xmax, int ymin, int ymax)
{
local Actor a;
local int x, y;
local Vector loc, offset;
local Rotator rot;

rot = baserot;
rot.Yaw += 32768;
rot.Roll += roll;
rot = rotm(rot.Pitch, rot.Yaw, rot.Roll, 16384);

offset.X = -3;
for(x=xmin; x<=xmax; x++) {
offset.Y = float(x) * -50 * scale;
for(y=ymin; y<=ymax; y++) {
offset.Z = float(y) * 49.5 * scale;
loc = baseloc + (offset >> baserot);
loc = vectm(loc.X, loc.Y, loc.Z);
a = spawn(class'#var(prefix)CeilingFanMotor',,, loc, rot);
a.bCollideWorld = false;
a.SetPhysics(PHYS_None);
a.SetCollision(false,false,false);
a.DrawScale = scale;
a.ScaleGlow = 0.2;
a.bUnlit = true;
a.AmbientSound = None;
a.Mesh = LodMesh'DeusExItems.FlatFX';
a.Skin = Texture(DynamicLoadObject(texture, class'Texture'));
}
}
}

function MissionTimer()
{
Expand Down
Loading

0 comments on commit 2d9a0f2

Please sign in to comment.