Git Product home page Git Product logo

deus-ex-randomizer's Introduction

Deus Ex Randomizer

This is a mod for the original Deus Ex that takes everything and shuffles it all around to make it like a new game every time but with the same great story. The goal is to increase the replayability and strategy. You can also use it to properly configure your vanilla Deus Ex with performance fixes like DXVK, Kentie's Launcher, and config tweaks all done automatically for you.

If the game is not running well, even for vanilla Deus Ex, see the recommended tweaks here.

Trailers

Here's a trailer for WaltonWare mode. WaltonWare mode is focused on quick wins by completing a single bingo line, and increasing difficulty after every win. The bingo goals are all scaled to their minimum settings and you start in a random area. All bingo goals will be completable within just a few maps!

WaltonWare Trailer

Here's a trailer for our new Mirrored Maps feature in v2.5. Play through the game with a random mix of mirrored maps, which will keep you on your toes even more than the randomizer has before!

v2.5 Mirrored Maps Trailer

If you don't know what Deus Ex Randomizer is, then here's our old trailer which shows a breakdown of how it works:

v2.0 Trailer

DXRando randomizes

  • Locations of goals, NPCs, and some starting locations
  • Medbots and repair bots (with hint datacubes near them)
  • Adding and moving turrets, cameras, security computers, and datacubes for them
  • Starting equipment, bioelectric energy, and credits
  • Enemies:
    • Moving enemies around
    • Adding and changing enemies with randomized stats and weapons
    • Chance to add/remove helmets for many enemies, affecting their damage resistance to their head
    • New enemies can get randomly generated patrol routes
    • Giving them random names and making some of them dance
  • Changing the locations of items/boxes/NanoKeys/datacubes around the map
  • Passwords and passcodes
  • Exp costs for skills
    • Option for rerolling every mission, defaults to reroll every 5 missions
    • Option for disabling the Downgrade button on the new game screen, to prevent looking ahead
  • What augmentations are in each canister
  • The strength and lockpick strength for doors
  • The hack strength for keypads
  • The strength of augmentations and skills (make sure to read their descriptions)
  • The damage and firing speed of weapon types (make sure to read the description for one of each type)
  • JC's and Paul's clothes
  • Randomly adds "The Merchant"
  • Optionally randomize the song selections, with options to use songs from Unreal and Unreal Tournament
  • Option for mirrored maps, with choice of what percentage of maps should be mirrored
  • Randomize the types of weapon mods
  • Randomize the types of attached grenade traps

There are also settings for

  • Crowd Control! Let your Twitch/YouTube/Discord/other viewers troll you or help you! https://crowdcontrol.live/guides/DeusEx
    • If you want to try some of the Crowd Control features without actually streaming, you can try the "Offline Simulated" mode in the New Game screen!
  • New Game+ - after beating the game play it again keeping your items, skills, and augs, but with increased difficulty and a new seed
    • Takes away 1 random augmentation, and 1 of your weapons
    • Takes away half your skill points and 5 random skill levels, so the player has to choose which ones to level up first
  • New game modes! (Wiki page)
    • WaltonWare mode - A quick option to get into the game without the time commitment of the full game! You start in a random mission and win by completing one bingo. As New Game+ keeps making it harder, see how fast you can complete them or how many you can complete!
    • WaltonWare Entrance Rando - both modes combined!
    • Zero Rando - great for first-time Deus Ex players to benefit from the bug fixes, QoL improvements, and balance changes we've made, without any randomization.
    • DXRVanillaFixer: This one is for the purists. Use our new installer program and it will do compatibility fixes for the vanilla game (Kentie's Launcher, D3D10, DXVK, Engine.dll fix, and more), then just run DeusEx.exe as normal and the gameplay will be unchanged but with high frame rates and resolutions!
    • Randomizer Lite - randomizes some things without interfering with the immersion and mood of the game. Great for players who haven't played Deus Ex in a long time, or if you're intimidated by the full Randomizer.
    • Randomizer Medium - similar to Randomizer Lite but with more randomization features enabled by default. Remember you can tweak the settings in the Advanced menu to play with any randomization level you want.
    • Serious Sam mode - same as the normal game but with 10x as many enemies. The player has increased health and takes reduced damage to compensate.
    • Speedrun mode - speedrun with fewer resets while still being able to enjoy higher difficulties. And a built in splits viewer!
    • Entrance Randomization - changes what level each teleporter takes you to, but keeps it within the same mission
    • Horde Mode - fight for your life to see how long you can survive in the Paris Cathedral
  • Challenge mode loadouts! (Wiki page)
    • Stick With the Prod Pure means the only weapon you get is the stun prod (hint: throw a crate straight up into the air to break it)
      • Stick With the Prod Plus also allows EMP grenades, gas grenades, scramble grenades, pepper gun, and tranq darts
    • Ninja JC - the only weapons allowed are throwing knives, swords, pepper spray, grenades, knife, and mini-crossbow. You also get a Ninja Augmentation which gives you speed and stealth at the same time.
    • Don't Give Me the GEP Gun - bans the GEP gun
    • Freeman Mode - only weapon allowed is the crowbar
    • Grenades Only
    • No Pistols - for people who think the pistol is OP
    • No Swords - for people who think the sword and Dragon's Tooth Sword are OP
    • No Overpowered Weapons - bans pistols, swords, and the GEP Gun
    • By the Book - bans lockpicks and multitools
    • Explosives Only
  • If you opt-in to Online Features (which is disabled by default, check the Rando menu)
  • Max Rando - randomize the randomizer's settings!
  • An integrated Bingo board: on the Goals screen there's a Bingo button in the middle bar
    • Also an external BingoDisplay program you can download from the Github Releases page. Great for streamers who want to show their bingo progress live to viewers.
  • Co-op when combined with the HX mod (Alpha)
  • Making all or some of the doors that normally require a key also lockpickable and/or destructible
  • Making all or some keypads hackable
  • Reducing the drop rate for ammo, multitools, lockpicks, medkits, and bioelectric cells
  • Autosave
  • Smooth continuous music, even through loading screens
  • Making enemies respawn
  • Starting the game with the running speed augmentation
  • Optional hardcore Autosave-Only mode, no save-scumming allowed!
  • Option to keep the game running while menus are open, making hacking or inventory management more difficult
  • Assistance options like autofill for passwords and keypad codes
  • The ability to reveal where Nanokeys/Datacubes/goals are located
  • Option to start the game at certain points like Hong Kong or Paris

New Game Menus

When you click New Game, you will see this settings screen:

options

If you click Next then it will use default settings based on your difficulty choice.

But if you click Advanced then you will see these settings:

advanced options

On the main menu there's also a Rando button for a bunch of global settings, like music controls, online features, and some QoL options.

Rando settings

rando setttings

Balance Changes

DXRando features many small but impactful balance changes that can expand your tactical options.

The large metal crates are now destructible with 2000hp. Alcohol now fixes dead legs. Things that normally aren't useful have been buffed, such as hazmat suits, ballistic armor, environmental skill, and the spy drone augmentation. And more balance changes to maximize variety for many replays!

See the full list of balance changes here in the wiki so you may be better able to adapt to the unique challenges DXRando generates.


Join the discord channel for discussion, or follow me on Twitter @Die4EverDM, or on Mastodon @[email protected], or @[email protected] on Mastodon. Also check out Mods4Ever.com

deus-ex-randomizer's People

Contributors

die4ever avatar hampta avatar joreilly25 avatar katdevsgames avatar mqduck avatar silverstringsthebard avatar theastropath avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

deus-ex-randomizer's Issues

Max Rando

edit the flags normally set in advanced settings, but try to maintain the difficulty

balancing

could also make it improve the balance of the skills, like

balance_adjustments = { swimming = 0.5 }

and then the code for randomizing would be like

balance_adjustment = balance_adjustments[name]
percent = randomize()
new_value = old_value * percent * balance_adjustment

nerf the dragoon's tooth sword? apparently it only does 20 base damage but for some reason it multiplies up to 100 when hitting an enemy? will need to look into this

buff the PS20? limit how many medkits and biocells you can carry at once?

fix missing music in 08_NYC, and annoying Jock trigger

could probably detect if the music is missing before fixing it, just in case they're using fixed or different map files

https://www.reddit.com/r/Deusex/comments/j1sb2j/try_playing_deus_ex_1_without_music_just_try_it/g714063/

also for some reason it's finnicky to get Jock to come pick you up, just make him appear any time after you talk to Dowd

http://www.dxm.be/navigator.php5?lang=en&content=202

from PlayMusicWindow.uc

function PlaySong(int rowID)
{
	local String songName;
	local Int songSection;

//   0 - Ambient 1
//   1 - Dying
//   2 - Ambient 2 (optional)
//   3 - Combat
//   4 - Conversation
//   5 - Outro

	if (btnAmbient.GetToggle())
		songSection = 0;
	else if (btnCombat.GetToggle())
		songSection = 3;
	else if (btnConversation.GetToggle())
		songSection = 4;
	else if (btnOutro.GetToggle())
		songSection = 5;
	else if (btnDying.GetToggle())
		songSection = 1;

	songName = lstSongs.GetField(rowID, 1);
	player.PlayMusic(songName, songSection);
}

Preprocessor for compiler

So you can pass variables to the compiler through arguments like run_tests=1

or tell the compiler to overwrite default values in defaultproperties like

compiler.py -defaults DXRBase.runtests=1

will probably new #ifdef statements for things like GMDX, Revision, HX...

new compiler

would use it like

class DXRScopeView injects DeusExScopeView;

this would rename the original DeusExScopeView to DeusExScopeViewBase1 or something like that, and DXRScopeView would be renamed to DeusExScopeView, and the injects DeusExScopeView would be replaced with extends DeusExScopeViewBase1

this could also support multiple new classes injecting into the same class so you would end up with DeusExScopeViewBase2 and stuff

could also tell the compiler to overwrite default values like

compiler.py -defaults DXRBase.runtests=1

I can run tests from the compiler like ucc Core.HelloWorld

replace Self with Classname(Self)?

for example, you can't do an injects for NanoKey, because it passes Self to a function that expects a NanoKey, but now it's sending the type NanoKeyBase

this could be fixed if the compiler replaces Self with NanoKey(Self), and that conversion should always work

configs

a config to enable/disable modules? change default flags? forcefully overwrite flags even when loading saved games?

DXRReduceItems could receive arguments/config for which classes of items to reduce and what %

config value for enabling tests

more alternate game modes?

Horde mode? could maybe even let the player place turrets, buy bots? randomly placed explosive/gas barrels/crates? randomly spawn LAMs and gas grenades and stuff for the player to find?

"Stick to the Prod" mode, gotta make use of those fire extinguishers! new module DXRRestrictedWeapons with a config for a whitelist of weapon classes? would have to use a timer until I get the new compiler working

"Stick to the Prod+" could also allow some other weapons like gas grenades, emp grenades? Maybe baton? Crossbow with only tranq darts?

"Don't Give Me The GEP Gun" would ban the GEP gun

"Ninja" mode - only weapons allowed are the sword and throwing knives, probably need to buff throwing knives or make the low tech skill help them more in range and projectile speed

something like Dead Rising or Zombies Ate My Neighbors?

built-in bingo?

Paul Is Missing? like Mario Is Missing?

New Game+ - after the credits can go back to the first level, maybe show a menu for some settings
keep your augs and your skills
keep or lose your skill points?
keep (some of?) your items
lose your nanokeys, notes, goals
new seed or same seed?
increase difficulty?
keep track of how many times you've looped

The note with all the UNATCO passwords is not fully randomized

As seen in the image below, the password for anavarre doesn't appear to have been randomized (Important for the killswitch phrase), nor has klloyd's (Not important at all, AFAIK). This image was taken standing in front of Anna Navarre's computer, so I believe it should have been randomized by this point.

image

randomize starting energy and equipment

min/max starting energy?
easy = 75% min
normal = 50%
hard = 25%
extreme = 0%? max of 30% so no hacking?

easy and normal start with 2 weapons and a melee weapon?
hard starts with 1 weapon and 1 melee weapon?
extreme starts with no ranged weapon?

#87 will help make this more meaningful

gibbed enemies should drop keys on the ground

could copy item dropping from the Containers class

function Destroyed()
{
	local actor dropped;
	local class<actor> tempClass;
	local int i;
	local Rotator rot;
	local Vector loc;
	local TrashPaper trash;
	local Rat vermin;

	// trace down to see if we are sitting on the ground
	loc = vect(0,0,0);
	loc.Z -= CollisionHeight + 8.0;
	loc += Location;

	// only generate trash if we are on the ground
	if (!FastTrace(loc) && bGenerateTrash)
	{
		// maybe spawn some paper
		for (i=0; i<4; i++)
		{
			if (FRand() < 0.75)
			{
				loc = Location;
				loc.X += (CollisionRadius / 2) - FRand() * CollisionRadius;
				loc.Y += (CollisionRadius / 2) - FRand() * CollisionRadius;
				loc.Z += (CollisionHeight / 2) - FRand() * CollisionHeight;
				trash = Spawn(class'TrashPaper',,, loc);
				if (trash != None)
				{
					trash.SetPhysics(PHYS_Rolling);
					trash.rot = RotRand(True);
					trash.rot.Yaw = 0;
					trash.dir = VRand() * 20 + vect(20,20,0);
					trash.dir.Z = 0;
				}
			}
		}

		// maybe spawn a rat
		if (FRand() < 0.5)
		{
			loc = Location;
			loc.Z -= CollisionHeight;
			vermin = Spawn(class'Rat',,, loc);
			if (vermin != None)
				vermin.bTransient = true;
		}
	}

	if( (Pawn(Base) != None) && (Pawn(Base).CarriedDecoration == self) )
		Pawn(Base).DropDecoration();
	if( (Contents!=None) && !Level.bStartup )
	{
		tempClass = Contents;
		if (Content2!=None && FRand()<0.3) tempClass = Content2;
		if (Content3!=None && FRand()<0.3) tempClass = Content3;

		for (i=0; i<numThings; i++)
		{
			loc = Location+VRand()*CollisionRadius;
			loc.Z = Location.Z;
			rot = rot(0,0,0);
			rot.Yaw = FRand() * 65535;
			dropped = Spawn(tempClass,,, loc, rot);
			if (dropped != None)
			{
				dropped.RemoteRole = ROLE_DumbProxy;
				dropped.SetPhysics(PHYS_Falling);
				dropped.bCollideWorld = true;
				dropped.Velocity = VRand() * 50;
				if ( inventory(dropped) != None )
					inventory(dropped).GotoState('Pickup', 'Dropped');
			}
		}
	}

	Super.Destroyed();
}

Kill Bob Page mode

also Kill Morgan Everett mode?

They would probably share a base class

Would also want a DXRRemoveStory module or something

Could be developed in pieces, first make it just work in 1 city, then add more cities later

every time Jock's helicopter is in a level, there should be a chance to spawn the evil mechanic guy, and you gotta kill him to defuse the bomb

And if you don't, then next time you see a helicopter it'll have a new randomized name

Maybe passwords normally retrieved from dialog can be put in datacubes in other areas? Large metal crates can be lined up near doors to force the player to get muscles aug or lots of explosives? 1 area would have to be the newb area.

maybe something like a Carmen Sandiego game where you need to learn about the enemy to fill out a warrant? NPCs give you hints about the details for the warrant and where the enemy is currently, you go there and get another hint they left behind and eventually catch up to Bob

fix corpse spawning function

can do an injects so that the corpse maintains the scale and thinness of the pawn, and also drop melee weapons or all weapons on the ground

finish Horde Mode

maybe some waves will try to get to the computer in the basement and you gotta stop them? or the vault? or the top of the towers?

ability to buy/hack turrets/bots to help you for 1 or a few waves? will the AIs ever kill a turret?

more maps? Liberty Island might work ok? Area51? Wan Chai Market? NYC Warehouse? NYC Ship? Paris Chateau? none of them sound as good as the Cathedral

compiler chained injects (and merges?)

just need to put numbers at the end of the classnames in the middle of the chain

maybe a new keyword joins to become the parent class for all listed classes? like this to replace Toilet and Toilet2

class ToiletExtinguish joins Toilet, Toilet2;

function Frob(actor Frobber, Inventory frobWith)
{
	local DeusExPlayer player;

	Super.Frob(Frobber, frobWith);

	player = DeusExPlayer(Frobber);
	if (player != None && player.bOnFire)
	{
		player.ClientMessage("Splish Splash!");
		player.ExtinguishFire();
	}
}

Various base game issues in Hong Kong, related to Gordon Quick, Tracer Tong, and the Luminous Path compound

There are a few inter-related issues here that maybe could be fixed as part of this mod.

In my playthrough, I used grenades to climb over the wall and break into the Luminous Path compound. This makes all the Luminous Path guys in the area hostile. While you can kill all the regular people, Gordon Quick is invincible (since he is plot relevant).

Issue 1:
Gordon Quick NEVER returns to being friendly after breaking in, which means you can never talk to him again to continue the mission he gives you (retrieving the Dragons Tooth Sword).

This could maybe be corrected by setting him to be friendly again or unsetting whatever flag makes everyone hostile if you break in (or probably both), any time you re-enter the map

Issue 2:
Hacking the keypad in the basement of the Luminous Path compound doesn't actually cause the painting to move aside. Do keypads really trigger differently if interacted with after being hacked than they do after entering a correct code? Luckily, you can blow up the door to get through...

Issue 3:
Everyone in Tracer Tong's area is still hostile to you if you break in via the second issue, and Tracer Tong, Alex Jacobson, etc (key characters) don't seem to spawn. Presumably they are hidden by some sort of flag that only gets set once you've satisfied Gordon Quick (or hidden if you broke into the compound?) I think if it's possible to break into the compound and blow up the door to the basement, it should probably be possible to talk to Tracer Tong and friends for your efforts.

DXRAddItems

or maybe this could be part of DXRFixup, a config array

struct AddItem {
string type;
string map_name;
vect pos;
rot rotation;
};

var config AddItem add_items[50];

example would be add a medbot to the sealab

Plot-based Entrance Randomizer

I think it would be cool to provide entrance randomizer functionality so that the maps aren't connected in the normal ways. I think if we want to maintain the regular plot and progression, we would need to limit the entrance randomization to just within a given mission.

This would require some hardcoding, as we would need to figure out all the map transition locations, and understand what kind of bidirectionality exists between them (Entering Versalife through the canal road entrance is one way, for example).

refactor DXRMenuSetupRando

should have a DXRMenu parent class, need a cleaner way to create a list of enum values and tie them to the output values, probably a function call like AddEnumOption(btnRandoDoors, "Key-Only Doors Destructible or Pickable", keyonlydoors+doormutuallyexclusive);

maybe even use the same code for init and ProcessAction? by using an out variable to write to the flag variable, and returning a bool so I can do an if statement on it so I can set more than 1 output variable

could even use the same code for reset to defaults

function bool EnumOption(EnumBtn btn, string label, int value, optional out int output) {
    if( processing_action ) {
        if( label == selected_label(btn) ) {
            output = value;
            return true;
        }
        return false;
    }
    AddEnumOption(btn, label, value);
    return false;
}

and then your combo init/process code would be like

EnumOption(btnAutosave, "Every Entry", 2, flags.autosave);
EnumOption(btnAutosave, "First Entry", 1, flags.autosave);
if( EnumOption(btnRandoDoors, "Key-Only Doors Destructible or Pickable", keyonlydoors+doormutuallyexclusive, flags.doorsmode) ) {
    flags.doorsdestructible = 50;
    flags.doorspickable = 50;
}

this would also be a good time to combine/remove some options, and maybe add new ones

maybe I could even make it live-update the menu when changing the game mode, since it's already using the same code for the init/ProcessAction steps

also could do some more config stuff? like enums to ints mappings in configs

Skills sometimes reset back to default costs

Sometimes skills seem to stop having their costs randomized and go back to the defaults. It looks like this might be happening when you leave and then come back to a map (UNATCO HQ seemed to be doing it, and going between the hanger and the 747 seemed to be doing it too)

configs for manual key mover safety check

this could greatly improve the chateau

duclare_chateau_front02, duclare_chateau_front01, or just make the key spawn anywhere with a Z greater than -125

maybe also ignore axis? would be nice for the 747 lebedevdoor to ignore the Z axis so the key can be in different places, or just put it anywhere with an X axis greater than 166

also the cath_maindoors keys always spawn in the same places

the cathedralgatekey key comes from a weird spot, past the gate, should probably just allow it to spawn anywhere with an X axis greater than -4857

I think I can just turn off smart keys for the cathedral level? none of them are required

fix 14_OCEANLAB_LAB key positioning

add/move turrets and cameras

And add security computers for them, and datacubes for those computers? Might also need to add alarms

testing webhook

moving goals around?

could have a config-driven list of actors like

struct Goals {
    string map;
    string name;//or name tag;?
    float radius;//grab all other actors in this radius too, including hidden actors (maybe excluding PathNodes and Lights)
};

example: 01_NYC_UNATCOIsland, TerroristCommander0, 200

or: 02_NYC_BatteryPark, BarrelAmbrosia0, 100 (actually I think the goal node can't be moved?)

also a list of KeyLocations where the goals can be moved to

struct KeyLocations {
    string map;
    vector loc;
    //optional string name for logging purposes?
}

could also reuse the KeyLocations list for changing the player starting location on applicable maps

Where else would this be good? Maybe cathedral I could move Gunther and the computer

Needs to play well with #86

more flags for "Undefeatable Doors" option in v1.4

I already internally use integer percents for doorspickable and doorsdestructible

from DXRMenuSetupRando:

        if( doors == "Unchanged" ) {
            dxr.flags.doorsdestructible = 0;
            dxr.flags.doorspickable = 0;
        }
        else if( doors == "Destructible" ) {
            dxr.flags.doorsdestructible = 100;
            dxr.flags.doorspickable = 0;
        }
        else if( doors == "Pickable" ) {
            dxr.flags.doorspickable = 100;
            dxr.flags.doorsdestructible = 0;
        }
        else if( doors == "Either" ) {
            dxr.flags.doorsdestructible = 50;
            dxr.flags.doorspickable = 50;
        }
        else if( doors == "Both" ) {
            dxr.flags.doorsdestructible = 100;
            dxr.flags.doorspickable = 100;
        }

I might also do a double-width enum button, so it doesn't have a label, that way the button would cycle through options like
"Most Undefeatable Doors Pickable"
"All Undefeatable Doors Destructible"
"All Doors Destructible"
"All Key-Only Doors Both" (can I fit Pickable+Destructible instead of just saying Both?)
"Some Doors Either"

02_NYC_Underground ComputerPersonal0 has an email with passcode 2167 but doesn't add a note

can we make it so when you successfully login to that computer it adds a note so you can see what the passcode is randomized to?

hopefully when I make the new compiler, we can just make a new class to inject DeusExText.DeusExTextParser

in DeusExText\Text\Mission02\02_EmailMenu_jsteward.txt
<EMAIL=02_Email08,System Hacking,Security Central,JSteward,>

in DeusExText\Test\Mission02\02_Email08.txt

<COMMENT>MJ12 lab</COMMENT> 
<DC=255,255,255>
<P><B>From:</B> Central Security//UpNet.2334.3233 
<P><B>To:</B> JSteward//UpNet.332.88732
<P><B>Subject:</B> System Hacking
<P>
<P>We've had several attempts to hack into the main Daedalus system, mostly amateur tunneling stunts that don't require a prejudicial response; however, in keeping with standard protocols, all Level 1 lock system codes have been changed.  The new code is 2167.  This will work within the complex, but isn't valid for exterior access (those systems are on a separate grid, as is the armory).  Pass this code on to those with the proper clearances.
<P>
<P>Archie Reynmann
<P>Central Security
<P>
<P>"Never blame malice for what can adequately be blamed on stupidity" -- R. Feynman

might need to carry over the list of old_passwords and new_passwords as the player travels, so things from other maps can apply to emails like this, it's already a circular array so it'll just overwrite the oldest entries

control non-human cloning from a flag

    // this reduces the likelihood of cloning non-humans, starting with a conservative 10% reduction
    if( rng(10)==0 && newclass == None && IsHuman(base) == False ) return None;

NYC2 softlock (vanilla bug)

in NYC2, if you read the evidence of UNATCO's corruption, but then instead of sending the signal you go talk to Paul again
it's leftover code from when they planned on letting you stay with UNATCO instead of joining the NSF

you tell Paul you're gonna stick with UNATCO and Paul is like well ok, but then you can't leave NYC

an easy fix with AnyEntry I think

also if you do the nsfhq before talking to paul, even if you send the signal

I found these flag names:
TalkedToPaulAfterMessage_Played
NSFSignalSent

the dialog TalkedToPaulAfterMessage requires the flag PaulInjured_Played, so if I just set that flag to true on AnyEntry if NSFSignalSent is set, then it should fix it?

the dialog M04PlayerLikesUNATCO requires M04MeetGateGuard_Played and legend says it needs NSFSignalSent but I assume it requires that to be false

this seems to be the problem code:

		if (!flags.GetBool('M04RaidTeleportDone') &&
			flags.GetBool('ApartmentEntered'))
		{
			if (flags.GetBool('NSFSignalSent'))
			{
				foreach AllActors(class'ScriptedPawn', pawn)
				{
					if (pawn.IsA('UNATCOTroop') || pawn.IsA('MIB'))
						pawn.EnterWorld();
					else if (pawn.IsA('SandraRenton') || pawn.IsA('GilbertRenton') || pawn.IsA('HarleyFilben'))
						pawn.LeaveWorld();
				}

				foreach AllActors(class'PaulDenton', Paul)
				{
					Player.StartConversationByName('TalkedToPaulAfterMessage', Paul, False, False);
					break;
				}

				flags.SetBool('M04RaidTeleportDone', True,, 5);
			}
		}

this is what sends you to the next mission

	// do this for every map in this mission
	// if the player is "killed" after a certain flag, he is sent to mission 5
	if (!flags.GetBool('MS_PlayerCaptured'))
	{
		if (flags.GetBool('TalkedToPaulAfterMessage_Played'))
		{
			if (Player.IsInState('Dying'))
			{
				flags.SetBool('MS_PlayerCaptured', True,, 5);
				Player.GoalCompleted('EscapeToBatteryPark');
				Level.Game.SendPlayer(Player, "05_NYC_UNATCOMJ12Lab");
			}
		}
	}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.