# Fallout 2 mod Fallout 1 in Fallout 2

Discussion in 'Fallout General Modding' started by Lexx, Jul 12, 2019.

Not open for further replies.
1. ### LexxTestament to the ghoul lifespanModeratorModder

Apr 24, 2005
Thanks, I've updated my files with some of that stuff.

Also I just realized that the whole master / vats destruction video, etc. stuff wasn't done. So I've spend the last few hours on trying to get it right... Due to this and some other things, it now seems quite unlikely that I can wrap up some sort of alpha build this weekend. Sucks, but I can't help it.

May 19, 2003
no rush

3. ### ContinuumVault Fossil

Nov 8, 2006
Differences in protos: IIRC, conversion to 416 bytes makes them working in both engines.

Some mess you can clean up:

a) in Fallout all stairs, ladders, etc. that take to another level or map have a single script attached to it. IIRC, in Fallout 2 you can write data directly in Mapper.

In my sandbox I made a single script to cut down that ridiculous number of them + to keep all stuff is in one place:

Code:
procedure start;
procedure use_p_proc;

import variable Ian_ptr;
import variable Dog_ptr;
import variable Tycho_ptr;
import variable Katja_ptr;

#define NAME SCRIPT_GENSTAIR

procedure start begin

end

procedure use_p_proc begin
script_overrides;
if (map_is(MAP_JUNKTOWN_ENTRANCE)) then begin
// MORBID'S HIDEOUT
if (self_is(obj_on_map(13099, 0, PID_LADDER3_DN))) then begin
/*
if (combat_is_initialized) then begin
critter_stop_attacking(source_obj);
end
*/
move_to(source_obj, 12498, 1);
end
if (self_is(obj_on_map(12298, 1, PID_LADDER1_UP))) then begin
move_to(source_obj, 12898, 0);
end
end
if (map_is(MAP_HUB_DOWNTOWN)) then begin
// DECKER'S HIDEOUT
if (self_is(obj_on_map(25943, 0, PID_STAIRS1_DN))) then begin
move_to(source_obj, 25927, 1);
end
if (self_is(obj_on_map(25520, 1, PID_STAIRS1_UP))) then begin
move_to(source_obj, 25740, 0);
end
end
if (map_is(MAP_HUB_OLDTOWN)) then begin
// THIEVES' CIRCLE
if (self_is(obj_on_map(18878, 0, PID_STAIRS1_DN))) then begin
move_to(source_obj, 20482, 1);
end
if (self_is(obj_on_map(19878, 1, PID_STAIRS1_UP))) then begin
move_to(source_obj, 19278, 0);
end
end
if (map_is(MAP_NECROPOLIS_HALL)) then begin
// NORTH
if (self_is(obj_on_map(17074, 1, PID_LADDER1_DN))) then begin
move_to(source_obj, 15891, 0);
end
if (self_is(obj_on_map(15488, 0, PID_LADDER1_UP))) then begin
move_to(source_obj, 17074, 1);
end
// SOUTH
if (self_is(obj_on_map(28276, 1, PID_LADDER1_DN))) then begin
move_to(source_obj, 27097, 0);
end
if (self_is(obj_on_map(26694, 0, PID_LADDER1_UP))) then begin
move_to(source_obj, 28276, 1);
end
end
if (map_is(MAP_NECROPOLIS_WATERSHED)) then begin
// SOUTH
if (self_is(obj_on_map(26656, 1, PID_LADDER1_DN))) then begin
move_to(source_obj, 24058, 0);
end
if (self_is(obj_on_map(23858, 0, PID_LADDER1_UP))) then begin
move_to(source_obj, 26857, 1);
end
// FROM WATERSHED TO VAULT
if (self_is(obj_on_map(18658, 1, PID_LADDER1_DN))) then begin
move_to(source_obj, 19653, 0);
end
if (self_is(obj_on_map(19052, 0, PID_LADDER1_UP))) then begin
move_to(source_obj, 19057, 1);
end
// TO VAULT
if (self_is(obj_on_map(20053, 0, PID_MANHOLE))) then begin
end
end
// STORE
if (self_is(obj_on_map(11515, 0, PID_LADDER2_DN))) then begin
move_to(source_obj, 11715, 1);
end
if (self_is(obj_on_map(11315, 1, PID_LADDER1_UP))) then begin
move_to(source_obj, 11915, 0);
end
// ZIMMERMAN'S CELL
if (self_is(obj_on_map(17110, 0, PID_LADDER1_DN))) then begin
move_to(source_obj, 17111, 1);
end
if (self_is(obj_on_map(16911, 1, PID_LADDER1_UP))) then begin
move_to(source_obj, 17312, 0);
end
// FARM
if (self_is(obj_on_map(23119, 0, PID_LADDER2_DN))) then begin
move_to(source_obj, 23521, 1);
end
if (self_is(obj_on_map(23121, 1, PID_LADDER1_UP))) then begin
move_to(source_obj, 23519, 0);
end
end
if (map_is(MAP_LA_RIPPERS)) then begin
// STAIR
if (self_is(obj_on_map(13686, 0, PID_STAIRS1_DN))) then begin
move_to(source_obj, 14495, 1);
end
if (self_is(obj_on_map(13888, 1, PID_STAIRS1_UP))) then begin
move_to(source_obj, 14283, 0);
end
// TANGLER'S ROOM
if (self_is(obj_on_map(19478, 0, PID_LADDER1_DN))) then begin
move_to(source_obj, 19678, 1);
end
if (self_is(obj_on_map(19278, 1, PID_LADDER1_UP))) then begin
move_to(source_obj, 19879, 0);
end
end
/*
if (map_is(MAP_LA_GUN_RUNNERS)) then begin

end
*/
if (map_is(MAP_LA_FOLLOWERS)) then begin
if (self_is(obj_on_map(15069, 0, PID_STAIRS1_DN))) then begin
move_to(source_obj, 15072, 1);
end
if (self_is(obj_on_map(15066, 1, PID_STAIRS1_UP))) then begin
move_to(source_obj, 15268, 0);
end
end
if (map_is(MAP_CATHEDRAL)) then begin
// FROM HALL TO MASTER'S LAIR
if (self_is(obj_on_map(12108, 0, PID_STAIRS2_DN))) then begin
end
// FROM HALL TO TOWER
if (self_is(obj_on_map(12678, 0, PID_STAIRS2_UP))) then begin
end
end
if (map_is(MAP_CATHEDRAL_TOWER)) then begin
// FROM LEVEL 1 TO HALL
if (self_is(obj_on_map(18894, 0, PID_STAIRS2_DN))) then begin
end
// FROM LEVEL 1 TO LEVEL 2
if (self_is(obj_on_map(19096, 0, PID_STAIRS2_UP))) then begin
move_to(source_obj, 19101, 1);
end
// FROM LEVEL 2 TO LEVEL 1
if (self_is(obj_on_map(18894, 1, PID_STAIRS2_DN))) then begin
move_to(source_obj, 19101, 0);
end
// FROM LEVEL 2 TO LEVEL 3
if (self_is(obj_on_map(19096, 1, PID_STAIRS2_UP))) then begin
move_to(source_obj, 19294, 2);
end
// FROM LEVEL 3 TO LEVEL 2
if (self_is(obj_on_map(18894, 2, PID_STAIRS2_DN))) then begin
move_to(source_obj, 19101, 1);
end
end
if (map_is(MAP_MASTERS_LAIR_12)) then begin
// FROM MASTER'S LAIR TO HALL
if (self_is(obj_on_map(20732, 0, PID_STAIRS2_UP))) then begin
end
end
if (dude_is_source) then begin
if (global_var(GVAR_KATJA_STATUS) == 1) then begin
reg_anim_clear(Katja_ptr);
end
if (global_var(GVAR_DOG_EMPATHY) == 1) then begin
reg_anim_clear(Dog_ptr);
end
reg_anim_clear(dude_obj);
reg_anim_begin;
reg_anim(dude_obj, ANIM_STAND, -1);
reg_anim_end;
end
end

each "self_is" is a script less.

b) start procedure is filled with tons of shit. In Fallout you only need:

- map case:

Code:
procedure start begin
if (script_action == 15) then begin
call map_enter_p_proc;
end
if (script_action == 16) then begin
call map_exit_p_proc;
end
if (script_action == 23) then begin
call map_update_p_proc;
end
end

- non map case:

Code:
procedure start begin
if (script_action == 3) then begin
call description_p_proc;
end
end


Last edited: Jul 28, 2019
4. ### LexxTestament to the ghoul lifespanModeratorModder

Apr 24, 2005
I rewrote a lot of this code already. Compared to how it began, it's starting to look pretty damn good now, I'd say.
Moved lots of shit into headers, which makes modifying the data in the future a lot easier as well.

About the stairs - yes, you don't need a script for that in Fo2, but I'm keeping it in for now anyway. It doesn't hurt and when it comes to ladders, it actually fixes a visual bug (dude hanging in the last frame of the climbing animation). Putting it all into a single script isn't a bad idea, though. Maybe at some point in the future...

Anyways. Status update:
• Finished the party member conversion yesterday. Now they run on the Fallout 2 system.
• Party members can level up now.
• As party members grow stronger with time, I've also added in Fo2's recruitment system: If you use charisma as a dump stat, you will not be able to take everyone with you (This is optional and can be disabled).
• Ai packages need adjustments, but that's a minor issue.
• Also took the time to implement the Sfall party armor change mod. Works good so far, only Tycho reverts to his default after every map change - no idea why. Maybe I'll find out some day. - found out why. Fixed.
• Fixed various random encounter related bugs (critters not drawing weapons, crash bugs, invulnerable critters, etc).
• Reactivated the "fluff" encounters that were removed in Fixt. Stuff like "you are dehydrated", etc. Instead I've added a toggle setting, so you can decide for yourself if you want this or not.
• Max rad resistance is 100% now, not 95% anymore (Fo1 value).
• Still working on the Vats / Cathedral destruction scene. Maybe I'll get it done today. Vats / Cathedral destruction scene is finished. Not exactly in the way I would like, but it works.

Last edited: Jul 28, 2019
5. ### Mr.StalinMildly Dipped

Oct 29, 2015
I have long wanted to fix it. This will be fixed in future versions of sfall.

6. ### NineevaFirst time out of the vault

Aug 20, 2009
That is impressive given how little time it's taken you both.

Is there much more you need to do other than test for bugs? i.e. can you play the game from start to finish now doing side quests and having random encounters as it was in fallout 1?

7. ### LexxTestament to the ghoul lifespanModeratorModder

Apr 24, 2005
Keep in mind that a lot was already done by other folks. I merely picked up the latest sources I could find and started working on it. Still lots to do, but all the grunt work like setting up protos, maps, and data files was already done.

In theory, yes. But as I haven't done that myself yet, I can't say for sure. All the core elements are tested, though (the timers, getting the water chip, returning the chip, destroying vats and cathedral and then ending the game in a cutscene with slideshow and video).

So... yeah, in theory it works.

I've also fixed certain bugs that are introduced by Fixt (I cross-checked ingame in Fo1 and reproduced the same issues), so going by that, the Fo2 port should even be less buggy than the Fo1 Fixt version at this point.

Last edited: Jul 29, 2019
8. ### .Pixote.Antediluvian as FeckModder

Sep 14, 2009
I'm looking forward to playing this when it's complete, you're the man Lexx...

9. ### LexxTestament to the ghoul lifespanModeratorModder

Apr 24, 2005
I started a test playthrough yesterday. Made it to the Hub when I had to call it quits for the night. Found lots of proto issues (wrongly ported, bad settings, etc), which I fixed then. Also some other tiny script issues, which I was able to fix right away.
Here's a pic of the leather gang just leaving Junktown.
Other than these issues, it seemed to run well. I'll continue later today.

Anyway, as quite a bit happened, another status update:
• Reworked all invasion timer code / moved it into a gl script.
• Forgot to mention that Animal Friend perk, Mental Block, Scrounger and Flower Child are back, no matter how useless they seem.
• Fixed some Brotherhood location related bugs.
• Smitty in Boneyard now doesn't make the player naked when upgrading his plasma rifle.
• I allowed some critters to run, such as Ian gangers and dogs. This always annoyed me in Fo1.
That's all I remember right now.

/Edit: Made it to Necropolis now. Catching the Water Chip soon. Necropolis caravans are still bugged from original Fallout. Will see how / if / when I fix them.

/Edit2: For some reason my skills.ini file isn't working, thus the 1 skill point == 1% skill increase doesn't work anymore. I have no clue why. Worked all the time, now not anymore. Love these kind of issues... - fixed.

Last edited: Jul 30, 2019
10. ### LexxTestament to the ghoul lifespanModeratorModder

Apr 24, 2005
Good news, everyone!
Master is kill.

So my tl,dr is ... Everything is playable. You can start the game, you can end the game. However, in my playthrough I've noticed lots of tiny things that annoyed me or that I knew are wrong. Now the thing is, lots of these elements might as well be changes introduced by Fixt and some of these I really don't like. Started reverting and rewriting, etc. bla bla. Some things also are just unfinished / wrongly ported elements. As example the previously mentioned proto errors.
This is all stuff that can and will be fixed in the future, but it's a bit tedious and annoying.

Since yesterday, this happened:
• Fixed: Huge performance issue in Gun Runners location after player gets all weapons.
• Fixed: After giving the water chip to the overseer, the player is correctly teleported to the library and files a report.
• Fixed: Necropolis Vault glowing ghouls were invincible.
• Fixed: Necropolis Watershed prisoner now walks correctly out of the map. Also replaced a useless gvar with an lvar.
• Changed: Gizmo's guard Izo will behave like in thy olde days.
• Also updated ai.txt file - needs testing.
• Added: Hub deathclaw map to... the Hub.
• Also added: Irwine's Farm to the Hub.
• Fixed: broken ai packs (talking rats, dogs, animals in general)
• Added: 4 levels to Dogmeat.
• Added: Wooden doors will close automatically now. This can be toggled on / off in fo1_settings.ini - best used in combination with gl_autodoors.
• Tweaked: Killian's store tables, so it won't be *that* easy anymore to steal from him. Needs further testing.
• Fixed: After destroying the Vats, the MBENT entrance wasn't disabled.
• Fixed: Location tabs on worldmap now appear in the same order as in Fo1.
As said, some of these issues are based on the Fo1 -> Fo2 port, but others are because of Fixt or bugs introduced by Fixt (the version I played last should be called Brokt, I guess. I joke. It's a joke, ok? Sorry).

11. ### dozenFirst time out of the vault

Jul 22, 2011
That's awesome! Hope, there will be a stable version available soon. Feel free to use us as beta testers once you decide that you are done with major changes.

I happened to translate Fixt, but have never actually played it, so the question might seem weird: is the Fallout Demo quest a part of the general campaign now available for the Vault Dweller?

12. ### LexxTestament to the ghoul lifespanModeratorModder

Apr 24, 2005
Nah, I won't be including the demo location into this package. It would be possible, but it's just not what I want to work on.
Btw. the demo was turned into its own mod just a short while ago.

Other than that, I just fixed the ages old Necropolis caravan escort bug + found out the same one appears on the route to the Boneyard, which I have fixed as well. Turns out it was a very trivial thing to fix...

Last edited: Jul 31, 2019
13. ### ContinuumVault Fossil

Nov 8, 2006
Are the random encounters fully scriptable (like in Fallout), or can they be only driven by that some sort of procedural txt file?

Anyway, I'm thinking to move my sandbox over there... but...

a) are you still adding shits there?
b) I want to repack critter.dat and master.dat to avoid trucktons of files in data directory + Fallout 2 useless shits*,
c) I see some globals.txt with RESERVED_FOR_FALLOUT2_ENGINE - what that shit is?
d) what are engine specific GVARs?
e) are there any other things I should be aware of?

* long time ago I did it with my compact (~ 165MB) Mapper for Fallout.

14. ### Mr.StalinMildly Dipped

Oct 29, 2015
There are global variables that are processed by the F2 engine. It’s strange that you don’t know anything about it.

15. ### LexxTestament to the ghoul lifespanModeratorModder

Apr 24, 2005
Everything is in script. It's a total mess of code that still needs serious cleanup. Maybe in the far future it'll all be ported over to Fo2's encounter system, but for now... I'm ok with how things are.

Yes. It'll be a while before I stopp adding and changing code around. We are still refactoring.

Well, the plan is to deliver only the necessary files with the alpha build. It'll come with a small gui extractor that picks specific files from the fo1 master.dat - not everything. The main mod files will come in a custom *.dat file.

Lots of stuff is still hardcoded in the engine. These variables should not be used anywhere else and remain "free".
"Globals.txt" is part of the debug gui, by the way (currently disabled / not working I think).

They control perks and other engine specific stuff. Don't ask me what exactly. Better not touch them.

The project is still under heavy development. So porting your code now might mean you have to revisit everything again often. Personally I wouldn't do that yet and wait for something more stable.

16. ### ContinuumVault Fossil

Nov 8, 2006
Ok, will wait then.

Can't really help you because of total incompatibility with my scripts and other shits, but I can point you out bugs here or there - I've fixed many of them, but I don't have any list of what I've changed + it was five years ago.

Looked at Nicole, originally you could piss her off ad infinitum. Where to fix + restored herebefore:
Code:
procedure talk_p_proc begin
call GetReaction;
if (ThiefFlag) then begin
ThiefFlag := 0;
if (local_var(LVAR_TALKED_TO_NICOLE) == 0) then begin
set_local_var(LVAR_TALKED_TO_NICOLE, 1);
end
// --> NODE GOES HERE
end
else begin
if (reaction_min) then begin
call Node077;
end
else begin
call Node070;
end
else begin
if (local_var(LVAR_TALKED_TO_NICOLE) == 0) then begin
set_local_var(LVAR_TALKED_TO_NICOLE, 1);
call Node001;
end
else begin
call Node069;
end
end
end
end
dialogue_end
ReactionFlag := 0;
end


Code:
# Node069   [UNUSED - ADDED]
{352}{}{I need to ask a few questions.}
{353}{}{I have some information for you.}
{354}{}{I've talked to Laura.}
{355}{}{Nothing. Thanks.}
{356}{}{Mom!?}

{357}{NIC_70}{What do you want now?}
{358}{}{I wanted to say I'm sorry.}
{359}{}{I just wanted to see you again.}
{360}{}{}

{369}{NIC_77}{Hey! Get out of here!}
{370}{}{Or else what?}
{371}{}{Ok, I'm leaving.}


Obviously later you'll have to add stuff, like:
Code:
procedure Node010 begin
inc_local_var(LVAR_APOLOGIZE_FLAG);
ReactionFlag := -25; // --> INCREASE
call DecReaction;
BMessage(145);
set_map_var(MVAR_SHOW_PLAYER_OUT, 1);  // --> KICK OUT PLAYER
end

procedure Node070 begin
if (local_var(LVAR_APOLOGIZE_FLAG) < 2) then begin
GOption(4, 358, Node071);
end
else begin
BOption(4, 358, Node070a);
end
BOption(4, 359, Node070a);
end

Code:
# Node070a   [UNUSED - ADDED]
{361}{NIC_70A}{Just leave.}

{363}{}{Can I ask a few more questions?}
{364}{}{That was all for now. I gotta go.}


Last edited: Aug 3, 2019
17. ### LexxTestament to the ghoul lifespanModeratorModder

Apr 24, 2005
This shows a problem already - you completely changed the dialog. :p No idea where what is. My talk_p_proc looks completely different, your nodes seem to be in a different order. Also you've added some thief stuff, which doesn't exist in my version.

18. ### ContinuumVault Fossil

Nov 8, 2006
ThiefFlag is for this:
Code:
procedure pickup_p_proc begin
ThiefFlag := 1;
dialogue_system_enter;
end

# [UNUSED]
{366}{NIC_74}{What are you doing? Put that down!}
{367}{NIC_75}{Stop!}
{368}{NIC_76}{Stop that!}


On a side note: every single script which is edited by me has "NodeXXX" (in Fallout 2 way - it's nicer) instead of, for example "NicoleXX" + every msg associated with it is commented with Node number, like Nicole I posted above.

I can point you out some things, but you'll have to track down and rewrite them on your own.

In attachment you'll find fun stuff I added (IIRC, originally there was only MSG). I haven't changed position of manholes/ladders in Necropolis, so it should work with original maps.

File size:
3.1 KB
Views:
249
19. ### Mr.StalinMildly Dipped

Oct 29, 2015
If the vault13.gam file is extracted to the <game_root>\data\data\ folder, then the names are taken from it, instead of from .txt