Skip to content

Instantly share code, notes, and snippets.

@Patrick-1994-
Last active May 20, 2024 21:00
Show Gist options
  • Save Patrick-1994-/64b1b657fd4287620dd1b6d84b062e2a to your computer and use it in GitHub Desktop.
Save Patrick-1994-/64b1b657fd4287620dd1b6d84b062e2a to your computer and use it in GitHub Desktop.

STFU nerd, just tell me the pitfalls

Got bad luck with dem girls? I feel ya, this is what you might be doing wrong. If you fix those, maybe you don't need to fight your way through this shitty doc!

  • Your car is damaged
    • More damage, less sexy.
  • Your car is too far away
    • Not nearby? Not yours!
  • You have a lot of muscle but less than 40%
    • GFs who like muscle actually HATE every bit of muscle you have if you don't meet their demands. They HATE you for having 39% muscle, but LOVE you for it if you meet their 40% threshold
  • You blame fat for your misfortune
    • No. Neither Millie nor Katie care about fat as long as you have less than 50%.
  • You messed around with meme haircuts.
    • Stick to the route. Leave meming to the experts. They have all read Patrick's big ass doc about GFs and know what they are doing. (right?)

Background knowledge

  • To meet a GF and have her accept you (for example: the initial meating of Katie at the golf club), you need to have, let's call it "appeal points".
    • You get (and lose!) these "appeal points" through various things, like the muscle, fat, and sex appeal stat. You get sex appeal through clothes, haircuts, cars.
    • This is all they care about, really. Also, do not mix up "appeal points" with the "sex appeal" stat. :)
  • For them to accept you when you visit them at their homes (they can send you off if you suck! :) ), they are a little more lenient, because the calculation adds your "progress with GF" stat (this is the stat that pops up every time a date ends).
  • Girls are crazy in this game. They have stats they like and if you meat their threshhold (e.g. 40% muscle for Katie), you gain "appeal points" with them, but if you have only 39%, they will hate you for it, as in, you lose appeal points.
    • This is where myths like "you need x% muscle to meat this GF" come from. I suppose, R* uses this crazy way of doing it because they want people to think like that. I checked the source code, the developers did not document their reasoning in it.

Differences between Katie and Millie

Katie and Millie are the same, except in these two aspects:

  1. initial progress: When she accepts you as GF, you will get this much progress with her for free:
    • Millie: 20%
    • Katie: 15%
  2. needed "appeal points": If this needs clarification, I have failed in the "Background knowledge" section of this doc.
    • Millie: 60
    • Katie: 50

How to get points

Example

If you have 40% sex appeal, 20% muscle, 40% fat and try to meat Katie at the golf club, then you will

  • get 40 points for your sex appeal
  • lose 10 points (20 / 2 = 10 ) for your muscle
  • "lose" 0 points for fat because she does not care about as it is below her 50% threshhold.

So you have 30 appeal points with her. She requires 50, so she will reject you.

In the abstract

  1. sex appeal: 1 point per percent
  2. muscle: 0.5 points per percent (result rounded down)
    • added if >=40% muscle, subtracted if <40%)
      • examples: 38% muscle -> subtract 19 points (38 / 2 = 19); 40% muscle -> add 20 points.
  3. not fat: They do not care up to <50%, but then they punish
  4. [If you try to pick them up at home] progress: progress / 2
    Note that some rounding happens, for details see here ("the exact formula is").

How you get sex appeal:

  1. Car

    • You get a penalty of 2 times the damage percentage. E.g. 10% damage means 20% less sex appeal.
    • Here is a list of which types of cars give you how much sex appeal:
      • 50%: list of super sexy cars (this is a must read :P)
      • 25%: stuff not listed, e.g. bikes. I feel there should not be much with less appeal in Millie's neighbourhood.
      • 15%:
        • VEHICLE_CLASS_WORKER
        • VEHICLE_CLASS_TAXI
      • 5%:
        • VEHICLE_CLASS_POORFAMILY
        • VEHICLE_CLASS_BIG
        • VEHICLE_CLASS_MOPED
        • VEHICLE_CLASS_BICYCLE
    • source in note car_appeal
  2. Haircut

    • Avoid the "Will Smith" haircut (flattop), as you only get 5% sex appeal for it.
    • Your choices:
      • $350 jhericurl for 5% sex appeal (like in any%)
      • $500 Cornrows for 10% sex appeal
      • $600 glitch strats: Start with the $100 "Cesar+Goatie" haircut and then switch to $500 Cornrows for 15% sex appeal
        • I have not confirmed that this is the fastest (save dem frames!) or cheapest option.
          • If you want to test yourself: The first haircut needs to have <15 appeal, the second one as much as possible.
        • read note haicut_sex_appeal_glitch to see how the glitch works
        • read note all_haircut_choices for more details
  3. tattoos? / clothes?

todo: incorporate some points from here (like max distance for sex appeal): https://gist.github.com/Patrick-1994-/d89a4cdce3e6a77c748ccd6bce6a930b

Some applications

Millie

  1. You cannot date her with 32-39% muscle, because then the penalty from muscle is too high. You need to pass the 40% muscle threshhold to gain appeal from muscle, then it is smooth sailing.
  • tested in-game and checked the log to confirm the calculation:
  • calc:
    • 50 points from car
    • 15 points from the haircut
    • -16 points from 32% muscle (or -19 points from 39% muscle)
    • 10 points from 20% progress
    • 59 points total (out of 60 required)
  1. You can date her with a bike (25% sex appeal for that vehicle).
  • [untested, just math based on other tests]
  • You just need 40% muscle and jhericurl or better (for that haircut, your vehicle needs to be in perfect condition, though).
  • calc:
    • 25 points for the 25% sex appeal from the bike
    • 5 points for the haircut
    • 20 points for 40% muscle
    • 10 points for 20% progress
    • 60 points (60 required)
  • You get more leeway with the 10% and 15% haircut options.

Katie

all untested

  1. You can get her as gf with up to 31% muscle (or 40%+).
  • calc:
    • 50 points from car
    • 15 points from haircut
    • -15 points from 31% muscle
    • 0 points from progress
    • 50 points (0 to spare)
  1. Once she is your gf, you can even date her with 39% muscle:
  • Let's take the worst case (39% muscle):
    • 50 points from car
    • 15 from the haircut
    • -19 from muscle
    • 7 from the 15% progress with her
    • 53 points (3 to spare)
  • I suppose you have <=31% muscle before you would do the "Jizzy skip" in 100%, right?

Actual strats

Well, that is a to-do. ^^

Notes

note car_appeal

sex_appeal = ( APPEAL_FACTOR * (2*health - 1000) ) / 2
7:48 PM] Nick007J:
      case VEHICLE_CLASS_POORFAMILY:
      case VEHICLE_CLASS_BIG:
      case VEHICLE_CLASS_MOPED:
      case VEHICLE_CLASS_BICYCLE:
        v4 = v4 * 0.1;
        break;
      case VEHICLE_CLASS_RICHFAMILY:
      case VEHICLE_CLASS_EXECUTIVE:
      case VEHICLE_CLASS_LEISUREBOAT:
        break;
      case VEHICLE_CLASS_WORKER:
      case VEHICLE_CLASS_TAXI:
      case VEHICLE_CLASS_MOTORBOAT:
        v4 = v4 * 0.30000001;
        break;
      default:
        v4 = v4 * 0.5;
        break;

[7:48 PM] Nick007J: v4 = 2*health - 1000

note haicut_sex_appeal_glitch

3:34 PM] Nick007J: e.g. default is 15, some haircut is 5, so it adds 50, subtracts 150, but it can't get lower than 0, so it remains 0
then new haircut is 25, so it adds 250, subtracts 50, it is 200 points => 10% for sex appeal
3:40 PM] Nick007J: so goatee -> cornrows theoretically should give 15% to sex appeal

7:24 PM] Patrick: 3:40 PM] Nick007J: so goatee -> cornrows theoretically should give 15% to sex appeal

works, confirming
[7:25 PM] Patrick: yup, worked twice
[7:29 PM] Patrick: 3:34 PM] Nick007J: e.g. default is 15, some haircut is 5, so it adds 50, subtracts 150, but it can't get lower than 0, so it remains 0
then new haircut is 25, so it adds 250, subtracts 50, it is 200 points => 10% for sex appeal

I take that as "You get some haircut with attrocious appearance (like 5) so that the game only subtracts 5 when it is replaced. With the default haircut ("player face") it would subtract 15."
[7:30 PM] Patrick: And your example haircuts have 0 appearance and 30. So the resulting appearance is 30-0. The resulting sex appeal is 150 (15%).

note all_haircut_choices

Available haircuts
"player_face" is what you start out with and has 15% appeal. You cannot get any lower than that, as it corresponds to 0% sex appeal.

My testing

This is nerd territory. Fuck off. (Oh wait, you have to be a nerd to read this far. Welcome!)

I tested in two parts: I compared the actual appeal points with the ones predicted and I looked at the scrlog (code) and pasted the relevant part here.

1) 0.5 points per progress%

yes - it would become obvious if it were false in the following tests
code:

00017377&1: [008B] l26(19) = g364(20) 
00017389&1: [0016] l26(20) /= 2
00017396&1: [005A] l25(31) += l26(10) 

2) sex appeal one point per percent

  • yes - it would become obvious if it were false in the following tests
00016771&0: [0652] GET_INT_STAT 25 -> 500
00016778&0: [0016] l25(500) /= 10

1) 40% muscle threshhold

1.1) rewarded for muscle at >=40%

  • code:
00017144&0: [0652] GET_INT_STAT 23 -> 400
00017151&0: [0016] l26(400) /= 10
00017158&0: [0016] l26(40) /= 2
00017165&0: [00D6] IF 0
00017169&0: [0029] l26(20) >= 20    // TRUE
00017176&1: [004D] GOTO_IF_FALSE -17271
00017183&1: [00D6] IF 0
00017187&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 1    // TRUE
00017198&1: [004D] GOTO_IF_FALSE -17220
00017205&1: [005A] l25(50) += l26(20) 
  • calc:
    • 50 points from 50% appeal
    • 20 points from 40% muscle
    • 10 points from 20% progress
    • 80 total

1.2) punished from muscle at <40%

yes

  • code
00017144&0: [0652] GET_INT_STAT 23 -> 390
00017151&0: [0016] l26(390) /= 10
00017158&0: [0016] l26(39) /= 2
00017165&0: [00D6] IF 0
00017169&0: [0029] l26(19) >= 20    // FALSE
00017176&0: [004D] GOTO_IF_FALSE -17271
00017271&0: [00D6] IF 0
00017275&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 1    // TRUE
00017286&1: [004D] GOTO_IF_FALSE -17322
00017293&1: [0062] l25(50) -= l26(19) 
  • calc
    • 50 points from 50% appeal
    • -19 points from 39% muscle
    • 10 points from 20% progress
    • 41 total

2) fat - does not matter if <50%

2.1) testing 0% fat

  • code
00016933&0: [0652] GET_INT_STAT 21 -> 0
00016940&0: [0016] l26(0) /= 10
00016947&0: [0016] l26(0) /= 2
00016954&0: [00D6] IF 0
00016958&0: [0029] l26(0) >= 25    // FALSE
00016965&0: [004D] GOTO_IF_FALSE -17038
00017038&0: [00D6] IF 0
00017042&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 2    // FALSE
00017053&0: [004D] GOTO_IF_FALSE -17089
00017089&0: [00D6] IF 0
00017093&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 3    // FALSE
00017104&0: [004D] GOTO_IF_FALSE -17144
00017144&0: [0652] GET_INT_STAT 23 -> 400
  • calc
    • 25 from 25% sex appeal
    • 20 from 40% muscle
    • 10 from 20% progress
    • 55 total

2.2) testing 49% fat

  • code
00016933&0: [0652] GET_INT_STAT 21 -> 490
00016940&0: [0016] l26(490) /= 10
00016947&0: [0016] l26(49) /= 2
00016954&0: [00D6] IF 0
00016958&0: [0029] l26(24) >= 25    // FALSE
00016965&0: [004D] GOTO_IF_FALSE -17038
00017038&0: [00D6] IF 0
00017042&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 2    // FALSE
00017053&0: [004D] GOTO_IF_FALSE -17089
00017089&0: [00D6] IF 0
00017093&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 3    // FALSE
00017104&0: [004D] GOTO_IF_FALSE -17144
00017144&0: [0652] GET_INT_STAT 23 -> 400
  • calc
    • 25 from 25% sex appeal
    • 20 from 40% muscle
    • 10 from 20% progress
    • 55 points

Katie initial meet 31% msc, 15% haircut, 50% car

  • tested in-game
  • log here
00003967&0: [0006] l13(2) = 0
00003974&0: [0652] GET_INT_STAT 25 -> 650
00003981&0: [0016] l13(650) /= 10
00003988&0: [0652] GET_INT_STAT 21 -> 185
00003995&0: [0016] l14(185) /= 10
00004002&0: [0016] l14(18) /= 2
00004009&0: [00D6] IF 0
00004013&0: [0029] l14(9) >= 25    // FALSE
00004020&0: [004D] GOTO_IF_FALSE -4093
00004093&0: [00D6] IF 0
00004097&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 2    // FALSE
00004108&0: [004D] GOTO_IF_FALSE -4144
00004144&0: [00D6] IF 0
00004148&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 3    // FALSE
00004159&0: [004D] GOTO_IF_FALSE -4199
00004199&0: [0652] GET_INT_STAT 23 -> 310
00004206&0: [0016] l14(310) /= 10
00004213&0: [0016] l14(31) /= 2
00004220&0: [00D6] IF 0
00004224&0: [0029] l14(15) >= 20    // FALSE
00004231&0: [004D] GOTO_IF_FALSE -4326
00004326&0: [00D6] IF 0
00004330&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 1    // TRUE
00004341&1: [004D] GOTO_IF_FALSE -4377
00004348&1: [0062] l13(65) -= l14(15) 
00004356&1: [08BD] SET_LOCAL_VAR_BIT_CONST l7(0)  3
00004363&1: [08BD] SET_LOCAL_VAR_BIT_CONST l7(8)  11
00004370&1: [0002] GOTO -4432
00004432&1: [00D6] IF 0
00004436&0: [002F] l13(50) >= g369(50)     // TRUE
00004448&1: [004D] GOTO_IF_FALSE -4487
00004455&1: [0004] g363(0) = 15

Katie date 39%msc, 15% haircut, 50% car

  • tested in-game
  • log here
00016771&0: [0652] GET_INT_STAT 25 -> 650
00016778&0: [0016] l25(650) /= 10
00016785&0: [0871] SWITCH_START 4 2 0 -16933 2 -16848 3 -16891 -1 -16933 -1 -16933 -1 -16933 -1 -16933 -1 -16933
00016933&0: [0652] GET_INT_STAT 21 -> 185
00016940&0: [0016] l26(185) /= 10
00016947&0: [0016] l26(18) /= 2
00016954&0: [00D6] IF 0
00016958&0: [0029] l26(9) >= 25    // FALSE
00016965&0: [004D] GOTO_IF_FALSE -17038
00017038&0: [00D6] IF 0
00017042&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 2    // FALSE
00017053&0: [004D] GOTO_IF_FALSE -17089
00017089&0: [00D6] IF 0
00017093&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 3    // FALSE
00017104&0: [004D] GOTO_IF_FALSE -17144
00017144&0: [0652] GET_INT_STAT 23 -> 390
00017151&0: [0016] l26(390) /= 10
00017158&0: [0016] l26(39) /= 2
00017165&0: [00D6] IF 0
00017169&0: [0029] l26(19) >= 20    // FALSE
00017176&0: [004D] GOTO_IF_FALSE -17271
00017271&0: [00D6] IF 0
00017275&0: [08B4] IS_GLOBAL_VAR_BIT_SET_CONST 2 1    // TRUE
00017286&1: [004D] GOTO_IF_FALSE -17322
00017293&1: [0062] l25(65) -= l26(19) 
00017301&1: [08BD] SET_LOCAL_VAR_BIT_CONST l3(2)  23
00017308&1: [08BD] SET_LOCAL_VAR_BIT_CONST l3(8388610)  21
00017315&1: [0002] GOTO -17377
00017377&1: [008B] l26(19) = g363(15) 
00017389&1: [0016] l26(15) /= 2
00017396&1: [005A] l25(46) += l26(7) 
00017404&1: [00D6] IF 0
00017408&0: [002F] l25(53) >= g369(50)     // TRUE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment