Fallout 2 mod Fallout 2 Restoration Project Discussion (ideas/suggestions)

I got a weird error with your latest patch. when travelling (early in the game, I was right outside of The Den), I get the lightning mark for a random encounter, and I get a windows error:

Application Error: C:\Program Files\BlackIsle\Fallout2\Fallout2.exe

The instruction at 004c119d referenced memory at 00000054
The Memory could not be written

Click on OK to terminate the application




Any idea what random encounter could cause that or why?? I hope it isn't an important one! Also, if it's relevent, I have that combat rebalance mod also installed...
 
joochian said:
i killed masticator in bishop's basement. and when i fought for the title bout, 3 fighters later, i become prizefighter without risking my ears bitten off.

is this the way to avoid my ear from being bitten off?
is this normal?

I think your ear only gets bitten off if you fail a stat or skill check. I've always fought the masticator and aim punched his head for a knock out win. I Think there is also a bit where you can bite off the masticator's ear in return.
 
For the guys a few pages back who don't like the .223 pistol sounds, the easiest way to get rid of the new sound is to delete two sound files and let the game rebuild your sndlist file automatically. I can't remember what the name of the two files are, but it's been discussed in the past if you want to search for it.

@Nevill
You make an interesting point. I haven't tried that plot point yet in RP 2 and am not sure how it currently works, but after reading your post I'm going to check it out.

@all

A few ideas:

--If you use the "science" skill on a brahmin, you get a special comment about their biology. Perhaps such a comment could be added for wannamingos/aliens as well.

--In the original game one loses the ability to do caravan runs from Broken Hills if Chad is killed. It seems a shame to lose the caravan option, though, if one is being a good citizen by busting Chad for corruption. Surely Bill the Trader would hire one of the other folks (or maybe the pc?) to lead the caravans rather than go out of business just because Chad is in jail.

--I think it's pretty cool that killap introduced the ability for the player-character to work in the Shark Club in New Reno as either a comedian (guys) or a dancer (gals). However if one tries to work these jobs repeatedly for cash rather than just trying them once for the novelty of having something new to do, it's evident that there's room for improvement in the "performances."

For example on the dancing, here's a starting point for making the sequence more entertaining. If there are any would-be choreographers among NMA's readers this could certainly be refined and expanded a lot.

Step 1) In Node903 of ncpitbos.int, change the reference to critter pid 16777220 (tribal villager lady) to 16777218 (hero tribal female);

Step 2) Replace procedure timed_event_p_proc in ncpitbos.int with the following (tested, works fine):

Code:
procedure timed_event_p_proc
begin
	variable LVar1 := 0;
	if (maybe_in_battle() == 0) then
	begin
		if (op_fixed_param() == 2) then
		begin
			if (tell_funny) then
				call NodeGoodJokes();
			else
				call NodeBadJokes();
		end
		else if (op_fixed_param() == 3) then
		begin
			op_float_msg(op_dude_obj(), op_msg_string(440, tmp + 1000), 8);
			op_add_timer_event(op_self_obj(), op_game_ticks(8), 4);
		end
		else if (op_fixed_param() == 4) then
		begin
			op_gfade_out(600);
			op_move_to(op_dude_obj(), 11079, op_elevation(op_dude_obj()));
			op_set_obj_invisibility(comedian_obj, 0);
			maybe_unlock_input();
			op_set_global_var(398, 0);
			finished_routine := 1;
			op_display_msg(op_msg_string(440, 2500));
			op_game_time_advance(60 * (60 * 10) * 2);
			op_gfade_in(600);
		end
		else if (op_fixed_param() == 5) then
		begin
			op_debug_msg("PITBOSS: tile_set_center(11087): " + op_metarule3(108, 11087, 0, 0));
			op_gfade_in(600);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 6);
		end
		else if (op_fixed_param() == 6) then
		begin
			tmp := op_random(0, 4);
			if (tmp == 0) then
				LVar1 := 11085;
			else if (tmp == 1) then
				LVar1 := 11292;
			else if (tmp == 2) then
				LVar1 := 10690;
			else if (tmp == 3) then
				LVar1 := 11484;
			else
				LVar1 := 11687;
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_animate_move_obj_to_tile(Critter, LVar1, 0);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(1), 7);
		end
		else if (op_fixed_param() == 7) then
		begin
			if (op_anim_busy(Critter)) then
				op_add_timer_event(op_self_obj(), op_game_ticks(1), 7);
			else
				op_add_timer_event(op_self_obj(), op_game_ticks(1), 8);
		end
		else if (op_fixed_param() == 8) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_anim(Critter, 1000, 2);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 400);
		end
		else if (op_fixed_param() == 400) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_animate_move_obj_to_tile(Critter, 10888, 0);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(1), 401);
		end
		else if (op_fixed_param() == 401) then
		begin
			if (op_anim_busy(Critter)) then
				op_add_timer_event(op_self_obj(), op_game_ticks(1), 401);
			else
				op_add_timer_event(op_self_obj(), op_game_ticks(1), 402);
		end
		else if (op_fixed_param() == 402) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_anim(Critter, 1000, 2);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 403);
		end
		else if (op_fixed_param() == 403) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_reg_anim_animate(Critter, 13, -1);
			op_reg_anim_animate(Critter, 13, 10);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 404);
		end
		else if (op_fixed_param() == 404) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_reg_anim_animate(Critter, 17, -1);
			op_reg_anim_animate(Critter, 17, 15);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 405);
		end
		else if (op_fixed_param() == 405) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_reg_anim_animate(Critter, 13, -1);
			op_reg_anim_animate(Critter, 13, 10);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 406);
		end
		else if (op_fixed_param() == 406) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_animate_move_obj_to_tile(Critter, 11488, 0);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(1), 407);
		end
		else if (op_fixed_param() == 407) then
		begin
			if (op_anim_busy(Critter)) then
				op_add_timer_event(op_self_obj(), op_game_ticks(1), 407);
			else
				op_add_timer_event(op_self_obj(), op_game_ticks(1), 408);
		end
		else if (op_fixed_param() == 408) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_anim(Critter, 1000, 5);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 409);
		end
		else if (op_fixed_param() == 409) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_reg_anim_animate(Critter, 10, -1);
			op_reg_anim_animate(Critter, 10, 10);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 410);
		end
		else if (op_fixed_param() == 410) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_anim(Critter, 1000, 4);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 411);
		end
		else if (op_fixed_param() == 411) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_reg_anim_animate(Critter, 17, -1);
			op_reg_anim_animate(Critter, 17, 15);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 412);
		end
		else if (op_fixed_param() == 412) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_anim(Critter, 1000, 0);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 413);
		end
		else if (op_fixed_param() == 413) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_reg_anim_animate(Critter, 17, -1);
			op_reg_anim_animate(Critter, 17, 15);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 414);
		end
		else if (op_fixed_param() == 414) then
		begin
			op_reg_anim_func(2, Critter);
			op_reg_anim_func(1, 1);
			op_anim(Critter, 1000, 2);
			op_reg_anim_func(3, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(2), 9);
		end
		else if (op_fixed_param() == 9) then
		begin
			op_gfade_out(600);
			op_destroy_object(Critter);
			op_set_obj_invisibility(comedian_obj, 0);
			op_set_obj_invisibility(op_dude_obj(), 0);
			maybe_unlock_input();
			op_set_global_var(398, 0);
			finished_dance := 1;
			op_display_msg(op_msg_string(440, 2501));
			op_game_time_advance(60 * (60 * 10) * 1);
			op_debug_msg("PITBOSS: tile_set_center(11079): " + op_metarule3(108, 11079, 0, 0));
			op_gfade_in(600);
		end
		else if (op_fixed_param() == 1) then
		begin
			if (op_tile_distance(op_tile_num(op_self_obj()), op_tile_num(op_dude_obj())) <= 3) then
			begin
				if (op_global_var(494) == 8) then
					call Node012();
				else if ((op_global_var(230) / 100) == op_local_var(1)) then
				begin
					if (op_using_skill(op_dude_obj(), 8)) then
						call Node002();
					else
						call Node003();
				end
				else if (op_global_var(232) > 0) then
				begin
					if (op_using_skill(op_dude_obj(), 8)) then
					begin
						if (op_get_critter_stat(op_dude_obj(), 34) == 1) then
							call Node007();
					end
				end
				else if (op_using_skill(op_dude_obj(), 8)) then
					call Node008();
				else if (op_party_member_obj(16777376) != 0) then
					call Node009();
				else if (op_party_member_obj(16777377) != 0) then
					call Node010();
				else if (op_party_member_obj(16777295) != 0) then
					call Node011();
				last_timed_obj := op_self_obj();
				last_timed_param := last_timed_param;
				op_metarule3(100, op_self_obj(), 1, 0);
				op_add_timer_event(op_self_obj(), op_game_ticks(15) + op_random(0, op_game_ticks(30 - 15)), 1);
			end
			else
			begin
				call Node013();
				last_timed_obj := op_self_obj();
				last_timed_param := last_timed_param;
				op_metarule3(100, op_self_obj(), 1, 0);
				op_add_timer_event(op_self_obj(), op_game_ticks(15) + op_random(0, op_game_ticks(30 - 15)), 1);
			end
		end
		else if (op_fixed_param() == 21) then
		begin
			if (op_local_var(1) == 3) then
			begin
				tmp := op_random(1, 2);
				if (op_tile_num(op_self_obj()) != op_local_var(9)) then
					LVar1 := op_local_var(9);
				else if (tmp == 1) then
					LVar1 := 13466;
				else
					LVar1 := 14687;
			end
			else if (op_local_var(1) == 2) then
			begin
				tmp := op_random(1, 2);
				if (op_tile_num(op_self_obj()) != op_local_var(9)) then
					LVar1 := op_local_var(9);
				else if (tmp == 1) then
					LVar1 := 10878;
				else
					LVar1 := 16673;
			end
			op_reg_anim_func(2, op_self_obj());
			op_reg_anim_func(1, 1);
			op_animate_move_obj_to_tile(op_self_obj(), LVar1, 0);
			op_reg_anim_func(3, 0);
			last_timed_obj := op_self_obj();
			last_timed_param := last_timed_param;
			op_metarule3(100, op_self_obj(), 21, 0);
			op_add_timer_event(op_self_obj(), op_game_ticks(20) + op_random(0, op_game_ticks(40 - 20)), 21);
		end
	end
end

To add more moves/make the sequence longer, just keep chaining new timers after timer 414 and make sure the very last one in the sequence sets timer 9. If one were really ambitious, one could even find a short royalty/license-free music loop, convert it to acm, and have it play while the pc is dancing.
 
Endocore said:
--If you use the "science" skill on a brahmin, you get a special comment about their biology. Perhaps such a comment could be added for wannamingos/aliens as well.
how about it could give you information about its weak spots (like eyes/legs) and type of ammo it is weak to/strong against ?
 
SHADOW-XIII said:
Endocore said:
--If you use the "science" skill on a brahmin, you get a special comment about their biology. Perhaps such a comment could be added for wannamingos/aliens as well.
how about it could give you information about its weak spots (like eyes/legs) and type of ammo it is weak to/strong against ?

i thought that was perception and awareness and living anatomy role?
 
You make an interesting point. I haven't tried that plot point yet in RP 2 and am not sure how it currently works, but after reading your post I'm going to check it out.
I'm glad you've found the point interesting. Now, if only we could sneak this bit in your bug reports... :D

But seriously, there is so much potential in the idea that seeing it reduced to 'peeking at the endgame and reloading' pains me! You could further tie this sequence to the main plot by introducing a way to learn the location of Vault 13 from Xarn. He is from there, right? The Chosen One, on the other hand, probably haven't found it's location yet at this point of the game.
 
Endocore said:
--In the original game one loses the ability to do caravan runs from Broken Hills if Chad is killed. It seems a shame to lose the caravan option, though, if one is being a good citizen by busting Chad for corruption. Surely Bill the Trader would hire one of the other folks (or maybe the pc?) to lead the caravans rather than go out of business just because Chad is in jail.

If i remember correctly there is a replacement for Chad (script file exits, henchmanb or something was the filename), but i don't know if it was ever used in vanilla and RP.

I think i used modified version of that script for Max in skimming quest.
 
joochian said:
SHADOW-XIII said:
Endocore said:
--If you use the "science" skill on a brahmin, you get a special comment about their biology. Perhaps such a comment could be added for wannamingos/aliens as well.
how about it could give you information about its weak spots (like eyes/legs) and type of ammo it is weak to/strong against ?

i thought that was perception and awareness and living anatomy role?
yes but they show only current health state not general weaknesses
 
I don't know if this is already suggested before, but I think the Vault Village quest should be the 2nd quest you receive from Sergeant Stark. Because the village is on the route you scout Gecko, and Stark said he found the village from your reconnaissance report. Another reason of the suggestion is to "reduce" the motivation for players to go south to NCR early. Just my 2 cents.

EDIT: Ah, I noticed that now I can finish Gecko power plant + optimization quest first. Then get the village quest later and finish it by just asking the Brain to stop molerats. :oops:
 
A few small suggestions:

--As I was looking through Lao Chou's script to fix a few bugs, I decided for my own game to slightly change his new dialogue about the submarine issues; I think it all works better now. The main things I changed were (keeping it a bit vague to avoid too many spoilers):

a) Lao Chou says his reason for wanting money in exchange for his second bit of info is that he'll need to make many bribes to stay safe if anyone discovers he has been talking. This makes him seem more reasonable.

b) I added a small bit to the script and msg so that if the pc or Miria goes on a date with Lao Chou in exchange for his initial bit of information but the pc doesn't have the necessary barter skill to negotiate a better price for his second bit of info, the pc can still obtain a good price break by bringing up her/Miria's date with him. He says that he must have some cash available for bribes (i.e. can't give the info for free), but is willing to give a discount because he understands that the pc's reputation (if the pc dated him) or family honor (if Miria dated him) may be seriously offended if he doesn't make an allowance. Again, the result is to make him seem a bit more reasonable.

--I changed Meng the dockworker to use a Shi peasant sprite, since his dialogue indicates he's a town local.

While not really in accordance with the "Restoration" spirit of the mod, now that additional resources are available I made two minor changes that seem like an improvement to me:

c) I changed Master Ziggy (the Dragon's man) to use the "evil Cassidy" sprite;

d) I changed Juan Cruz to use a "long-hair leather-jacket dude" sprite.
 
@Endocore
You have so so many good ideas to enlarge the game, and you should post it, maybe as option in RP, as well as the ideas concerning the "Miria plot".

@All
But there are so many little stupid things to solve like when you confront Francis with the missing bodys in "Broken Hills" And you let him go for 1000xp, Phil the barkeeper keep´s continuously telling me to do arm wrestling with Francis...similar with many other situations in the game.
 
I have a question that has not seemed to have been asked already. WARNING, it contains a spoiler.....I think. It involves the optimize the powerplant quest, and a scrippting error the prevents the good gecko/Vault City ending. Does this patch fix that, and if not, is there another patch compatable with this one that does?
 
Incaros said:
I have a question that has not seemed to have been asked already. WARNING, it contains a spoiler.....I think. It involves the optimize the powerplant quest, and a scrippting error the prevents the good gecko/Vault City ending. Does this patch fix that, and if not, is there another patch compatable with this one that does?
That error was fixed long ago in my unofficial patch. Since the RP includes the patch, you also get the fixes.
 
Hey Killap, after playing a few times through your restoration project (which cost me many hours I'll not regret having spent), the game becomes much more enjoyable through new possibilities and quest paths that were previously bugged or underdeveloped. I know you're trying to stay close to what the original designers had in mind, though I hope you might consider the following suggestion.

I think the karma reward for killing Bandits and highwaymen could use some re-balancing. For example: killing a bandit nets you 5 positive karma, yet tearing up Curtis his mr. Nixon doll (one of the most evil acts in the game imo) only gives you 3 negative karma. Whacking the criminal mastermind Jon Bishop or Myron the egocentric creator of jet, gives you the same 5 karma reward as killing a bandit (or one of bishop's minions for that matter).

When playing as a evil character it's quite difficult to maintain a low karma, your best option is to run away from most encounters or else your precious evilness will suffer.
Sure enough, a bad guy who kills other bad guys is in someway a good guy. But let's consider how bad these highwaymen really are, they're just poor suckers who are somehow trying to eke out a living. They're definitely not as bad as Jon Bishop.

I think a karma reward of +1 for every bandit should be more then enough. And perhaps raise the reward for some notouriously evil characters a little. The way it is now, getting a high karma is much easier than a low karma.
 
Brunzer said:
I think a karma reward of +1 for every bandit should be more then enough. And perhaps raise the reward for some notouriously evil characters a little. The way it is now, getting a high karma is much easier than a low karma.
The karma given for killing critters is something I did not change from what was originally in the game nor do I plan on modifying. The only thing different now is that the game actually displays the karma you gain and lose.

I do see your point though.
 
I agree. It is very difficult to get, and keep bad karma in FO2. Unfortunately, changing this would require changing alot of scripts. Would make a great mod for the future though.
 
When i was still wandering through the wastes i considered the following issues.

First "Cassidy" is too often spoiling his floating text. Yes i know this is mentioned before..

In the Abbey after convincing "Tom" to work for the Pettersons, Mr. Petterson has nothing new to say? Something like "he´s working well for his age or similar would be great"...
 
A lot of people have mentioned lately that they think npc party members make float texts too often. That's very easy to fix for oneself; just edit their scripts and increase the random chance that they'll make a float to less likely odds.

@smilodom
I think about that Peterson/Tom thing as well every time I play through the Abbey, and it's pretty easy to add a few lines of dialogue to Peterson.

A little more ambitious change in regard to the Abbey would be to add another wandering friar who could be asked to go to Modoc. Currently when the player-character first arrives in Modoc, Mayor Jo will talk about how the church is abandoned because there's no pastor in town and the spiritual needs of the people aren't being attended to by anyone; after that though the matter is never mentioned again. Someday I'd like to add something for my own game where the pc can choose to either recruit a monk from the Abbey or a speaker from the Hubologists to become the new reverend in Modoc. If this new reverend is already in town when the player delivers the letter from the Slags, he/she could be consulted on what the townsfolk should do (a monk might urge compassion and give the pc an alternate way of avoiding the invasion apart from finding Karl in the Den, while a Hubologist might urge invasion to plunder the wealth of the Slags).
 
smilodom said:
@Endocore
You have so so many good ideas to enlarge the game, and you should post it, maybe as option in RP, as well as the ideas concerning the "Miria plot".

@All
But there are so many little stupid things to solve like when you confront Francis with the missing bodys in "Broken Hills" And you let him go for 1000xp, Phil the barkeeper keep´s continuously telling me to do arm wrestling with Francis...similar with many other situations in the game.

I think this is a good example for getting things improved.
 
Back
Top