mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-09-02 10:48:04 +00:00
save/load custom character files
This commit is contained in:
40
config.cpp
40
config.cpp
@@ -3585,6 +3585,33 @@ EX void pick_player_shape() {
|
|||||||
dialog::display();
|
dialog::display();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EX void save_customchar(charstyle& cs, const string& fname) {
|
||||||
|
FILE *f = fopen(fname.c_str(), "wt");
|
||||||
|
if(!f) throw hstream_exception();
|
||||||
|
fprintf(f, "%x\n", VERNUM_HEX);
|
||||||
|
fprintf(f, "%d %d\n%08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
|
||||||
|
cs.charid, cs.lefthanded,
|
||||||
|
cs.skincolor, cs.haircolor, cs.dresscolor, cs.swordcolor, cs.dresscolor2, cs.uicolor, cs.eyecolor, cs.bowcolor, cs.bowcolor2);
|
||||||
|
fprintf(f, "HyperRogue " VER " custom character file\n");
|
||||||
|
fprintf(f, "Colors are: skin, hair, dress, sword, dress2, ui, eye, bow, bow2\n");
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
EX void load_customchar(charstyle& cs, const string& fname) {
|
||||||
|
FILE *f = fopen(fname.c_str(), "rt");
|
||||||
|
if(!f) throw hstream_exception();
|
||||||
|
int vernum;
|
||||||
|
fscanf(f, "%x", &vernum);
|
||||||
|
int lh;
|
||||||
|
fscanf(f, "%d %d\n%08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
|
||||||
|
&cs.charid, &lh,
|
||||||
|
&cs.skincolor, &cs.haircolor, &cs.dresscolor, &cs.swordcolor, &cs.dresscolor2, &cs.uicolor, &cs.eyecolor, &cs.bowcolor, &cs.bowcolor2);
|
||||||
|
cs.lefthanded = lh;
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
EX string charfile = "custom.hch";
|
||||||
|
|
||||||
EX void showCustomizeChar() {
|
EX void showCustomizeChar() {
|
||||||
|
|
||||||
cc_footphase += hypot(mousex - lmousex, mousey - lmousey);
|
cc_footphase += hypot(mousex - lmousex, mousey - lmousey);
|
||||||
@@ -3619,9 +3646,19 @@ EX void showCustomizeChar() {
|
|||||||
|
|
||||||
if(numplayers() > 1) dialog::addSelItem(XLAT("player"), its(multi::cpid+1), 'a');
|
if(numplayers() > 1) dialog::addSelItem(XLAT("player"), its(multi::cpid+1), 'a');
|
||||||
|
|
||||||
dialog::addBoolItem(XLAT("left-handed"), cs.lefthanded, 'l');
|
dialog::addBoolItem_action(XLAT("left-handed"), cs.lefthanded, 'l');
|
||||||
|
|
||||||
dialog::addBreak(50);
|
dialog::addBreak(50);
|
||||||
|
dialog::addItem("save", 'S');
|
||||||
|
dialog::add_action([&cs] {
|
||||||
|
dialog::openFileDialog(charfile, XLAT("character file to save:"), ".hch",
|
||||||
|
[&cs] { try { save_customchar(cs, charfile); return true; } catch(hstream_exception&) { addMessage("Failed to save!"); return false; } });
|
||||||
|
});
|
||||||
|
dialog::addItem("load", 'L');
|
||||||
|
dialog::add_action([&cs] {
|
||||||
|
dialog::openFileDialog(charfile, XLAT("character file to load:"), ".hch",
|
||||||
|
[&cs] { try { load_customchar(cs, charfile); return true; } catch(hstream_exception&) { addMessage("Failed to load!"); return false; } });
|
||||||
|
});
|
||||||
dialog::addBack();
|
dialog::addBack();
|
||||||
dialog::display();
|
dialog::display();
|
||||||
|
|
||||||
@@ -3653,7 +3690,6 @@ EX void showCustomizeChar() {
|
|||||||
else if(uni == 'f') switchcolor(cs.dresscolor2, dresscolors2);
|
else if(uni == 'f') switchcolor(cs.dresscolor2, dresscolors2);
|
||||||
else if(uni == 'u') switchcolor(cs.uicolor, eyecolors);
|
else if(uni == 'u') switchcolor(cs.uicolor, eyecolors);
|
||||||
else if(uni == 'e') switchcolor(cs.eyecolor, eyecolors);
|
else if(uni == 'e') switchcolor(cs.eyecolor, eyecolors);
|
||||||
else if(uni == 'l') cs.lefthanded = !cs.lefthanded;
|
|
||||||
else if(uni == 'b') switchcolor(cs.bowcolor, swordcolors);
|
else if(uni == 'b') switchcolor(cs.bowcolor, swordcolors);
|
||||||
else if(uni == 'c') switchcolor(cs.bowcolor2, eyecolors);
|
else if(uni == 'c') switchcolor(cs.bowcolor2, eyecolors);
|
||||||
else if(doexiton(sym, uni)) popScreen();
|
else if(doexiton(sym, uni)) popScreen();
|
||||||
|
Reference in New Issue
Block a user