mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-22 11:22:18 -04:00
Import EE mouse fix, EE screen centering code, and EE player corpse deferred removal savegame bug fix.
This commit is contained in:
parent
5d5f2a10f2
commit
8df96343bb
@ -55,6 +55,8 @@ int main(int argc, char **argv)
|
||||
|
||||
// SoM: From CHOCODOOM Thank you fraggle!!
|
||||
#ifdef _WIN32
|
||||
putenv("SDL_VIDEO_WINDOW_POS=center") ;
|
||||
putenv("SDL_VIDEO_CENTERED=1") ;
|
||||
|
||||
// Allow -gdi as a shortcut for using the windib driver.
|
||||
|
||||
|
@ -356,8 +356,8 @@ void I_GetEvent()
|
||||
continue;
|
||||
|
||||
// SoM 1-20-04 Ok, use xrel/yrel for mouse movement because most people like it the most.
|
||||
mouseevent.data3 = -event.motion.yrel;
|
||||
mouseevent.data2 = event.motion.xrel;
|
||||
mouseevent.data3 -= event.motion.yrel;
|
||||
mouseevent.data2 += event.motion.xrel;
|
||||
sendmouseevent = 1;
|
||||
break;
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
@ -426,8 +426,8 @@ void I_GetEvent()
|
||||
D_PostEvent(&mouseevent);
|
||||
}
|
||||
|
||||
if(paused && !window_focused)
|
||||
I_WaitVBL(1);
|
||||
if(paused || !window_focused)
|
||||
SDL_Delay(1);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -336,16 +336,25 @@ void P_ArchiveThinkers (void)
|
||||
|
||||
// killough 9/14/98: save soundtargets
|
||||
{
|
||||
int i;
|
||||
CheckSaveGame(numsectors * sizeof(mobj_t *)); // killough 9/14/98
|
||||
for (i = 0; i < numsectors; i++)
|
||||
{
|
||||
mobj_t *target = sectors[i].soundtarget;
|
||||
if (target)
|
||||
target = (mobj_t *) target->thinker.prev;
|
||||
memcpy(save_p, &target, sizeof target);
|
||||
save_p += sizeof target;
|
||||
}
|
||||
int i;
|
||||
CheckSaveGame(numsectors * sizeof(mobj_t *)); // killough 9/14/98
|
||||
for (i = 0; i < numsectors; i++)
|
||||
{
|
||||
mobj_t *target = sectors[i].soundtarget;
|
||||
if (target)
|
||||
{
|
||||
// haleyjd 03/23/09: Imported from Eternity:
|
||||
// haleyjd 11/03/06: We must check for P_MobjThinker here as well,
|
||||
// or player corpses waiting for deferred removal will be saved as
|
||||
// raw pointer values instead of twizzled numbers, causing a crash
|
||||
// on savegame load!
|
||||
target = target->thinker.function == P_MobjThinker ?
|
||||
(mobj_t *)target->thinker.prev : NULL;
|
||||
|
||||
}
|
||||
memcpy(save_p, &target, sizeof target);
|
||||
save_p += sizeof target;
|
||||
}
|
||||
}
|
||||
|
||||
// killough 2/14/98: restore prev pointers
|
||||
@ -382,6 +391,7 @@ void P_UnArchiveThinkers (void)
|
||||
thinker_t *th;
|
||||
mobj_t **mobj_p; // killough 2/14/98: Translation table
|
||||
size_t size; // killough 2/14/98: size of or index into table
|
||||
size_t idx; // haleyjd 11/03/06: separate index var
|
||||
|
||||
// killough 3/26/98: Load boss brain state
|
||||
memcpy(&brain, save_p, sizeof brain);
|
||||
@ -417,12 +427,13 @@ void P_UnArchiveThinkers (void)
|
||||
}
|
||||
|
||||
// read in saved thinkers
|
||||
for (size = 1; *save_p++ == tc_mobj; size++) // killough 2/14/98
|
||||
// haleyjd 11/03/06: use idx to save "size" for rangechecking
|
||||
for (idx = 1; *save_p++ == tc_mobj; idx++) // killough 2/14/98
|
||||
{
|
||||
mobj_t *mobj = Z_Malloc(sizeof(mobj_t), PU_LEVEL, NULL);
|
||||
|
||||
// killough 2/14/98 -- insert pointers to thinkers into table, in order:
|
||||
mobj_p[size] = mobj;
|
||||
mobj_p[idx] = mobj;
|
||||
|
||||
PADSAVEP();
|
||||
memcpy (mobj, save_p, sizeof(mobj_t));
|
||||
@ -473,12 +484,17 @@ void P_UnArchiveThinkers (void)
|
||||
{ // killough 9/14/98: restore soundtargets
|
||||
int i;
|
||||
for (i = 0; i < numsectors; i++)
|
||||
{
|
||||
mobj_t *target;
|
||||
memcpy(&target, save_p, sizeof target);
|
||||
save_p += sizeof target;
|
||||
P_SetNewTarget(§ors[i].soundtarget, mobj_p[(size_t) target]);
|
||||
}
|
||||
{
|
||||
mobj_t *target;
|
||||
memcpy(&target, save_p, sizeof target);
|
||||
save_p += sizeof target;
|
||||
|
||||
// haleyjd 11/03/06: rangecheck for security
|
||||
if((size_t)target < size)
|
||||
P_SetNewTarget(§ors[i].soundtarget, mobj_p[(size_t) target]);
|
||||
else
|
||||
sectors[i].soundtarget = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
free(mobj_p); // free translation table
|
||||
|
Loading…
x
Reference in New Issue
Block a user