179 pn_cfg_ctor(&configFile, (
char *)0x0);
181 uint8_t avatar_buf_a[224];
182 uint8_t avatar_buf_b[224];
190 uint16_t saved_avatar_type = internal_avatar->
avatar_type;
192 pn_gi_reset_avatar(game_info, 0);
194 uint16_t equip_word = *(uint16_t *)((uint8_t *)a + 0xd4);
197 pn_gi_set_avatar_equipdata(game_info, (
GdAvatar *)b, equip_word);
200 uint8_t skill_id = pn_gi_get_skill(game_info, 0);
201 uint8_t subskill_spec = pn_gi_get_subskill(game_info, 1);
207 SF_String *ctrl_name = pn_screen_get_name(pregame_screen);
208 pn_screen_delete_control((_this->
CAppMenu_data).splash_screen, ctrl_name);
214 char store_last_played = 0;
217 uiAPI.SFStringConstructor_char(&predefined_template,
"figure_template\\predefined\\");
218 uiAPI.SFStringConstructor_char(&dot_map,
"*.map");
227 uint32_t sotp_side = pn_preload_get_sotp_side(preload);
228 uint32_t campaign_type = pn_preload_get_campaign_type(preload);
231 initFirstMap(game_info, skip_tutorial & 0xff, skill_id, subskill_spec,
232 campaign_type, (uint8_t)sotp_side != 0);
234 uint8_t kit = pn_preload_get_kit_index(preload);
235 pn_update_kit(game_info, (_this->
CAppMenu_data).pregame_load_result == 2, kit);
238 uiAPI.SFStringConstructor(&des_name);
240 uint32_t side_again = pn_preload_get_sotp_side(preload);
241 uint8_t kit_idx = pn_gi_get_kit_index(game_info);
243 uiAPI.SFprintf(&des_name,
244 (side_again == 0) ? L
"PDC3_%02dp.des"
246 (kit_idx & 0xff) + 1);
251 SF_String *full =
uiAPI.SFStringConcatMulti(&predefined_template, &tmpl, &des_name);
252 pn_gi_set_template_name(game_info, full);
254 uiAPI.SFStringDestructor(&tmpl);
255 uiAPI.SFStringDestructor(&des_name);
256 uiAPI.SFStringDestructor(&predefined_template);
261 uint32_t campaign_id = pn_preload_get_campaign_type(preload);
264 initFirstMap(game_info, skip_tutorial & 0xff, skill_id, subskill_spec,
267 uint8_t kit = pn_preload_get_kit_index(preload);
268 pn_update_kit(game_info,
271 kit = pn_preload_get_kit_index(preload);
272 pn_update_kit_2(game_info,
273 (uint32_t)((_this->
CAppMenu_data).pregame_load_result == 2), kit);
285 uiAPI.SFStringConstructor_wchar(&dot_sav, L
".sav");
286 pn_preload_get_slot_name(preload, &save_path);
287 uiAPI.SFStringConcat(&save_path, &dot_sav);
289 pn_read_from_save(_this, &save_path);
290 uiAPI.SFStringDestructor(&save_path);
291 uiAPI.SFStringDestructor(&dot_sav);
293 pn_gi_refresh_case7(game_info);
300 uiAPI.SFStringConstructor_char(&extra,
"");
304 uiAPI.SFStringDestructor(&extra);
305 uiAPI.SFStringDestructor(&avatar_name);
314 pn_preload_get_freegame_map(preload, &map_name);
315 pn_gi_set_save_file_name(game_info, &map_name);
316 uiAPI.SFStringDestructor(&map_name);
320 pn_preload_get_freegame_template(preload, &template_name);
321 uiAPI.SFStringConcat(&predefined_template, &template_name);
322 pn_gi_set_template_name(game_info, &predefined_template);
323 uiAPI.SFStringDestructor(&predefined_template);
325 uiAPI.SFStringConstructor_char(&extra,
"");
327 uiAPI.SFStringDestructor(&extra);
332 InitUnknownAvatar_0x54(&avatar_buf_b[0x54]);
335 if (updatePreloadUnknown_0x54(preload, &avatar_buf_b[0x54]))
340 pn_gi_set_avatar_equipdata(game_info, ava_int, 0);
341 uint32_t sotp_side = avatar_buf_b[0xd4];
345 uiAPI.SFStringConstructor_char(&initial_map,
"map\\Campaign3\\P202_City_Of_Souls.map");
349 uiAPI.SFStringConstructor_char(&initial_map,
"map\\Campaign3\\P201_Blackwater_Coast.map");
356 uiAPI.SFStringDestructor(&initial_map);
359 DisposeUnknownAvatar_0x54(&avatar_buf_b[0x54]);
366 pn_gi_starterkit_reset(game_info, skill_id, subskill_spec);
367 uint8_t kit_index = pn_preload_get_kit_index (preload);
368 pn_update_kit(game_info, (_this->
CAppMenu_data).pregame_load_result == 3, kit_index);
369 pn_gi_apply_premade_kit(game_info, (_this->
CAppMenu_data).pregame_load_result == 3, kit_index);
376 uiAPI.SFStringConstructor_char(&extra,
"");
377 pn_preload_get_avatar_name(preload, &avatar_name);
381 uiAPI.SFStringDestructor(&extra);
382 uiAPI.SFStringDestructor(&avatar_name);
391 pn_gi_set_save_file_path(game_info, &save_path);
395 uiAPI.SFStringConstructor(&empty);
399 uiAPI.SFStringDestructor(&empty);
402 uiAPI.SFStringDestructor(&save_path);
406 goto skip_name_lookup;
411 nm = pn_preload_get_avatar_name(preload, &avatar_name);
412 store_last_played = (nm->
str_length == 0) ? 0 : 1;
413 uiAPI.SFStringDestructor(&avatar_name);
416 if (store_last_played != 0)
425 strncpy(key_buf,
"LastPlayedAddon",
sizeof(key_buf));
427 strncpy(key_buf,
"LastPlayedAddOn",
sizeof(key_buf));
428 else if (game_info->
is_coop == 1)
429 strncpy(key_buf,
"LastPlayedFree",
sizeof(key_buf));
431 strncpy(key_buf,
"LastPlayed",
sizeof(key_buf));
432 key_buf[
sizeof(key_buf) - 1] =
'\0';
434 uiAPI.SFStringConstructor_char(&empty,
"");
435 pn_preload_get_avatar_name(preload, &name);
438 strncpy(stored_buf,
"Stored",
sizeof(stored_buf));
439 stored_buf[
sizeof(stored_buf) - 1] =
'\0';
440 pn_cfg_set_string(&configFile, stored_buf, key_buf, &name, &empty);
441 uiAPI.SFStringDestructor(&name);
442 uiAPI.SFStringDestructor(&empty);
446 uiAPI.SFStringDestructor(&dot_map);
447 pn_cfg_dtor(&configFile);