diff --git a/polymer/eduke32/source/gameexec.c b/polymer/eduke32/source/gameexec.c index 3680148b2..108a2966b 100644 --- a/polymer/eduke32/source/gameexec.c +++ b/polymer/eduke32/source/gameexec.c @@ -5590,20 +5590,48 @@ static int parse(void) Bstrcpy(fta_quotes[i],fta_quotes[j]); break; case CON_CHANGESPRITESTAT: - if ((i<0 || i>=MAXSPRITES) && checkCON) {OSD_Printf(CON_ERROR "Invalid sprite %d\n",line_num,keyw[g_tw],i);break;} - if ((j<0 || j>=MAXSTATUS) && checkCON) {OSD_Printf(CON_ERROR "Invalid status %d\n",line_num,keyw[g_tw],j);break;} + if ((i<0 || i>=MAXSPRITES) && checkCON) + { + OSD_Printf(CON_ERROR "Invalid sprite: %d\n",line_num,keyw[g_tw],i); + break; + } + if ((j<0 || j>=MAXSTATUS) && checkCON) + { + OSD_Printf(CON_ERROR "Invalid statnum: %d\n",line_num,keyw[g_tw],j); + break; + } + if (sprite[i].statnum == j) break; /* initialize actor pointers when changing to an actor statnum because they usually have garbage left over from being handled as a hard coded object */ + if ((j == 1 || j == 2) && actorscrptr[sprite[i].picnum]) { T5 = *(actorscrptr[sprite[i].picnum]+1); T2 = *(actorscrptr[sprite[i].picnum]+2); sprite[i].hitag = *(actorscrptr[sprite[i].picnum]+3); + hittype[i].lastvx = 0; + hittype[i].lastvy = 0; + hittype[i].timetosleep = 0; + hittype[i].cgg = 0; + hittype[i].movflag = 0; + hittype[i].tempang = 0; + hittype[i].dispicnum = 0; + T1=T3=T4=T6=T7=T8=T9=0; + hittype[i].flags = 0; } else { T2=T5=0; sprite[i].hitag = 0; + hittype[i].lastvx = 0; + hittype[i].lastvy = 0; + hittype[i].timetosleep = 0; + hittype[i].cgg = 0; + hittype[i].movflag = 0; + hittype[i].tempang = 0; + hittype[i].dispicnum = 0; + T1=T3=T4=T6=T7=T8=T9=0; + hittype[i].flags = 0; } changespritestat(i,j); break;