(svn r1479) -Added highscore chart (accessible from the difficulty window) with top5 companies for a given difficulty (select the difficulty in the menu)

-Added endgame score on 1 jan 2051 where you are added to the highscore if sufficiently large points have been accumulated. Game is paused while
-These values are saved in hs.dat; added read/write functions for it
-Added code to delete all windows to show charts. There is one issue left: somehow a news-gui pops up in front of the the chart at the end of the game.
This commit is contained in:
darkvater
2005-01-11 00:54:06 +00:00
parent 2d023f9c0b
commit 199a77d1ea
17 changed files with 367 additions and 61 deletions

View File

@@ -330,6 +330,11 @@ void SetDifficultyLevel(int mode, GameOptions *gm_opt)
extern void StartupEconomy();
enum {
GAMEDIFF_WND_TOP_OFFSET = 45,
GAMEDIFF_WND_ROWSIZE = 9
};
static void GameDifficultyWndProc(Window *w, WindowEvent *e)
{
switch(e->event) {
@@ -338,11 +343,11 @@ static void GameDifficultyWndProc(Window *w, WindowEvent *e)
int i;
int x,y,value;
w->click_state = (1 << 4) << _opt_mod_temp.diff_level;
w->disabled_state = (_game_mode != GM_NORMAL) ? 0 : (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);
w->click_state = (1 << 3) << _opt_mod_temp.diff_level;
w->disabled_state = (_game_mode != GM_NORMAL) ? 0 : (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
// Disable save-button in multiplayer (and if client)
if (_networking && !_network_server)
w->disabled_state |= (1 << 10);
SETBIT(w->disabled_state, 10);
DrawWindowWidgets(w);
click_a = _difficulty_click_a;
@@ -358,32 +363,32 @@ static void GameDifficultyWndProc(Window *w, WindowEvent *e)
disabled = _game_mode == GM_NORMAL ? 0x383E : 0;
x = 0;
y = 32;
y = GAMEDIFF_WND_TOP_OFFSET;
for (i = 0; i != GAME_DIFFICULTY_NUM; i++) {
DrawFrameRect(x+5, y+1, x+5+9, y+9, 3, GetBitAndShift(&click_a)?0x20:0);
DrawFrameRect(x+15, y+1, x+15+9, y+9, 3, GetBitAndShift(&click_b)?0x20:0);
DrawFrameRect(x+5, y, x+5+8, y+8, 3, GetBitAndShift(&click_a)?0x20:0);
DrawFrameRect(x+15, y, x+15+8, y+8, 3, GetBitAndShift(&click_b)?0x20:0);
if (GetBitAndShift(&disabled) || (_networking && !_network_server)) {
int color = 0x8000 | _color_list[3].unk2;
GfxFillRect(x+6, y+2, x+6+8, y+9, color);
GfxFillRect(x+16, y+2, x+16+8, y+9, color);
GfxFillRect(x+6, y+1, x+6+8, y+8, color);
GfxFillRect(x+16, y+1, x+16+8, y+8, color);
}
DrawStringCentered(x+10, y+1, STR_6819, 0);
DrawStringCentered(x+20, y+1, STR_681A, 0);
DrawStringCentered(x+10, y, STR_6819, 0);
DrawStringCentered(x+20, y, STR_681A, 0);
value = _game_setting_info[i].str + ((int*)&_opt_mod_temp.diff)[i];
if (i == 4) value *= 1000; // handle currency option
SetDParam(0, value);
DrawString(x+30, y+1, STR_6805_MAXIMUM_NO_COMPETITORS + i, 0);
DrawString(x+30, y, STR_6805_MAXIMUM_NO_COMPETITORS + i, 0);
y += 11;
y += GAMEDIFF_WND_ROWSIZE + 2; // space items apart a bit
}
} break;
case WE_CLICK:
switch(e->click.widget) {
case 3: {
case 8: {
int x,y;
uint btn, dis;
int val;
@@ -397,19 +402,18 @@ static void GameDifficultyWndProc(Window *w, WindowEvent *e)
if (!IS_INT_INSIDE(x, 0, 21))
return;
y = e->click.pt.y - 33;
y = e->click.pt.y - GAMEDIFF_WND_TOP_OFFSET;
if (y < 0)
return;
// Get button from Y coord.
btn = y / 11;
if (btn >= GAME_DIFFICULTY_NUM || y % 11 > 9)
btn = y / (GAMEDIFF_WND_ROWSIZE + 2);
if (btn >= GAME_DIFFICULTY_NUM || y % (GAMEDIFF_WND_ROWSIZE + 2) >= 9)
return;
// Clicked disabled button?
dis = 0;
if (_game_mode == GM_NORMAL)
dis |= 0x383E;
dis = (_game_mode == GM_NORMAL) ? 0x383E : 0;
if (HASBIT(dis, btn))
return;
@@ -434,15 +438,15 @@ static void GameDifficultyWndProc(Window *w, WindowEvent *e)
SetWindowDirty(w);
break;
}
case 4: case 5: case 6: case 7: // easy/medium/hard/custom
case 3: case 4: case 5: case 6: /* Easy / Medium / Hard / Custom */
// temporarily change difficulty level
SetDifficultyLevel(e->click.widget - 4, &_opt_mod_temp);
SetDifficultyLevel(e->click.widget - 3, &_opt_mod_temp);
SetWindowDirty(w);
break;
case 8:
ShowHighscoreTable(_opt_mod_ptr->diff_level);
case 7: /* Highscore Table */
ShowHighscoreTable(_opt_mod_temp.diff_level, -1);
break;
case 10: { // Save button - save changes
case 10: { /* Save button - save changes */
int btn, val;
for (btn = 0; btn != GAME_DIFFICULTY_NUM; btn++) {
val = ((int*)&_opt_mod_temp.diff)[btn];
@@ -479,13 +483,12 @@ static const Widget _game_difficulty_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 10, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 10, 11, 369, 0, 13, STR_6800_DIFFICULTY_LEVEL, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 10, 0, 369, 14, 29, 0x0, STR_NULL},
{ WWT_PANEL, RESIZE_NONE, 10, 0, 369, 30, 276, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 3, 10, 96, 16, 27, STR_6801_EASY, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 3, 97, 183, 16, 27, STR_6802_MEDIUM, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 3, 184, 270, 16, 27, STR_6803_HARD, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 3, 271, 357, 16, 27, STR_6804_CUSTOM, STR_NULL},
{ WWT_EMPTY, RESIZE_NONE, 10, 0, 369, 251, 262, 0x0, STR_NULL},
//{ WWT_CLOSEBOX, RESIZE_NONE, 10, 0, 369, 251, 262, STR_6838_SHOW_HI_SCORE_CHART,STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 10, 0, 369, 30, 41, STR_6838_SHOW_HI_SCORE_CHART,STR_NULL},
{ WWT_PANEL, RESIZE_NONE, 10, 0, 369, 42, 262, 0x0, STR_NULL},
{ WWT_PANEL, RESIZE_NONE, 10, 0, 369, 263, 278, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 3, 105, 185, 265, 276, STR_OPTIONS_SAVE_CHANGES, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 3, 186, 266, 265, 276, STR_012E_CANCEL, STR_NULL},
@@ -510,11 +513,6 @@ void ShowGameDifficulty()
AllocateWindowDesc(&_game_difficulty_desc);
}
void ShowHighscoreTable(int tbl)
{
ShowInfoF("ShowHighscoreTable(%d) not implemented", tbl);
}
// virtual PositionMainToolbar function, calls the right one.
int32 v_PositionMainToolbar(int32 p1)
{