mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
Fix tdupsprite in m32script.
git-svn-id: https://svn.eduke32.com/eduke32@4911 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
d70ac064b7
commit
7daf4fdcd3
3 changed files with 28 additions and 24 deletions
|
@ -8929,7 +8929,7 @@ static int32_t osdcmd_do(const osdfuncparm_t *parm)
|
||||||
if (in3dmode() && AIMING_AT_SPRITE)
|
if (in3dmode() && AIMING_AT_SPRITE)
|
||||||
{
|
{
|
||||||
vm.g_i = searchwall;
|
vm.g_i = searchwall;
|
||||||
vm.g_sp = &sprite[vm.g_i];
|
vm.g_sp = (tspritetype *)&sprite[vm.g_i];
|
||||||
}
|
}
|
||||||
|
|
||||||
// If OSD is down, that would interfere with user input, so don't consider
|
// If OSD is down, that would interfere with user input, so don't consider
|
||||||
|
|
|
@ -111,7 +111,7 @@ typedef struct {
|
||||||
// VM state: either ==0 (top-level), >=1 and < MAXEVENTS+1 (event),
|
// VM state: either ==0 (top-level), >=1 and < MAXEVENTS+1 (event),
|
||||||
// or >= MAXEVENTS+1 and < MAXEVENTS+1+g_stateCount (state)
|
// or >= MAXEVENTS+1 and < MAXEVENTS+1+g_stateCount (state)
|
||||||
int32_t g_st;
|
int32_t g_st;
|
||||||
spritetype *g_sp;
|
tspritetype *g_sp;
|
||||||
uint32_t flags; //g_errorFlag, g_returnFlag;
|
uint32_t flags; //g_errorFlag, g_returnFlag;
|
||||||
|
|
||||||
// 1:updatehighlight, 2:updatehighlightsector, 4:interactive (from menu)?
|
// 1:updatehighlight, 2:updatehighlightsector, 4:interactive (from menu)?
|
||||||
|
|
|
@ -155,7 +155,7 @@ void VM_OnEvent(register int32_t iEventID, register int32_t iActor)
|
||||||
|
|
||||||
vm.g_i = iActor; // current sprite ID
|
vm.g_i = iActor; // current sprite ID
|
||||||
if (vm.g_i >= 0)
|
if (vm.g_i >= 0)
|
||||||
vm.g_sp = &sprite[vm.g_i];
|
vm.g_sp = (tspritetype *)&sprite[vm.g_i];
|
||||||
|
|
||||||
vm.g_st = 1+iEventID;
|
vm.g_st = 1+iEventID;
|
||||||
|
|
||||||
|
@ -237,12 +237,12 @@ static int X_DoSort(const void *lv, const void *rv)
|
||||||
}
|
}
|
||||||
|
|
||||||
// in interactive execution, allow the current sprite index to be the aimed-at sprite (in 3d mode)
|
// in interactive execution, allow the current sprite index to be the aimed-at sprite (in 3d mode)
|
||||||
#define X_ERROR_INVALIDCI() \
|
#define X_ERROR_INVALIDCI() \
|
||||||
if ((vm.g_i < 0 || vm.g_i>=MAXSPRITES) && \
|
if ((vm.g_i < 0 || vm.g_i >= MAXSPRITES) && \
|
||||||
(vm.g_st!=0 || searchstat!=3 || (vm.g_i=searchwall, vm.g_sp=&sprite[vm.g_i], 0))) \
|
(vm.g_st != 0 || searchstat != 3 || (vm.g_i = searchwall, vm.g_sp = (tspritetype *)&sprite[vm.g_i], 0))) \
|
||||||
{ \
|
{ \
|
||||||
M32_ERROR("Current sprite index invalid!"); \
|
M32_ERROR("Current sprite index invalid!"); \
|
||||||
continue; \
|
continue; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define X_ERROR_INVALIDSPRI(dasprite) \
|
#define X_ERROR_INVALIDSPRI(dasprite) \
|
||||||
|
@ -259,11 +259,11 @@ static int X_DoSort(const void *lv, const void *rv)
|
||||||
continue; \
|
continue; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define X_ERROR_INVALIDSP() \
|
#define X_ERROR_INVALIDSP() \
|
||||||
if (!vm.g_sp && (vm.g_st!=0 || searchstat!=3 || (vm.g_sp=&sprite[searchwall], 0))) \
|
if (!vm.g_sp && (vm.g_st != 0 || searchstat != 3 || (vm.g_sp = (tspritetype *)&sprite[searchwall], 0))) \
|
||||||
{ \
|
{ \
|
||||||
M32_ERROR("Current sprite invalid!"); \
|
M32_ERROR("Current sprite invalid!"); \
|
||||||
continue; \
|
continue; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define X_ERROR_INVALIDQUOTE(q, array) \
|
#define X_ERROR_INVALIDQUOTE(q, array) \
|
||||||
|
@ -1269,7 +1269,7 @@ skip_check:
|
||||||
int32_t parm2 = how<=ITER_DRAWNSPRITES ? 0 : Gv_GetVarX(*insptr++);
|
int32_t parm2 = how<=ITER_DRAWNSPRITES ? 0 : Gv_GetVarX(*insptr++);
|
||||||
instype *end = insptr + *insptr, *beg = ++insptr;
|
instype *end = insptr + *insptr, *beg = ++insptr;
|
||||||
int32_t vm_i_bak = vm.g_i;
|
int32_t vm_i_bak = vm.g_i;
|
||||||
spritetype *vm_sp_bak = vm.g_sp;
|
tspritetype *vm_sp_bak = vm.g_sp;
|
||||||
int16_t endwall;
|
int16_t endwall;
|
||||||
|
|
||||||
if (vm.flags&VMFLAG_ERROR) continue;
|
if (vm.flags&VMFLAG_ERROR) continue;
|
||||||
|
@ -1283,7 +1283,7 @@ skip_check:
|
||||||
continue;
|
continue;
|
||||||
Gv_SetVarX(var, jj);
|
Gv_SetVarX(var, jj);
|
||||||
vm.g_i = jj;
|
vm.g_i = jj;
|
||||||
vm.g_sp = &sprite[jj];
|
vm.g_sp = (tspritetype *)&sprite[jj];
|
||||||
insptr = beg;
|
insptr = beg;
|
||||||
VM_Execute(1);
|
VM_Execute(1);
|
||||||
}
|
}
|
||||||
|
@ -1329,7 +1329,7 @@ skip_check:
|
||||||
jj &= (MAXSPRITES-1);
|
jj &= (MAXSPRITES-1);
|
||||||
Gv_SetVarX(var, jj);
|
Gv_SetVarX(var, jj);
|
||||||
vm.g_i = jj;
|
vm.g_i = jj;
|
||||||
vm.g_sp = &sprite[jj];
|
vm.g_sp = (tspritetype *)&sprite[jj];
|
||||||
insptr = beg;
|
insptr = beg;
|
||||||
VM_Execute(1);
|
VM_Execute(1);
|
||||||
}
|
}
|
||||||
|
@ -1358,7 +1358,7 @@ skip_check:
|
||||||
case ITER_DRAWNSPRITES:
|
case ITER_DRAWNSPRITES:
|
||||||
for (ii=0; ii<spritesortcnt && !vm.flags; ii++)
|
for (ii=0; ii<spritesortcnt && !vm.flags; ii++)
|
||||||
{
|
{
|
||||||
vm.g_sp = &sprite[MAXSPRITES-1];
|
vm.g_sp = (tspritetype *)&sprite[MAXSPRITES-1];
|
||||||
Bmemcpy(&sprite[MAXSPRITES-1], &tsprite[ii], sizeof(tspritetype));
|
Bmemcpy(&sprite[MAXSPRITES-1], &tsprite[ii], sizeof(tspritetype));
|
||||||
Gv_SetVarX(var, ii);
|
Gv_SetVarX(var, ii);
|
||||||
insptr = beg;
|
insptr = beg;
|
||||||
|
@ -1373,7 +1373,7 @@ skip_check:
|
||||||
{
|
{
|
||||||
Gv_SetVarX(var, jj);
|
Gv_SetVarX(var, jj);
|
||||||
vm.g_i = jj;
|
vm.g_i = jj;
|
||||||
vm.g_sp = &sprite[jj];
|
vm.g_sp = (tspritetype *)&sprite[jj];
|
||||||
insptr = beg;
|
insptr = beg;
|
||||||
VM_Execute(1);
|
VM_Execute(1);
|
||||||
}
|
}
|
||||||
|
@ -1683,7 +1683,7 @@ badindex:
|
||||||
|
|
||||||
ret = insertsprite(dasectnum, 0);
|
ret = insertsprite(dasectnum, 0);
|
||||||
vm.g_i = ret;
|
vm.g_i = ret;
|
||||||
vm.g_sp = &sprite[ret];
|
vm.g_sp = (tspritetype *)&sprite[ret];
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1718,16 +1718,14 @@ badindex:
|
||||||
|
|
||||||
Bmemcpy(&sprite[nspritenum], &sprite[ospritenum], sizeof(spritetype));
|
Bmemcpy(&sprite[nspritenum], &sprite[ospritenum], sizeof(spritetype));
|
||||||
vm.g_i = nspritenum;
|
vm.g_i = nspritenum;
|
||||||
vm.g_sp = &sprite[nspritenum];
|
vm.g_sp = (tspritetype *)&sprite[nspritenum];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Bmemcpy(&tsprite[spritesortcnt], &sprite[ospritenum], sizeof(spritetype));
|
Bmemcpy(&tsprite[spritesortcnt], &sprite[ospritenum], sizeof(spritetype));
|
||||||
tsprite[spritesortcnt].owner = ospritenum;
|
tsprite[spritesortcnt].owner = ospritenum;
|
||||||
/* FIXME
|
|
||||||
vm.g_i = -1;
|
vm.g_i = -1;
|
||||||
vm.g_sp = &tsprite[spritesortcnt];
|
vm.g_sp = &tsprite[spritesortcnt];
|
||||||
*/
|
|
||||||
spritesortcnt++;
|
spritesortcnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2815,7 +2813,7 @@ dodefault:
|
||||||
newcurspritei = Gv_GetVarX(*insptr++);
|
newcurspritei = Gv_GetVarX(*insptr++);
|
||||||
X_ERROR_INVALIDSPRI(newcurspritei);
|
X_ERROR_INVALIDSPRI(newcurspritei);
|
||||||
vm.g_i = newcurspritei;
|
vm.g_i = newcurspritei;
|
||||||
vm.g_sp = &sprite[vm.g_i];
|
vm.g_sp = (tspritetype *)&sprite[vm.g_i];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2824,36 +2822,42 @@ dodefault:
|
||||||
X_ERROR_INVALIDSP();
|
X_ERROR_INVALIDSP();
|
||||||
vm.g_sp->xrepeat = (uint8_t) Gv_GetVarX(*(insptr-2));
|
vm.g_sp->xrepeat = (uint8_t) Gv_GetVarX(*(insptr-2));
|
||||||
vm.g_sp->yrepeat = (uint8_t) Gv_GetVarX(*(insptr-1));
|
vm.g_sp->yrepeat = (uint8_t) Gv_GetVarX(*(insptr-1));
|
||||||
|
if (vm.g_i != -1) spritechanged[vm.g_i]++;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_CSTAT:
|
case CON_CSTAT:
|
||||||
insptr += 2;
|
insptr += 2;
|
||||||
X_ERROR_INVALIDSP();
|
X_ERROR_INVALIDSP();
|
||||||
vm.g_sp->cstat = (int16_t) *(insptr-1);
|
vm.g_sp->cstat = (int16_t) *(insptr-1);
|
||||||
|
if (vm.g_i != -1) spritechanged[vm.g_i]++;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_CSTATOR:
|
case CON_CSTATOR:
|
||||||
insptr += 2;
|
insptr += 2;
|
||||||
X_ERROR_INVALIDSP();
|
X_ERROR_INVALIDSP();
|
||||||
vm.g_sp->cstat |= (int16_t) Gv_GetVarX(*(insptr-1));
|
vm.g_sp->cstat |= (int16_t) Gv_GetVarX(*(insptr-1));
|
||||||
|
if (vm.g_i != -1) spritechanged[vm.g_i]++;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_CLIPDIST:
|
case CON_CLIPDIST:
|
||||||
insptr += 2;
|
insptr += 2;
|
||||||
X_ERROR_INVALIDSP();
|
X_ERROR_INVALIDSP();
|
||||||
vm.g_sp->clipdist = (uint8_t) Gv_GetVarX(*(insptr-1));
|
vm.g_sp->clipdist = (uint8_t) Gv_GetVarX(*(insptr-1));
|
||||||
|
if (vm.g_i != -1) spritechanged[vm.g_i]++;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_SPRITEPAL:
|
case CON_SPRITEPAL:
|
||||||
insptr += 2;
|
insptr += 2;
|
||||||
X_ERROR_INVALIDSP();
|
X_ERROR_INVALIDSP();
|
||||||
vm.g_sp->pal = Gv_GetVarX(*(insptr-1));
|
vm.g_sp->pal = Gv_GetVarX(*(insptr-1));
|
||||||
|
if (vm.g_i != -1) spritechanged[vm.g_i]++;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_CACTOR:
|
case CON_CACTOR:
|
||||||
insptr += 2;
|
insptr += 2;
|
||||||
X_ERROR_INVALIDSP();
|
X_ERROR_INVALIDSP();
|
||||||
vm.g_sp->picnum = Gv_GetVarX(*(insptr-1));
|
vm.g_sp->picnum = Gv_GetVarX(*(insptr-1));
|
||||||
|
if (vm.g_i != -1) spritechanged[vm.g_i]++;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_SPGETLOTAG:
|
case CON_SPGETLOTAG:
|
||||||
|
|
Loading…
Reference in a new issue