Add year to the game info

This commit is contained in:
simon.kagstrom 2010-01-31 07:58:48 +00:00
parent 0e441a5ea7
commit 450260dd59
6 changed files with 74 additions and 3 deletions

View File

@ -40,6 +40,7 @@ struct game_info_v1
uint16_t screenshot_off; /* In PNG format */ uint16_t screenshot_off; /* In PNG format */
uint16_t filename_off; uint16_t filename_off;
uint16_t score; uint16_t score;
uint16_t year;
uint8_t data[]; /* 4-byte aligned */ uint8_t data[]; /* 4-byte aligned */
}; };
@ -64,6 +65,7 @@ static void demarshal_v1(struct game_info_v1 *src)
src->filename_off = ntohs(src->filename_off); src->filename_off = ntohs(src->filename_off);
src->screenshot_off = ntohs(src->screenshot_off); src->screenshot_off = ntohs(src->screenshot_off);
src->score = ntohs(src->score); src->score = ntohs(src->score);
src->year = ntohs(src->year);
src->flags = ntohs(src->flags); src->flags = ntohs(src->flags);
} }
@ -79,6 +81,7 @@ static struct game_info *from_v0(struct game_info_v0 *src)
dst->sz = src->sz + d; dst->sz = src->sz + d;
dst->version_magic = VERSION_MAGIC; dst->version_magic = VERSION_MAGIC;
dst->flags = 0; dst->flags = 0;
dst->year = 1982; /* Got to assume something, right :-) */
dst->score = src->score; dst->score = src->score;
dst->author_off = src->author_off; dst->author_off = src->author_off;
@ -114,6 +117,7 @@ GameInfo::GameInfo(const char *filename,
this->author = xstrdup(author); this->author = xstrdup(author);
this->screenshot = image; this->screenshot = image;
this->score = 0; this->score = 0;
this->year = 1982;
} }
GameInfo::GameInfo(GameInfo *gi) GameInfo::GameInfo(GameInfo *gi)
@ -128,6 +132,7 @@ GameInfo::GameInfo(GameInfo *gi)
this->author = xstrdup(gi->author); this->author = xstrdup(gi->author);
this->filename = xstrdup(gi->filename); this->filename = xstrdup(gi->filename);
this->screenshot = NULL; this->screenshot = NULL;
this->year = gi->year;
if (gi->screenshot) if (gi->screenshot)
this->screenshot = SDL_DisplayFormatAlpha(gi->screenshot); this->screenshot = SDL_DisplayFormatAlpha(gi->screenshot);
@ -181,6 +186,7 @@ struct game_info *GameInfo::dump()
out = (struct game_info*)xmalloc(total_sz); out = (struct game_info*)xmalloc(total_sz);
out->sz = total_sz; out->sz = total_sz;
out->score = this->score; out->score = this->score;
out->year = this->year;
out->version_magic = VERSION_MAGIC; out->version_magic = VERSION_MAGIC;
out->author_off = 0; /* Starts AFTER the header */ out->author_off = 0; /* Starts AFTER the header */
@ -202,6 +208,7 @@ struct game_info *GameInfo::dump()
out->filename_off = htons(out->filename_off); out->filename_off = htons(out->filename_off);
out->screenshot_off = htons(out->screenshot_off); out->screenshot_off = htons(out->screenshot_off);
out->score = htons(out->score); out->score = htons(out->score);
out->year = htons(out->year);
return out; return out;
} }
@ -230,6 +237,7 @@ bool GameInfo::fromDump(struct game_info *gi)
this->name = xstrdup((char*)p->data + p->name_off); this->name = xstrdup((char*)p->data + p->name_off);
this->filename = xstrdup((char*)p->data + p->filename_off); this->filename = xstrdup((char*)p->data + p->filename_off);
this->score = p->score; this->score = p->score;
this->year = p->year;
rw = SDL_RWFromMem(p->data + p->screenshot_off, rw = SDL_RWFromMem(p->data + p->screenshot_off,
p->sz - p->screenshot_off); p->sz - p->screenshot_off);
@ -298,14 +306,25 @@ GameInfo *GameInfo::loadFromFile(const char *fileName)
void GameInfo::setAuthor(const char *author) void GameInfo::setAuthor(const char *author)
{ {
if (strlen(author) == 0)
author = " ";
free((void*)this->author); free((void*)this->author);
this->author = xstrdup(author); this->author = xstrdup(author);
if (strcmp(author, " ") != 0) if (strcmp(author, " ") != 0)
this->score++; this->score++;
} }
void GameInfo::setYear(uint16_t year)
{
this->year = year;
this->score++;
}
void GameInfo::setName(const char *name) void GameInfo::setName(const char *name)
{ {
if (strlen(name) == 0)
name = " ";
free((void*)this->name); free((void*)this->name);
this->name = xstrdup(name); this->name = xstrdup(name);
if (strcmp(name, " ") != 0) if (strcmp(name, " ") != 0)

View File

@ -18,6 +18,7 @@ struct game_info
uint16_t screenshot_off; /* In PNG format */ uint16_t screenshot_off; /* In PNG format */
uint16_t filename_off; uint16_t filename_off;
uint16_t score; uint16_t score;
uint16_t year;
uint8_t data[]; /* 4-byte aligned */ uint8_t data[]; /* 4-byte aligned */
}; };
@ -36,6 +37,8 @@ public:
void setName(const char *name); void setName(const char *name);
void setYear(uint16_t year);
void setScreenshot(SDL_Surface *scr); void setScreenshot(SDL_Surface *scr);
void resetDefaults(); void resetDefaults();
@ -54,7 +57,8 @@ public:
const char *filename; const char *filename;
SDL_Surface *screenshot; SDL_Surface *screenshot;
Uint16 score; uint16_t year;
uint16_t score;
}; };
#endif /*__GAME_INFO_HH__ */ #endif /*__GAME_INFO_HH__ */

View File

@ -77,16 +77,22 @@ public:
this->gi_messages[1] = " "; this->gi_messages[1] = " ";
this->gi_messages[2] = "Author:"; this->gi_messages[2] = "Author:";
this->gi_messages[3] = " "; this->gi_messages[3] = " ";
this->gi_messages[4] = "Year:";
this->gi_messages[5] = " ";
if (this->gi) if (this->gi)
{ {
snprintf(this->year, sizeof(this->year), "%d", this->gi->year);
this->gi_messages[1] = this->gi->name ? this->gi->name : " "; this->gi_messages[1] = this->gi->name ? this->gi->name : " ";
this->gi_messages[3] = this->gi->author ? this->gi->author : " "; this->gi_messages[3] = this->gi->author ? this->gi->author : " ";
this->gi_messages[5] = year;
} }
this->setText(this->gi_messages); this->setText(this->gi_messages);
} }
const char *gi_messages[6]; const char *gi_messages[8];
char year[8];
GameInfo *gi; GameInfo *gi;
}; };

View File

@ -29,6 +29,22 @@ public:
case 3: case 3:
this->box->gi->setAuthor(str); this->box->gi->setAuthor(str);
break; break;
case 4:
{
unsigned long v;
char *endp;
v = strtoul(str, &endp, 0);
if (str != endp)
{
if (v < 1976 || v > 2040)
Gui::gui->pushDialogueBox(new DialogueBox(game_info_bad_year_dlg));
else
this->box->gi->setYear(v);
}
else
Gui::gui->pushDialogueBox(new DialogueBox(game_info_bad_number_dlg));
} break;
default: default:
panic("Cur sel is %d, not possible!\n", this->cur_sel); panic("Cur sel is %d, not possible!\n", this->cur_sel);
break; break;
@ -45,6 +61,7 @@ public:
break; break;
case 2: case 2:
case 3: case 3:
case 4:
VirtualKeyboard::kbd->activate(); VirtualKeyboard::kbd->activate();
VirtualKeyboard::kbd->registerListener(this); VirtualKeyboard::kbd->registerListener(this);
break; break;

View File

@ -46,6 +46,28 @@ const char **broken_theme_dlg = (const char*[]){
NULL NULL
}; };
const char **game_info_bad_year_dlg = (const char*[]){
/*00*/ "Impossible year selected,",
/*01*/ "try starting with 1981!",
/*02*/ "#", /* Empty line */
/*03*/ "#",
/*04*/ "#",
/*05*/ "#",
/*06*/ "^|OK",
NULL
};
const char **game_info_bad_number_dlg = (const char*[]){
/*00*/ "Please enter a number!",
/*01*/ "#",
/*02*/ "#", /* Empty line */
/*03*/ "#",
/*04*/ "#",
/*05*/ "#",
/*06*/ "^|OK",
NULL
};
const char **select_analogue_dlg = (const char*[]){ const char **select_analogue_dlg = (const char*[]){
/*00*/ "Select axis of analogue", /*00*/ "Select axis of analogue",
/*01*/ "joystick to bind.", /*01*/ "joystick to bind.",
@ -253,6 +275,7 @@ const char **game_info_menu_messages = (const char*[]){
/*00*/ "Capture game screenshot", /*00*/ "Capture game screenshot",
/*01*/ " ", /*01*/ " ",
/*02*/ "Set game name", /*02*/ "Set game name",
/*02*/ "Set game author", /*03*/ "Set game author",
/*04*/ "Set publishing year",
NULL NULL
}; };

View File

@ -17,5 +17,7 @@ extern const char **network_port_dialogue_messages;
extern const char **network_unset_name_dlg; extern const char **network_unset_name_dlg;
extern const char **broken_theme_dlg; extern const char **broken_theme_dlg;
extern const char **select_analogue_dlg; extern const char **select_analogue_dlg;
extern const char **game_info_bad_year_dlg;
extern const char **game_info_bad_number_dlg;
#endif #endif