View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002723 | FSSCP | models | public | 2012-11-03 20:58 | 2012-11-12 06:32 |
Reporter | FUBAR-BDHR | Assigned To | |||
Priority | normal | Severity | crash | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Target Version | 3.6.16 | ||||
Summary | 0002723: Ship lab crashes for any ship with show secondaries | ||||
Description | Any model I try to load with show secondaries enabled crashes. Looks like this was broke in revision 9232. Looking at the code even if the load would have worked 2 lines down it tries to use the primary model instead of the secondary as well. | ||||
Steps To Reproduce | Go into the ship lab, select any ship that has show secondaries enabled and try to view it. | ||||
Additional Information | Stack: fs2_open_3_6_15d_INF_SSE2.exe!debug_int3(char * file, int line) Line 768 C++ fs2_open_3_6_15d_INF_SSE2.exe!WinAssert(char * text, char * filename, int linenum) Line 963 + 0x13 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!cfopen(char * file_path, char * mode, int type, int dir_type, bool localize) Line 652 + 0x2e bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!read_model_file(polymodel * pm, char * filename, int n_subsystems, model_subsystem * subsystems, int ferror) Line 964 + 0x14 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!model_load(char * filename, int n_subsystems, model_subsystem * subsystems, int ferror, int duplicate) Line 2466 + 0x19 bytes C++ > fs2_open_3_6_15d_INF_SSE2.exe!labviewer_change_model(char * model_fname, int lod, int sel_index) Line 287 + 0x27 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!labviewer_change_ship_lod(Tree * caller) Line 2014 + 0x29 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!Tree::DoMouseUp(float frametime) Line 1880 + 0x14 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!GUIObject::OnFrame(float frametime, int * unused_queue) Line 927 + 0x1a bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!GUIObject::OnFrame(float frametime, int * unused_queue) Line 904 C++ fs2_open_3_6_15d_INF_SSE2.exe!GUIScreen::OnFrame(float frametime, bool doevents) Line 513 C++ fs2_open_3_6_15d_INF_SSE2.exe!GUISystem::OnFrame(float frametime, bool doevents, bool clearandflip) Line 664 + 0x18 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!lab_do_frame(float frametime) Line 2276 + 0x25 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!game_do_state(int state) Line 6737 + 0x13 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!gameseq_process_events() Line 407 + 0x14 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!game_main(char * cmdline) Line 7086 + 0x5 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!WinMain(HINSTANCE__ * hInst, HINSTANCE__ * hPrev, char * szCmdLine, int nCmdShow) Line 7155 + 0x9 bytes C++ fs2_open_3_6_15d_INF_SSE2.exe!__tmainCRTStartup() Line 275 + 0x2c bytes C fs2_open_3_6_15d_INF_SSE2.exe!WinMainCRTStartup() Line 189 C kernel32.dll!75f9339a() [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] ntdll.dll!77a09ef2() ntdll.dll!77a09ec5() | ||||
Tags | No tags attached. | ||||
|
|
|
labweapons_fix.patch (3,739 bytes)
Index: code/lab/lab.cpp =================================================================== --- code/lab/lab.cpp (revision 9304) +++ code/lab/lab.cpp (working copy) @@ -270,11 +270,15 @@ sip = &Ship_info[Lab_selected_index]; l = 0; for (j = 0; j < sip->num_primary_banks; j++) { + weapon_info *wip = &Weapon_info[sip->primary_bank_weapons[j]]; if (!sip->draw_primary_models[j]) continue; - Lab_weaponmodel_num[l] = model_load(Weapon_info[sip->primary_bank_weapons[j]].external_model_name, 0, NULL, 0); + Lab_weaponmodel_num[l] = -1; + if ( strlen(wip->external_model_name) ){ + Lab_weaponmodel_num[l] = model_load(wip->external_model_name, 0, NULL); + } if (Lab_weaponmodel_num[l] >= 0) { - strcpy_s(Lab_weaponmodel_filename[l], Weapon_info[sip->primary_bank_weapons[j]].external_model_name); + strcpy_s(Lab_weaponmodel_filename[l], wip->external_model_name); } else { memset( Lab_weaponmodel_filename[l], 0, sizeof(Lab_weaponmodel_filename[l]) ); } @@ -282,11 +286,15 @@ } for (j = 0; j < sip->num_secondary_banks; j++) { + weapon_info *wip = &Weapon_info[sip->secondary_bank_weapons[j]]; if (!sip->draw_secondary_models[j]) continue; - Lab_weaponmodel_num[l] = model_load(Weapon_info[sip->secondary_bank_weapons[j]].external_model_name, 0, NULL, 0); + Lab_weaponmodel_num[l] = -1; + if ( strlen(wip->external_model_name) ){ + Lab_weaponmodel_num[l] = model_load(wip->external_model_name, 0, NULL); + } if (Lab_weaponmodel_num[l] >= 0) { - strcpy_s(Lab_weaponmodel_filename[l], Weapon_info[sip->primary_bank_weapons[j]].external_model_name); + strcpy_s(Lab_weaponmodel_filename[l], wip->external_model_name); } else { memset( Lab_weaponmodel_filename[l], 0, sizeof(Lab_weaponmodel_filename[l]) ); } @@ -877,9 +885,11 @@ for (j = 0; j < sip->num_primary_banks; j++) { if (!sip->draw_primary_models[j]) continue; - w_bank *bank = &model_get(Lab_model_num)->gun_banks[j]; - for(k = 0; k < bank->num_slots; k++) { - model_render(Lab_weaponmodel_num[l], &vmd_identity_matrix, &bank->pnt[k], render_flags); + if (Lab_weaponmodel_num[l] >= 0) { + w_bank *bank = &model_get(Lab_model_num)->gun_banks[j]; + for(k = 0; k < bank->num_slots; k++) { + model_render(Lab_weaponmodel_num[l], &vmd_identity_matrix, &bank->pnt[k], render_flags); + } } l++; } @@ -890,17 +900,19 @@ for (j = 0; j < sip->num_secondary_banks; j++) { if (!sip->draw_secondary_models[j]) continue; - bank = &(model_get(Lab_model_num))->missile_banks[j]; - if (Weapon_info[sip->secondary_bank_weapons[j]].wi_flags2 & WIF2_EXTERNAL_WEAPON_LNCH) { - for(k = 0; k < bank->num_slots; k++) { - model_render(Lab_weaponmodel_num[l], &vmd_identity_matrix, &bank->pnt[k], render_flags); + if (Lab_weaponmodel_num[l] >= 0) { + bank = &(model_get(Lab_model_num))->missile_banks[j]; + if (Weapon_info[sip->secondary_bank_weapons[j]].wi_flags2 & WIF2_EXTERNAL_WEAPON_LNCH) { + for(k = 0; k < bank->num_slots; k++) { + model_render(Lab_weaponmodel_num[l], &vmd_identity_matrix, &bank->pnt[k], render_flags); + } + } else { + for(k = 0; k < bank->num_slots; k++) + { + secondary_weapon_pos = bank->pnt[k]; + model_render(Lab_weaponmodel_num[l], &vmd_identity_matrix, &secondary_weapon_pos, render_flags); + } } - } else { - for(k = 0; k < bank->num_slots; k++) - { - secondary_weapon_pos = bank->pnt[k]; - model_render(Lab_weaponmodel_num[l], &vmd_identity_matrix, &secondary_weapon_pos, render_flags); - } } l++; } |
|
Made a patch that should fix the crash. I originally thought that ships having show external weapons enabled always requires the weapons to have external models... |
|
Patch committed in r9342. |
Date Modified | Username | Field | Change |
---|---|---|---|
2012-11-03 20:58 | FUBAR-BDHR | New Issue | |
2012-11-03 20:58 | FUBAR-BDHR | File Added: fs2_open.rar | |
2012-11-04 00:49 | Admiral MS | File Added: labweapons_fix.patch | |
2012-11-04 00:53 | Admiral MS | Note Added: 0014013 | |
2012-11-05 18:52 | Goober5000 | Target Version | => 3.6.16 |
2012-11-12 06:32 | Goober5000 | Note Added: 0014036 | |
2012-11-12 06:32 | Goober5000 | Status | new => resolved |
2012-11-12 06:32 | Goober5000 | Resolution | open => fixed |