1
0
Fork 0

(svn r21065) -Fix (r19733): Crash when displaying 60+x parameters in the NewGRF inspect window.

release/1.1
michi_cc 2010-10-31 16:16:28 +00:00
parent 1517997868
commit 406b4b3873
1 changed files with 13 additions and 3 deletions

View File

@ -205,6 +205,16 @@ struct NIFeature {
/* Load all the NewGRF debug data; externalised as it is just a huge bunch of tables. */ /* Load all the NewGRF debug data; externalised as it is just a huge bunch of tables. */
#include "table/newgrf_debug_data.h" #include "table/newgrf_debug_data.h"
/**
* Get the feature number related to the window number.
* @param window_number The window to get the feature number for.
* @return The feature number.
*/
static inline GrfSpecFeature GetFeatureNum(uint window_number)
{
return (GrfSpecFeature)GB(window_number, 24, 8);
}
/** /**
* Get the NIFeature related to the window number. * Get the NIFeature related to the window number.
* @param window_number The window to get the NIFeature for. * @param window_number The window to get the NIFeature for.
@ -212,7 +222,7 @@ struct NIFeature {
*/ */
static inline const NIFeature *GetFeature(uint window_number) static inline const NIFeature *GetFeature(uint window_number)
{ {
byte idx = GB(window_number, 24, 8); GrfSpecFeature idx = GetFeatureNum(window_number);
return idx < GSF_FAKE_END ? _nifeatures[idx] : NULL; return idx < GSF_FAKE_END ? _nifeatures[idx] : NULL;
} }
@ -324,7 +334,7 @@ struct NewGRFInspectWindow : Window {
this->DrawString(r, i++, "Variables:"); this->DrawString(r, i++, "Variables:");
for (const NIVariable *niv = nif->variables; niv->name != NULL; niv++) { for (const NIVariable *niv = nif->variables; niv->name != NULL; niv++) {
bool avail = true; bool avail = true;
uint param = HasVariableParameter(niv->var) ? NewGRFInspectWindow::var60params[index][niv->var - 0x60] : 0; uint param = HasVariableParameter(niv->var) ? NewGRFInspectWindow::var60params[GetFeatureNum(this->window_number)][niv->var - 0x60] : 0;
uint value = nih->Resolve(index, niv->var, param, &avail); uint value = nih->Resolve(index, niv->var, param, &avail);
if (!avail) continue; if (!avail) continue;
@ -446,7 +456,7 @@ struct NewGRFInspectWindow : Window {
{ {
if (StrEmpty(str)) return; if (StrEmpty(str)) return;
NewGRFInspectWindow::var60params[GetFeatureIndex(this->window_number)][this->current_edit_param - 0x60] = strtol(str, NULL, 16); NewGRFInspectWindow::var60params[GetFeatureNum(this->window_number)][this->current_edit_param - 0x60] = strtol(str, NULL, 16);
this->SetDirty(); this->SetDirty();
} }