Ayao "Alqualos" Kuroyuki (ayao) wrote,
Ayao "Alqualos" Kuroyuki
ayao

Fallout 2 porn star experience HowTo

Surprisingly, this is something that isn't as easy as it seems and there's little to none information available. Even the nearly ultimate Fallout 2 guide says something like "mess of weighed stats and perks." Which stats? Which perks?

For some reason, I had a lot of trouble with it this time. And this time I am playing with Killap's patch, which fixes a lot of things and doesn't seem to break anything nor add something unnecessary. But I thought that maybe this one is something that Killap's patch breaks or fixes in a weird way. Turned out it was not so, but in order to figure that out I had to examine a lot of scripts, so here's what I've found.

I won't go into details about how to get to audition. This should be easy enough. If you have problems with that, try becoming a prizefighter, a made man or use your chance to ask them about their business while you are doing the quest for Mordinos. The hard part is to succeed at audition.

First, here is the script that checks whether you can become a porn star right away or not:
      end else if (dude_agility < 8) then begin
         force_dialog_start("Node024");
      end else if (dude_endurance < 8) then begin
         force_dialog_start("Node025");
      end else if (dude_sex_rating < 9) then begin
         force_dialog_start("Node026");
      end else begin
         force_dialog_start("Node027");

Without even checking out appropriate nodes, it is obvious from this script that you need AG 8, EN 8 and "experience". This is exactly what the Nearly Ultimate Guide says. But let's see what experience is:
/******************************************************************
 general macros/defines related to having sex
******************************************************************/
// is_sex_god is temporary for when the player gets the sex perk ***
#define is_sex_god               ((global_var(GVAR_PLAYER_SEX_LEVEL)>=100) or (dude_has_porn_star_rep))
#define have_sex_time_obj(x)     (((get_critter_stat(x,STAT_en)) * random(4,8)) * ONE_GAME_MINUTE)
#define have_sex_time            have_sex_time_obj(dude_obj)
#define advance_sex_time         game_time_advance(have_sex_time)
// these are to be compared to sex_rating
#define sex_rating_great         (9)
#define sex_rating_good          (7)
#define sex_rating_normal        (5)
#define sex_rating_bad           (3)
#define sex_rating_horrible      (2)
// returns a value between 1 and 10 on how good the sex was
#define obj_sex_rating(x)        ((((get_critter_stat(x,STAT_ch)*50) +                    \
                                    (get_critter_stat(x,STAT_en)*25) +                    \
                                    (get_critter_stat(x,STAT_ag)*13) +                    \
                                    (get_critter_stat(x,STAT_st)*12))/100) +              \
                                    (has_trait(TRAIT_PERK,x,PERK_kama_sutra_perk) * 2) +  \
                                    (has_trait(TRAIT_TRAIT,x,TRAIT_sex_appeal)) +         \
                                    (is_sex_god * 2 * (x == dude_obj)))
#define dude_sex_rating          obj_sex_rating(dude_obj)
#define self_sex_rating          obj_sex_rating(self_obj)
#define up_sex_status_amt(x)     inc_global_var_amt(GVAR_PLAYER_SEX_LEVEL, dude_sex_rating * x);   \
                                 if (global_var(GVAR_SEX_COUNTER) >= 9) then begin                 \
                                    set_global_var(GVAR_SEXPERT, 1);                               \
                                 end                                                               \
                                 if (dude_sex_rating >= sex_rating_great) then begin               \
                                    set_global_var(GVAR_GIGALO, 1);                                \
                                 end                                                               \
                                 inc_global_var_amt(GVAR_SEX_COUNTER, x)
#define up_sex_status            up_sex_status_amt(1)

It turns out that the formula is:
"sex power" =
(CH * 50 + EN * 25 + AG * 13 + ST * 12) / 100 // these are weighed stats
+ 2 // if you have Kama Sutra
+ 1 // if you have sex appeal
+ 2 // if you are "sex god"
Now, I had CH 6 (not much, I admit), EN 2 (loosy), AG 10 and ST 5, but after taking 2 Buffouts I had CH 6, EN 8, AG 10, ST 9. Looks pretty good, but still it's only 7.38, while I needed at least 9 to succeed. Even if I had CH 9 (+1 shades, +2 mentats), it still means only +1.5, which makes it 8.88. One more point of ST or EN would do the trick, but there was no way to do it, at least none I could think of, except maybe for taking some Jet, but with its 95% addiction rate it's a kind of pain. Oh, and as far as I know, they don't want to have any business with Jet addicts, so I couldn't even test it.

So it looks like that "experience" is coded here as is_sex_god, and that's what I needed to increase. It is defined as either having "sex level" of 100 or more, or having a porn star reputation, but since this is what I was trying to get, the only way that was left to me was increasing sex level. We can see that it is increased by up_sex_status_amt() and up_sex_status() macros, so let's see how it's actually works. Here is a part of Miss Kitty's script:
if (sex_partner_obj == dude_obj) then begin
  up_sex_status;
end

Yeah, that's it. The condition here only checks that is you who are having sex and not one of your followers. So sex level is increased by "sex power" each time I pay for sex in the Cat's Paw. This means by 5.4 in this case, not by 7.38 because I didn't want to waste Buffout for prostitutes. So all I had to do was to have sex at Cat's Paw for about 20 times or even less. So I did, actually even more than 20 times, but for some weird reason that didn't help. I got Sexpert all right, but I didn't get Gigolo and those brothers would still complain about my lack of experience. This was even before I looked at the scripts, so I decided that maybe I had to have sex at different places. So I went to Klamath and visited the bath house. Strangely enough, I immediately got Gigolo after the first time there. I still enjoyed all available baths there and got back to New Reno, but those bastards still didn't acknowledge me as a porn star. At this point I started looking at the scripts, but failed to understand anything. According to them, I should have gotten Gigolo exactly at the same moment as my sex rating reached the required value. So I decided there was something wrong with the patch after all and decompiled a few scripts from the game folder. Let's start with Corsican Brothers again:
if (((((get_critter_stat(dude_obj, 3) * 50) 
	 + (get_critter_stat(dude_obj, 2) * 25)
	 + (get_critter_stat(dude_obj, 5) * 13)
	 + (get_critter_stat(dude_obj, 0) * 12)) 
	 / 100)
	 + (has_trait(0, dude_obj, 94) * 2)
	 + has_trait(2, dude_obj, 13)
	 + (((global_var(194) >= 100) or (global_var(232) > 0)) 
              * 2 * (dude_obj == dude_obj))) < 9) then begin
	debug_msg("force_dialog_start(" + forced_node + "): " + obj_name(self_obj));
	forced_node := "Node026";
	dialogue_system_enter;
end
else begin
	debug_msg("force_dialog_start(" + forced_node + "): " + obj_name(self_obj));
	forced_node := "Node027";
	dialogue_system_enter;
end

Okay, now decompiled scripts are a bit harder to read, but fortunately we can look up some constants in the header files:
#define GVAR_NEW_RENO_PORN_STAR              (232)
#define GVAR_PLAYER_SEX_LEVEL                (194)
#define GVAR_SEXPERT                         (588)
#define GVAR_GIGALO                          (589)
#define PERK_kama_sutra_perk                (94)
#define TRAIT_sex_appeal      (13)
#define TRAIT_PERK  (0)
#define TRAIT_TRAIT  (2)

So, it's essentially the same. So of course I wanted to check Miss Kitty's scripts too:
if (sex_type != 702) then begin
	set_global_var(194, global_var(194) 
            + (((((get_critter_stat(dude_obj, 3) * 50)
		+ (get_critter_stat(dude_obj, 2) * 25)
		+ (get_critter_stat(dude_obj, 5) * 13) 
		+ (get_critter_stat(dude_obj, 0) * 12)) 
		/ 100) 
		+ (has_trait(0, dude_obj, 94) * 2) 
		+ has_trait(2, dude_obj, 13) 
		+ (((global_var(194) >= 100) 
		     or (global_var(232) > 0)) * 2 
			 * (dude_obj == dude_obj))) * 1));
end
if (global_var(358) >= 9) then begin
	set_global_var(588, 1);
end
if (((((get_critter_stat(dude_obj, 3) * 50) 
	 + (get_critter_stat(dude_obj, 2) * 25) 
	 + (get_critter_stat(dude_obj, 5) * 13) 
	 + (get_critter_stat(dude_obj, 0) * 12)) 
	 / 100) 
	 + (has_trait(0, dude_obj, 94) * 2) 
	 + has_trait(2, dude_obj, 13) 
	 + (((global_var(194) >= 100) 
              or (global_var(232) > 0)) * 2 
            * (dude_obj == dude_obj))) >= 9) then begin
	set_global_var(589, 1);
end
if (global_var(590) == 1) then begin
	set_global_var(590, 0);
end
set_global_var(358, global_var(358) + 1);

The only difference that I see here is that it checks for sex_type, which must be not 702, that is "just talk":
#define sex_blow_job                   (700)
#define sex_sex                        (701)
#define sex_talk                       (702)
#define sex_strange_sex                (703)

And if you are wondering what is that global variable number 590, it's just "virgin" reputation that was never fully implemented, and it is reasonably set to 0 here. The only thing I don't understand is how Killap managed to leave all those checks and variable modifications outside of the "sex_type != 702" block, but that is hardly going affect anything. This still doesn't explain why I got Gigolo in Klamath while being unable to get it in New Reno, so let's look at Klamath (Sally's) script:
if (global_var(358) >= 9) then begin
	set_global_var(589, 1);
end
if (((((get_critter_stat(dude_obj, 3) * 50) 
	 + (get_critter_stat(dude_obj, 2) * 25) 
	 + (get_critter_stat(dude_obj, 5) * 13) 
	 + (get_critter_stat(dude_obj, 0) * 12)) / 100) 
	 + (has_trait(0, dude_obj, 94) * 2) 
	 + has_trait(2, dude_obj, 13) 
	 + (((global_var(194) >= 100) or (global_var(232) > 0)) * 2 
	 * (dude_obj == dude_obj))) >= 9) then begin
	set_global_var(588, 1);
end
if (global_var(590) == 1) then begin
	set_global_var(590, 0);
end
set_global_var(358, global_var(358) + 1);

Now it sort of makes sense. For some reason, Gigolo and Sexpert are mixed up here, so it sets Gigolo if my sex count exceeds 9, which it did at that point. Perhaps Killap recompiled these scripts at different times with different headers or maybe he just didn't use macros in some of these scripts.

But even after all this research I still didn't understand why I was unable to get enough experience in Cat's Paw, so I decided to open the save editor and look at my "sex experience" variable. It was equal to 75. So it turns out that I for some strange reason just didn't have enough sex there. Maybe it was because I sometimes clicked on "just talk" option. Or maybe it was some sort of glitch that froze one of the variables, I don't know. But after I checked the save, I visited Cat's Paw again, had sex for 5 more times, and I got my long-awaited porn star reputation!

TL/DR. The formula for porn audition sex experience check in Fallout 2 is:
"sex power" =
(CH * 50 + EN * 25 + AG * 13 + ST * 12) / 100 // these are weighed stats
+ 2 // if you have Kama Sutra
+ 1 // if you have sex appeal
+ 2 // if you are "sex god" - see below
Each time your character has sex, his "sex level" is increased by this value. If this "sex level" reaches 100 you become a "sex god" (which you don't see directly in the game, although bugged Gigolo/Sexpert reputations are indirect signs) and thus receive this last addition in this formula. If your weighed stats are less than 7 and you have neither Kama Sutra nor Sex Appeal, then you can't become a porn star no matter how much experience you have. This can be very confusing. Suppose you have CH 6, EN 8, AG 8 and ST 5. This gives you only 6.64, but you pass all other checks, so they still tell you that you lack experience even if you are Sexpert, Gigolo and "sex god".

You are also considered a "sex god" if you are already a porn star, so after that you have additional 2 to your sex power no matter if you had to use drugs to become a porn star, which may be useful in some sex-related scripts, or maybe not.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments