Preserve both player strength and max strength

This commit is contained in:
jl777
2019-02-17 21:43:20 -11:00
parent 444a5de9bc
commit 9ecce2eb73
4 changed files with 16 additions and 10 deletions

View File

@@ -27,7 +27,12 @@ void restore_player(struct rogue_state *rs)
int32_t i; THING *obj;
//rs->P.gold = purse;
max_hp = rs->P.hitpoints;
pstats.s_str = max_stats.s_str = rs->P.strength;
pstats.s_str = rs->P.strength & 0xffff;
max_stats.s_str = rs->P.strength >> 16;
if ( max_stats.s_str < 12 )
max_stats.s_str = 12;
if ( pstats.s_str > max_stats.s_str )
pstats.s_str = max_stats.s_str;
pstats.s_lvl = rs->P.level;
pstats.s_exp = rs->P.experience;
for (i=0; i<rs->P.packsize; i++)

View File

@@ -273,7 +273,7 @@ int32_t rogue_replay2(uint8_t *newdata,uint64_t seed,char *keystrokes,int32_t nu
if ( (fp= fopen("checkfile","wb")) != 0 )
{
save_file(rs,fp,0);
fprintf(stderr,"gold.%d hp.%d strength.%d level.%d exp.%d dungeon.%d data[%d]\n",rs->P.gold,rs->P.hitpoints,rs->P.strength,rs->P.level,rs->P.experience,rs->P.dungeonlevel,rs->playersize);
fprintf(stderr,"gold.%d hp.%d strength.%d/%d level.%d exp.%d dungeon.%d data[%d]\n",rs->P.gold,rs->P.hitpoints,rs->P.strength&0xffff,rs->P.strength>>16,rs->P.level,rs->P.experience,rs->P.dungeonlevel,rs->playersize);
if ( newdata != 0 && rs->playersize > 0 )
memcpy(newdata,rs->playerdata,rs->playersize);
}

View File

@@ -1437,7 +1437,7 @@ rs_write_object(struct rogue_state *rs,FILE *savef, THING *o)
//fprintf(stderr,"KILLED\n");
rs->P.gold = -1;
rs->P.hitpoints = -1;
rs->P.strength = -1;
rs->P.strength = 0;
rs->P.level = -1;
rs->P.experience = -1;
rs->P.dungeonlevel = -1;
@@ -1448,11 +1448,11 @@ rs_write_object(struct rogue_state *rs,FILE *savef, THING *o)
{
rs->P.gold = purse;
rs->P.hitpoints = max_hp;
rs->P.strength = pstats.s_str; //max_stats.s_str;
rs->P.strength = (pstats.s_str & 0xffff) | (max_stats.s_str << 16);
rs->P.level = pstats.s_lvl;
rs->P.experience = pstats.s_exp;
rs->P.dungeonlevel = level;
//fprintf(stderr,"%ld gold.%d hp.%d strength.%d level.%d exp.%d %d\n",ftell(savef),purse,max_hp,pstats.s_str,pstats.s_lvl,pstats.s_exp,level);
//fprintf(stderr,"%ld gold.%d hp.%d strength.%d/%d level.%d exp.%d %d\n",ftell(savef),purse,max_hp,pstats.s_str,max_stats.s_str,pstats.s_lvl,pstats.s_exp,level);
}
//fprintf(stderr,"object (%s) x.%d y.%d type.%d pack.(%c:%d)\n",inv_name(o,FALSE),o->_o._o_pos.x,o->_o._o_pos.y,o->_o._o_type,o->_o._o_packch,o->_o._o_packch);
if ( rs->P.packsize < MAXPACK && o->o_type != AMULET )