Skip to content

Instantly share code, notes, and snippets.

/shrinkletter.c Secret

Created June 17, 2015 03:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/9e9bbbd27686558c3e04 to your computer and use it in GitHub Desktop.
Save anonymous/9e9bbbd27686558c3e04 to your computer and use it in GitHub Desktop.
#region Local Var
var uLocal_0 = 0;
var uLocal_1 = 0;
int iLocal_2 = 0;
int iLocal_3 = 0;
int iLocal_4 = 0;
int iLocal_5 = 0;
int iLocal_6 = 0;
int iLocal_7 = 0;
int iLocal_8 = 0;
int iLocal_9 = 0;
int iLocal_10 = 0;
int iLocal_11 = 0;
var uLocal_12 = 0;
var uLocal_13 = 0;
*string sLocal_14 = 0;
float fLocal_15 = 0;
var uLocal_16 = 0;
var uLocal_17 = 0;
var uLocal_18 = 0;
float fLocal_19 = 0;
float fLocal_20 = 0;
int iLocal_21 = 0;
var uLocal_22 = 0;
var uLocal_23 = 0;
float fLocal_24 = 0;
float fLocal_25 = 0;
float fLocal_26 = 0;
var uLocal_27 = 0;
var uLocal_28 = 0;
var uLocal_29 = 0;
var uLocal_30 = 0;
var uLocal_31 = 0;
int iLocal_32 = 0;
int iLocal_33 = 0;
int iLocal_34 = 0;
int iLocal_35 = 0;
var uLocal_36 = 0;
var uLocal_37 = 0;
var uLocal_38 = 0;
var uLocal_39 = 0;
var uLocal_40 = 0;
var uLocal_41 = 0;
var uLocal_42 = 0;
var uLocal_43 = 0;
var uLocal_44 = 0;
var uLocal_45 = 0;
var uLocal_46 = 0;
var uLocal_47 = 0;
var uLocal_48 = 0;
float fLocal_49 = 0;
var uLocal_50 = 0;
var uLocal_51 = 0;
var uLocal_52 = 0;
var uLocal_53 = 0;
var uLocal_54 = 0;
var uLocal_55 = 0;
int iLocal_56 = 0;
var uLocal_57 = 0;
var uLocal_58 = 0;
var uLocal_59 = 0;
var uLocal_60 = 0;
var uLocal_61 = 0;
var uLocal_62 = 0;
var uLocal_63 = 0;
var uLocal_64 = 0;
var uLocal_65 = 0;
var uLocal_66 = 0;
var uLocal_67 = 0;
var uLocal_68 = 0;
var uLocal_69 = 0;
var uLocal_70 = 0;
var uLocal_71 = 0;
var uLocal_72 = 0;
var uLocal_73 = 0;
var uLocal_74 = 0;
var uLocal_75 = 0;
var uLocal_76 = 0;
var uLocal_77 = 0;
var uLocal_78 = 8;
var uLocal_79 = 0;
var uLocal_80 = 0;
var uLocal_81 = 0;
var uLocal_82 = 0;
var uLocal_83 = 0;
var uLocal_84 = 0;
var uLocal_85 = 0;
var uLocal_86 = 0;
var uLocal_87 = 32;
var uLocal_88 = 0;
var uLocal_89 = 0;
var uLocal_90 = 0;
var uLocal_91 = 0;
var uLocal_92 = 0;
var uLocal_93 = 0;
var uLocal_94 = 0;
var uLocal_95 = 0;
var uLocal_96 = 0;
var uLocal_97 = 0;
var uLocal_98 = 0;
var uLocal_99 = 0;
var uLocal_100 = 0;
var uLocal_101 = 0;
var uLocal_102 = 0;
var uLocal_103 = 0;
var uLocal_104 = 0;
var uLocal_105 = 0;
var uLocal_106 = 0;
var uLocal_107 = 0;
var uLocal_108 = 0;
var uLocal_109 = 0;
var uLocal_110 = 0;
var uLocal_111 = 0;
var uLocal_112 = 0;
var uLocal_113 = 0;
var uLocal_114 = 0;
var uLocal_115 = 0;
var uLocal_116 = 0;
var uLocal_117 = 0;
var uLocal_118 = 0;
var uLocal_119 = 0;
var uLocal_120 = 32;
var uLocal_121 = 0;
var uLocal_122 = 0;
var uLocal_123 = 0;
var uLocal_124 = 0;
var uLocal_125 = 0;
var uLocal_126 = 0;
var uLocal_127 = 0;
var uLocal_128 = 0;
var uLocal_129 = 0;
var uLocal_130 = 0;
var uLocal_131 = 0;
var uLocal_132 = 0;
var uLocal_133 = 0;
var uLocal_134 = 0;
var uLocal_135 = 0;
var uLocal_136 = 0;
var uLocal_137 = 0;
var uLocal_138 = 0;
var uLocal_139 = 0;
var uLocal_140 = 0;
var uLocal_141 = 0;
var uLocal_142 = 0;
var uLocal_143 = 0;
var uLocal_144 = 0;
var uLocal_145 = 0;
var uLocal_146 = 0;
var uLocal_147 = 0;
var uLocal_148 = 0;
var uLocal_149 = 0;
var uLocal_150 = 0;
var uLocal_151 = 0;
var uLocal_152 = 0;
var uLocal_153 = 0;
var uLocal_154 = 0;
#endregion
void main()
{
Struct<4> Var0;
iLocal_2 = 1;
iLocal_3 = 134;
iLocal_4 = 134;
iLocal_5 = 1;
iLocal_6 = 1;
iLocal_7 = 1;
iLocal_8 = 134;
iLocal_9 = 1;
iLocal_10 = 12;
iLocal_11 = 12;
sLocal_14 = "NULL";
fLocal_15 = 0f;
fLocal_19 = -0.0375f;
fLocal_20 = 0.17f;
iLocal_21 = 3;
fLocal_24 = 80f;
fLocal_25 = 140f;
fLocal_26 = 180f;
iLocal_32 = 1;
iLocal_33 = 65;
iLocal_34 = 49;
iLocal_35 = 64;
fLocal_49 = 0.05f + 0.275f - 0.01f;
if (unk_0x4B37333C(18))
{
func_49();
}
request_additional_text("REPORT", 0);
while (!has_additional_text_loaded(0))
{
wait(0);
}
while (true)
{
switch (iLocal_56)
{
case 0:
break;
case 1:
func_prepare_for_cutscene_ish(1, 1);
set_player_control(player_id(), 0, 0);
display_radar(0);
display_hud(0);
uLocal_57 = request_scaleform_movie("PSYCHOLOGY_REPORT");
while (!has_scaleform_movie_loaded(uLocal_57))
{
func_disable_hud_interaction();
wait(0);
}
request_additional_text("REPORT", 3);
while (!has_additional_text_loaded(3))
{
func_prepare_for_cutscene_ish();
wait(0);
}
_PUSH_SCALEFORM_MOVIE_FUNCTION_FROM_HUD_COMPONENT(uLocal_57, "SET_PLAYER_NAME");
_BEGIN_TEXT_COMPONENT("GAMERTAG");
_ADD_TEXT_COMPONENT_STRING(get_player_name(player_id()));
_end_text_component();
_POP_SCALEFORM_MOVIE_FUNCTION_VOID();
_PUSH_SCALEFORM_MOVIE_FUNCTION(uLocal_57, "SET_LETTER_TEXT");
func_write_text_component("HEADER_1");
func_write_text_component("HEADER_2");
// Start gathering report data
Var0 = {generate_intro_string(&uLocal_58)}; // Completely randomly generated response
func_write_text_component(&Var0);
Var0 = {get_final_story_choice_string(&uLocal_58)}; // Response generated based on final mission choice
func_write_text_component(&Var0);
Var0 = {get_amount_each_character_has_played_string(&uLocal_58)}; // Response generated based on how long each character was played
func_write_text_component(&Var0);
Var0 = {get_total_spending_string(&uLocal_58)}; // Has the player spent more than 1 mil combined between all 3 characters
func_write_text_component(&Var0);
Var0 = {get_strip_club_stats_string(&uLocal_58)}; // if we've had 3 or more lap dances or spent $100 or more in strip clubs
func_write_text_component(&Var0);
Var0 = {get_prostitute_services_string(&uLocal_58)}; // Has ANY character used prostitute services
func_write_text_component(&Var0);
Var0 = {get_michael_family_relationship_string(&uLocal_58)}; // Is michael on good terms with both amanda and jimmy
func_write_text_component(&Var0);
Var0 = {get_stock_market_time_string(&uLocal_58)}; // If time spent on stock market > 120000 (seconds I assume, 33.3 hours?)
func_write_text_component(&Var0);
Var0 = {get_innocents_killed_string(&uLocal_58)}; //If combined players have killed > 100
func_write_text_component(&Var0);
Var0 = {get_stolen_vehicles_string(&uLocal_58)}; // > 100 stolen vehicles
func_write_text_component(&Var0);
Var0 = {get_yoga_completed_string(&uLocal_58)}; // Has the player "completed" yoga (as per 100% standards)
func_write_text_component(&Var0);
Var0 = {get_character_fitness_string(&uLocal_58)}; // // If all characters have > 50% Strength, stamina, and lung capacity
func_write_text_component(&Var0);
Var0 = {get_random_events_completed_string(&uLocal_58)}; // If the player has completed > 10 random events
func_write_text_component(&Var0);
Var0 = {get_collection_side_missions_string(&uLocal_58)}; // // If the player completed collecting any of the following - Diving Scraps, Epsilon Tracts,
// Letter Scraps, Or Spaceship Parts
func_write_text_component(&Var0);
Var0 = {generate_summary_string(&uLocal_58)}; // Randomly generated end sring
func_write_text_component(&Var0);
unk_0x02DBF2D7();
while (!func_13(&uLocal_74, &uLocal_75, &uLocal_58))
{
func_prepare_for_cutscene_ish();
wait(0);
}
func_12(&uLocal_76);
func_11(&uLocal_76, "CONTINUE", 30, 0);
func_10(&uLocal_76, 1);
func_9(&uLocal_76, 1);
if (is_screen_faded_out())
{
if (!is_screen_fading_in())
{
func_prepare_for_cutscene_ish();
do_screen_fade_in(800);
}
while (!is_screen_faded_in())
{
func_prepare_for_cutscene_ish();
unk_0xADF81D24(1);
unk_0x7B48E696(uLocal_57, 255, 255, 255, 255);
wait(0);
}
}
func_prepare_for_cutscene_ish();
unk_0xADF81D24(1);
unk_0x7B48E696(uLocal_57, 255, 255, 255, 255);
iLocal_56 = 2;
break;
case 2:
unk_0xADF81D24(1);
unk_0x7B48E696(uLocal_57, 255, 255, 255, 255);
func_1(&uLocal_76, 1128792064, 1, 0, 1, 1065353216);
if (is_control_pressed(2, 174))
{
iLocal_56 = 3;
}
break;
case 3:
func_12(&uLocal_76);
do_screen_fade_out(3000);
while (is_screen_fading_out())
{
unk_0x7B48E696(uLocal_57, 255, 255, 255, 255);
func_prepare_for_cutscene_ish();
wait(0);
}
set_scaleform_movie_as_no_longer_needed(&uLocal_57);
func_prepare_for_cutscene_ish(0, 1);
set_player_control(player_id(), 1, 0);
display_radar(1);
display_hud(1);
func_49();
break;
}
if (iLocal_56 != 0)
{
func_prepare_for_cutscene_ish();
}
wait(0);
}
}
int func_1(var uParam0, var uParam1, var uParam2, bool bParam3, var uParam4, var uParam5)
{
var uVar0;
var uVar1;
float fVar2;
int iVar3;
int iVar4;
var uVar5;
float fVar6;
int iVar7;
int iVar8;
var uVar9;
int iVar10;
int iVar11;
if (((is_screen_fading_out() || is_screen_fading_in()) || is_screen_faded_out()) || is_frontend_fading())
{
if (!bParam3)
{
return -1;
}
}
if (!func_8(uParam0))
{
return -1;
}
hide_loading_on_fade_this_frame();
unk_0xADF81D24(uParam2);
unk_0x7B48E696(*uParam0, 255, 255, 255, 0);
if (func_7(*uParam0.imm_1, 64))
{
uVar0 = func_6(*uParam0.imm_78);
if (!is_control_pressed(2, uVar0))
{
if (!func_7(*uParam0.imm_1, 128))
{
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_CLEAR_SPACE");
unk_0x9A01FFDA(200f);
unk_0x02DBF2D7();
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_DATA_SLOT_EMPTY");
unk_0x02DBF2D7();
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_DATA_SLOT");
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(to_float(*uParam0.imm_78));
func_write_text_component(*uParam0.imm_77);
unk_0x02DBF2D7();
uVar1 = func_5(uParam4, func_5(func_7(*uParam0.imm_1, 32), 1f, 0f), -1f);
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "DRAW_INSTRUCTIONAL_BUTTONS");
unk_0x9A01FFDA(uVar1);
unk_0x02DBF2D7();
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_BACKGROUND_COLOUR");
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(80f);
unk_0x02DBF2D7();
func_4(uParam0.imm_1, 128);
func_3(uParam0.imm_1, 256);
}
}
else if (!func_7(*uParam0.imm_1, 256))
{
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_CLEAR_SPACE");
unk_0x9A01FFDA(200f);
unk_0x02DBF2D7();
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_DATA_SLOT_EMPTY");
unk_0x02DBF2D7();
fVar2 = 0f;
iVar3 = 0;
while (iVar3 < 8)
{
if (!func_2(*uParam0.imm_2[iVar3]))
{
iVar4 = iVar3 * 4;
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_DATA_SLOT");
unk_0x9A01FFDA(fVar2);
unk_0x9A01FFDA(to_float(*uParam0.imm_11[iVar4]));
if (*uParam0.imm_11[iVar4 + 1] != -1)
{
unk_0x9A01FFDA(to_float(*uParam0.imm_11[iVar4 + 1]));
}
if (*uParam0.imm_11[iVar4 + 2] != -1)
{
unk_0x9A01FFDA(to_float(*uParam0.imm_11[iVar4 + 2]));
}
if (*uParam0.imm_11[iVar4 + 3] != -1)
{
unk_0x9A01FFDA(to_float(*uParam0.imm_11[iVar4 + 3]));
}
func_write_text_component(*uParam0.imm_2[iVar3]);
unk_0x02DBF2D7();
fVar2++;
}
iVar3++;
}
uVar5 = func_5(uParam4, func_5(func_7(*uParam0.imm_1, 32), 1f, 0f), -1f);
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "DRAW_INSTRUCTIONAL_BUTTONS");
unk_0x9A01FFDA(uVar5);
unk_0x02DBF2D7();
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_BACKGROUND_COLOUR");
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(80f);
unk_0x02DBF2D7();
func_4(uParam0.imm_1, 256);
func_3(uParam0.imm_1, 128);
}
}
else if (!func_7(*uParam0.imm_1, 256))
{
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_CLEAR_SPACE");
unk_0x9A01FFDA(uParam1);
unk_0x02DBF2D7();
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_MAX_WIDTH");
unk_0x9A01FFDA(uParam5);
unk_0x02DBF2D7();
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_DATA_SLOT_EMPTY");
unk_0x02DBF2D7();
fVar6 = 0f;
iVar7 = 0;
while (iVar7 < 8)
{
iVar8 = iVar7 * 4;
if (*uParam0.imm_11[iVar8] != -1)
{
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_DATA_SLOT");
unk_0x9A01FFDA(fVar6);
if (!is_string_null_or_empty(*uParam0.imm_44[iVar8]))
{
func_write_text_component(*uParam0.imm_44[iVar8]);
}
if (*uParam0.imm_11[iVar8] != 9999)
{
unk_0x9A01FFDA(to_float(*uParam0.imm_11[iVar8]));
}
if (!is_string_null_or_empty(*uParam0.imm_44[iVar8 + 1]))
{
func_write_text_component(*uParam0.imm_44[iVar8 + 1]);
}
if (*uParam0.imm_11[iVar8 + 1] != -1)
{
unk_0x9A01FFDA(to_float(*uParam0.imm_11[iVar8 + 1]));
}
if (!is_string_null_or_empty(*uParam0.imm_44[iVar8 + 2]))
{
func_write_text_component(*uParam0.imm_44[iVar8 + 2]);
}
if (*uParam0.imm_11[iVar8 + 2] != -1)
{
unk_0x9A01FFDA(to_float(*uParam0.imm_11[iVar8 + 2]));
}
if (!is_string_null_or_empty(*uParam0.imm_44[iVar8 + 3]))
{
func_write_text_component(*uParam0.imm_44[iVar8 + 3]);
}
if (*uParam0.imm_11[iVar8 + 3] != -1)
{
unk_0x9A01FFDA(to_float(*uParam0.imm_11[iVar8 + 3]));
}
if (!func_2(*uParam0.imm_2[iVar7]))
{
func_write_text_component(*uParam0.imm_2[iVar7]);
}
unk_0x02DBF2D7();
fVar6++;
}
iVar7++;
}
uVar9 = func_5(uParam4, func_5(func_7(*uParam0.imm_1, 32), 1f, 0f), -1f);
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "DRAW_INSTRUCTIONAL_BUTTONS");
unk_0x9A01FFDA(uVar9);
unk_0x02DBF2D7();
_PUSH_SCALEFORM_MOVIE_FUNCTION(*uParam0, "SET_BACKGROUND_COLOUR");
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(0f);
unk_0x9A01FFDA(80f);
unk_0x02DBF2D7();
func_4(uParam0.imm_1, 256);
func_3(uParam0.imm_1, 128);
}
iVar10 = 0;
while (iVar10 < 32)
{
iVar11 = func_6(*uParam0.imm_11[iVar10]);
if (iVar11 != -1)
{
if (is_control_just_pressed(2, iVar11))
{
return *uParam0.imm_11[iVar10];
}
}
iVar10++;
}
return -1;
}
bool func_2(var uParam0)
{
if (is_string_null(uParam0))
{
return true;
}
if (get_length_of_literal_string(uParam0) <= 0)
{
return true;
}
return false;
}
void func_3(var uParam0, var uParam1)
{
*uParam0 -= (*uParam0 && uParam1);
}
void func_4(var uParam0, var uParam1)
{
*uParam0 = (*uParam0 || uParam1);
}
var func_5(bool bParam0, var uParam1, var uParam2)
{
if (bParam0)
{
return uParam1;
}
return uParam2;
}
int func_6(var uParam0)
{
switch (uParam0)
{
case 19:
return 169;
break;
case 18:
return 170;
break;
case 28:
return 171;
break;
case 27:
return 172;
break;
case 0:
case 4:
return 162;
break;
case 1:
case 5:
return 161;
break;
case 2:
case 6:
return 163;
break;
case 3:
case 7:
return 164;
break;
case 38:
return 173;
break;
case 39:
return 184;
break;
case 32:
return 176;
break;
case 33:
return 177;
break;
case 30:
return 174;
break;
case 31:
return 175;
break;
case 34:
return 178;
break;
case 35:
return 180;
break;
case 36:
return 179;
break;
case 37:
return 181;
break;
}
return -1;
}
bool func_7(var uParam0, var uParam1)
{
return (uParam0 && uParam1) != 0;
}
bool func_8(var uParam0)
{
if (*uParam0 != 0)
{
if (has_scaleform_movie_loaded(*uParam0))
{
func_4(uParam0.imm_1, 1);
return true;
}
}
return false;
}
void func_9(var uParam0, bool bParam1)
{
if (bParam1)
{
func_4(uParam0.imm_1, 16);
}
else
{
func_3(uParam0.imm_1, 16);
}
}
void func_10(var uParam0, bool bParam1)
{
if (bParam1)
{
func_4(uParam0.imm_1, 1024);
}
else
{
func_3(uParam0.imm_1, 1024);
}
}
void func_11(var uParam0, var uParam1, var uParam2, bool bParam3)
{
int iVar0;
if (*uParam0 == 0)
{
*uParam0 = unk_0x7CC8057D("instructional_buttons");
}
iVar0 = 0;
while (iVar0 < 32)
{
*uParam0.imm_11[iVar0] = -1;
*uParam0.imm_44[iVar0] = "";
iVar0++;
}
iVar0 = 0;
while (iVar0 < 8)
{
*uParam0.imm_2[iVar0] = "";
iVar0++;
}
*uParam0.imm_2[0] = uParam1;
*uParam0.imm_11[0] = uParam2;
*uParam0.imm_1 = 0;
if (bParam3)
{
func_4(uParam0.imm_1, 32);
}
if (has_scaleform_movie_loaded(*uParam0))
{
func_4(uParam0.imm_1, 1);
}
}
void func_12(var uParam0)
{
int iVar0;
if (*uParam0 != 0)
{
set_scaleform_movie_as_no_longer_needed(uParam0);
*uParam0 = 0;
}
*uParam0.imm_77 = "";
*uParam0.imm_78 = 0;
*uParam0.imm_1 = 0;
iVar0 = 0;
while (iVar0 < 32)
{
*uParam0.imm_11[iVar0] = -1;
iVar0++;
}
iVar0 = 0;
while (iVar0 < 8)
{
*uParam0.imm_2[iVar0] = "";
iVar0++;
}
}
bool func_13(var uParam0, var uParam1, var uParam2)
{
var uVar0;
if (func_is_cloud_unavailable())
{
return true;
}
switch (*uParam0)
{
case 0:
if (func_16())
{
return false;
}
func_delete_existing_datafile();
*uParam0++;
break;
case 1:
datafile_create();
uVar0 = _get_root_object();
_object_value_add_integer(uVar0, "in", *uParam2); // Fill actual parameters into psych report
_object_value_add_string(uVar0, "st", uParam2.imm_1);
_object_value_add_string(uVar0, "mp", uParam2.imm_2);
_object_value_add_string(uVar0, "ms", uParam2.imm_3);
_object_value_add_string(uVar0, "sc", uParam2.imm_5);
_object_value_add_string(uVar0, "pr", uParam2.imm_6);
_object_value_add_string(uVar0, "fa", uParam2.imm_7);
_object_value_add_string(uVar0, "sm", uParam2.imm_8);
_object_value_add_string(uVar0, "kp", uParam2.imm_9);
_object_value_add_string(uVar0, "sv", uParam2.imm_10);
_object_value_add_string(uVar0, "yo", uParam2.imm_11);
_object_value_add_string(uVar0, "fi", uParam2.imm_12);
_object_value_add_string(uVar0, "rc", uParam2.imm_13);
_object_value_add_string(uVar0, "co", uParam2.imm_14);
_object_value_add_string(uVar0, "su", *uParam2.imm_15);
unk_0x768CBB35("gta5/psych/index.json"); // Save datafile?
*uParam0++;
break;
case 2:
if (func_14(uParam1, 1))
{
return true;
}
break;
}
return false;
}
bool func_14(var uParam0, var uParam1)
{
if (!unk_0x0B4087F7(uParam0))
{
if (*uParam0)
{
if (preload_find() != 0 && uParam1)
{
datafile_delete();
}
return true;
}
else
{
if (preload_find() != 0 && uParam1)
{
datafile_delete();
}
return true;
}
}
return false;
}
void func_delete_existing_datafile()
{
if (preload_find() != 0)
{
datafile_delete();
}
}
bool func_16()
{
if (get_sprite_design_visibility())
{
return true;
}
else if (unk_0x4908A514())
{
return true;
}
else if (unk_0x8E664EFD())
{
return true;
}
return false;
}
bool func_is_cloud_unavailable()
{
if (!network_is_cloud_available())
{
return true;
}
return false;
}
struct<4> generate_summary_string(var uParam0)
{
char[16] cVar0;
var uVar1;
StringCopy(&cVar0, "SUMMARY_", 16);
uVar1 = get_random_int_in_range(1, 24);
*uParam0.imm_15 = uVar1;
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
struct<4> get_collection_side_missions_string(var uParam0)
{
char[16] cVar0;
var uVar1;
StringCopy(&cVar0, "COLLECT_", 16);
if (((func_get_mission_flag(FLAG_DIVING_SCRAPS_DONE) || func_get_mission_flag(FLAG_EPSILON_UNLOCKED_TRACT)) || func_get_mission_flag(FLAG_LETTER_SCRAPS_DONE)) || func_get_mission_flag(FLAG_SPACESHIP_PARTS_DONE)) // If the player completed collecting any of the following - Diving Scraps, Epsilon Tracts, Letter Scraps, Or Spaceship Parts
{
StringCopy(uParam0.imm_14, "Y", 4);
StringConCat(&cVar0, "Y", 16);
uVar1 = get_random_int_in_range(1, 11);
}
else
{
StringCopy(uParam0.imm_14, "N", 4);
StringConCat(&cVar0, "N", 16);
uVar1 = get_random_int_in_range(1, 12);
}
StringConCat(uParam0.imm_14, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
bool func_get_mission_flag(int iParam0)
{
if (iParam0 == 136 || iParam0 == -1) // bounds checking
{
return 0;
}
return g_SAVE_DATA.FLOW_STRUCT.MF_CONTROLS_STRUCT.MF_CONTROL_FLAGIDS[iParam0];
}
struct<4> get_random_events_completed_string(var uParam0)
{
char[16] cVar0;
var uVar1;
int iVar2;
int iVar3;
int iVar4;
StringCopy(&cVar0, "RAND_", 16);
stat_get_int(-852659719, &iVar2, -1); // numRandomPeople
stat_get_int(-2122623864, &iVar3, -1); // numRandomEvents
iVar4 = iVar2 + iVar3;
if (iVar4 > 10)
{
StringCopy(uParam0.imm_13, "Y", 4);
StringConCat(&cVar0, "Y", 16);
}
else
{
StringCopy(uParam0.imm_13, "N", 4);
StringConCat(&cVar0, "N", 16);
}
uVar1 = get_random_int_in_range(1, 13);
StringConCat(uParam0.imm_13, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
struct<4> get_character_fitness_string(var uParam0)
{
char[16] cVar0;
var uVar1;
StringCopy(&cVar0, "FIT_", 16);
if ((((((((func_23(FRANKLIN, STAMINA) > 50 && func_23(FRANKLIN, STRENGTH) > 50) && func_23(FRANKLIN, LUNG_CAPACITY) > 50) && func_23(MICHAEL, STAMINA) > 50) && func_23(MICHAEL, STRENGTH) > 50) && func_23(MICHAEL, LUNG_CAPACITY) > 50) && func_23(TREVOR, STAMINA) > 50) && func_23(TREVOR, STRENGTH) > 50) && func_23(TREVOR, LUNG_CAPACITY) > 50) // If all characters have > 50% Strength, stamina, and lung capacity
{
StringCopy(uParam0.imm_12, "Y", 4);
StringConCat(&cVar0, "Y", 16);
}
else
{
StringCopy(uParam0.imm_12, "N", 4);
StringConCat(&cVar0, "N", 16);
}
uVar1 = get_random_int_in_range(1, 11);
StringConCat(uParam0.imm_12, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
var get_player_fitness_stat(var uParam0, var uParam1)
{
var uVar0;
var uVar1;
uVar1 = get_stat_hash_for_character(uParam0, uParam1);
stat_get_int(uVar1, &uVar0, -1);
return uVar0;
}
var get_stat_hash_for_character(var uParam0, var uParam1)
{
var uVar0;
var uVar1;
get_stat_hash_for_character_switch(uParam0, uParam1, &uVar0, &uVar1);
return uVar0;
}
void get_stat_hash_switch(var uParam0, var uParam1, var uParam2, var uParam3)
{
switch (uParam0)
{
case 0:
switch (uParam1)
{
case 0:
*uParam2 = 1322098561; // sp0_special_ability_unlocked
break;
case 1:
*uParam2 = 583576226; // sp0_stamina
break;
case 3:
*uParam2 = 1939246781; // sp0_lung_capacity
break;
case 2:
*uParam2 = -1872025703; // sp0_strength
break;
case 4:
*uParam2 = 297038448; // sp0_wheelie_ability
break;
case 5:
*uParam2 = 2024531174; // sp0_flying_ability
break;
case 6:
*uParam2 = -1266079991; // sp0_shooting_ability
break;
case 7:
*uParam2 = 577288081; //sp0_stealth_ability
break;
}
break;
case 1:
switch (uParam1)
{
case 0:
*uParam2 = 1372388259; // sp1_...
break;
case 1:
*uParam2 = 626982837;
break;
case 3:
*uParam2 = 1815853850;
break;
case 2:
*uParam2 = -1205308189;
break;
case 4:
*uParam2 = 2111310536;
break;
case 5:
*uParam2 = -376705475;
break;
case 6:
*uParam2 = -886696809;
break;
case 7:
*uParam2 = -412283869;
break;
}
break;
case 2:
switch (uParam1)
{
case 0:
*uParam2 = 95446082; // sp2_...
break;
case 1:
*uParam2 = 2105689774;
break;
case 3:
*uParam2 = 2123663283;
break;
case 2:
*uParam2 = 1327096153;
break;
case 4:
*uParam2 = 1810848047;
break;
case 5:
*uParam2 = 2010093328;
break;
case 6:
*uParam2 = 708474090;
break;
case 7:
*uParam2 = -801407253;
break;
}
break;
case 3:
switch (uParam1)
{
case 0:
*uParam3 = 64;
break;
case 1:
*uParam3 = 65;
break;
case 3:
*uParam3 = 67;
break;
case 2:
*uParam3 = 66;
break;
case 4:
*uParam3 = 68;
break;
case 5:
*uParam3 = 69;
break;
case 6:
*uParam3 = 70;
break;
case 7:
*uParam3 = 71;
break;
}
break;
}
}
struct<4> get_yoga_completed_string(var uParam0)
{
char[16] cVar0;
var uVar1;
StringCopy(&cVar0, "YOGA_", 16);
if (has_completed_progression_component(SC_MSC_YOG, 1))
{
StringCopy(uParam0.imm_11, "Y", 4);
StringConCat(&cVar0, "Y", 16);
}
else
{
StringCopy(uParam0.imm_11, "N", 4);
StringConCat(&cVar0, "N", 16);
}
uVar1 = get_random_int_in_range(1, 13);
StringConCat(uParam0.imm_11, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
bool has_completed_progression_component(var uParam0, int iParam1)
{
if (g_SAVE_DATA.COMP_PERCENT_SAVED_ARRAY[uParam0 <12>].Marked_As_Completed == 1)
{
if (iParam1 == 1)
{
}
return true;
}
return false;
}
struct<4> get_stolen_vehicles_string(var uParam0)
{
char[16] cVar0;
var uVar1;
int iVar2;
int iVar3;
StringCopy(&cVar0, "VEHS_", 16);
stat_get_int(-22726202, &iVar2, 0); // sp0_number_stolen_cop_vehicle
iVar3 += iVar2;
stat_get_int(1534914527, &iVar2, 0); //sp0_number_stolen_cars
iVar3 += iVar2;
stat_get_int(-978604952, &iVar2, 0); // sp0_number_stolen_bikes
iVar3 += iVar2;
stat_get_int(-1704487518, &iVar2, 0); // sp0_number_stolen_boats
iVar3 += iVar2;
stat_get_int(-1367630807, &iVar2, 0); // sp0_number_stolen_helis
iVar3 += iVar2;
stat_get_int(-1040236793, &iVar2, 0); // sp0_number_stolen_quadbikes
iVar3 += iVar2;
stat_get_int(1146577566, &iVar2, 0); // sp0_number_stolen_bicycles
iVar3 += iVar2;
stat_get_int(1861096290, &iVar2, 1); // sp1_...
iVar3 += iVar2;
stat_get_int(713055388, &iVar2, 1);
iVar3 += iVar2;
stat_get_int(1144254321, &iVar2, 1);
iVar3 += iVar2;
stat_get_int(-632940664, &iVar2, 1);
iVar3 += iVar2;
stat_get_int(-357438054, &iVar2, 1);
iVar3 += iVar2;
stat_get_int(797423994, &iVar2, 1);
iVar3 += iVar2;
stat_get_int(648751400, &iVar2, 1);
iVar3 += iVar2;
stat_get_int(1657674211, &iVar2, 2); // sp2_...
iVar3 += iVar2;
stat_get_int(732455696, &iVar2, 2);
iVar3 += iVar2;
stat_get_int(-313904433, &iVar2, 2);
iVar3 += iVar2;
stat_get_int(-1437327142, &iVar2, 2);
iVar3 += iVar2;
stat_get_int(686746390, &iVar2, 2);
iVar3 += iVar2;
stat_get_int(-580419561, &iVar2, 2);
iVar3 += iVar2;
stat_get_int(-276525534, &iVar2, 2);
iVar3 += iVar2;
if (iVar3 >= 100) // combined stolen cars > 100
{
StringCopy(uParam0.imm_10, "Y", 4);
StringConCat(&cVar0, "Y", 16);
}
else
{
StringCopy(uParam0.imm_10, "N", 4);
StringConCat(&cVar0, "N", 16);
}
uVar1 = get_random_int_in_range(1, 13);
StringConCat(uParam0.imm_10, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
struct<4> get_innocents_killed_string(var uParam0)
{
char[16] cVar0;
var uVar1;
int iVar2;
int iVar3;
StringCopy(&cVar0, "PEDS_", 16);
stat_get_int(1824531000, &iVar2, 0); // sp0_kills_innocents
iVar3 += iVar2;
stat_get_int(1861069275, &iVar2, 1); // sp1_kills_innocents
iVar3 += iVar2;
stat_get_int(-1575296825, &iVar2, 2); // sp2_kills_innocents
iVar3 += iVar2;
if (iVar3 >= 100)
{
StringCopy(uParam0.imm_9, "Y", 4);
StringConCat(&cVar0, "Y", 16);
}
else
{
StringCopy(uParam0.imm_9, "N", 4);
StringConCat(&cVar0, "N", 16);
}
uVar1 = get_random_int_in_range(1, 13);
StringConCat(uParam0.imm_9, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
struct<4> get_stock_market_time_string(var uParam0)
{
char[16] cVar0;
var uVar1;
int iVar2;
StringCopy(&cVar0, "STOCK_", 16);
stat_get_int(-1657837343, &iVar2, 0); //time_spent_on_stockmarket
if (iVar2 >= 120000)
{
StringCopy(uParam0.imm_8, "Y", 4);
StringConCat(&cVar0, "Y", 16);
}
else
{
StringCopy(uParam0.imm_8, "N", 4);
StringConCat(&cVar0, "N", 16);
}
uVar1 = get_random_int_in_range(1, 13);
StringConCat(uParam0.imm_8, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
char[16] get_michael_family_relationship_string(var uParam0)
{
char[16] cVar0;
var uVar1;
StringCopy(&cVar0, "FAMILY_", 16);
if (get_friend_flags(FC_MICHAEL_AMANDA) && get_friend_flags(FC_MICHAEL_JIMMY)) // FC_MICHAEL_AMANDA = 8, FC_MICHAEL_JIMMY = 5
{
StringCopy(uParam0.imm_7, "Y", 4);
StringConCat(&cVar0, "Y", 16);
}
else
{
StringCopy(uParam0.imm_7, "N", 4);
StringConCat(&cVar0, "N", 16);
}
uVar1 = get_random_int_in_range(1, 13);
StringConCat(uParam0.imm_7, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
int get_friend_flags(int iParam0)
{
if (iParam0 < 9)
{
return is_bit_set(g_SAVE_DATA.FRIENDS_SAVED_ARRAY.g_FriendConnectData[iParam0 <19>].flags, 0);
}
return 0;
}
struct<4> get_prostitute_services_string(var uParam0)
{
char[16] cVar0;
var uVar1;
StringCopy(&cVar0, "PROS_", 16);
if ((get_prostitute_services_for_char(FRANKLIN) > 0 || get_prostitute_services_for_char(MICHAEL) > 0) || get_prostitute_services_for_char(TREVOR) > 0)
{
StringCopy(uParam0.imm_6, "Y", 4);
StringConCat(&cVar0, "Y", 16);
}
else
{
StringCopy(uParam0.imm_6, "N", 4);
StringConCat(&cVar0, "N", 16);
}
uVar1 = get_random_int_in_range(1, 13);
StringConCat(uParam0.imm_6, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
int get_prostitute_services_for_char(var uParam0)
{
switch (uParam0)
{
case 0:
return g_SAVE_DATA.imm_7661.PROSTITUTE_SERVICES_ARRAY[PROSTITUTE_SERVICES_MICHAEL];
break;
case 1:
return g_SAVE_DATA.imm_7661.PROSTITUTE_SERVICES_ARRAY[PROSTITUTE_SERVICES_FRANKLIN];
break;
case 2:
return g_SAVE_DATA.imm_7661.PROSTITUTE_SERVICES_ARRAY[PROSTITUTE_SERVICES_TREVOR];
break;
}
return 0;
}
struct<4> get_strip_club_stats_string(var uParam0)
{
char[16] cVar0;
var uVar1;
int iVar2;
int iVar3;
int iVar4;
int iVar5;
StringCopy(&cVar0, "STRIP_", 16);
stat_get_int(-397746042, &iVar2, 0); // sp0_lap_danced_bought
iVar3 += iVar2;
stat_get_int(-1677642203, &iVar2, 1); // sp1_lap_danced_bought
iVar3 += iVar2;
stat_get_int(1610202677, &iVar2, 2); // sp2_lap_danced_bought
iVar3 += iVar2;
stat_get_int(27639974, &iVar4, 0); // sp0_money_spent_in_strip_clubs
iVar5 += iVar4;
stat_get_int(422258364, &iVar4, 1); // sp1_money_spent_in_strip_clubs
iVar5 += iVar4;
stat_get_int(316202960, &iVar4, 2); //sp2_money_spent_in_strip_clubs
iVar5 += iVar4;
if (iVar3 >= 3 || iVar5 >= 100) // if we've had 3 or more lap dances or spent $100 or more in strip clubs
{
StringCopy(uParam0.imm_5, "Y", 4);
StringConCat(&cVar0, "Y", 16);
uVar1 = get_random_int_in_range(1, 13);
}
else
{
StringCopy(uParam0.imm_5, "N", 4);
StringConCat(&cVar0, "N", 16);
uVar1 = get_random_int_in_range(1, 12);
}
StringConCat(uParam0.imm_5, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
struct<4> get_total_spending_string(var uParam0)
{
char[16] cVar0;
var uVar1;
int iVar2;
int iVar3;
StringCopy(&cVar0, "CASH_", 16);
stat_get_int(-656546900, &iVar2, 0); // sp0_money_total_spent
iVar3 += iVar2;
stat_get_int(-2098183071, &iVar2, 1); // sp1_money_total_spent
iVar3 += iVar2;
stat_get_int(1578119842, &iVar2, 2); // sp2_money_total_spent
iVar3 += iVar2;
if (iVar3 >= 1000000) // Total spending greater than 1 mil
{
StringCopy(uParam0.imm_3, "SP", 8);
StringConCat(&cVar0, "SP", 16);
uVar1 = get_random_int_in_range(1, 14);
}
else
{
StringCopy(uParam0.imm_3, "SA", 8);
StringConCat(&cVar0, "SA", 16);
uVar1 = get_random_int_in_range(1, 13);
}
StringConCat(uParam0.imm_3, uVar1, 8);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
struct<4> get_amount_each_character_has_played_string(var uParam0)
{
char[16] cVar0;
var uVar1;
int iVar2;
int iVar3;
int iVar4;
StringCopy(&cVar0, "CHAR_", 16);
iVar2 = 0;
iVar4 = 0;
stat_get_int(-1263997649, &iVar4, 0); // sp0_total_playing_time
stat_get_int(1157035214, &iVar3, 1); // sp1_total_playing_time
if (iVar3 > iVar4) // Did we play franklin more than michael
{
iVar4 = iVar3;
iVar2 = 1;
}
stat_get_int(-1923670641, &iVar3, 2); // sp2_total_playing_time
if (iVar3 > iVar4) // did we play trevor more than franklin
{
iVar4 = iVar3;
iVar2 = 2;
}
if (iVar2 == 0)
{
StringCopy(uParam0.imm_2, "M", 4);
StringConCat(&cVar0, "M", 16);
uVar1 = get_random_int_in_range(1, 13);
}
else if (iVar2 == 1)
{
StringCopy(uParam0.imm_2, "F", 4);
StringConCat(&cVar0, "F", 16);
uVar1 = get_random_int_in_range(1, 13);
}
else
{
StringCopy(uParam0.imm_2, "T", 4);
StringConCat(&cVar0, "T", 16);
uVar1 = get_random_int_in_range(1, 12);
}
StringConCat(uParam0.imm_2, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
struct<4> get_final_story_choice_string(var uParam0)
{
char[16] cVar0;
var uVar1;
StringCopy(&cVar0, "STORY_", 16);
if (func_get_mission_flag(FLAG_MICHAEL_KILLED))
{
StringCopy(uParam0.imm_1, "M", 4);
StringConCat(&cVar0, "M", 16);
uVar1 = get_random_int_in_range(1, 11);
}
else if (func_get_mission_flag(FLAG_TREVOR_KILLED))
{
StringCopy(uParam0.imm_1, "T", 4);
StringConCat(&cVar0, "Y", 16);
uVar1 = get_random_int_in_range(1, 10);
}
else
{
StringCopy(uParam0.imm_1, "B", 4);
StringConCat(&cVar0, "B", 16);
uVar1 = get_random_int_in_range(1, 11);
}
StringConCat(uParam0.imm_1, uVar1, 4);
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
struct<4> generate_intro_string(var uParam0)
{
char[16] cVar0;
var uVar1;
StringCopy(&cVar0, "INTRO_", 16);
uVar1 = get_random_int_in_range(1, 21);
*uParam0 = uVar1;
StringConCat(&cVar0, uVar1, 16);
return cVar0;
}
void func_write_text_component(var uParam0)
{
_BEGIN_TEXT_COMPONENT(uParam0);
_END_TEXT_COMPONENT();
}
void func_disable_hud_interaction()
{
disable_control_action(2, 173);
hide_hud_component_this_frame(7);
hide_hud_component_this_frame(7);
hide_hud_component_this_frame(6);
hide_hud_component_this_frame(8);
hide_hud_component_this_frame(9);
func_42(); // set hud bits and other stuff
}
void func_42()
{
if (!Global_10433.imm_1 == 1)
{
if (func_46(0))
{
func_43(0);
}
set_bit(&Global_1687, 2);
}
}
void func_43(int iParam0)
{
if (Global_10588)
{
func_45(0, 0);
}
if (Global_10433.imm_1 == 10 || Global_10433.imm_1 == 9)
{
set_bit(&Global_1687, 16);
}
if (is_mobile_phone_call_ongoing())
{
stop_scripted_conversation(0);
}
Global_11728 = 5;
if (iParam0 == 1)
{
set_bit(&Global_1686, 30);
}
else
{
clear_bit(&Global_1686, 30);
}
if (!func_44())
{
Global_10433.imm_1 = 3;
}
}
bool func_44()
{
if (Global_10433.imm_1 == 1 || Global_10433.imm_1 == 0)
{
return true;
}
return false;
}
void func_45(bool bParam0, bool bParam1)
{
if (bParam0)
{
if (func_46(0))
{
Global_10588 = 1;
if (bParam1)
{
get_mobile_phone_position(&Global_10370);
}
Global_10361 = {Global_10379[Global_10378 <3>]};
set_mobile_phone_position(Global_10361);
}
}
else if (Global_10588 == 1)
{
Global_10588 = 0;
Global_10361 = {Global_10386[Global_10378 <3>]};
if (bParam1)
{
set_mobile_phone_position(Global_10370);
}
else
{
set_mobile_phone_position(Global_10361);
}
}
}
bool func_46(int iParam0)
{
if (iParam0 == 1)
{
if (Global_10433.imm_1 > 3)
{
if (is_bit_set(Global_1686, 14))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
if (unk_0x029D3841(-754107665) > 0)
{
return true;
}
if (Global_10433.imm_1 > 3)
{
return true;
}
return false;
}
void func_prepare_for_cutscene_ish(bool bParam0, bool bParam1)
{
if (bParam0)
{
unk_0x0751908A(player_id());
set_all_random_peds_flee(player_id(), 1);
set_police_ignore_player(player_id(), 1);
func_48(1);
unk_0x4D0449C6();
if (Global_10433.imm_1 > 3)
{
if (is_mobile_phone_call_ongoing())
{
stop_scripted_conversation(0);
}
if (!func_44())
{
Global_10433.imm_1 = 3;
}
Global_11728 = 5;
}
Global_46777 = 1;
Global_59081 = 1;
Global_59840 = 1;
}
else
{
func_48(0);
unk_0xD3F40140();
Global_46777 = 0;
if (bParam1)
{
unk_0x48F16186();
}
set_all_random_peds_flee(player_id(), 0);
set_police_ignore_player(player_id(), 0);
if (!is_ped_injured(player_ped_id()))
{
set_entity_invincible(player_ped_id(), 0);
}
Global_59840 = 0;
}
}
void func_48(int iParam0)
{
if (iParam0 == 1)
{
set_bit(&Global_1686, 13);
}
else
{
clear_bit(&Global_1686, 13);
}
}
void func_49()
{
if (is_screen_faded_out())
{
do_screen_fade_in(0);
}
terminate_this_thread();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment