핫 커피 모드/소스 코드

 



1. 개요
2. main.scm
2.1. 코드 내용
3. gf_sex.scm
3.1. 코드 내용


1. 개요


GTA 산 안드레아스에서 핫 커피 모드 관련 소스 코드의 내용과 구조를 설명하는 문서. GTA 산 안드레아스/data/script에 있는 파일을 프로그램을 이용하여 디컴파일 해 소스 코드를 얻고 이를 분석한 것이다.

2. main.scm


메인 소스 코드 파일. 이 소스 코드의 14000번째쯤 줄에[1] '''$GF_CENSORE_FLAG = 1'''이라는 내용을 볼 수 있는데, '$GF_CENSORE_FLAG라는 건 암시하는 컷씬과 미니게임을 갈라놓는 검열을 뜻하고, 세이브파일을 이걸 따라 생성하도록 되어 있다. 1은 검열을 켜는 것이고 0은 검열을 끄는 것이다. 해커들은 1을 0으로 바꾸는 아주 간단한 과정으로 락스타가 막아놓은 걸 뚫은 것이니 얼마나 보안이 취약했는지 알 수 있다.

2.1. 코드 내용


전체 소스 코드 중 커피를 마시자는 제안을 승인했을때 나오는 이벤트 부분만 가져왔다. 여기서도 $GF_CENSORE_FLAG라는 내용이 보이는데, 해커들이 건드린 게 아니다. 검열이 켜졌을 때와 켜지지 않았을 때를 구분한 것이다. 검열이 적용되어 암시하는 컷씬 소스가 대부분이며, 미니게임의 소스 코드는 아래 gf_sex.scm안에 있는 걸 적용하라는 내용 뿐이다.
:GFSEX
thread 'GFSEX' 
09BD: allow_other_threads_to_display_text_boxes 1 
7@ = 0 
8@ = 0 
if 
  1@ > 0 
else_jump @GFSEX_61 
$GFSEX_EXCITEMENT = 40 
jump @GFSEX_68 

:GFSEX_61
$GFSEX_EXCITEMENT = 50 

:GFSEX_68
$GFSEX_POWER = 1 
9@ = 0 
if 
  9@ > 0 
else_jump @GFSEX_124 
24@ = Actor.Create(CivFemale, #NULL, 0.0, 0.0, 0.0)

:GFSEX_124
gosub @GFSEX_7565 
if 
  $GF_CENSORE_FLAG == 0 
else_jump @GFSEX_156 
gosub @GFSEX_8036 

:GFSEX_156
wait 0 
if and
   not Actor.Dead($PLAYER_ACTOR)
   not Actor.Dead(24@)
   not $GIRL_PROGRESS(0@,6i) == -999 
   not $GIRL_PROGRESS(0@,6i) == -100 
   not $GIRL_PROGRESS(0@,6i) == -99 
else_jump @GFSEX_243 
gosub @GFSEX_257 
gosub @GFSEX_514 
gosub @GFSEX_12553 
jump @GFSEX_250 

:GFSEX_243
gosub @GFSEX_13715 

:GFSEX_250
jump @GFSEX_156 

:GFSEX_257
if 
88B7:   not test 9@ bit 1 
else_jump @GFSEX_512 
if 
  $GF_CENSORE_FLAG == 1 
else_jump @GFSEX_316 
08BD: set 9@ bit 1 
7@ = 9 
8@ = 0 
return 

:GFSEX_316
if 
00E1:   player 0 pressed_key 17 
else_jump @GFSEX_372 
if 
88B7:   not test 9@ bit 2 
else_jump @GFSEX_365 
gosub @GFSEX_9199 
08BD: set 9@ bit 2 

:GFSEX_365
jump @GFSEX_379 

:GFSEX_372
08C3: clear 9@ bit 2 

:GFSEX_379
if 
00E1:   player 0 pressed_key 14 
else_jump @GFSEX_435 
if 
88B7:   not test 9@ bit 3 
else_jump @GFSEX_428 
gosub @GFSEX_9977 
08BD: set 9@ bit 3 

:GFSEX_428
jump @GFSEX_442 

:GFSEX_435
08C3: clear 9@ bit 3 

:GFSEX_442
if 
00E1:   player 0 pressed_key 15 
else_jump @GFSEX_505 
if 
88B7:   not test 9@ bit 4 
else_jump @GFSEX_498 
7@ = 2 
8@ = 0 
08BD: set 9@ bit 4 

:GFSEX_498
jump @GFSEX_512 

:GFSEX_505
08C3: clear 9@ bit 4 

:GFSEX_512
return 

:GFSEX_514
0871: init_jump_table 7@ total_jumps 10 default_jump 0 @GFSEX_782 jumps 0 @GFSEX_642 1 @GFSEX_656 2 @GFSEX_670 3 @GFSEX_684 4 @GFSEX_698 5 @GFSEX_712 6 @GFSEX_726 
0872: jump_table_jumps 7 @GFSEX_740 8 @GFSEX_754 9 @GFSEX_768 -1 @GFSEX_782 -1 @GFSEX_782 -1 @GFSEX_782 -1 @GFSEX_782 -1 @GFSEX_782 -1 @GFSEX_782 

:GFSEX_642
gosub @GFSEX_784 
jump @GFSEX_782 

:GFSEX_656
gosub @GFSEX_958 
jump @GFSEX_782 

:GFSEX_670
gosub @GFSEX_1707 
jump @GFSEX_782 

:GFSEX_684
gosub @GFSEX_2013 
jump @GFSEX_782 

:GFSEX_698
gosub @GFSEX_3126 
jump @GFSEX_782 

:GFSEX_712
gosub @GFSEX_3555 
jump @GFSEX_782 

:GFSEX_726
gosub @GFSEX_4116 
jump @GFSEX_782 

:GFSEX_740
gosub @GFSEX_5343 
jump @GFSEX_782 

:GFSEX_754
gosub @GFSEX_6084 
jump @GFSEX_782 

:GFSEX_768
gosub @GFSEX_6686 
jump @GFSEX_782 

:GFSEX_782
return 

:GFSEX_784
0871: init_jump_table 8@ total_jumps 2 default_jump 0 @GFSEX_956 jumps 0 @GFSEX_847 1 @GFSEX_874 -1 @GFSEX_956 -1 @GFSEX_956 -1 @GFSEX_956 -1 @GFSEX_956 -1 @GFSEX_956 

:GFSEX_847
08BD: set 9@ bit 1 
fade 0 0 
8@ += 1 
jump @GFSEX_956 

:GFSEX_874
if 
   not fading 
else_jump @GFSEX_949 
Player.CanMove($PLAYER_CHAR) = False
06AB: set_actor $PLAYER_ACTOR all_weapons_hidden 1 
06AB: set_actor 24@ all_weapons_hidden 1 
0581: enable_radar 0 
03BF: set_player $PLAYER_CHAR ignored_by_everyone 1 
02A3: enable_widescreen 1 
03F4: set_all_cars_apply_damage_rules 0 
gosub @GFSEX_8178 
0085: 7@ = 21@ // (int) 
8@ = 0 

:GFSEX_949
jump @GFSEX_956 

:GFSEX_956
return 

:GFSEX_958
0871: init_jump_table 8@ total_jumps 6 default_jump 0 @GFSEX_1705 jumps 0 @GFSEX_1021 1 @GFSEX_1063 2 @GFSEX_1186 3 @GFSEX_1423 4 @GFSEX_1582 5 @GFSEX_1632 -1 @GFSEX_1705 

:GFSEX_1021
08BD: set 9@ bit 1 
23@ = -1 
gosub @GFSEX_9199 
fade 1 1500 
8@ += 1 
jump @GFSEX_1705 

:GFSEX_1063
if 
   not fading 
else_jump @GFSEX_1179 
0812: AS_actor $PLAYER_ACTOR perform_animation "BJ_COUCH_START_P" IFP "BLOWJOBZ" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
0812: AS_actor 24@ perform_animation "BJ_COUCH_START_W" IFP "BLOWJOBZ" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
8@ += 1 

:GFSEX_1179
jump @GFSEX_1705 

:GFSEX_1186
0613: 16@ = actor $PLAYER_ACTOR animation "BJ_COUCH_START_P" time 
if and
  16@ > 0.5 
  1.0 > 16@ 
else_jump @GFSEX_1277 
if 
08D0:   should_skip_cutscene 
else_jump @GFSEX_1277 
fade 0 500 
8@ = 5 
jump @GFSEX_1705 

:GFSEX_1277
if 
  16@ == 1.0 
else_jump @GFSEX_1416 
0812: AS_actor $PLAYER_ACTOR perform_animation "BJ_COUCH_LOOP_P" IFP "BLOWJOBZ" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 1 time 6000 // versionB 
0812: AS_actor 24@ perform_animation "BJ_COUCH_LOOP_W" IFP "BLOWJOBZ" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 1 time 6000 // versionB 
04AE: $1233 = 285 // = constant 
TIMERB = 0 
8@ += 1 

:GFSEX_1416
jump @GFSEX_1705 

:GFSEX_1423
if 
08D0:   should_skip_cutscene 
else_jump @GFSEX_1457 
fade 0 500 
8@ = 5 
jump @GFSEX_1575 

:GFSEX_1457
if 
  TIMERB > 6000 
else_jump @GFSEX_1575 
0812: AS_actor $PLAYER_ACTOR perform_animation "BJ_COUCH_END_P" IFP "BLOWJOBZ" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor 24@ perform_animation "BJ_COUCH_END_W" IFP "BLOWJOBZ" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
8@ += 1 

:GFSEX_1575
jump @GFSEX_1705 

:GFSEX_1582
062E: get_actor 24@ task 2066 status_store_to 20@ // ret 7 if not found 
if 
04A4:   20@ == 7 // == constant 
else_jump @GFSEX_1625 
fade 0 500 
8@ += 1 

:GFSEX_1625
jump @GFSEX_1705 

:GFSEX_1632
if 
   not fading 
else_jump @GFSEX_1698 
if 
  1@ > 0 
else_jump @GFSEX_1684 
7@ = 3 
8@ = 0 
jump @GFSEX_1698 

:GFSEX_1684
7@ = 6 
8@ = 0 

:GFSEX_1698
jump @GFSEX_1705 

:GFSEX_1705
return 

:GFSEX_1707
0871: init_jump_table 8@ total_jumps 3 default_jump 0 @GFSEX_2011 jumps 0 @GFSEX_1770 1 @GFSEX_1791 2 @GFSEX_1984 -1 @GFSEX_2011 -1 @GFSEX_2011 -1 @GFSEX_2011 -1 @GFSEX_2011 

:GFSEX_1770
fade 0 1000 
8@ += 1 
jump @GFSEX_2011 

:GFSEX_1791
if 
   not fading 
else_jump @GFSEX_1977 
gosub @GFSEX_8764 
if 
08B7:   test 9@ bit 13 
else_jump @GFSEX_1841 
0151: remove_status_text $GFSEX_EXCITEMENT 
08C3: clear 9@ bit 13 

:GFSEX_1841
if 
08B7:   test 9@ bit 9 
else_jump @GFSEX_1871 
0151: remove_status_text $GFSEX_POWER 
08C3: clear 9@ bit 9 

:GFSEX_1871
03E6: remove_text_box 
02A3: enable_widescreen 0 
Camera.SetBehindPlayer
Camera.Restore_WithJumpCut
Player.CanMove($PLAYER_CHAR) = True
03BF: set_player $PLAYER_CHAR ignored_by_everyone 0 
if 
0500:   player $PLAYER_CHAR skin == "GIMPLEG" on_bodypart 17 
else_jump @GFSEX_1938 
0784: set_player $PLAYER_CHAR textureCRC 0 modelCRC 0 bodypart 17 
Player.Build($PLAYER_CHAR)

:GFSEX_1938
if 
  $GF_CENSORE_FLAG == 0 
else_jump @GFSEX_1963 
0619: enable_actor $PLAYER_ACTOR collision_detection 1 

:GFSEX_1963
fade 1 1000 
8@ += 1 

:GFSEX_1977
jump @GFSEX_2011 

:GFSEX_1984
if 
   not fading 
else_jump @GFSEX_2004 
gosub @GFSEX_13715 

:GFSEX_2004
jump @GFSEX_2011 

:GFSEX_2011
return 

:GFSEX_2013
0871: init_jump_table 8@ total_jumps 6 default_jump 0 @GFSEX_3124 jumps 0 @GFSEX_2076 1 @GFSEX_2294 2 @GFSEX_2489 3 @GFSEX_2706 4 @GFSEX_2948 5 @GFSEX_3055 -1 @GFSEX_3124 

:GFSEX_2076
if 
   not fading 
else_jump @GFSEX_2287 
02A3: enable_widescreen 0 
0792: disembark_instantly_actor $PLAYER_ACTOR 
0792: disembark_instantly_actor 24@ 
gosub @GFSEX_8852 
Actor.PutAt($PLAYER_ACTOR, 10@, 12@, 14@)
Actor.Angle($PLAYER_ACTOR) = 16@
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset 0.0 0.5 -1.0 
16@ = Actor.Angle($PLAYER_ACTOR)
Actor.PutAt(24@, 10@, 12@, 14@)
Actor.Angle(24@) = 16@
0512: show_permanent_text_box 'GF_0043'  // Press ~k~~PED_SPRINT~ when the power bar is full~n~~k~~PED_FIREWEAPON~ Change view~n~~k~~VEHICLE_ENTER_EXIT~ Quit
04F7: status_text $GFSEX_EXCITEMENT type 1 line 1 GXT 'GF_0017' // global_variable  // Excitement:
04F7: status_text $GFSEX_POWER type 1 line 3 GXT 'GF_0040' // global_variable  // Power:
08BD: set 9@ bit 9 
08BD: set 9@ bit 13 
23@ = 1 
gosub @GFSEX_9199 
fade 1 1000 
08C3: clear 9@ bit 1 
8@ += 1 

:GFSEX_2287
jump @GFSEX_3124 

:GFSEX_2294
0812: AS_actor 24@ perform_animation "SPANKING_IDLEW" IFP "SNM" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SPANKING_IDLEP" IFP "SNM" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 
08C3: clear 9@ bit 8 
gosub @GFSEX_12387 
if 
  0 >= $GFSEX_EXCITEMENT 
else_jump @GFSEX_2436 
7@ = 4 
8@ = 0 
jump @GFSEX_3124 
jump @GFSEX_2475 

:GFSEX_2436
if 
  $GFSEX_EXCITEMENT >= 100 
else_jump @GFSEX_2475 
7@ = 5 
8@ = 0 
jump @GFSEX_3124 

:GFSEX_2475
8@ += 1 
jump @GFSEX_3124 

:GFSEX_2489
gosub @GFSEX_12387 
if 
  $GFSEX_POWER >= 100 
else_jump @GFSEX_2521 
8@ += 1 

:GFSEX_2521
if 
00E1:   player 0 pressed_key 16 
else_jump @GFSEX_2607 
if and
88B7:   not test 9@ bit 8 
   not Actor.Animation($PLAYER_ACTOR) == "SPANKINGP"
else_jump @GFSEX_2600 
08BD: set 9@ bit 8 
gosub @GFSEX_11966 
8@ = 4 
jump @GFSEX_3124 

:GFSEX_2600
jump @GFSEX_2614 

:GFSEX_2607
08C3: clear 9@ bit 8 

:GFSEX_2614
if 
  0 >= $GFSEX_EXCITEMENT 
else_jump @GFSEX_2660 
7@ = 4 
8@ = 0 
jump @GFSEX_3124 
jump @GFSEX_2699 

:GFSEX_2660
if 
  $GFSEX_EXCITEMENT == 100 
else_jump @GFSEX_2699 
7@ = 5 
8@ = 0 
jump @GFSEX_3124 

:GFSEX_2699
jump @GFSEX_3124 

:GFSEX_2706
gosub @GFSEX_12387 
if 
  $GFSEX_POWER >= 97 
else_jump @GFSEX_2824 
if 
00E1:   player 0 pressed_key 16 
else_jump @GFSEX_2817 
if and
88B7:   not test 9@ bit 8 
   not Actor.Animation($PLAYER_ACTOR) == "SPANKINGP"
else_jump @GFSEX_2810 
08BD: set 9@ bit 8 
gosub @GFSEX_11966 
8@ = 4 
jump @GFSEX_3124 

:GFSEX_2810
jump @GFSEX_2824 

:GFSEX_2817
08C3: clear 9@ bit 8 

:GFSEX_2824
if 
  0 >= $GFSEX_POWER 
else_jump @GFSEX_2856 
gosub @GFSEX_11667 
8@ -= 1 

:GFSEX_2856
if 
  0 >= $GFSEX_EXCITEMENT 
else_jump @GFSEX_2902 
7@ = 4 
8@ = 0 
jump @GFSEX_3124 
jump @GFSEX_2941 

:GFSEX_2902
if 
  $GFSEX_EXCITEMENT == 100 
else_jump @GFSEX_2941 
7@ = 5 
8@ = 0 
jump @GFSEX_3124 

:GFSEX_2941
jump @GFSEX_3124 

:GFSEX_2948
gosub @GFSEX_12387 
gosub @GFSEX_12007 
0812: AS_actor 24@ perform_animation "SPANKINGW" IFP "SNM" framedelta 99.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SPANKINGP" IFP "SNM" framedelta 99.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
08C3: clear 9@ bit 5 
8@ += 1 
jump @GFSEX_3124 

:GFSEX_3055
gosub @GFSEX_12387 
gosub @GFSEX_12057 
if 
08B7:   test 9@ bit 5 
else_jump @GFSEX_3117 
04AE: $1234 = 238 // = constant 
09F1: play_audio_at_actor $PLAYER_ACTOR event 1190 
gosub @GFSEX_12253 
8@ = 1 

:GFSEX_3117
jump @GFSEX_3124 

:GFSEX_3124
return 

:GFSEX_3126
0871: init_jump_table 8@ total_jumps 3 default_jump 0 @GFSEX_3553 jumps 0 @GFSEX_3189 1 @GFSEX_3272 2 @GFSEX_3477 -1 @GFSEX_3553 -1 @GFSEX_3553 -1 @GFSEX_3553 -1 @GFSEX_3553 

:GFSEX_3189
if 
08B7:   test 9@ bit 13 
else_jump @GFSEX_3219 
0151: remove_status_text $GFSEX_EXCITEMENT 
08C3: clear 9@ bit 13 

:GFSEX_3219
if 
08B7:   test 9@ bit 9 
else_jump @GFSEX_3249 
0151: remove_status_text $GFSEX_POWER 
08C3: clear 9@ bit 9 

:GFSEX_3249
03E6: remove_text_box 
fade 0 1000 
8@ += 1 
jump @GFSEX_3553 

:GFSEX_3272
if 
   not fading 
else_jump @GFSEX_3470 
gosub @GFSEX_8852 
Actor.PutAt($PLAYER_ACTOR, 10@, 12@, 14@)
Actor.Angle($PLAYER_ACTOR) = 16@
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset 0.0 0.5 -1.0 
16@ = Actor.Angle($PLAYER_ACTOR)
Actor.PutAt(24@, 10@, 12@, 14@)
Actor.Angle(24@) = 16@
0812: AS_actor 24@ perform_animation "SPANKEDW" IFP "SNM" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 1 time 600000 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SPANKEDP" IFP "SNM" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 1 time 600000 // versionB 
fade 1 1000 
TIMERB = 0 
8@ += 1 

:GFSEX_3470
jump @GFSEX_3553 

:GFSEX_3477
if 
   not fading 
else_jump @GFSEX_3546 
04AE: $1233 = 291 // = constant 
04AE: $1234 = 237 // = constant 
if 
  TIMERB > 7000 
else_jump @GFSEX_3546 
08C0: clear $390 bit 4 
7@ = 2 
8@ = 0 

:GFSEX_3546
jump @GFSEX_3553 

:GFSEX_3553
return 

:GFSEX_3555
0871: init_jump_table 8@ total_jumps 4 default_jump 0 @GFSEX_4114 jumps 0 @GFSEX_3618 1 @GFSEX_3701 2 @GFSEX_4000 3 @GFSEX_4042 -1 @GFSEX_4114 -1 @GFSEX_4114 -1 @GFSEX_4114 

:GFSEX_3618
if 
08B7:   test 9@ bit 13 
else_jump @GFSEX_3648 
0151: remove_status_text $GFSEX_EXCITEMENT 
08C3: clear 9@ bit 13 

:GFSEX_3648
if 
08B7:   test 9@ bit 9 
else_jump @GFSEX_3678 
0151: remove_status_text $GFSEX_POWER 
08C3: clear 9@ bit 9 

:GFSEX_3678
03E6: remove_text_box 
fade 0 1000 
8@ += 1 
jump @GFSEX_4114 

:GFSEX_3701
if 
   not fading 
else_jump @GFSEX_3993 
gosub @GFSEX_8852 
Actor.PutAt($PLAYER_ACTOR, 10@, 12@, 14@)
Actor.Angle($PLAYER_ACTOR) = 16@
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset 0.0 0.5 -1.0 
16@ = Actor.Angle($PLAYER_ACTOR)
Actor.PutAt(24@, 10@, 12@, 14@)
Actor.Angle(24@) = 16@
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset 0.707 3.136 -0.163 
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset 0.427 0.634 -0.5 
Camera.SetPosition(10@, 12@, 14@, 0.0, 0.0, 0.0)
Camera.PointAt(11@, 13@, 15@, 2)
0812: AS_actor 24@ perform_animation "SPANKING_ENDW" IFP "SNM" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SPANKING_ENDP" IFP "SNM" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
fade 1 1000 
8@ += 1 

:GFSEX_3993
jump @GFSEX_4114 

:GFSEX_4000
if 
   not fading 
else_jump @GFSEX_4035 
04AE: $1233 = 289 // = constant 
TIMERB = 0 
8@ += 1 

:GFSEX_4035
jump @GFSEX_4114 

:GFSEX_4042
0613: 16@ = actor $PLAYER_ACTOR animation "SPANKING_ENDP" time 
if 
  16@ == 1.0 
else_jump @GFSEX_4107 
08BA: set $390 bit 4 
7@ = 2 
8@ = 0 

:GFSEX_4107
jump @GFSEX_4114 

:GFSEX_4114
return 

:GFSEX_4116
0871: init_jump_table 8@ total_jumps 6 default_jump 0 @GFSEX_5341 jumps 0 @GFSEX_4179 1 @GFSEX_4373 2 @GFSEX_4954 3 @GFSEX_5070 4 @GFSEX_5180 5 @GFSEX_5278 -1 @GFSEX_5341 

:GFSEX_4179
if 
   not fading 
else_jump @GFSEX_4366 
02A3: enable_widescreen 0 
0792: disembark_instantly_actor $PLAYER_ACTOR 
0792: disembark_instantly_actor 24@ 
gosub @GFSEX_8852 
Actor.PutAt($PLAYER_ACTOR, 10@, 12@, 14@)
Actor.Angle($PLAYER_ACTOR) = 16@
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset 0.0 1.0 -1.0 
16@ = Actor.Angle($PLAYER_ACTOR)
16@ += 180.0 
Actor.PutAt(24@, 10@, 12@, 14@)
Actor.Angle(24@) = 16@
03C4: set_status_text $GFSEX_EXCITEMENT type 1 GXT 'GF_0017' // global_variable  // Excitement:
08BD: set 9@ bit 13 
gosub @GFSEX_9199 
0512: show_permanent_text_box 'GF_0020'  // Push ~k~~GO_FORWARD~ and ~k~~GO_BACK~ in rhythm~n~~k~~PED_FIREWEAPON~ Change view~n~~k~~PED_JUMPING~ Change position~n~~k~~VEHICLE_ENTER_EXIT~ Quit
fade 1 500 
08C3: clear 9@ bit 1 
8@ += 1 

:GFSEX_4366
jump @GFSEX_5341 

:GFSEX_4373
TIMERB = 0 
if 
  22@ == 0 
else_jump @GFSEX_4473 
0812: AS_actor 24@ perform_animation "SEX_1_W" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_1_P" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 
8@ += 1 

:GFSEX_4473
if 
  22@ == 1 
else_jump @GFSEX_4710 
if 
   Actor.Animation($PLAYER_ACTOR) == "SEX_1TO2_P"
else_jump @GFSEX_4635 
0613: 16@ = actor $PLAYER_ACTOR animation "SEX_1TO2_P" time 
if 
  16@ >= 1.0 
else_jump @GFSEX_4628 
0812: AS_actor 24@ perform_animation "SEX_2_W" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_2_P" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 

:GFSEX_4628
jump @GFSEX_4703 

:GFSEX_4635
0812: AS_actor 24@ perform_animation "SEX_2_W" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_2_P" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 

:GFSEX_4703
8@ += 1 

:GFSEX_4710
if 
  22@ == 2 
else_jump @GFSEX_4947 
if 
   Actor.Animation($PLAYER_ACTOR) == "SEX_2TO3_P"
else_jump @GFSEX_4872 
0613: 16@ = actor $PLAYER_ACTOR animation "SEX_2TO3_P" time 
if 
  16@ >= 1.0 
else_jump @GFSEX_4865 
0812: AS_actor 24@ perform_animation "SEX_3_W" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_3_P" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 

:GFSEX_4865
jump @GFSEX_4940 

:GFSEX_4872
0812: AS_actor 24@ perform_animation "SEX_3_W" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_3_P" IFP "SEX" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time 0 // versionB 

:GFSEX_4940
8@ += 1 

:GFSEX_4947
jump @GFSEX_5341 

:GFSEX_4954
gosub @GFSEX_10324 
gosub @GFSEX_10735 
if 
  $GFSEX_EXCITEMENT == 100 
else_jump @GFSEX_5022 
04AE: $1233 = 286 // = constant 
Player.CanMove($PLAYER_CHAR) = False
08BD: set 9@ bit 1 
08BA: set $390 bit 4 
8@ += 1 

:GFSEX_5022
if 
  $GFSEX_EXCITEMENT == 0 
else_jump @GFSEX_5063 
08C0: clear $390 bit 4 
03E6: remove_text_box 
7@ = 8 
8@ = 0 

:GFSEX_5063
jump @GFSEX_5341 

:GFSEX_5070
if 
  22@ == 0 
else_jump @GFSEX_5095 
8@ += 1 

:GFSEX_5095
if 
  22@ == 1 
else_jump @GFSEX_5134 
gosub @GFSEX_9199 
22@ = 0 
8@ += 1 

:GFSEX_5134
if 
  22@ == 2 
else_jump @GFSEX_5173 
gosub @GFSEX_9199 
22@ = 0 
8@ += 1 

:GFSEX_5173
jump @GFSEX_5341 

:GFSEX_5180
0812: AS_actor 24@ perform_animation "SEX_1_CUM_W" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_1_CUM_P" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
04AE: $1233 = 289 // = constant 
8@ += 1 
jump @GFSEX_5341 

:GFSEX_5278
0613: 16@ = actor $PLAYER_ACTOR animation "SEX_1_CUM_P" time 
if 
  16@ == 1.0 
else_jump @GFSEX_5334 
7@ = 2 
8@ = 0 

:GFSEX_5334
jump @GFSEX_5341 

:GFSEX_5341
return 

:GFSEX_5343
0871: init_jump_table 8@ total_jumps 6 default_jump 0 @GFSEX_6082 jumps 0 @GFSEX_5406 1 @GFSEX_5448 2 @GFSEX_5571 3 @GFSEX_5800 4 @GFSEX_5959 5 @GFSEX_6009 -1 @GFSEX_6082 

:GFSEX_5406
08BD: set 9@ bit 1 
23@ = -1 
gosub @GFSEX_9199 
fade 1 1500 
8@ += 1 
jump @GFSEX_6082 

:GFSEX_5448
if 
   not fading 
else_jump @GFSEX_5564 
0812: AS_actor $PLAYER_ACTOR perform_animation "BJ_STAND_START_P" IFP "BLOWJOBZ" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
0812: AS_actor 24@ perform_animation "BJ_STAND_START_W" IFP "BLOWJOBZ" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
8@ += 1 

:GFSEX_5564
jump @GFSEX_6082 

:GFSEX_5571
0613: 16@ = actor $PLAYER_ACTOR animation "BJ_STAND_START_P" time 
if and
  16@ > 0.5 
  1.0 > 16@ 
else_jump @GFSEX_5662 
if 
08D0:   should_skip_cutscene 
else_jump @GFSEX_5662 
fade 0 500 
8@ = 5 
jump @GFSEX_6082 

:GFSEX_5662
if 
  16@ == 1.0 
else_jump @GFSEX_5793 
0812: AS_actor $PLAYER_ACTOR perform_animation "BJ_STAND_LOOP_P" IFP "BLOWJOBZ" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 1 time 6000 // versionB 
0812: AS_actor 24@ perform_animation "BJ_STAND_LOOP_W" IFP "BLOWJOBZ" framedelta 4.0 loopA 1 lockX 0 lockY 0 lockF 1 time 6000 // versionB 
TIMERB = 0 
8@ += 1 

:GFSEX_5793
jump @GFSEX_6082 

:GFSEX_5800
if 
08D0:   should_skip_cutscene 
else_jump @GFSEX_5834 
fade 0 500 
8@ = 5 
jump @GFSEX_5952 

:GFSEX_5834
if 
  TIMERB > 6000 
else_jump @GFSEX_5952 
0812: AS_actor $PLAYER_ACTOR perform_animation "BJ_STAND_END_P" IFP "BLOWJOBZ" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor 24@ perform_animation "BJ_STAND_END_W" IFP "BLOWJOBZ" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
8@ += 1 

:GFSEX_5952
jump @GFSEX_6082 

:GFSEX_5959
062E: get_actor 24@ task 2066 status_store_to 20@ // ret 7 if not found 
if 
04A4:   20@ == 7 // == constant 
else_jump @GFSEX_6002 
fade 0 500 
8@ += 1 

:GFSEX_6002
jump @GFSEX_6082 

:GFSEX_6009
if 
   not fading 
else_jump @GFSEX_6075 
if 
  1@ > 0 
else_jump @GFSEX_6061 
7@ = 3 
8@ = 0 
jump @GFSEX_6075 

:GFSEX_6061
7@ = 6 
8@ = 0 

:GFSEX_6075
jump @GFSEX_6082 

:GFSEX_6082
return 

:GFSEX_6084
0871: init_jump_table 8@ total_jumps 2 default_jump 0 @GFSEX_6684 jumps 0 @GFSEX_6147 1 @GFSEX_6508 -1 @GFSEX_6684 -1 @GFSEX_6684 -1 @GFSEX_6684 -1 @GFSEX_6684 -1 @GFSEX_6684 

:GFSEX_6147
if 
  22@ == 0 
else_jump @GFSEX_6265 
0812: AS_actor 24@ perform_animation "SEX_1_FAIL_W" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_1_FAIL_P" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
04AE: $1233 = 288 // = constant 
8@ += 1 
jump @GFSEX_6684 

:GFSEX_6265
if 
  22@ == 1 
else_jump @GFSEX_6383 
0812: AS_actor 24@ perform_animation "SEX_2_FAIL_W" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_2_FAIL_P" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
04AE: $1233 = 288 // = constant 
8@ += 1 
jump @GFSEX_6684 

:GFSEX_6383
if 
  22@ == 2 
else_jump @GFSEX_6501 
0812: AS_actor 24@ perform_animation "SEX_3_FAIL_W" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_3_FAIL_P" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time 0 // versionB 
04AE: $1233 = 288 // = constant 
8@ += 1 
jump @GFSEX_6684 

:GFSEX_6501
jump @GFSEX_6684 

:GFSEX_6508
if 
  22@ == 0 
else_jump @GFSEX_6555 
0613: 16@ = actor $PLAYER_ACTOR animation "SEX_1_FAIL_P" time 
jump @GFSEX_6642 

:GFSEX_6555
if 
  22@ == 1 
else_jump @GFSEX_6602 
0613: 16@ = actor $PLAYER_ACTOR animation "SEX_2_FAIL_P" time 
jump @GFSEX_6642 

:GFSEX_6602
if 
  22@ == 2 
else_jump @GFSEX_6642 
0613: 16@ = actor $PLAYER_ACTOR animation "SEX_3_FAIL_P" time 

:GFSEX_6642
if 
  16@ == 1.0 
else_jump @GFSEX_6677 
7@ = 2 
8@ = 0 

:GFSEX_6677
jump @GFSEX_6684 

:GFSEX_6684
return 

:GFSEX_6686
0871: init_jump_table 8@ total_jumps 8 default_jump 0 @GFSEX_7563 jumps 0 @GFSEX_6814 1 @GFSEX_6895 2 @GFSEX_7180 3 @GFSEX_7222 4 @GFSEX_7284 5 @GFSEX_7385 6 @GFSEX_7447 
0872: jump_table_jumps 7 @GFSEX_7509 -1 @GFSEX_7563 -1 @GFSEX_7563 -1 @GFSEX_7563 -1 @GFSEX_7563 -1 @GFSEX_7563 -1 @GFSEX_7563 -1 @GFSEX_7563 -1 @GFSEX_7563 

:GFSEX_6814
if 
   Actor.Driving($PLAYER_ACTOR)
else_jump @GFSEX_6860 
25@ = Actor.CurrentCar($PLAYER_ACTOR)
Car.SetImmunities(25@, 1, 1, 1, 1, 1)
jump @GFSEX_6875 

:GFSEX_6860
Actor.SetImmunities($PLAYER_ACTOR, 1, 1, 1, 1, 1)

:GFSEX_6875
fade 0 0 
8@ += 1 
jump @GFSEX_7563 

:GFSEX_6895
if 
   not fading 
else_jump @GFSEX_7173 
select_interior 0 
0860: link_actor 24@ to_interior 0 
0860: link_actor $PLAYER_ACTOR to_interior 0 
if 
044B:   actor $PLAYER_ACTOR on_foot 
else_jump @GFSEX_6964 
Actor.PutAt($PLAYER_ACTOR, 3@, 4@, 5@)
Actor.Angle($PLAYER_ACTOR) = 6@

:GFSEX_6964
Camera.SetAtPos(3@, 4@, 5@)
04E4: refresh_game_renderer_at 3@ 4@ 
0337: set_actor $PLAYER_ACTOR visibility 0 
Player.CanMove($PLAYER_CHAR) = False
02A3: enable_widescreen 1 
0581: enable_radar 0 
03BF: set_player $PLAYER_CHAR ignored_by_everyone 1 
03F4: set_all_cars_apply_damage_rules 0 
gosub @GFSEX_13248 
Actor.PutAt(24@, 10@, 12@, 14@)
0619: enable_actor 24@ collision_detection 0 
0337: set_actor 24@ visibility 0 
Camera.SetPosition(10@, 12@, 14@, 0.0, 0.0, 0.0)
Camera.PointAt(11@, 13@, 15@, 2)
099C: jiggle_camera type 5 timelimit 5000.0 intensity 10.0 
00BF: 20@ = current_time_hours, 21@ = current_time_minutes 
21@ += 30 
if 
  21@ > 60 
else_jump @GFSEX_7151 
21@ -= 60 
20@ += 1 

:GFSEX_7151
00C0: set_current_time_hours_to 20@ minutes_to 21@ 
fade 1 1000 
8@ += 1 

:GFSEX_7173
jump @GFSEX_7563 

:GFSEX_7180
if 
   not fading 
else_jump @GFSEX_7215 
04AE: $1233 = 284 // = constant 
TIMERB = 0 
8@ += 1 

:GFSEX_7215
jump @GFSEX_7563 

:GFSEX_7222
if 
  TIMERB > 3000 
else_jump @GFSEX_7277 
04AE: $1233 = 284 // = constant 
TIMERB = 0 
099C: jiggle_camera type 5 timelimit 3000.0 intensity 15.0 
8@ += 1 

:GFSEX_7277
jump @GFSEX_7563 

:GFSEX_7284
if 
  TIMERB > 3000 
else_jump @GFSEX_7378 
$1233 = -2 
if 
  1@ > 0 
else_jump @GFSEX_7343 
04AE: $1234 = 239 // = constant 
jump @GFSEX_7350 

:GFSEX_7343
04AE: $1234 = 117 // = constant 

:GFSEX_7350
099C: jiggle_camera type 5 timelimit 3000.0 intensity 20.0 
TIMERB = 0 
8@ += 1 

:GFSEX_7378
jump @GFSEX_7563 

:GFSEX_7385
if 
  TIMERB > 3000 
else_jump @GFSEX_7440 
04AE: $1233 = 287 // = constant 
099C: jiggle_camera type 5 timelimit 4000.0 intensity 30.0 
TIMERB = 0 
8@ += 1 

:GFSEX_7440
jump @GFSEX_7563 

:GFSEX_7447
if 
  TIMERB > 4000 
else_jump @GFSEX_7502 
04AE: $1233 = 290 // = constant 
099C: jiggle_camera type 5 timelimit 3000.0 intensity 5.0 
TIMERB = 0 
8@ += 1 

:GFSEX_7502
jump @GFSEX_7563 

:GFSEX_7509
if 
  TIMERB > 3000 
else_jump @GFSEX_7556 
08BA: set $390 bit 2 
08BA: set $390 bit 4 
7@ = 2 
8@ = 0 

:GFSEX_7556
jump @GFSEX_7563 

:GFSEX_7563
return 

:GFSEX_7565
0871: init_jump_table 0@ total_jumps 6 default_jump 0 @GFSEX_7982 jumps 0 @GFSEX_7628 1 @GFSEX_7687 2 @GFSEX_7746 3 @GFSEX_7805 4 @GFSEX_7864 5 @GFSEX_7923 -1 @GFSEX_7982 

:GFSEX_7628
023C: load_special_actor 'GANGRL2' as 1 // models 290-299 

:GFSEX_7641
if 
823D:   not special_actor 1 loaded 
else_jump @GFSEX_7680 
wait 0 
023C: load_special_actor 'GANGRL2' as 1 // models 290-299 
jump @GFSEX_7641 

:GFSEX_7680
jump @GFSEX_7982 

:GFSEX_7687
023C: load_special_actor 'MECGRL2' as 1 // models 290-299 

:GFSEX_7700
if 
823D:   not special_actor 1 loaded 
else_jump @GFSEX_7739 
wait 0 
023C: load_special_actor 'MECGRL2' as 1 // models 290-299 
jump @GFSEX_7700 

:GFSEX_7739
jump @GFSEX_7982 

:GFSEX_7746
023C: load_special_actor 'GUNGRL2' as 1 // models 290-299 

:GFSEX_7759
if 
823D:   not special_actor 1 loaded 
else_jump @GFSEX_7798 
wait 0 
023C: load_special_actor 'GUNGRL2' as 1 // models 290-299 
jump @GFSEX_7759 

:GFSEX_7798
jump @GFSEX_7982 

:GFSEX_7805
023C: load_special_actor 'COPGRL2' as 1 // models 290-299 

:GFSEX_7818
if 
823D:   not special_actor 1 loaded 
else_jump @GFSEX_7857 
wait 0 
023C: load_special_actor 'COPGRL2' as 1 // models 290-299 
jump @GFSEX_7818 

:GFSEX_7857
jump @GFSEX_7982 

:GFSEX_7864
023C: load_special_actor 'NURGRL2' as 1 // models 290-299 

:GFSEX_7877
if 
823D:   not special_actor 1 loaded 
else_jump @GFSEX_7916 
wait 0 
023C: load_special_actor 'NURGRL2' as 1 // models 290-299 
jump @GFSEX_7877 

:GFSEX_7916
jump @GFSEX_7982 

:GFSEX_7923
023C: load_special_actor 'CROGRL2' as 1 // models 290-299 

:GFSEX_7936
if 
823D:   not special_actor 1 loaded 
else_jump @GFSEX_7975 
wait 0 
023C: load_special_actor 'CROGRL2' as 1 // models 290-299 
jump @GFSEX_7936 

:GFSEX_7975
jump @GFSEX_7982 

:GFSEX_7982
24@ = Actor.Create(CivFemale, #SPECIAL01, 0.0, 0.0, 0.0)
Actor.SetImmunities(24@, 1, 1, 1, 1, 1)
0619: enable_actor 24@ collision_detection 0 
Actor.RemoveFromMissionCleanupList(24@)
return 

:GFSEX_8036
04ED: load_animation "BLOWJOBZ" 
04ED: load_animation "KISSING" 
04ED: load_animation "SEX" 
04ED: load_animation "SNM" 

:GFSEX_8073
wait 0 
if and
04EE:   animation "BLOWJOBZ" loaded 
04EE:   animation "SEX" loaded 
04EE:   animation "KISSING" loaded 
04EE:   animation "SNM" loaded 
else_jump @GFSEX_8134 
return 
jump @GFSEX_8178 

:GFSEX_8134
04ED: load_animation "BLOWJOBZ" 
04ED: load_animation "KISSING" 
04ED: load_animation "SEX" 
04ED: load_animation "SNM" 
jump @GFSEX_8073 

:GFSEX_8178
0871: init_jump_table 0@ total_jumps 6 default_jump 0 @GFSEX_8607 jumps 0 @GFSEX_8241 1 @GFSEX_8302 2 @GFSEX_8363 3 @GFSEX_8424 4 @GFSEX_8485 5 @GFSEX_8546 -1 @GFSEX_8607 

:GFSEX_8241
10@ = 245.6252 
12@ = 304.1411 
14@ = 998.32 
16@ = 0.0 
20@ = 1 
21@ = 1 
jump @GFSEX_8607 

:GFSEX_8302
10@ = 306.1999 
12@ = 305.1225 
14@ = 1002.297 
16@ = 90.0 
20@ = 4 
21@ = 1 
jump @GFSEX_8607 

:GFSEX_8363
10@ = 288.7753 
12@ = 308.4772 
14@ = 998.1641 
16@ = 213.8029 
20@ = 3 
21@ = 7 
jump @GFSEX_8607 

:GFSEX_8424
10@ = 324.6405 
12@ = 307.4622 
14@ = 998.1558 
16@ = 175.0 
20@ = 5 
21@ = 7 
jump @GFSEX_8607 

:GFSEX_8485
10@ = 271.4699 
12@ = 307.2668 
14@ = 998.32 
16@ = 265.0 
20@ = 2 
21@ = 1 
jump @GFSEX_8607 

:GFSEX_8546
10@ = 345.6252 
12@ = 304.1411 
14@ = 998.25 
16@ = 0.0 
20@ = 6 
21@ = 1 
jump @GFSEX_8607 

:GFSEX_8607
0792: disembark_instantly_actor $PLAYER_ACTOR 
0792: disembark_instantly_actor 24@ 
0619: enable_actor 24@ collision_detection 0 
0619: enable_actor $PLAYER_ACTOR collision_detection 0 
Actor.PutAt($PLAYER_ACTOR, 10@, 12@, 14@)
Actor.Angle($PLAYER_ACTOR) = 16@
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset 0.0 1.0 -1.0 
16@ = Actor.Angle($PLAYER_ACTOR)
16@ += 180.0 
Actor.PutAt(24@, 10@, 12@, 14@)
Actor.Angle(24@) = 16@
select_interior 20@ 
0860: link_actor 24@ to_interior 20@ 
0860: link_actor $PLAYER_ACTOR to_interior 20@ 
Camera.SetAtPos(10@, 12@, 14@)
04E4: refresh_game_renderer_at 10@ 12@ 
return 

:GFSEX_8764
select_interior 0 
0860: link_actor $PLAYER_ACTOR to_interior 0 
0395: clear_area 1 at 3@ 4@ 5@ radius 3.0 
if 
044B:   actor $PLAYER_ACTOR on_foot 
else_jump @GFSEX_8831 
Actor.PutAt($PLAYER_ACTOR, 3@, 4@, 5@)
Actor.Angle($PLAYER_ACTOR) = 6@

:GFSEX_8831
04E4: refresh_game_renderer_at 3@ 4@ 
Camera.SetAtPos(3@, 4@, 5@)
return 

:GFSEX_8852
0871: init_jump_table 0@ total_jumps 6 default_jump 0 @GFSEX_9197 jumps 0 @GFSEX_8915 1 @GFSEX_9009 2 @GFSEX_9056 3 @GFSEX_8962 4 @GFSEX_9103 5 @GFSEX_9150 -1 @GFSEX_9197 

:GFSEX_8915
10@ = 245.617 
12@ = 301.507 
14@ = 999.046 
16@ = 0.0 
jump @GFSEX_9197 

:GFSEX_8962
10@ = 318.4 
12@ = 311.85 
14@ = 998.8 
16@ = 110.0 
jump @GFSEX_9197 

:GFSEX_9009
10@ = 308.8862 
12@ = 301.9657 
14@ = 1003.0 
16@ = 0.0 
jump @GFSEX_9197 

:GFSEX_9056
10@ = 282.5775 
12@ = 307.7573 
14@ = 1002.391 
16@ = 0.0 
jump @GFSEX_9197 

:GFSEX_9103
10@ = 270.12 
12@ = 307.737 
14@ = 999.0204 
16@ = 180.0 
jump @GFSEX_9197 

:GFSEX_9150
10@ = 345.617 
12@ = 301.507 
14@ = 998.8 
16@ = 0.0 
jump @GFSEX_9197 

:GFSEX_9197
return 

:GFSEX_9199
0871: init_jump_table 23@ total_jumps 5 default_jump 1 @GFSEX_9803 jumps -1 @GFSEX_9262 0 @GFSEX_9327 1 @GFSEX_9446 2 @GFSEX_9565 3 @GFSEX_9684 -1 @GFSEX_9929 -1 @GFSEX_9929 

:GFSEX_9262
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset 1.8 2.9 0.353 
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset 1.0 0.8701 0.1828 
jump @GFSEX_9929 

:GFSEX_9327
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset -0.6375 2.3043 0.1065 
if 
  7@ == 3 
else_jump @GFSEX_9410 
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset -0.3435 1.4278 -0.1 
jump @GFSEX_9439 

:GFSEX_9410
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset -0.3435 1.4278 -0.2746 

:GFSEX_9439
jump @GFSEX_9929 

:GFSEX_9446
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset 1.5989 0.7828 -0.2044 
if 
  7@ == 3 
else_jump @GFSEX_9529 
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset 0.6223 0.6748 -0.2 
jump @GFSEX_9558 

:GFSEX_9529
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset 0.6223 0.6748 -0.3904 

:GFSEX_9558
jump @GFSEX_9929 

:GFSEX_9565
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset 0.9748 -0.1026 0.7511 
if 
  7@ == 3 
else_jump @GFSEX_9648 
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset 0.4155 0.3026 0.01 
jump @GFSEX_9677 

:GFSEX_9648
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset 0.4155 0.3026 0.0279 

:GFSEX_9677
jump @GFSEX_9929 

:GFSEX_9684
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset -1.3103 1.6396 -0.6208 
if 
  7@ == 3 
else_jump @GFSEX_9767 
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset -0.49 1.0874 -0.2 
jump @GFSEX_9796 

:GFSEX_9767
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset -0.49 1.0874 -0.4726 

:GFSEX_9796
jump @GFSEX_9929 

:GFSEX_9803
23@ = 0 
04C4: store_coords_to 10@ 12@ 14@ from_actor $PLAYER_ACTOR with_offset -0.6375 2.3043 0.1065 
if 
  7@ == 3 
else_jump @GFSEX_9893 
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset -0.3435 1.4278 0.0 
jump @GFSEX_9922 

:GFSEX_9893
04C4: store_coords_to 11@ 13@ 15@ from_actor $PLAYER_ACTOR with_offset -0.3435 1.4278 -0.2746 

:GFSEX_9922
jump @GFSEX_9929 

:GFSEX_9929
Camera.SetPosition(10@, 12@, 14@, 0.0, 0.0, 0.0)
Camera.PointAt(11@, 13@, 15@, 2)
23@ += 1 
return 

:GFSEX_9977
if 
  7@ == 6 
else_jump @GFSEX_10322 
22@ += 1 
0871: init_jump_table 22@ total_jumps 3 default_jump 0 @GFSEX_10315 jumps 1 @GFSEX_10065 2 @GFSEX_10146 3 @GFSEX_10227 -1 @GFSEX_10315 -1 @GFSEX_10315 -1 @GFSEX_10315 -1 @GFSEX_10315 

:GFSEX_10065
0812: AS_actor 24@ perform_animation "SEX_1TO2_W" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_1TO2_P" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
jump @GFSEX_10315 

:GFSEX_10146
0812: AS_actor 24@ perform_animation "SEX_2TO3_W" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_2TO3_P" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
jump @GFSEX_10315 

:GFSEX_10227
22@ = 0 
0812: AS_actor 24@ perform_animation "SEX_3TO1_W" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
0812: AS_actor $PLAYER_ACTOR perform_animation "SEX_3TO1_P" IFP "SEX" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 0 // versionB 
jump @GFSEX_10315 

:GFSEX_10315
8@ = 1 

:GFSEX_10322
return 

:GFSEX_10324
008B: 20@ = $GFSEX_EXCITEMENT // (int) 
20@ /= 10 
if 
  3 > 20@ 
else_jump @GFSEX_10364 
20@ = 0 

:GFSEX_10364
0871: init_jump_table 20@ total_jumps 8 default_jump 0 @GFSEX_10733 jumps 0 @GFSEX_10492 3 @GFSEX_10523 4 @GFSEX_10554 5 @GFSEX_10585 6 @GFSEX_10616 7 @GFSEX_10647 8 @GFSEX_10678 
0872: jump_table_jumps 9 @GFSEX_10709 -1 @GFSEX_10733 -1 @GFSEX_10733 -1 @GFSEX_10733 -1 @GFSEX_10733 -1 @GFSEX_10733 -1 @GFSEX_10733 -1 @GFSEX_10733 -1 @GFSEX_10733 

:GFSEX_10492
16@ = 0.035 
08C3: clear 9@ bit 6 
08C3: clear 9@ bit 7 
jump @GFSEX_10733 

:GFSEX_10523
16@ = 0.045 
08C3: clear 9@ bit 6 
08C3: clear 9@ bit 7 
jump @GFSEX_10733 

:GFSEX_10554
16@ = 0.05 
08C3: clear 9@ bit 6 
08C3: clear 9@ bit 7 
jump @GFSEX_10733 

:GFSEX_10585
16@ = 0.055 
08C3: clear 9@ bit 6 
08C3: clear 9@ bit 7 
jump @GFSEX_10733 

:GFSEX_10616
16@ = 0.055 
08C3: clear 9@ bit 6 
08C3: clear 9@ bit 7 
jump @GFSEX_10733 

:GFSEX_10647
16@ = 0.08 
08BD: set 9@ bit 6 
08C3: clear 9@ bit 7 
jump @GFSEX_10733 

:GFSEX_10678
16@ = 0.08 
08BD: set 9@ bit 6 
08C3: clear 9@ bit 7 
jump @GFSEX_10733 

:GFSEX_10709
16@ = 0.09 
08BD: set 9@ bit 7 
jump @GFSEX_10733 

:GFSEX_10733
return 

:GFSEX_10735
0871: init_jump_table 22@ total_jumps 3 default_jump 0 @GFSEX_11167 jumps 0 @GFSEX_10798 1 @GFSEX_10921 2 @GFSEX_11044 -1 @GFSEX_11167 -1 @GFSEX_11167 -1 @GFSEX_11167 -1 @GFSEX_11167 

:GFSEX_10798
if 
   Actor.Animation($PLAYER_ACTOR) == "SEX_1_P"
else_jump @GFSEX_10856 
0612: set_actor $PLAYER_ACTOR animation "SEX_1_P" paused 0 
0614: set_actor $PLAYER_ACTOR animation "SEX_1_P" progress_to $GF_ANIM_TIME // 0.0 to 1.0 

:GFSEX_10856
if 
   Actor.Animation(24@) == "SEX_1_W"
else_jump @GFSEX_10914 
0612: set_actor 24@ animation "SEX_1_W" paused 0 
0614: set_actor 24@ animation "SEX_1_W" progress_to $GF_ANIM_TIME // 0.0 to 1.0 

:GFSEX_10914
jump @GFSEX_11167 

:GFSEX_10921
if 
   Actor.Animation($PLAYER_ACTOR) == "SEX_2_P"
else_jump @GFSEX_10979 
0612: set_actor $PLAYER_ACTOR animation "SEX_2_P" paused 0 
0614: set_actor $PLAYER_ACTOR animation "SEX_2_P" progress_to $GF_ANIM_TIME // 0.0 to 1.0 

:GFSEX_10979
if 
   Actor.Animation(24@) == "SEX_2_W"
else_jump @GFSEX_11037 
0612: set_actor 24@ animation "SEX_2_W" paused 0 
0614: set_actor 24@ animation "SEX_2_W" progress_to $GF_ANIM_TIME // 0.0 to 1.0 

:GFSEX_11037
jump @GFSEX_11167 

:GFSEX_11044
if 
   Actor.Animation($PLAYER_ACTOR) == "SEX_3_P"
else_jump @GFSEX_11102 
0612: set_actor $PLAYER_ACTOR animation "SEX_3_P" paused 0 
0614: set_actor $PLAYER_ACTOR animation "SEX_3_P" progress_to $GF_ANIM_TIME // 0.0 to 1.0 

:GFSEX_11102
if 
   Actor.Animation(24@) == "SEX_3_W"
else_jump @GFSEX_11160 
0612: set_actor 24@ animation "SEX_3_W" paused 0 
0614: set_actor 24@ animation "SEX_3_W" progress_to $GF_ANIM_TIME // 0.0 to 1.0 

:GFSEX_11160
jump @GFSEX_11167 

:GFSEX_11167
if 
08B7:   test 9@ bit 5 
else_jump @GFSEX_11200 
0067: $GF_ANIM_TIME -= 16@ // (float) 
jump @GFSEX_11208 

:GFSEX_11200
005F: $GF_ANIM_TIME += 16@ // (float) 

:GFSEX_11208
if 
  0.0 >= $GF_ANIM_TIME 
else_jump @GFSEX_11253 
$GF_ANIM_TIME = 0.01 
08C3: clear 9@ bit 5 
gosub @GFSEX_11328 

:GFSEX_11253
if 
  $GF_ANIM_TIME >= 1.0 
else_jump @GFSEX_11298 
$GF_ANIM_TIME = 0.99 
08BD: set 9@ bit 5 
gosub @GFSEX_11328 

:GFSEX_11298
if 
  $GF_ANIM_TIME == 0.5 
else_jump @GFSEX_11326 
gosub @GFSEX_11328 

:GFSEX_11326
return 

:GFSEX_11328
0494: get_joystick 0 direction_offset_to $1213 $1214 $1215 $1216 
008F: 17@ = integer $1214 to_float 
17@ /= 128.0 
if 
  $GF_ANIM_TIME == 0.5 
else_jump @GFSEX_11427 
if 
  0.0 > 17@ 
else_jump @GFSEX_11418 
gosub @GFSEX_11562 
jump @GFSEX_11427 

:GFSEX_11418
gosub @GFSEX_11667 
return 

:GFSEX_11427
if 
08B7:   test 9@ bit 5 
else_jump @GFSEX_11518 
015B: shake_player_controller 0 time 200 intensity 100 
04AE: $1233 = 283 // = constant 
04AE: $1234 = 116 // = constant 
if 
  -0.8 > 17@ 
else_jump @GFSEX_11504 
gosub @GFSEX_11562 
jump @GFSEX_11511 

:GFSEX_11504
gosub @GFSEX_11667 

:GFSEX_11511
jump @GFSEX_11560 

:GFSEX_11518
if 
  17@ > 0.8 
else_jump @GFSEX_11553 
gosub @GFSEX_11562 
jump @GFSEX_11560 

:GFSEX_11553
gosub @GFSEX_11667 

:GFSEX_11560
return 

:GFSEX_11562
if 
  100 > $GFSEX_EXCITEMENT 
else_jump @GFSEX_11658 
if 
08B7:   test 9@ bit 6 
else_jump @GFSEX_11612 
$GFSEX_EXCITEMENT += 5 
jump @GFSEX_11651 

:GFSEX_11612
if 
08B7:   test 9@ bit 7 
else_jump @GFSEX_11644 
$GFSEX_EXCITEMENT += 10 
jump @GFSEX_11651 

:GFSEX_11644
$GFSEX_EXCITEMENT += 1 

:GFSEX_11651
jump @GFSEX_11665 

:GFSEX_11658
$GFSEX_EXCITEMENT = 100 

:GFSEX_11665
return 

:GFSEX_11667
if 
  TIMERB > 5000 
else_jump @GFSEX_11764 
if 
  $GFSEX_EXCITEMENT > 0 
else_jump @GFSEX_11757 
if and
  $GFSEX_EXCITEMENT > 10 
88B7:   not test 9@ bit 6 
else_jump @GFSEX_11743 
$GFSEX_EXCITEMENT -= 5 
jump @GFSEX_11750 

:GFSEX_11743
$GFSEX_EXCITEMENT -= 1 

:GFSEX_11750
jump @GFSEX_11764 

:GFSEX_11757
$GFSEX_EXCITEMENT = 0 

:GFSEX_11764
return 

:GFSEX_11766
if 
  18@ > 90.0 
else_jump @GFSEX_11797 
18@ = 0.0 

:GFSEX_11797
02F6: 19@ = sine 18@ // (float) 
19@ *= 13.5 
0092: 20@ = float 19@ to_integer 
005C: 20@ += $GFSEX_POWER // (int) 
if 
  20@ >= 100 
else_jump @GFSEX_11863 
$GFSEX_POWER = 100 
jump @GFSEX_11871 

:GFSEX_11863
008A: $GFSEX_POWER = 20@ // (int) 

:GFSEX_11871
18@ += 1.0 
return 

:GFSEX_11883
18@ = 0.0 
if 
  $GFSEX_POWER >= 97 
else_jump @GFSEX_11925 
$GFSEX_POWER -= 3 
jump @GFSEX_11964 

:GFSEX_11925
if 
  7 >= $GFSEX_POWER 
else_jump @GFSEX_11957 
$GFSEX_POWER = 0 
jump @GFSEX_11964 

:GFSEX_11957
$GFSEX_POWER -= 7 

:GFSEX_11964
return 

:GFSEX_11966
if 
  $GFSEX_POWER >= 97 
else_jump @GFSEX_11998 
08BD: set 9@ bit 10 
jump @GFSEX_12005 

:GFSEX_11998
08C3: clear 9@ bit 10 

:GFSEX_12005
return 

:GFSEX_12007
16@ = 0.025 
if 
08B7:   test 9@ bit 10 
else_jump @GFSEX_12045 
16@ += 0.015 

:GFSEX_12045
$GF_ANIM_TIME = 0.01 
return 

:GFSEX_12057
if 
   Actor.Animation($PLAYER_ACTOR) == "SPANKINGP"
else_jump @GFSEX_12121 
0612: set_actor $PLAYER_ACTOR animation "SPANKINGP" paused 0 
0614: set_actor $PLAYER_ACTOR animation "SPANKINGP" progress_to $GF_ANIM_TIME // 0.0 to 1.0 

:GFSEX_12121
if 
   Actor.Animation(24@) == "SPANKINGW"
else_jump @GFSEX_12185 
0612: set_actor 24@ animation "SPANKINGW" paused 0 
0614: set_actor 24@ animation "SPANKINGW" progress_to $GF_ANIM_TIME // 0.0 to 1.0 

:GFSEX_12185
if 
88B7:   not test 9@ bit 5 
else_jump @GFSEX_12211 
005F: $GF_ANIM_TIME += 16@ // (float) 

:GFSEX_12211
if 
  $GF_ANIM_TIME >= 1.0 
else_jump @GFSEX_12251 
$GF_ANIM_TIME = 0.99 
08BD: set 9@ bit 5 
return 

:GFSEX_12251
return 

:GFSEX_12253
if 
08B7:   test 9@ bit 10 
else_jump @GFSEX_12325 
04AE: $1233 = 286 // = constant 
if 
  100 >= $GFSEX_EXCITEMENT 
else_jump @GFSEX_12311 
$GFSEX_EXCITEMENT += 10 
jump @GFSEX_12318 

:GFSEX_12311
$GFSEX_EXCITEMENT = 100 

:GFSEX_12318
jump @GFSEX_12364 

:GFSEX_12325
if 
  $GFSEX_EXCITEMENT >= 10 
else_jump @GFSEX_12357 
$GFSEX_EXCITEMENT -= 10 
jump @GFSEX_12364 

:GFSEX_12357
$GFSEX_EXCITEMENT = 0 

:GFSEX_12364
08C3: clear 9@ bit 10 
08C3: clear 9@ bit 11 
08C3: clear 9@ bit 12 
return 

:GFSEX_12387
if and
  100 > $GFSEX_POWER 
  $GFSEX_POWER > 0 
08B7:   test 9@ bit 14 
else_jump @GFSEX_12428 
gosub @GFSEX_11883 
return 

:GFSEX_12428
if and
  100 > $GFSEX_POWER 
  $GFSEX_POWER > 0 
88B7:   not test 9@ bit 14 
else_jump @GFSEX_12469 
gosub @GFSEX_11766 
return 

:GFSEX_12469
if 
  $GFSEX_POWER >= 100 
else_jump @GFSEX_12510 
$GFSEX_POWER = 100 
08BD: set 9@ bit 14 
gosub @GFSEX_11883 
return 

:GFSEX_12510
if 
  0 >= $GFSEX_POWER 
else_jump @GFSEX_12551 
$GFSEX_POWER = 0 
08C3: clear 9@ bit 14 
gosub @GFSEX_11766 
return 

:GFSEX_12551
return 

:GFSEX_12553
0871: init_jump_table $1232 total_jumps 7 default_jump 0 @GFSEX_13085 jumps 0 @GFSEX_12616 1 @GFSEX_12648 2 @GFSEX_12660 3 @GFSEX_12674 4 @GFSEX_12943 5 @GFSEX_13043 6 @GFSEX_12852 

:GFSEX_12616
if 
  $1233 > 0 
else_jump @GFSEX_12641 
$1232 = 3 

:GFSEX_12641
jump @GFSEX_13085 

:GFSEX_12648
094F: enable_actor 24@ pain_audio 
jump @GFSEX_13085 

:GFSEX_12660
094E: set_actor 24@ mute_pain_audio 0 
jump @GFSEX_13085 

:GFSEX_12674
if 
894D:   not actor 24@ mutally_active 
else_jump @GFSEX_12845 
if 
  $1233 > 0 
else_jump @GFSEX_12785 
09D5: play_sound_of_actor 24@ soundslot $1233 unknown_flags 1 1 1 as $1235 // extended 0947 
gosub @GFSEX_13087 
$1233 = -1 
if 
  $1234 > 0 
else_jump @GFSEX_12771 
$1232 = 6 
jump @GFSEX_12778 

:GFSEX_12771
$1232 = 0 

:GFSEX_12778
jump @GFSEX_12845 

:GFSEX_12785
if 
  $1233 == -2 
else_jump @GFSEX_12824 
$1233 = -1 
$1232 = 6 
jump @GFSEX_12845 

:GFSEX_12824
$1233 = -1 
$1234 = -1 
$1232 = 0 

:GFSEX_12845
jump @GFSEX_13085 

:GFSEX_12852
if and
894D:   not actor $PLAYER_ACTOR mutally_active 
894D:   not actor 24@ mutally_active 
else_jump @GFSEX_12936 
if 
  $1234 > 0 
else_jump @GFSEX_12929 
09D5: play_sound_of_actor $PLAYER_ACTOR soundslot $1234 unknown_flags 1 1 1 as $1235 // extended 0947 
$1234 = -1 
$1232 = 0 
jump @GFSEX_12936 

:GFSEX_12929
$1232 = 0 

:GFSEX_12936
jump @GFSEX_13085 

:GFSEX_12943
094E: set_actor 24@ mute_pain_audio 0 
if 
894D:   not actor 24@ mutally_active 
else_jump @GFSEX_13036 
if 
  $1233 > 0 
else_jump @GFSEX_13029 
09D5: play_sound_of_actor 24@ soundslot $1233 unknown_flags 1 1 1 as $1235 // extended 0947 
gosub @GFSEX_13087 
$1233 = -1 
$1232 = 5 
jump @GFSEX_13036 

:GFSEX_13029
$1232 = 0 

:GFSEX_13036
jump @GFSEX_13085 

:GFSEX_13043
if 
894D:   not actor 24@ mutally_active 
else_jump @GFSEX_13078 
094F: enable_actor 24@ pain_audio 
$1233 = -1 
$1232 = 0 

:GFSEX_13078
jump @GFSEX_13085 

:GFSEX_13085
return 

:GFSEX_13087
0871: init_jump_table $1233 total_jumps 4 default_jump 0 @GFSEX_13246 jumps 286 @GFSEX_13154 288 @GFSEX_13177 289 @GFSEX_13200 291 @GFSEX_13223 -1 @GFSEX_13246 -1 @GFSEX_13246 -1 @GFSEX_13246 

:GFSEX_13154
00BC: show_text_highpriority GXT 'GF_0019' time 5000 flag 1  // That's the spot! Remember; nice guys finish last!
jump @GFSEX_13246 

:GFSEX_13177
00BC: show_text_highpriority GXT 'GF_0067' time 5000 flag 1  // Failure to satisfy a woman is a CRIME!
jump @GFSEX_13246 

:GFSEX_13200
00BC: show_text_highpriority GXT 'GF_0042' time 5000 flag 1  // You the man! Oh yeah! You the man!
jump @GFSEX_13246 

:GFSEX_13223
00BC: show_text_highpriority GXT 'GF_0067' time 5000 flag 1  // Failure to satisfy a woman is a CRIME!
jump @GFSEX_13246 

:GFSEX_13246
return 

:GFSEX_13248
0871: init_jump_table 0@ total_jumps 6 default_jump 0 @GFSEX_13713 jumps 0 @GFSEX_13311 1 @GFSEX_13445 2 @GFSEX_13512 3 @GFSEX_13378 4 @GFSEX_13579 5 @GFSEX_13646 -1 @GFSEX_13713 

:GFSEX_13311
10@ = 2394.408 
12@ = -1728.215 
14@ = 14.2715 
11@ = 2395.066 
13@ = -1727.465 
15@ = 14.2063 
jump @GFSEX_13713 

:GFSEX_13378
10@ = -1401.494 
12@ = 2640.099 
14@ = 59.3883 
11@ = -1400.704 
13@ = 2639.641 
15@ = 58.9806 
jump @GFSEX_13713 

:GFSEX_13445
10@ = -1799.737 
12@ = 1192.863 
14@ = 29.6868 
11@ = -1799.472 
13@ = 1193.683 
15@ = 29.1813 
jump @GFSEX_13713 

:GFSEX_13512
10@ = -383.3153 
12@ = -1435.266 
14@ = 26.695 
11@ = -382.5756 
13@ = -1435.887 
15@ = 26.4366 
jump @GFSEX_13713 

:GFSEX_13579
10@ = -2582.293 
12@ = 1147.762 
14@ = 59.6235 
11@ = -2581.406 
13@ = 1147.768 
15@ = 59.1605 
jump @GFSEX_13713 

:GFSEX_13646
10@ = 2032.235 
12@ = 2734.541 
14@ = 13.3226 
11@ = 2032.744 
13@ = 2733.714 
15@ = 13.0817 
jump @GFSEX_13713 

:GFSEX_13713
return 

:GFSEX_13715
04EF: release_animation "SNM" 
04EF: release_animation "SEX" 
04EF: release_animation "BLOWJOBZ" 
04EF: release_animation "KISSING" 
0296: unload_special_actor 1 
Actor.DestroyInstantly(24@)
if 
   not Car.Wrecked(25@)
else_jump @GFSEX_13797 
Car.SetImmunities(25@, 0, 0, 0, 0, 0)
Car.RemoveReferences(25@)

:GFSEX_13797
if 
   Player.Defined($PLAYER_CHAR)
else_jump @GFSEX_13851 
0337: set_actor $PLAYER_ACTOR visibility 1 
Actor.SetImmunities($PLAYER_ACTOR, 0, 0, 0, 0, 0)
0687: clear_actor $PLAYER_ACTOR task 
Player.CanMove($PLAYER_CHAR) = True
02A3: enable_widescreen 0 

:GFSEX_13851
0581: enable_radar 1 
08BA: set $390 bit 21 
08C0: clear $390 bit 5 
09BD: allow_other_threads_to_display_text_boxes 0 
end_thread 
return 
0662: printstring "I__________________________I" 
0662: printstring "H" 
0662: printstring "G" 
0664: printfloat "STICK_POSITION" 17@ 
0663: printint "SHAGGIN_POSITION" 22@ 
0663: printint "I_EXCITEMENT" $GFSEX_EXCITEMENT 
0664: printfloat "ANIM_TIME" $GF_ANIM_TIME 
0663: printint "SUBSTATESTATUS" 8@ 
0871: init_jump_table 7@ total_jumps 5 default_jump 1 @GFSEX_14177 jumps 0 @GFSEX_14082 1 @GFSEX_14101 2 @GFSEX_14120 3 @GFSEX_14139 4 @GFSEX_14158 -1 @GFSEX_14206 -1 @GFSEX_14206 

:GFSEX_14082
0662: printstring "STATE0__" 
jump @GFSEX_14206 

:GFSEX_14101
0662: printstring "STATE1__" 
jump @GFSEX_14206 

:GFSEX_14120
0662: printstring "STATE2__" 
jump @GFSEX_14206 

:GFSEX_14139
0662: printstring "STATE3__" 
jump @GFSEX_14206 

:GFSEX_14158
0662: printstring "STATE4__" 
jump @GFSEX_14206 

:GFSEX_14177
0662: printstring "UNTRAPPED_STATE___" 
jump @GFSEX_14206 

:GFSEX_14206
0662: printstring "I__________________________I" 
return 
end_thread

3. gf_sex.scm


script.img파일을 디컴파일 하고 나오는 스크립트 파일 중 하나. 한 번 더 디컴파일 하고 나오는 소스 코드다. 여기 있는 소스 코드는 전부 미니게임을 다루는 부분이다.

3.1. 코드 내용


[1] 참고로 이 부분은 해당 파일에서 바로 아래에 나와 있는 암시하는 컷씬, 미니게임 관련 부분이 아니며, 코드 초반에 있는 기본 코드를 담은 부분이다.