mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-30 07:29:54 +00:00
semicasual mode
This commit is contained in:
parent
568389e629
commit
d4d09f0855
@ -1118,6 +1118,10 @@ EX void initConfig() {
|
|||||||
-> editable("YASC codes", 'Y')
|
-> editable("YASC codes", 'Y')
|
||||||
-> help("YASC codes: Sides-Entity-Restrict-Threat-Wall");
|
-> help("YASC codes: Sides-Entity-Restrict-Threat-Wall");
|
||||||
|
|
||||||
|
param_b(display_semicasual, "semicasual", false)
|
||||||
|
-> editable("semicasual", 'S')
|
||||||
|
-> help("display save/load counts in exit screen");
|
||||||
|
|
||||||
param_b(vid.relative_font, "relative_font", true)
|
param_b(vid.relative_font, "relative_font", true)
|
||||||
-> editable("set relative font size", 'r')
|
-> editable("set relative font size", 'r')
|
||||||
-> help("Font size is set as a relation to screen size.")
|
-> help("Font size is set as a relation to screen size.")
|
||||||
@ -2519,6 +2523,7 @@ EX void configureInterface() {
|
|||||||
add_edit(less_in_portrait);
|
add_edit(less_in_portrait);
|
||||||
|
|
||||||
add_edit(display_yasc_codes);
|
add_edit(display_yasc_codes);
|
||||||
|
if(casual) add_edit(display_semicasual);
|
||||||
add_edit(vid.orbmode);
|
add_edit(vid.orbmode);
|
||||||
add_edit(zh_ascii);
|
add_edit(zh_ascii);
|
||||||
|
|
||||||
|
8
quit.cpp
8
quit.cpp
@ -34,9 +34,9 @@ EX string getgametime_s(int timespent IS(getgametime())) {
|
|||||||
return hr::format("%d:%02d", timespent/60, timespent % 60);
|
return hr::format("%d:%02d", timespent/60, timespent % 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
EX bool display_yasc_codes;
|
EX bool display_yasc_codes, display_semicasual;
|
||||||
|
|
||||||
string formatted_yasc_code() {
|
EX string formatted_yasc_code() {
|
||||||
if(yasc_code < 100000) return its(yasc_code);
|
if(yasc_code < 100000) return its(yasc_code);
|
||||||
int y = yasc_code;
|
int y = yasc_code;
|
||||||
string out;
|
string out;
|
||||||
@ -56,6 +56,10 @@ string timeline() {
|
|||||||
if(display_yasc_codes)
|
if(display_yasc_codes)
|
||||||
s += XLAT(" YASC code: ") + formatted_yasc_code();
|
s += XLAT(" YASC code: ") + formatted_yasc_code();
|
||||||
}
|
}
|
||||||
|
if(casual && loadcount >= 0 && display_semicasual) {
|
||||||
|
ld val = exp(load_branching/scores::BRANCH_SCALE);
|
||||||
|
s += XLAT(" saves: %1 loads: %2 branching: %3", its(savecount), its(loadcount), val < 1e6 ? format("%.0f", val) : format("%.4g", val));
|
||||||
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
51
system.cpp
51
system.cpp
@ -63,6 +63,10 @@ EX int savecount;
|
|||||||
EX int save_turns;
|
EX int save_turns;
|
||||||
EX bool doCross = false;
|
EX bool doCross = false;
|
||||||
|
|
||||||
|
EX int loadcount;
|
||||||
|
EX int current_loadcount;
|
||||||
|
EX int load_branching;
|
||||||
|
|
||||||
EX bool gamegen_failure;
|
EX bool gamegen_failure;
|
||||||
|
|
||||||
EX eLand top_land;
|
EX eLand top_land;
|
||||||
@ -392,6 +396,8 @@ EX void initgame() {
|
|||||||
sagephase = 0; hardcoreAt = 0;
|
sagephase = 0; hardcoreAt = 0;
|
||||||
timerstopped = false;
|
timerstopped = false;
|
||||||
savecount = 0; savetime = 0;
|
savecount = 0; savetime = 0;
|
||||||
|
loadcount = 0; current_loadcount = 0; load_branching = 0;
|
||||||
|
|
||||||
tortoise::last21tort = 0;
|
tortoise::last21tort = 0;
|
||||||
cheater = 0;
|
cheater = 0;
|
||||||
if(autocheat) cheater = 1;
|
if(autocheat) cheater = 1;
|
||||||
@ -459,7 +465,7 @@ EX namespace scores {
|
|||||||
/** \brief the amount of boxes reserved for each hr::score item */
|
/** \brief the amount of boxes reserved for each hr::score item */
|
||||||
#define MAXBOX 500
|
#define MAXBOX 500
|
||||||
/** \brief currently used boxes in hr::score */
|
/** \brief currently used boxes in hr::score */
|
||||||
#define POSSCORE 418
|
#define POSSCORE 421
|
||||||
/** \brief a struct to keep local score from an earlier game */
|
/** \brief a struct to keep local score from an earlier game */
|
||||||
struct score {
|
struct score {
|
||||||
/** \brief version used */
|
/** \brief version used */
|
||||||
@ -973,6 +979,10 @@ EX void applyBoxes() {
|
|||||||
applyBoxNum(asteroids_generated);
|
applyBoxNum(asteroids_generated);
|
||||||
applyBoxNum(asteroid_orbs_generated);
|
applyBoxNum(asteroid_orbs_generated);
|
||||||
|
|
||||||
|
applyBoxNum(loadcount, "load count");
|
||||||
|
applyBoxNum(load_branching, "load branching");
|
||||||
|
applyBoxNum(current_loadcount, "current load count");
|
||||||
|
|
||||||
if(POSSCORE != boxid) printf("ERROR: %d boxes\n", boxid);
|
if(POSSCORE != boxid) printf("ERROR: %d boxes\n", boxid);
|
||||||
if(isize(invorb)) { println(hlog, "ERROR: Orbs not taken into account"); exit(1); }
|
if(isize(invorb)) { println(hlog, "ERROR: Orbs not taken into account"); exit(1); }
|
||||||
}
|
}
|
||||||
@ -990,6 +1000,9 @@ void loadBox() {
|
|||||||
|
|
||||||
#if HDR
|
#if HDR
|
||||||
constexpr int MODECODE_BOX = 387;
|
constexpr int MODECODE_BOX = 387;
|
||||||
|
constexpr int CURRENT_LOADCOUNT_BOX = 420;
|
||||||
|
constexpr int LOADCOUNT_BOX = 418;
|
||||||
|
constexpr ld BRANCH_SCALE = 100000.0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
modecode_t fill_modecode() {
|
modecode_t fill_modecode() {
|
||||||
@ -1263,6 +1276,7 @@ EX void loadsave() {
|
|||||||
using namespace scores;
|
using namespace scores;
|
||||||
for(int i=0; i<boxid; i++) save.box[i] = sc.box[i];
|
for(int i=0; i<boxid; i++) save.box[i] = sc.box[i];
|
||||||
for(int i=boxid; i<MAXBOX; i++) save.box[i] = 0, sc.box[i] = 0;
|
for(int i=boxid; i<MAXBOX; i++) save.box[i] = 0, sc.box[i] = 0;
|
||||||
|
if(boxid <= LOADCOUNT_BOX) save.box[LOADCOUNT_BOX] = -1;
|
||||||
|
|
||||||
if(boxid <= MODECODE_BOX) save.box[MODECODE_BOX] = sc.box[MODECODE_BOX] = fill_modecode();
|
if(boxid <= MODECODE_BOX) save.box[MODECODE_BOX] = sc.box[MODECODE_BOX] = fill_modecode();
|
||||||
|
|
||||||
@ -1347,7 +1361,11 @@ EX void loadsave() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if(buf[0] == 'L' && buf[1] == 'O' && buf[2] == 'A' && buf[3] == 'D') {
|
||||||
|
sc.box[scores::CURRENT_LOADCOUNT_BOX]++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
// this is the index of Orb of Safety
|
// this is the index of Orb of Safety
|
||||||
if(ok && sc.box[65 + 4 + itOrbSafety - itOrbLightning])
|
if(ok && sc.box[65 + 4 + itOrbSafety - itOrbLightning])
|
||||||
@ -1398,6 +1416,12 @@ EX void load_last_save() {
|
|||||||
tour::on = false;
|
tour::on = false;
|
||||||
save_turns = turncount;
|
save_turns = turncount;
|
||||||
loaded_from_save = true;
|
loaded_from_save = true;
|
||||||
|
|
||||||
|
if(loadcount >= 0) {
|
||||||
|
loadcount += current_loadcount;
|
||||||
|
load_branching += BRANCH_SCALE * log(1 + current_loadcount);
|
||||||
|
current_loadcount = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1406,10 +1430,7 @@ EX void stop_game() {
|
|||||||
if(dual::split(stop_game)) return;
|
if(dual::split(stop_game)) return;
|
||||||
DEBBI(DF_INIT, ("stop_game"));
|
DEBBI(DF_INIT, ("stop_game"));
|
||||||
achievement_final(true);
|
achievement_final(true);
|
||||||
#if CAP_SAVE
|
save_if_needed();
|
||||||
if(!casual)
|
|
||||||
saveStats();
|
|
||||||
#endif
|
|
||||||
for(int i=0; i<ittypes; i++) items[i] = 0;
|
for(int i=0; i<ittypes; i++) items[i] = 0;
|
||||||
lastkills = 0; for(int i=0; i<motypes; i++) kills[i] = 0;
|
lastkills = 0; for(int i=0; i<motypes; i++) kills[i] = 0;
|
||||||
for(int i=0; i<10; i++) explore[i] = 0;
|
for(int i=0; i<10; i++) explore[i] = 0;
|
||||||
@ -1818,13 +1839,27 @@ EX void initAll() {
|
|||||||
|
|
||||||
EX purehookset hooks_final_cleanup;
|
EX purehookset hooks_final_cleanup;
|
||||||
|
|
||||||
EX void finishAll() {
|
EX void save_if_needed() {
|
||||||
achievement_final(!items[itOrbSafety]);
|
|
||||||
|
|
||||||
#if CAP_SAVE
|
#if CAP_SAVE
|
||||||
|
if(casual && savecount && !items[itOrbSafety]) {
|
||||||
|
scorebox.box[scores::CURRENT_LOADCOUNT_BOX]++;
|
||||||
|
FILE *f = fopen(scorefile.c_str(), "at");
|
||||||
|
if(f) {
|
||||||
|
string yasc_msg = "quit";
|
||||||
|
if(!canmove && yasc_message != "") yasc_msg = yasc_message;
|
||||||
|
fprintf(f, "LOAD %d %d %s %s\n", int(cwt.at->land), int(turncount - save_turns), formatted_yasc_code().c_str(), yasc_message.c_str());
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
if(!casual)
|
if(!casual)
|
||||||
saveStats();
|
saveStats();
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EX void finishAll() {
|
||||||
|
achievement_final(!items[itOrbSafety]);
|
||||||
|
|
||||||
|
save_if_needed();
|
||||||
clearMemory();
|
clearMemory();
|
||||||
#if !ISMOBILE
|
#if !ISMOBILE
|
||||||
quit_all();
|
quit_all();
|
||||||
|
Loading…
Reference in New Issue
Block a user