Origseed
This commit is contained in:
@@ -805,7 +805,7 @@ int32_t flushkeystrokes_local(struct games_state *rs,int32_t waitflag)
|
|||||||
#ifdef STANDALONE
|
#ifdef STANDALONE
|
||||||
char fname[1024]; FILE *fp; int32_t i,retflag = -1;
|
char fname[1024]; FILE *fp; int32_t i,retflag = -1;
|
||||||
rs->counter++;
|
rs->counter++;
|
||||||
gamesfname(fname,rs->seed,rs->counter);
|
gamesfname(fname,rs->origseed,rs->counter);
|
||||||
if ( (fp= fopen(fname,"wb")) != 0 )
|
if ( (fp= fopen(fname,"wb")) != 0 )
|
||||||
{
|
{
|
||||||
if ( fwrite(rs->buffered,1,rs->num,fp) == rs->num )
|
if ( fwrite(rs->buffered,1,rs->num,fp) == rs->num )
|
||||||
@@ -813,7 +813,7 @@ int32_t flushkeystrokes_local(struct games_state *rs,int32_t waitflag)
|
|||||||
rs->num = 0;
|
rs->num = 0;
|
||||||
retflag = 0;
|
retflag = 0;
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
gamesfname(fname,rs->seed,rs->counter+1);
|
gamesfname(fname,rs->origseed,rs->counter+1);
|
||||||
if ( (fp= fopen(fname,"wb")) != 0 ) // truncate next file
|
if ( (fp= fopen(fname,"wb")) != 0 ) // truncate next file
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
//fprintf(stderr,"savefile <- %s retflag.%d\n",fname,retflag);
|
//fprintf(stderr,"savefile <- %s retflag.%d\n",fname,retflag);
|
||||||
@@ -844,7 +844,7 @@ int32_t flushkeystrokes(struct games_state *rs,int32_t waitflag)
|
|||||||
{
|
{
|
||||||
if ( rs->num > 0 )
|
if ( rs->num > 0 )
|
||||||
{
|
{
|
||||||
if ( games_progress(rs,waitflag,rs->seed,rs->buffered,rs->num) > 0 )
|
if ( games_progress(rs,waitflag,rs->origseed,rs->buffered,rs->num) > 0 )
|
||||||
{
|
{
|
||||||
flushkeystrokes_local(rs,waitflag);
|
flushkeystrokes_local(rs,waitflag);
|
||||||
memset(rs->buffered,0,sizeof(rs->buffered));
|
memset(rs->buffered,0,sizeof(rs->buffered));
|
||||||
@@ -868,7 +868,7 @@ int32_t games_replay2(uint8_t *newdata,uint64_t seed,char *keystrokes,int32_t nu
|
|||||||
{
|
{
|
||||||
struct games_state *rs; FILE *fp; int32_t i,n; void *ptr;
|
struct games_state *rs; FILE *fp; int32_t i,n; void *ptr;
|
||||||
rs = (struct games_state *)calloc(1,sizeof(*rs));
|
rs = (struct games_state *)calloc(1,sizeof(*rs));
|
||||||
rs->seed = seed;
|
rs->seed = rs->origseed = seed;
|
||||||
rs->keystrokes = keystrokes;
|
rs->keystrokes = keystrokes;
|
||||||
rs->numkeys = num;
|
rs->numkeys = num;
|
||||||
rs->sleeptime = sleepmillis * 1000;
|
rs->sleeptime = sleepmillis * 1000;
|
||||||
@@ -891,7 +891,7 @@ int32_t games_replay2(uint8_t *newdata,uint64_t seed,char *keystrokes,int32_t nu
|
|||||||
for (i=0; i<10000; i++)
|
for (i=0; i<10000; i++)
|
||||||
{
|
{
|
||||||
memset(rs,0,sizeof(*rs));
|
memset(rs,0,sizeof(*rs));
|
||||||
rs->seed = seed;
|
rs->seed = rs->origseed = seed;
|
||||||
rs->keystrokes = keystrokes;
|
rs->keystrokes = keystrokes;
|
||||||
rs->numkeys = num;
|
rs->numkeys = num;
|
||||||
rs->sleeptime = 0;
|
rs->sleeptime = 0;
|
||||||
@@ -1009,6 +1009,61 @@ int32_t games_replay(uint64_t seed,int32_t sleeptime)
|
|||||||
return(num);
|
return(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char games_readchar(struct rogue_state *rs)
|
||||||
|
{
|
||||||
|
char c,ch = -1;
|
||||||
|
if ( rs != 0 && rs->guiflag == 0 )
|
||||||
|
{
|
||||||
|
static uint32_t counter;
|
||||||
|
if ( rs->ind < rs->numkeys )
|
||||||
|
{
|
||||||
|
c = rs->keystrokes[rs->ind++];
|
||||||
|
if ( 0 )
|
||||||
|
{
|
||||||
|
static FILE *fp; static int32_t counter;
|
||||||
|
if ( fp == 0 )
|
||||||
|
fp = fopen("log","wb");
|
||||||
|
if ( fp != 0 )
|
||||||
|
{
|
||||||
|
fprintf(fp,"%d: (%c) seed.%llu\n",counter,c,(long long)rs->origseed);
|
||||||
|
fflush(fp);
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(c);
|
||||||
|
}
|
||||||
|
if ( rs->replaydone != 0 && counter++ < 3 )
|
||||||
|
fprintf(stderr,"replay finished but readchar called\n");
|
||||||
|
rs->replaydone = (uint32_t)time(NULL);
|
||||||
|
if ( counter < 3 || (counter & 1) == 0 )
|
||||||
|
return('y');
|
||||||
|
else return(ESCAPE);
|
||||||
|
}
|
||||||
|
if ( rs == 0 || rs->guiflag != 0 )
|
||||||
|
{
|
||||||
|
ch = (char) getch();
|
||||||
|
if (ch == 3)
|
||||||
|
{
|
||||||
|
_quit();
|
||||||
|
return(27);
|
||||||
|
}
|
||||||
|
if ( rs != 0 && rs->guiflag != 0 )
|
||||||
|
{
|
||||||
|
if ( rs->num < sizeof(rs->buffered) )
|
||||||
|
{
|
||||||
|
rs->buffered[rs->num++] = ch;
|
||||||
|
if ( rs->num > (sizeof(rs->buffered)*9)/10 && rs->needflush == 0 )
|
||||||
|
{
|
||||||
|
rs->needflush = (uint32_t)time(NULL);
|
||||||
|
//fprintf(stderr,"needflush.%u %d of %d\n",rs->needflush,rs->num,(int32_t)sizeof(rs->buffered));
|
||||||
|
//sleep(3);
|
||||||
|
}
|
||||||
|
} else fprintf(stderr,"buffer filled without flushed\n");
|
||||||
|
}
|
||||||
|
} else fprintf(stderr,"readchar rs.%p non-gui error?\n",rs);
|
||||||
|
return(ch);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t games_setplayerdata(struct games_state *rs,char *gametxidstr)
|
int32_t games_setplayerdata(struct games_state *rs,char *gametxidstr)
|
||||||
{
|
{
|
||||||
char cmd[32768]; int32_t i,n,retval=-1; char params[1024],*filestr=0,*pname,*statusstr,*datastr,fname[128]; long allocsize; cJSON *retjson,*array,*item,*resultjson;
|
char cmd[32768]; int32_t i,n,retval=-1; char params[1024],*filestr=0,*pname,*statusstr,*datastr,fname[128]; long allocsize; cJSON *retjson,*array,*item,*resultjson;
|
||||||
|
|||||||
@@ -696,40 +696,57 @@ void *gamesiterate(struct games_state *rs)
|
|||||||
next = newwin(6, 10, 0, 2 * (tg->cols + 1) + 1);
|
next = newwin(6, 10, 0, 2 * (tg->cols + 1) + 1);
|
||||||
hold = newwin(6, 10, 7, 2 * (tg->cols + 1) + 1);
|
hold = newwin(6, 10, 7, 2 * (tg->cols + 1) + 1);
|
||||||
score = newwin(6, 10, 14, 2 * (tg->cols + 1 ) + 1);
|
score = newwin(6, 10, 14, 2 * (tg->cols + 1 ) + 1);
|
||||||
while (running)
|
while ( running != 0 )
|
||||||
{
|
{
|
||||||
running = tg_tick(rs,tg, move);
|
running = tg_tick(rs,tg,move);
|
||||||
display_board(board, tg);
|
if ( rs->guiflag != 0 )
|
||||||
display_piece(next, tg->next);
|
|
||||||
display_piece(hold, tg->stored);
|
|
||||||
display_score(score, tg);
|
|
||||||
if ( (counter++ % 5) == 0 )
|
|
||||||
doupdate();
|
|
||||||
sleep_milli(10);
|
|
||||||
c = getch();
|
|
||||||
switch ( c )
|
|
||||||
{
|
{
|
||||||
case KEY_LEFT:
|
display_board(board,tg);
|
||||||
c = 'h';
|
display_piece(next,tg->next);
|
||||||
break;
|
display_piece(hold,tg->stored);
|
||||||
case KEY_RIGHT:
|
display_score(score,tg);
|
||||||
c = 'l';
|
if ( (counter++ % 5) == 0 )
|
||||||
break;
|
doupdate();
|
||||||
case KEY_UP:
|
sleep_milli(10);
|
||||||
c = 'k';
|
c = games_readchar(rs);
|
||||||
break;
|
switch ( c )
|
||||||
case KEY_DOWN:
|
{
|
||||||
c = 'j';
|
case KEY_LEFT:
|
||||||
break;
|
c = 'h';
|
||||||
|
break;
|
||||||
|
case KEY_RIGHT:
|
||||||
|
c = 'l';
|
||||||
|
break;
|
||||||
|
case KEY_UP:
|
||||||
|
c = 'k';
|
||||||
|
break;
|
||||||
|
case KEY_DOWN:
|
||||||
|
c = 'j';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ( c < 0 || skipcount == 0x7f )
|
||||||
|
{
|
||||||
|
if ( skipcount > 0 )
|
||||||
|
issue_games_events(rs,Gametxidstr,eventid-skipcount,skipcount | 0x80);
|
||||||
|
if ( c != -1 )
|
||||||
|
issue_games_events(rs,Gametxidstr,eventid,c);
|
||||||
|
skipcount = 0;
|
||||||
|
} else skipcount++;
|
||||||
}
|
}
|
||||||
if ( c < 0 || skipcount == 0x7f )
|
else
|
||||||
{
|
{
|
||||||
|
if ( skipcount == 0 )
|
||||||
|
{
|
||||||
|
c = games_readchar(rs);
|
||||||
|
if ( (c & 0x80) != 0 )
|
||||||
|
{
|
||||||
|
skipcount = (c & 0x7f);
|
||||||
|
c = 'S';
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( skipcount > 0 )
|
if ( skipcount > 0 )
|
||||||
issue_games_events(rs,Gametxidstr,eventid-skipcount,skipcount | 0x80);
|
skipcount--;
|
||||||
if ( c != -1 )
|
}
|
||||||
issue_games_events(rs,Gametxidstr,eventid,c);
|
|
||||||
skipcount = 0;
|
|
||||||
} else skipcount++;
|
|
||||||
eventid++;
|
eventid++;
|
||||||
switch ( c )
|
switch ( c )
|
||||||
{
|
{
|
||||||
@@ -785,13 +802,14 @@ int tetris(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
rs->seed = _strtoui64(argv[1], NULL, 10);
|
rs->origseed = _strtoui64(argv[1], NULL, 10);
|
||||||
#else
|
#else
|
||||||
rs->seed = atol(argv[1]); // windows, but not MSVC
|
rs->origseed = atol(argv[1]); // windows, but not MSVC
|
||||||
#endif // _MSC_VER
|
#endif // _MSC_VER
|
||||||
#else
|
#else
|
||||||
rs->seed = atol(argv[1]); // non-windows
|
rs->origseed = atol(argv[1]); // non-windows
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
rs->seed = rs->origseed;
|
||||||
strcpy(Gametxidstr,argv[2]);
|
strcpy(Gametxidstr,argv[2]);
|
||||||
fprintf(stderr,"setplayerdata\n");
|
fprintf(stderr,"setplayerdata\n");
|
||||||
if ( games_setplayerdata(rs,Gametxidstr) < 0 )
|
if ( games_setplayerdata(rs,Gametxidstr) < 0 )
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ struct games_player
|
|||||||
|
|
||||||
struct games_state
|
struct games_state
|
||||||
{
|
{
|
||||||
uint64_t seed;
|
uint64_t seed,origseed;
|
||||||
char *keystrokes,*keystrokeshex;
|
char *keystrokes,*keystrokeshex;
|
||||||
uint32_t needflush,replaydone;
|
uint32_t needflush,replaydone;
|
||||||
int32_t numkeys,ind,num,guiflag,counter,sleeptime,playersize,restoring,lastnum;
|
int32_t numkeys,ind,num,guiflag,counter,sleeptime,playersize,restoring,lastnum;
|
||||||
|
|||||||
Reference in New Issue
Block a user