mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-29 15:22:08 +00:00
Merge branch 'master' of https://github.com/rheit/zdoom
This commit is contained in:
commit
f4f489b33d
21 changed files with 325 additions and 201 deletions
|
@ -167,6 +167,11 @@ else()
|
||||||
set( ALL_C_FLAGS "" )
|
set( ALL_C_FLAGS "" )
|
||||||
set( REL_C_FLAGS "" )
|
set( REL_C_FLAGS "" )
|
||||||
set( DEB_C_FLAGS "" )
|
set( DEB_C_FLAGS "" )
|
||||||
|
|
||||||
|
# If we're compiling with a custom GCC on the Mac (which we know since g++-4.2 doesn't support C++11) statically link libgcc.
|
||||||
|
if( APPLE AND "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" )
|
||||||
|
set( ALL_C_FLAGS "-static-libgcc" )
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${REL_LINKER_FLAGS}" )
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${REL_LINKER_FLAGS}" )
|
||||||
|
@ -193,7 +198,7 @@ option(FORCE_INTERNAL_GME "Use internal gme" ON)
|
||||||
# Fast math flags, required by some subprojects
|
# Fast math flags, required by some subprojects
|
||||||
set( ZD_FASTMATH_FLAG "" )
|
set( ZD_FASTMATH_FLAG "" )
|
||||||
if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE )
|
if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE )
|
||||||
set( ZD_FASTMATH_FLAG "-ffast-math" )
|
set( ZD_FASTMATH_FLAG "-ffast-math -ffp-contract=fast" )
|
||||||
elseif( MSVC )
|
elseif( MSVC )
|
||||||
set( ZD_FASTMATH_FLAG "/fp:fast" )
|
set( ZD_FASTMATH_FLAG "/fp:fast" )
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -494,28 +494,28 @@ if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE )
|
||||||
set( CMAKE_C_FLAGS "-Wno-unused-result ${CMAKE_C_FLAGS}" )
|
set( CMAKE_C_FLAGS "-Wno-unused-result ${CMAKE_C_FLAGS}" )
|
||||||
set( CMAKE_CXX_FLAGS "-Wno-unused-result ${CMAKE_CXX_FLAGS}" )
|
set( CMAKE_CXX_FLAGS "-Wno-unused-result ${CMAKE_CXX_FLAGS}" )
|
||||||
endif()
|
endif()
|
||||||
set( CMAKE_C_FLAGS "-Wall -Wextra -Wno-unused -Wno-unused-parameter -Wno-missing-field-initializers ${CMAKE_C_FLAGS}" )
|
set( CMAKE_C_FLAGS "-Wall -Wextra -Wno-unused -Wno-unused-parameter -Wno-missing-field-initializers -ffp-contract=off ${CMAKE_C_FLAGS}" )
|
||||||
set( CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-unused -Wno-unused-parameter -Wno-missing-field-initializers ${CMAKE_CXX_FLAGS}" )
|
set( CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-unused -Wno-unused-parameter -Wno-missing-field-initializers -ffp-contract=off ${CMAKE_CXX_FLAGS}" )
|
||||||
|
|
||||||
# Use the highest C++ standard available since VS2015 compiles with C++14
|
# Use the highest C++ standard available since VS2015 compiles with C++14
|
||||||
# but we only require C++11. The recommended way to do this in CMake is to
|
# but we only require C++11. The recommended way to do this in CMake is to
|
||||||
# probably to use target_compile_features, but I don't feel like maintaining
|
# probably to use target_compile_features, but I don't feel like maintaining
|
||||||
# a list of features we use.
|
# a list of features we use.
|
||||||
CHECK_CXX_COMPILER_FLAG( "-std=c++14" CAN_DO_CPP14 )
|
CHECK_CXX_COMPILER_FLAG( "-std=gnu++14" CAN_DO_CPP14 )
|
||||||
if ( CAN_DO_CPP14 )
|
if ( CAN_DO_CPP14 )
|
||||||
set ( CMAKE_CXX_FLAGS "-std=c++14 ${CMAKE_CXX_FLAGS}" )
|
set ( CMAKE_CXX_FLAGS "-std=gnu++14 ${CMAKE_CXX_FLAGS}" )
|
||||||
else ()
|
else ()
|
||||||
CHECK_CXX_COMPILER_FLAG( "-std=c++1y" CAN_DO_CPP1Y )
|
CHECK_CXX_COMPILER_FLAG( "-std=gnu++1y" CAN_DO_CPP1Y )
|
||||||
if ( CAN_DO_CPP1Y )
|
if ( CAN_DO_CPP1Y )
|
||||||
set ( CMAKE_CXX_FLAGS "-std=c++1y ${CMAKE_CXX_FLAGS}" )
|
set ( CMAKE_CXX_FLAGS "-std=gnu++1y ${CMAKE_CXX_FLAGS}" )
|
||||||
else ()
|
else ()
|
||||||
CHECK_CXX_COMPILER_FLAG( "-std=c++11" CAN_DO_CPP11 )
|
CHECK_CXX_COMPILER_FLAG( "-std=gnu++11" CAN_DO_CPP11 )
|
||||||
if ( CAN_DO_CPP11 )
|
if ( CAN_DO_CPP11 )
|
||||||
set ( CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}" )
|
set ( CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}" )
|
||||||
else ()
|
else ()
|
||||||
CHECK_CXX_COMPILER_FLAG( "-std=c++0x" CAN_DO_CPP0X )
|
CHECK_CXX_COMPILER_FLAG( "-std=gnu++0x" CAN_DO_CPP0X )
|
||||||
if ( CAN_DO_CPP0X )
|
if ( CAN_DO_CPP0X )
|
||||||
set ( CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}" )
|
set ( CMAKE_CXX_FLAGS "-std=gnu++0x ${CMAKE_CXX_FLAGS}" )
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -676,6 +676,7 @@ set( PLAT_COCOA_SOURCES
|
||||||
posix/cocoa/i_input.mm
|
posix/cocoa/i_input.mm
|
||||||
posix/cocoa/i_joystick.cpp
|
posix/cocoa/i_joystick.cpp
|
||||||
posix/cocoa/i_main.mm
|
posix/cocoa/i_main.mm
|
||||||
|
posix/cocoa/i_main_except.cpp
|
||||||
posix/cocoa/i_system.mm
|
posix/cocoa/i_system.mm
|
||||||
posix/cocoa/i_timer.cpp
|
posix/cocoa/i_timer.cpp
|
||||||
posix/cocoa/i_video.mm
|
posix/cocoa/i_video.mm
|
||||||
|
@ -712,6 +713,7 @@ elseif( APPLE )
|
||||||
|
|
||||||
set_source_files_properties( posix/osx/zdoom.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources )
|
set_source_files_properties( posix/osx/zdoom.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources )
|
||||||
set_source_files_properties( "${FMOD_LIBRARY}" PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks )
|
set_source_files_properties( "${FMOD_LIBRARY}" PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks )
|
||||||
|
set_source_files_properties( posix/osx/iwadpicker_cocoa.mm PROPERTIES COMPILE_FLAGS -fobjc-exceptions )
|
||||||
else()
|
else()
|
||||||
set( SYSTEM_SOURCES_DIR posix posix/sdl )
|
set( SYSTEM_SOURCES_DIR posix posix/sdl )
|
||||||
set( SYSTEM_SOURCES ${PLAT_POSIX_SOURCES} ${PLAT_SDL_SOURCES} )
|
set( SYSTEM_SOURCES ${PLAT_POSIX_SOURCES} ${PLAT_SDL_SOURCES} )
|
||||||
|
|
265
src/am_map.cpp
265
src/am_map.cpp
|
@ -121,6 +121,7 @@ CVAR (Color, am_thingcolor_monster, 0xfcfcfc, CVAR_ARCHIVE);
|
||||||
CVAR (Color, am_thingcolor_ncmonster, 0xfcfcfc, CVAR_ARCHIVE);
|
CVAR (Color, am_thingcolor_ncmonster, 0xfcfcfc, CVAR_ARCHIVE);
|
||||||
CVAR (Color, am_thingcolor_item, 0xfcfcfc, CVAR_ARCHIVE);
|
CVAR (Color, am_thingcolor_item, 0xfcfcfc, CVAR_ARCHIVE);
|
||||||
CVAR (Color, am_thingcolor_citem, 0xfcfcfc, CVAR_ARCHIVE);
|
CVAR (Color, am_thingcolor_citem, 0xfcfcfc, CVAR_ARCHIVE);
|
||||||
|
CVAR (Color, am_portalcolor, 0x404040, CVAR_ARCHIVE);
|
||||||
|
|
||||||
CVAR (Color, am_ovyourcolor, 0xfce8d8, CVAR_ARCHIVE);
|
CVAR (Color, am_ovyourcolor, 0xfce8d8, CVAR_ARCHIVE);
|
||||||
CVAR (Color, am_ovwallcolor, 0x00ff00, CVAR_ARCHIVE);
|
CVAR (Color, am_ovwallcolor, 0x00ff00, CVAR_ARCHIVE);
|
||||||
|
@ -141,6 +142,7 @@ CVAR (Color, am_ovthingcolor_monster, 0xe88800, CVAR_ARCHIVE);
|
||||||
CVAR (Color, am_ovthingcolor_ncmonster, 0xe88800, CVAR_ARCHIVE);
|
CVAR (Color, am_ovthingcolor_ncmonster, 0xe88800, CVAR_ARCHIVE);
|
||||||
CVAR (Color, am_ovthingcolor_item, 0xe88800, CVAR_ARCHIVE);
|
CVAR (Color, am_ovthingcolor_item, 0xe88800, CVAR_ARCHIVE);
|
||||||
CVAR (Color, am_ovthingcolor_citem, 0xe88800, CVAR_ARCHIVE);
|
CVAR (Color, am_ovthingcolor_citem, 0xe88800, CVAR_ARCHIVE);
|
||||||
|
CVAR (Color, am_ovportalcolor, 0x004022, CVAR_ARCHIVE);
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
|
@ -206,6 +208,7 @@ static const char *ColorNames[] = {
|
||||||
"IntraTeleportColor",
|
"IntraTeleportColor",
|
||||||
"InterTeleportColor",
|
"InterTeleportColor",
|
||||||
"SecretSectorColor",
|
"SecretSectorColor",
|
||||||
|
"PortalColor",
|
||||||
"AlmostBackgroundColor",
|
"AlmostBackgroundColor",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -236,6 +239,7 @@ struct AMColorset
|
||||||
IntraTeleportColor,
|
IntraTeleportColor,
|
||||||
InterTeleportColor,
|
InterTeleportColor,
|
||||||
SecretSectorColor,
|
SecretSectorColor,
|
||||||
|
PortalColor,
|
||||||
AlmostBackgroundColor,
|
AlmostBackgroundColor,
|
||||||
AM_NUM_COLORS
|
AM_NUM_COLORS
|
||||||
};
|
};
|
||||||
|
@ -335,7 +339,8 @@ static FColorCVar *cv_standard[] = {
|
||||||
&am_lockedcolor,
|
&am_lockedcolor,
|
||||||
&am_intralevelcolor,
|
&am_intralevelcolor,
|
||||||
&am_interlevelcolor,
|
&am_interlevelcolor,
|
||||||
&am_secretsectorcolor
|
&am_secretsectorcolor,
|
||||||
|
&am_portalcolor
|
||||||
};
|
};
|
||||||
|
|
||||||
static FColorCVar *cv_overlay[] = {
|
static FColorCVar *cv_overlay[] = {
|
||||||
|
@ -360,7 +365,8 @@ static FColorCVar *cv_overlay[] = {
|
||||||
&am_ovlockedcolor,
|
&am_ovlockedcolor,
|
||||||
&am_ovtelecolor,
|
&am_ovtelecolor,
|
||||||
&am_ovinterlevelcolor,
|
&am_ovinterlevelcolor,
|
||||||
&am_ovsecretsectorcolor
|
&am_ovsecretsectorcolor,
|
||||||
|
&am_ovportalcolor
|
||||||
};
|
};
|
||||||
|
|
||||||
CCMD(am_restorecolors)
|
CCMD(am_restorecolors)
|
||||||
|
@ -403,6 +409,7 @@ static unsigned char DoomColors[]= {
|
||||||
NOT_USED, // interteleport
|
NOT_USED, // interteleport
|
||||||
NOT_USED, // secretsector
|
NOT_USED, // secretsector
|
||||||
0x10,0x10,0x10, // almostbackground
|
0x10,0x10,0x10, // almostbackground
|
||||||
|
0x40,0x40,0x40 // portal
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned char StrifeColors[]= {
|
static unsigned char StrifeColors[]= {
|
||||||
|
@ -429,6 +436,7 @@ static unsigned char StrifeColors[]= {
|
||||||
NOT_USED, // interteleport
|
NOT_USED, // interteleport
|
||||||
NOT_USED, // secretsector
|
NOT_USED, // secretsector
|
||||||
0x10,0x10,0x10, // almostbackground
|
0x10,0x10,0x10, // almostbackground
|
||||||
|
0x40,0x40,0x40 // portal
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned char RavenColors[]= {
|
static unsigned char RavenColors[]= {
|
||||||
|
@ -455,6 +463,7 @@ static unsigned char RavenColors[]= {
|
||||||
NOT_USED, // interteleport
|
NOT_USED, // interteleport
|
||||||
NOT_USED, // secretsector
|
NOT_USED, // secretsector
|
||||||
0x10,0x10,0x10, // almostbackground
|
0x10,0x10,0x10, // almostbackground
|
||||||
|
0x50,0x50,0x50 // portal
|
||||||
};
|
};
|
||||||
|
|
||||||
#undef NOT_USED
|
#undef NOT_USED
|
||||||
|
@ -577,6 +586,7 @@ inline fixed_t MTOF(fixed_t x)
|
||||||
|
|
||||||
static int bigstate = 0;
|
static int bigstate = 0;
|
||||||
static bool textured = 1; // internal toggle for texture mode
|
static bool textured = 1; // internal toggle for texture mode
|
||||||
|
static int MapPortalGroup;
|
||||||
|
|
||||||
CUSTOM_CVAR(Bool, am_textured, false, CVAR_ARCHIVE)
|
CUSTOM_CVAR(Bool, am_textured, false, CVAR_ARCHIVE)
|
||||||
{
|
{
|
||||||
|
@ -812,6 +822,7 @@ void AM_minOutWindowScale ();
|
||||||
|
|
||||||
|
|
||||||
CVAR(Bool, am_followplayer, true, CVAR_ARCHIVE)
|
CVAR(Bool, am_followplayer, true, CVAR_ARCHIVE)
|
||||||
|
CVAR(Bool, am_portaloverlay, true, CVAR_ARCHIVE)
|
||||||
|
|
||||||
|
|
||||||
CCMD(am_togglefollow)
|
CCMD(am_togglefollow)
|
||||||
|
@ -1925,6 +1936,12 @@ void AM_drawSubsectors()
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (am_portaloverlay && subsectors[i].render_sector->PortalGroup != MapPortalGroup && subsectors[i].render_sector->PortalGroup != 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Fill the points array from the subsector.
|
// Fill the points array from the subsector.
|
||||||
points.Resize(subsectors[i].numlines);
|
points.Resize(subsectors[i].numlines);
|
||||||
for (DWORD j = 0; j < subsectors[i].numlines; ++j)
|
for (DWORD j = 0; j < subsectors[i].numlines; ++j)
|
||||||
|
@ -2389,108 +2406,143 @@ void AM_drawWalls (bool allmap)
|
||||||
static mline_t l;
|
static mline_t l;
|
||||||
int lock, color;
|
int lock, color;
|
||||||
|
|
||||||
for (i = 0; i < numlines; i++)
|
int numportalgroups = am_portaloverlay ? Displacements.size : 0;
|
||||||
|
|
||||||
|
for (int p = numportalgroups - 1; p >= -1; p--)
|
||||||
{
|
{
|
||||||
l.a.x = lines[i].v1->x >> FRACTOMAPBITS;
|
if (p == MapPortalGroup) continue;
|
||||||
l.a.y = lines[i].v1->y >> FRACTOMAPBITS;
|
|
||||||
l.b.x = lines[i].v2->x >> FRACTOMAPBITS;
|
|
||||||
l.b.y = lines[i].v2->y >> FRACTOMAPBITS;
|
|
||||||
|
|
||||||
if (am_rotate == 1 || (am_rotate == 2 && viewactive))
|
|
||||||
|
for (i = 0; i < numlines; i++)
|
||||||
{
|
{
|
||||||
AM_rotatePoint (&l.a.x, &l.a.y);
|
int pg;
|
||||||
AM_rotatePoint (&l.b.x, &l.b.y);
|
|
||||||
}
|
if (lines[i].sidedef[0]->Flags & WALLF_POLYOBJ)
|
||||||
|
|
||||||
if (am_cheat != 0 || (lines[i].flags & ML_MAPPED))
|
|
||||||
{
|
|
||||||
if ((lines[i].flags & ML_DONTDRAW) && (am_cheat == 0 || am_cheat >= 4))
|
|
||||||
{
|
{
|
||||||
if (!am_showallenabled || CheckCheatmode(false))
|
// For polyobjects we must test the surrounding sector to get the proper group.
|
||||||
|
pg = P_PointInSector(lines[i].v1->x + lines[i].dx / 2, lines[i].v1->y + lines[i].dy / 2)->PortalGroup;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pg = lines[i].frontsector->PortalGroup;
|
||||||
|
}
|
||||||
|
fixedvec2 offset;
|
||||||
|
bool portalmode = numportalgroups > 0 && pg != MapPortalGroup;
|
||||||
|
if (pg == p)
|
||||||
|
{
|
||||||
|
offset = Displacements.getOffset(pg, MapPortalGroup);
|
||||||
|
}
|
||||||
|
else if (p == -1 && (pg == MapPortalGroup || !am_portaloverlay))
|
||||||
|
{
|
||||||
|
offset = { 0, 0 };
|
||||||
|
}
|
||||||
|
else continue;
|
||||||
|
|
||||||
|
l.a.x = (lines[i].v1->x + offset.x) >> FRACTOMAPBITS;
|
||||||
|
l.a.y = (lines[i].v1->y + offset.y) >> FRACTOMAPBITS;
|
||||||
|
l.b.x = (lines[i].v2->x + offset.x) >> FRACTOMAPBITS;
|
||||||
|
l.b.y = (lines[i].v2->y + offset.y) >> FRACTOMAPBITS;
|
||||||
|
|
||||||
|
if (am_rotate == 1 || (am_rotate == 2 && viewactive))
|
||||||
|
{
|
||||||
|
AM_rotatePoint(&l.a.x, &l.a.y);
|
||||||
|
AM_rotatePoint(&l.b.x, &l.b.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (am_cheat != 0 || (lines[i].flags & ML_MAPPED))
|
||||||
|
{
|
||||||
|
if ((lines[i].flags & ML_DONTDRAW) && (am_cheat == 0 || am_cheat >= 4))
|
||||||
{
|
{
|
||||||
continue;
|
if (!am_showallenabled || CheckCheatmode(false))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (portalmode)
|
||||||
|
{
|
||||||
|
AM_drawMline(&l, AMColors.PortalColor);
|
||||||
|
}
|
||||||
|
else if (AM_CheckSecret(&lines[i]))
|
||||||
|
{
|
||||||
|
// map secret sectors like Boom
|
||||||
|
AM_drawMline(&l, AMColors.SecretSectorColor);
|
||||||
|
}
|
||||||
|
else if (lines[i].flags & ML_SECRET)
|
||||||
|
{ // secret door
|
||||||
|
if (am_cheat != 0 && lines[i].backsector != NULL)
|
||||||
|
AM_drawMline(&l, AMColors.SecretWallColor);
|
||||||
|
else
|
||||||
|
AM_drawMline(&l, AMColors.WallColor);
|
||||||
|
}
|
||||||
|
else if (AM_isTeleportBoundary(lines[i]) && AMColors.isValid(AMColors.IntraTeleportColor))
|
||||||
|
{ // intra-level teleporters
|
||||||
|
AM_drawMline(&l, AMColors.IntraTeleportColor);
|
||||||
|
}
|
||||||
|
else if (AM_isExitBoundary(lines[i]) && AMColors.isValid(AMColors.InterTeleportColor))
|
||||||
|
{ // inter-level/game-ending teleporters
|
||||||
|
AM_drawMline(&l, AMColors.InterTeleportColor);
|
||||||
|
}
|
||||||
|
else if (AM_isLockBoundary(lines[i], &lock))
|
||||||
|
{
|
||||||
|
if (AMColors.displayLocks)
|
||||||
|
{
|
||||||
|
color = P_GetMapColorForLock(lock);
|
||||||
|
|
||||||
|
AMColor c;
|
||||||
|
|
||||||
|
if (color >= 0) c.FromRGB(RPART(color), GPART(color), BPART(color));
|
||||||
|
else c = AMColors[AMColors.LockedColor];
|
||||||
|
|
||||||
|
AM_drawMline(&l, c);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AM_drawMline(&l, AMColors.LockedColor); // locked special
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (am_showtriggerlines
|
||||||
|
&& AMColors.isValid(AMColors.SpecialWallColor)
|
||||||
|
&& AM_isTriggerBoundary(lines[i]))
|
||||||
|
{
|
||||||
|
AM_drawMline(&l, AMColors.SpecialWallColor); // wall with special non-door action the player can do
|
||||||
|
}
|
||||||
|
else if (lines[i].backsector == NULL)
|
||||||
|
{
|
||||||
|
AM_drawMline(&l, AMColors.WallColor); // one-sided wall
|
||||||
|
}
|
||||||
|
else if (lines[i].backsector->floorplane
|
||||||
|
!= lines[i].frontsector->floorplane)
|
||||||
|
{
|
||||||
|
AM_drawMline(&l, AMColors.FDWallColor); // floor level change
|
||||||
|
}
|
||||||
|
else if (lines[i].backsector->ceilingplane
|
||||||
|
!= lines[i].frontsector->ceilingplane)
|
||||||
|
{
|
||||||
|
AM_drawMline(&l, AMColors.CDWallColor); // ceiling level change
|
||||||
|
}
|
||||||
|
else if (AM_Check3DFloors(&lines[i]))
|
||||||
|
{
|
||||||
|
AM_drawMline(&l, AMColors.EFWallColor); // Extra floor border
|
||||||
|
}
|
||||||
|
else if (am_cheat > 0 && am_cheat < 4)
|
||||||
|
{
|
||||||
|
AM_drawMline(&l, AMColors.TSWallColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (allmap)
|
||||||
if (AM_CheckSecret(&lines[i]))
|
|
||||||
{
|
{
|
||||||
// map secret sectors like Boom
|
if ((lines[i].flags & ML_DONTDRAW) && (am_cheat == 0 || am_cheat >= 4))
|
||||||
AM_drawMline(&l, AMColors.SecretSectorColor);
|
|
||||||
}
|
|
||||||
else if (lines[i].flags & ML_SECRET)
|
|
||||||
{ // secret door
|
|
||||||
if (am_cheat != 0 && lines[i].backsector != NULL)
|
|
||||||
AM_drawMline(&l, AMColors.SecretWallColor);
|
|
||||||
else
|
|
||||||
AM_drawMline(&l, AMColors.WallColor);
|
|
||||||
}
|
|
||||||
else if (AM_isTeleportBoundary(lines[i]) && AMColors.isValid(AMColors.IntraTeleportColor))
|
|
||||||
{ // intra-level teleporters
|
|
||||||
AM_drawMline(&l, AMColors.IntraTeleportColor);
|
|
||||||
}
|
|
||||||
else if (AM_isExitBoundary(lines[i]) && AMColors.isValid(AMColors.InterTeleportColor))
|
|
||||||
{ // inter-level/game-ending teleporters
|
|
||||||
AM_drawMline(&l, AMColors.InterTeleportColor);
|
|
||||||
}
|
|
||||||
else if (AM_isLockBoundary(lines[i], &lock))
|
|
||||||
{
|
|
||||||
if (AMColors.displayLocks)
|
|
||||||
{
|
{
|
||||||
color = P_GetMapColorForLock(lock);
|
if (!am_showallenabled || CheckCheatmode(false))
|
||||||
|
{
|
||||||
AMColor c;
|
continue;
|
||||||
|
}
|
||||||
if (color >= 0) c.FromRGB(RPART(color), GPART(color), BPART(color));
|
|
||||||
else c = AMColors[AMColors.LockedColor];
|
|
||||||
|
|
||||||
AM_drawMline (&l, c);
|
|
||||||
}
|
}
|
||||||
else
|
AM_drawMline(&l, AMColors.NotSeenColor);
|
||||||
{
|
|
||||||
AM_drawMline (&l, AMColors.LockedColor); // locked special
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (am_showtriggerlines
|
|
||||||
&& AMColors.isValid(AMColors.SpecialWallColor)
|
|
||||||
&& AM_isTriggerBoundary(lines[i]))
|
|
||||||
{
|
|
||||||
AM_drawMline(&l, AMColors.SpecialWallColor); // wall with special non-door action the player can do
|
|
||||||
}
|
|
||||||
else if (lines[i].backsector == NULL)
|
|
||||||
{
|
|
||||||
AM_drawMline(&l, AMColors.WallColor); // one-sided wall
|
|
||||||
}
|
|
||||||
else if (lines[i].backsector->floorplane
|
|
||||||
!= lines[i].frontsector->floorplane)
|
|
||||||
{
|
|
||||||
AM_drawMline(&l, AMColors.FDWallColor); // floor level change
|
|
||||||
}
|
|
||||||
else if (lines[i].backsector->ceilingplane
|
|
||||||
!= lines[i].frontsector->ceilingplane)
|
|
||||||
{
|
|
||||||
AM_drawMline(&l, AMColors.CDWallColor); // ceiling level change
|
|
||||||
}
|
|
||||||
else if (AM_Check3DFloors(&lines[i]))
|
|
||||||
{
|
|
||||||
AM_drawMline(&l, AMColors.EFWallColor); // Extra floor border
|
|
||||||
}
|
|
||||||
else if (am_cheat > 0 && am_cheat < 4)
|
|
||||||
{
|
|
||||||
AM_drawMline(&l, AMColors.TSWallColor);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (allmap)
|
}
|
||||||
{
|
|
||||||
if ((lines[i].flags & ML_DONTDRAW) && (am_cheat == 0 || am_cheat >= 4))
|
|
||||||
{
|
|
||||||
if (!am_showallenabled || CheckCheatmode(false))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
AM_drawMline(&l, AMColors.NotSeenColor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2616,8 +2668,9 @@ void AM_drawPlayers ()
|
||||||
mline_t *arrow;
|
mline_t *arrow;
|
||||||
int numarrowlines;
|
int numarrowlines;
|
||||||
|
|
||||||
pt.x = players[consoleplayer].camera->X() >> FRACTOMAPBITS;
|
fixedvec2 pos = am_portaloverlay? players[consoleplayer].camera->GetPortalTransition(players[consoleplayer].viewheight) : (fixedvec2)players[consoleplayer].camera->Pos();
|
||||||
pt.y = players[consoleplayer].camera->Y() >> FRACTOMAPBITS;
|
pt.x = pos.x >> FRACTOMAPBITS;
|
||||||
|
pt.y = pos.y >> FRACTOMAPBITS;
|
||||||
if (am_rotate == 1 || (am_rotate == 2 && viewactive))
|
if (am_rotate == 1 || (am_rotate == 2 && viewactive))
|
||||||
{
|
{
|
||||||
angle = ANG90;
|
angle = ANG90;
|
||||||
|
@ -2679,8 +2732,10 @@ void AM_drawPlayers ()
|
||||||
|
|
||||||
if (p->mo != NULL)
|
if (p->mo != NULL)
|
||||||
{
|
{
|
||||||
pt.x = p->mo->X() >> FRACTOMAPBITS;
|
fixedvec3 pos = p->mo->PosRelative(MapPortalGroup);
|
||||||
pt.y = p->mo->Y() >> FRACTOMAPBITS;
|
pt.x = pos.x >> FRACTOMAPBITS;
|
||||||
|
pt.y = pos.y >> FRACTOMAPBITS;
|
||||||
|
|
||||||
angle = p->mo->angle;
|
angle = p->mo->angle;
|
||||||
|
|
||||||
if (am_rotate == 1 || (am_rotate == 2 && viewactive))
|
if (am_rotate == 1 || (am_rotate == 2 && viewactive))
|
||||||
|
@ -2711,8 +2766,10 @@ void AM_drawKeys ()
|
||||||
|
|
||||||
while ((key = it.Next()) != NULL)
|
while ((key = it.Next()) != NULL)
|
||||||
{
|
{
|
||||||
p.x = key->X() >> FRACTOMAPBITS;
|
fixedvec3 pos = key->PosRelative(MapPortalGroup);
|
||||||
p.y = key->Y() >> FRACTOMAPBITS;
|
p.x = pos.x >> FRACTOMAPBITS;
|
||||||
|
p.y = pos.y >> FRACTOMAPBITS;
|
||||||
|
|
||||||
angle = key->angle;
|
angle = key->angle;
|
||||||
|
|
||||||
if (am_rotate == 1 || (am_rotate == 2 && viewactive))
|
if (am_rotate == 1 || (am_rotate == 2 && viewactive))
|
||||||
|
@ -2756,8 +2813,9 @@ void AM_drawThings ()
|
||||||
{
|
{
|
||||||
if (am_cheat > 0 || !(t->flags6 & MF6_NOTONAUTOMAP))
|
if (am_cheat > 0 || !(t->flags6 & MF6_NOTONAUTOMAP))
|
||||||
{
|
{
|
||||||
p.x = t->X() >> FRACTOMAPBITS;
|
fixedvec3 pos = t->PosRelative(MapPortalGroup);
|
||||||
p.y = t->Y() >> FRACTOMAPBITS;
|
p.x = pos.x >> FRACTOMAPBITS;
|
||||||
|
p.y = pos.y >> FRACTOMAPBITS;
|
||||||
|
|
||||||
if (am_showthingsprites > 0 && t->sprite > 0)
|
if (am_showthingsprites > 0 && t->sprite > 0)
|
||||||
{
|
{
|
||||||
|
@ -3017,6 +3075,13 @@ void AM_Drawer ()
|
||||||
bool allmap = (level.flags2 & LEVEL2_ALLMAP) != 0;
|
bool allmap = (level.flags2 & LEVEL2_ALLMAP) != 0;
|
||||||
bool allthings = allmap && players[consoleplayer].mo->FindInventory(RUNTIME_CLASS(APowerScanner), true) != NULL;
|
bool allthings = allmap && players[consoleplayer].mo->FindInventory(RUNTIME_CLASS(APowerScanner), true) != NULL;
|
||||||
|
|
||||||
|
if (am_portaloverlay)
|
||||||
|
{
|
||||||
|
sector_t *sec;
|
||||||
|
players[consoleplayer].camera->GetPortalTransition(players[consoleplayer].viewheight, &sec);
|
||||||
|
MapPortalGroup = sec->PortalGroup;
|
||||||
|
}
|
||||||
|
else MapPortalGroup = 0;
|
||||||
AM_initColors (viewactive);
|
AM_initColors (viewactive);
|
||||||
|
|
||||||
if (!viewactive)
|
if (!viewactive)
|
||||||
|
|
|
@ -123,6 +123,18 @@ typedef TMap<int, PClassActor *> FClassMap;
|
||||||
#define NO_SANITIZE
|
#define NO_SANITIZE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
// With versions of GCC newer than 4.2, it appears it was determined that the
|
||||||
|
// cost of an unaligned pointer on PPC was high enough to add padding to the
|
||||||
|
// end of packed structs. For whatever reason __packed__ and pragma pack are
|
||||||
|
// handled differently in this regard. Note that this only needs to be applied
|
||||||
|
// to types which are used in arrays or sizeof is needed. This also prevents
|
||||||
|
// code from taking references to the struct members.
|
||||||
|
#define FORCE_PACKED __attribute__((__packed__))
|
||||||
|
#else
|
||||||
|
#define FORCE_PACKED
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "basictypes.h"
|
#include "basictypes.h"
|
||||||
|
|
||||||
extern bool batchrun;
|
extern bool batchrun;
|
||||||
|
|
|
@ -4184,12 +4184,12 @@ bool DLevelScript::DoCheckActorTexture(int tid, AActor *activator, int string, b
|
||||||
|
|
||||||
if (floor)
|
if (floor)
|
||||||
{
|
{
|
||||||
actor->Sector->NextLowestFloorAt(actor, actor->Z(), 0, &resultsec, &resffloor);
|
actor->Sector->NextLowestFloorAt(actor->X(), actor->Y(), actor->Z(), 0, actor->MaxStepHeight, &resultsec, &resffloor);
|
||||||
secpic = resffloor ? *resffloor->top.texture : resultsec->planes[sector_t::floor].Texture;
|
secpic = resffloor ? *resffloor->top.texture : resultsec->planes[sector_t::floor].Texture;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
actor->Sector->NextHighestCeilingAt(actor, actor->Top(), 0, &resultsec, &resffloor);
|
actor->Sector->NextHighestCeilingAt(actor->X(), actor->Y(), actor->Z(), actor->Top(), 0, &resultsec, &resffloor);
|
||||||
secpic = resffloor ? *resffloor->bottom.texture : resultsec->planes[sector_t::ceiling].Texture;
|
secpic = resffloor ? *resffloor->bottom.texture : resultsec->planes[sector_t::ceiling].Texture;
|
||||||
}
|
}
|
||||||
return tex == TexMan[secpic];
|
return tex == TexMan[secpic];
|
||||||
|
@ -5946,8 +5946,8 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound)
|
||||||
reference = SingleActorFromTID(tid_dest, activator);
|
reference = SingleActorFromTID(tid_dest, activator);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there is no actor to warp to, fail.
|
// If there is no activator or actor to warp to, fail.
|
||||||
if (!reference)
|
if (activator == NULL || !reference)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (P_Thing_Warp(activator, reference, xofs, yofs, zofs, angle, flags, heightoffset, radiusoffset, pitch))
|
if (P_Thing_Warp(activator, reference, xofs, yofs, zofs, angle, flags, heightoffset, radiusoffset, pitch))
|
||||||
|
|
|
@ -290,7 +290,7 @@ void P_GetFloorCeilingZ(FCheckPosition &tmf, int flags)
|
||||||
sector_t *sec = (!(flags & FFCF_SAMESECTOR) || tmf.thing->Sector == NULL)? P_PointInSector(tmf.x, tmf.y) : tmf.sector;
|
sector_t *sec = (!(flags & FFCF_SAMESECTOR) || tmf.thing->Sector == NULL)? P_PointInSector(tmf.x, tmf.y) : tmf.sector;
|
||||||
F3DFloor *ffc, *fff;
|
F3DFloor *ffc, *fff;
|
||||||
|
|
||||||
tmf.ceilingz = sec->NextHighestCeilingAt(tmf.x, tmf.y, tmf.z + tmf.thing->height, flags, &tmf.ceilingsector, &ffc);
|
tmf.ceilingz = sec->NextHighestCeilingAt(tmf.x, tmf.y, tmf.z, tmf.z + tmf.thing->height, flags, &tmf.ceilingsector, &ffc);
|
||||||
tmf.floorz = tmf.dropoffz = sec->NextLowestFloorAt(tmf.x, tmf.y, tmf.z, flags, tmf.thing->MaxStepHeight, &tmf.floorsector, &fff);
|
tmf.floorz = tmf.dropoffz = sec->NextLowestFloorAt(tmf.x, tmf.y, tmf.z, flags, tmf.thing->MaxStepHeight, &tmf.floorsector, &fff);
|
||||||
|
|
||||||
if (fff)
|
if (fff)
|
||||||
|
@ -997,7 +997,7 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec
|
||||||
spec.oldrefpos = tm.thing->PosRelative(ld);
|
spec.oldrefpos = tm.thing->PosRelative(ld);
|
||||||
spechit.Push(spec);
|
spechit.Push(spec);
|
||||||
}
|
}
|
||||||
if (ld->portalindex != UINT_MAX)
|
if (ld->isLinePortal())
|
||||||
{
|
{
|
||||||
spec.line = ld;
|
spec.line = ld;
|
||||||
spec.refpos = cres.position;
|
spec.refpos = cres.position;
|
||||||
|
@ -3793,7 +3793,7 @@ struct aim_t
|
||||||
intercept_t *in;
|
intercept_t *in;
|
||||||
|
|
||||||
if (aimdebug)
|
if (aimdebug)
|
||||||
Printf("Start AimTraverse, start = %f,%f,%f, vect = %f,%f,%f\n",
|
Printf("Start AimTraverse, start = %f,%f,%f, vect = %f,%f\n",
|
||||||
startpos.x / 65536., startpos.y / 65536., startpos.z / 65536.,
|
startpos.x / 65536., startpos.y / 65536., startpos.z / 65536.,
|
||||||
aimtrace.x / 65536., aimtrace.y / 65536.);
|
aimtrace.x / 65536., aimtrace.y / 65536.);
|
||||||
|
|
||||||
|
|
|
@ -1980,6 +1980,10 @@ int P_VanillaPointOnDivlineSide(fixed_t x, fixed_t y, const divline_t* line)
|
||||||
|
|
||||||
sector_t *P_PointInSectorBuggy(fixed_t x, fixed_t y)
|
sector_t *P_PointInSectorBuggy(fixed_t x, fixed_t y)
|
||||||
{
|
{
|
||||||
|
// single subsector is a special case
|
||||||
|
if (numgamenodes == 0)
|
||||||
|
return gamesubsectors->sector;
|
||||||
|
|
||||||
node_t *node = gamenodes + numgamenodes - 1;
|
node_t *node = gamenodes + numgamenodes - 1;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
|
|
@ -932,7 +932,7 @@ fixed_t sector_t::LowestFloorAt(fixed_t x, fixed_t y, sector_t **resultsec)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fixed_t sector_t::NextHighestCeilingAt(fixed_t x, fixed_t y, fixed_t z, int flags, sector_t **resultsec, F3DFloor **resultffloor)
|
fixed_t sector_t::NextHighestCeilingAt(fixed_t x, fixed_t y, fixed_t bottomz, fixed_t topz, int flags, sector_t **resultsec, F3DFloor **resultffloor)
|
||||||
{
|
{
|
||||||
sector_t *sec = this;
|
sector_t *sec = this;
|
||||||
fixed_t planeheight = FIXED_MIN;
|
fixed_t planeheight = FIXED_MIN;
|
||||||
|
@ -943,14 +943,20 @@ fixed_t sector_t::NextHighestCeilingAt(fixed_t x, fixed_t y, fixed_t z, int flag
|
||||||
fixed_t realceil = sec->ceilingplane.ZatPoint(x, y);
|
fixed_t realceil = sec->ceilingplane.ZatPoint(x, y);
|
||||||
for (int i = sec->e->XFloor.ffloors.Size() - 1; i >= 0; --i)
|
for (int i = sec->e->XFloor.ffloors.Size() - 1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
F3DFloor *ff = sec->e->XFloor.ffloors[i];
|
F3DFloor *rover = sec->e->XFloor.ffloors[i];
|
||||||
|
if (!(rover->flags & FF_SOLID) || !(rover->flags & FF_EXISTS)) continue;
|
||||||
|
|
||||||
fixed_t ffz = ff->bottom.plane->ZatPoint(x, y);
|
fixed_t ff_bottom = rover->bottom.plane->ZatPoint(x, y);
|
||||||
if (ffz < realceil && ((ff->flags & (FF_EXISTS | FF_SOLID)) == (FF_EXISTS | FF_SOLID) && z <= ffz))
|
fixed_t ff_top = rover->top.plane->ZatPoint(x, y);
|
||||||
{ // This floor is above our eyes.
|
|
||||||
|
fixed_t delta1 = bottomz - (ff_bottom + ((ff_top - ff_bottom) / 2));
|
||||||
|
fixed_t delta2 = topz - (ff_bottom + ((ff_top - ff_bottom) / 2));
|
||||||
|
|
||||||
|
if (ff_bottom < realceil && abs(delta1) >= abs(delta2))
|
||||||
|
{
|
||||||
if (resultsec) *resultsec = sec;
|
if (resultsec) *resultsec = sec;
|
||||||
if (resultffloor) *resultffloor = ff;
|
if (resultffloor) *resultffloor = rover;
|
||||||
return ffz;
|
return ff_bottom;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((flags & FFCF_NOPORTALS) || sec->PortalBlocksMovement(ceiling) || planeheight >= sec->SkyBoxes[ceiling]->threshold)
|
if ((flags & FFCF_NOPORTALS) || sec->PortalBlocksMovement(ceiling) || planeheight >= sec->SkyBoxes[ceiling]->threshold)
|
||||||
|
|
|
@ -342,7 +342,7 @@ void FTraceInfo::Setup3DFloors()
|
||||||
{
|
{
|
||||||
CurSector->floorplane = *rover->top.plane;
|
CurSector->floorplane = *rover->top.plane;
|
||||||
CurSector->SetTexture(sector_t::floor, *rover->top.texture, false);
|
CurSector->SetTexture(sector_t::floor, *rover->top.texture, false);
|
||||||
CurSector->SkyBoxes[sector_t::floor] == NULL;
|
CurSector->SkyBoxes[sector_t::floor] = nullptr;
|
||||||
bf = ff_top;
|
bf = ff_top;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -354,7 +354,7 @@ void FTraceInfo::Setup3DFloors()
|
||||||
CurSector->ceilingplane = *rover->bottom.plane;
|
CurSector->ceilingplane = *rover->bottom.plane;
|
||||||
CurSector->SetTexture(sector_t::ceiling, *rover->bottom.texture, false);
|
CurSector->SetTexture(sector_t::ceiling, *rover->bottom.texture, false);
|
||||||
bc = ff_bottom;
|
bc = ff_bottom;
|
||||||
CurSector->SkyBoxes[sector_t::ceiling] == NULL;
|
CurSector->SkyBoxes[sector_t::ceiling] = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -364,7 +364,7 @@ void FTraceInfo::Setup3DFloors()
|
||||||
{
|
{
|
||||||
CurSector->floorplane = *rover->bottom.plane;
|
CurSector->floorplane = *rover->bottom.plane;
|
||||||
CurSector->SetTexture(sector_t::floor, *rover->bottom.texture, false);
|
CurSector->SetTexture(sector_t::floor, *rover->bottom.texture, false);
|
||||||
CurSector->SkyBoxes[sector_t::floor] == NULL;
|
CurSector->SkyBoxes[sector_t::floor] = nullptr;
|
||||||
bf = ff_bottom;
|
bf = ff_bottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -372,7 +372,7 @@ void FTraceInfo::Setup3DFloors()
|
||||||
{
|
{
|
||||||
CurSector->ceilingplane = *rover->top.plane;
|
CurSector->ceilingplane = *rover->top.plane;
|
||||||
CurSector->SetTexture(sector_t::ceiling, *rover->top.texture, false);
|
CurSector->SetTexture(sector_t::ceiling, *rover->top.texture, false);
|
||||||
CurSector->SkyBoxes[sector_t::ceiling] == NULL;
|
CurSector->SkyBoxes[sector_t::ceiling] = nullptr;
|
||||||
bc = ff_top;
|
bc = ff_top;
|
||||||
}
|
}
|
||||||
inshootthrough = false;
|
inshootthrough = false;
|
||||||
|
|
|
@ -955,6 +955,7 @@ void P_CreateLinkedPortals()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
id = 1;
|
||||||
if (orgs.Size() != 0)
|
if (orgs.Size() != 0)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < numsectors; i++)
|
for (int i = 0; i < numsectors; i++)
|
||||||
|
|
|
@ -149,6 +149,8 @@ static const NSOpenGLPixelFormatAttribute NSOpenGLPFAAllowOfflineRenderers = NSO
|
||||||
- (void)setCollectionBehavior:(NSUInteger)collectionBehavior;
|
- (void)setCollectionBehavior:(NSUInteger)collectionBehavior;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
typedef NSUInteger NSWindowCollectionBehavior;
|
||||||
|
|
||||||
#endif // prior to 10.5
|
#endif // prior to 10.5
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,6 @@ EXTERN_CVAR(Bool, fullscreen )
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -78,6 +77,9 @@ void (*TermFuncs[MAX_TERMS])();
|
||||||
const char *TermNames[MAX_TERMS];
|
const char *TermNames[MAX_TERMS];
|
||||||
size_t NumTerms;
|
size_t NumTerms;
|
||||||
|
|
||||||
|
} // unnamed namespace
|
||||||
|
|
||||||
|
// Expose this for i_main_except.cpp
|
||||||
void call_terms()
|
void call_terms()
|
||||||
{
|
{
|
||||||
while (NumTerms > 0)
|
while (NumTerms > 0)
|
||||||
|
@ -86,8 +88,6 @@ void call_terms()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // unnamed namespace
|
|
||||||
|
|
||||||
|
|
||||||
void addterm(void (*func)(), const char *name)
|
void addterm(void (*func)(), const char *name)
|
||||||
{
|
{
|
||||||
|
@ -133,6 +133,41 @@ void Mac_I_FatalError(const char* const message)
|
||||||
DArgs* Args; // command line arguments
|
DArgs* Args; // command line arguments
|
||||||
|
|
||||||
|
|
||||||
|
// Newer versions of GCC than 4.2 have a bug with C++ exceptions in Objective-C++ code.
|
||||||
|
// To work around we'll implement the try and catch in standard C++.
|
||||||
|
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61759
|
||||||
|
void OriginalMainExcept(int argc, char** argv);
|
||||||
|
void OriginalMainTry(int argc, char** argv)
|
||||||
|
{
|
||||||
|
Args = new DArgs(argc, argv);
|
||||||
|
|
||||||
|
/*
|
||||||
|
killough 1/98:
|
||||||
|
|
||||||
|
This fixes some problems with exit handling
|
||||||
|
during abnormal situations.
|
||||||
|
|
||||||
|
The old code called I_Quit() to end program,
|
||||||
|
while now I_Quit() is installed as an exit
|
||||||
|
handler and exit() is called to exit, either
|
||||||
|
normally or abnormally. Seg faults are caught
|
||||||
|
and the error handler is used, to prevent
|
||||||
|
being left in graphics mode or having very
|
||||||
|
loud SFX noise because the sound card is
|
||||||
|
left in an unstable state.
|
||||||
|
*/
|
||||||
|
|
||||||
|
atexit(call_terms);
|
||||||
|
atterm(I_Quit);
|
||||||
|
|
||||||
|
NSString* exePath = [[NSBundle mainBundle] executablePath];
|
||||||
|
progdir = [[exePath stringByDeletingLastPathComponent] UTF8String];
|
||||||
|
progdir += "/";
|
||||||
|
|
||||||
|
C_InitConsole(80 * 8, 25 * 8, false);
|
||||||
|
D_DoomMain();
|
||||||
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -151,7 +186,6 @@ void NewFailure()
|
||||||
I_FatalError("Failed to allocate memory from system heap");
|
I_FatalError("Failed to allocate memory from system heap");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int OriginalMain(int argc, char** argv)
|
int OriginalMain(int argc, char** argv)
|
||||||
{
|
{
|
||||||
printf(GAMENAME" %s - %s - Cocoa version\nCompiled on %s\n\n",
|
printf(GAMENAME" %s - %s - Cocoa version\nCompiled on %s\n\n",
|
||||||
|
@ -174,53 +208,7 @@ int OriginalMain(int argc, char** argv)
|
||||||
vid_vsync = true;
|
vid_vsync = true;
|
||||||
fullscreen = true;
|
fullscreen = true;
|
||||||
|
|
||||||
try
|
OriginalMainExcept(argc, argv);
|
||||||
{
|
|
||||||
Args = new DArgs(argc, argv);
|
|
||||||
|
|
||||||
/*
|
|
||||||
killough 1/98:
|
|
||||||
|
|
||||||
This fixes some problems with exit handling
|
|
||||||
during abnormal situations.
|
|
||||||
|
|
||||||
The old code called I_Quit() to end program,
|
|
||||||
while now I_Quit() is installed as an exit
|
|
||||||
handler and exit() is called to exit, either
|
|
||||||
normally or abnormally. Seg faults are caught
|
|
||||||
and the error handler is used, to prevent
|
|
||||||
being left in graphics mode or having very
|
|
||||||
loud SFX noise because the sound card is
|
|
||||||
left in an unstable state.
|
|
||||||
*/
|
|
||||||
|
|
||||||
atexit(call_terms);
|
|
||||||
atterm(I_Quit);
|
|
||||||
|
|
||||||
NSString* exePath = [[NSBundle mainBundle] executablePath];
|
|
||||||
progdir = [[exePath stringByDeletingLastPathComponent] UTF8String];
|
|
||||||
progdir += "/";
|
|
||||||
|
|
||||||
C_InitConsole(80 * 8, 25 * 8, false);
|
|
||||||
D_DoomMain();
|
|
||||||
}
|
|
||||||
catch(const CDoomError& error)
|
|
||||||
{
|
|
||||||
const char* const message = error.GetMessage();
|
|
||||||
|
|
||||||
if (NULL != message)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s\n", message);
|
|
||||||
Mac_I_FatalError(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
catch(...)
|
|
||||||
{
|
|
||||||
call_terms();
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
34
src/posix/cocoa/i_main_except.cpp
Normal file
34
src/posix/cocoa/i_main_except.cpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
// Workaround for GCC Objective-C++ with C++ exceptions bug.
|
||||||
|
|
||||||
|
#include "doomerrors.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// Import some functions from i_main.mm
|
||||||
|
void call_terms();
|
||||||
|
void Mac_I_FatalError(const char* const message);
|
||||||
|
void OriginalMainTry(int argc, char** argv);
|
||||||
|
|
||||||
|
void OriginalMainExcept(int argc, char** argv)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OriginalMainTry(argc, argv);
|
||||||
|
}
|
||||||
|
catch(const CDoomError& error)
|
||||||
|
{
|
||||||
|
const char* const message = error.GetMessage();
|
||||||
|
|
||||||
|
if (NULL != message)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", message);
|
||||||
|
Mac_I_FatalError(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
call_terms();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
12
src/r_defs.h
12
src/r_defs.h
|
@ -873,19 +873,9 @@ struct sector_t
|
||||||
return LowestFloorAt(a->X(), a->Y(), resultsec);
|
return LowestFloorAt(a->X(), a->Y(), resultsec);
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t NextHighestCeilingAt(fixed_t x, fixed_t y, fixed_t z, int flags = 0, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL);
|
fixed_t NextHighestCeilingAt(fixed_t x, fixed_t y, fixed_t bottomz, fixed_t topz, int flags = 0, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL);
|
||||||
fixed_t NextLowestFloorAt(fixed_t x, fixed_t y, fixed_t z, int flags = 0, fixed_t steph = 0, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL);
|
fixed_t NextLowestFloorAt(fixed_t x, fixed_t y, fixed_t z, int flags = 0, fixed_t steph = 0, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL);
|
||||||
|
|
||||||
fixed_t NextHighestCeilingAt(AActor *a, fixed_t z, int flags = 0, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL)
|
|
||||||
{
|
|
||||||
return NextHighestCeilingAt(a->X(), a->Y(), z, flags, resultsec, resultffloor);
|
|
||||||
}
|
|
||||||
|
|
||||||
fixed_t NextLowestFloorAt(AActor *a, fixed_t z, int flags, sector_t **resultsec = NULL, F3DFloor **resultffloor = NULL)
|
|
||||||
{
|
|
||||||
return NextLowestFloorAt(a->X(), a->Y(), z, flags, a->MaxStepHeight, resultsec, resultffloor);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Member variables
|
// Member variables
|
||||||
fixed_t CenterFloor () const { return floorplane.ZatPoint (centerspot); }
|
fixed_t CenterFloor () const { return floorplane.ZatPoint (centerspot); }
|
||||||
fixed_t CenterCeiling () const { return ceilingplane.ZatPoint (centerspot); }
|
fixed_t CenterCeiling () const { return ceilingplane.ZatPoint (centerspot); }
|
||||||
|
|
|
@ -100,14 +100,14 @@ typedef struct tagITFILEHEADER
|
||||||
DWORD reserved2;
|
DWORD reserved2;
|
||||||
BYTE chnpan[64];
|
BYTE chnpan[64];
|
||||||
BYTE chnvol[64];
|
BYTE chnvol[64];
|
||||||
} ITFILEHEADER, *PITFILEHEADER;
|
} FORCE_PACKED ITFILEHEADER, *PITFILEHEADER;
|
||||||
|
|
||||||
typedef struct MODMIDICFG
|
typedef struct MODMIDICFG
|
||||||
{
|
{
|
||||||
char szMidiGlb[9*32]; // changed from CHAR
|
char szMidiGlb[9*32]; // changed from CHAR
|
||||||
char szMidiSFXExt[16*32]; // changed from CHAR
|
char szMidiSFXExt[16*32]; // changed from CHAR
|
||||||
char szMidiZXXExt[128*32]; // changed from CHAR
|
char szMidiZXXExt[128*32]; // changed from CHAR
|
||||||
} MODMIDICFG, *LPMODMIDICFG;
|
} FORCE_PACKED MODMIDICFG, *LPMODMIDICFG;
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ struct PCXHeader
|
||||||
|
|
||||||
BYTE padding[54];
|
BYTE padding[54];
|
||||||
|
|
||||||
};
|
} FORCE_PACKED;
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -13,7 +13,7 @@ struct FZipEndOfCentralDirectory
|
||||||
DWORD DirectorySize;
|
DWORD DirectorySize;
|
||||||
DWORD DirectoryOffset;
|
DWORD DirectoryOffset;
|
||||||
WORD ZipCommentLength;
|
WORD ZipCommentLength;
|
||||||
};
|
} FORCE_PACKED;
|
||||||
|
|
||||||
// FZipFileInfo
|
// FZipFileInfo
|
||||||
struct FZipCentralDirectoryInfo
|
struct FZipCentralDirectoryInfo
|
||||||
|
@ -36,7 +36,7 @@ struct FZipCentralDirectoryInfo
|
||||||
DWORD ExternalAttributes;
|
DWORD ExternalAttributes;
|
||||||
DWORD LocalHeaderOffset;
|
DWORD LocalHeaderOffset;
|
||||||
// file name and other variable length info follows
|
// file name and other variable length info follows
|
||||||
};
|
} FORCE_PACKED;
|
||||||
|
|
||||||
// FZipLocalHeader
|
// FZipLocalHeader
|
||||||
struct FZipLocalFileHeader
|
struct FZipLocalFileHeader
|
||||||
|
@ -53,7 +53,7 @@ struct FZipLocalFileHeader
|
||||||
WORD NameLength;
|
WORD NameLength;
|
||||||
WORD ExtraLength;
|
WORD ExtraLength;
|
||||||
// file name and other variable length info follows
|
// file name and other variable length info follows
|
||||||
};
|
} FORCE_PACKED;
|
||||||
|
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
|
@ -60,6 +60,17 @@
|
||||||
#define __cdecl
|
#define __cdecl
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
// With versions of GCC newer than 4.2, it appears it was determined that the
|
||||||
|
// cost of an unaligned pointer on PPC was high enough to add padding to the
|
||||||
|
// end of packed structs. For whatever reason __packed__ and pragma pack are
|
||||||
|
// handled differently in this regard. Note that this only needs to be applied
|
||||||
|
// to types which are used in arrays.
|
||||||
|
#define FORCE_PACKED __attribute__((__packed__))
|
||||||
|
#else
|
||||||
|
#define FORCE_PACKED
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __BIG_ENDIAN__
|
#ifndef __BIG_ENDIAN__
|
||||||
#define MAKE_ID(a,b,c,d) ((a)|((b)<<8)|((c)<<16)|((d)<<24))
|
#define MAKE_ID(a,b,c,d) ((a)|((b)<<8)|((c)<<16)|((d)<<24))
|
||||||
#define LittleShort(x) (x)
|
#define LittleShort(x) (x)
|
||||||
|
@ -150,7 +161,7 @@ typedef struct
|
||||||
UINT32 UncompressedSize; // 22
|
UINT32 UncompressedSize; // 22
|
||||||
WORD NameLength; // 26
|
WORD NameLength; // 26
|
||||||
WORD ExtraLength; // 28
|
WORD ExtraLength; // 28
|
||||||
} LocalFileHeader;
|
} FORCE_PACKED LocalFileHeader;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -171,7 +182,7 @@ typedef struct
|
||||||
WORD InternalAttributes;
|
WORD InternalAttributes;
|
||||||
UINT32 ExternalAttributes;
|
UINT32 ExternalAttributes;
|
||||||
UINT32 LocalHeaderOffset;
|
UINT32 LocalHeaderOffset;
|
||||||
} CentralDirectoryEntry;
|
} FORCE_PACKED CentralDirectoryEntry;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -183,7 +194,7 @@ typedef struct
|
||||||
UINT32 DirectorySize;
|
UINT32 DirectorySize;
|
||||||
UINT32 DirectoryOffset;
|
UINT32 DirectoryOffset;
|
||||||
WORD ZipCommentLength;
|
WORD ZipCommentLength;
|
||||||
} EndOfCentralDirectory;
|
} FORCE_PACKED EndOfCentralDirectory;
|
||||||
//#pragma pack(pop)
|
//#pragma pack(pop)
|
||||||
|
|
||||||
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
||||||
|
|
|
@ -108,4 +108,3 @@ CMPTMNU_SECTORSOUNDS = "Sector sounds use centre as source";
|
||||||
OPTVAL_MAPDEFINEDCOLORSONLY = "Map defined colours only";
|
OPTVAL_MAPDEFINEDCOLORSONLY = "Map defined colours only";
|
||||||
C_GRAY = "\ccgrey";
|
C_GRAY = "\ccgrey";
|
||||||
C_DARKGRAY = "\cudark grey";
|
C_DARKGRAY = "\cudark grey";
|
||||||
MNU_COLORPICKER = "SELECT COLOUR";
|
|
||||||
|
|
|
@ -1880,6 +1880,7 @@ AUTOMAPMNU_DRAWMAPBACK = "Draw map background";
|
||||||
AUTOMAPMNU_SHOWKEYS = "Show keys (cheat)";
|
AUTOMAPMNU_SHOWKEYS = "Show keys (cheat)";
|
||||||
AUTOMAPMNU_SHOWTRIGGERLINES = "Show trigger lines";
|
AUTOMAPMNU_SHOWTRIGGERLINES = "Show trigger lines";
|
||||||
AUTOMAPMNU_SHOWTHINGSPRITES = "Show things as sprites";
|
AUTOMAPMNU_SHOWTHINGSPRITES = "Show things as sprites";
|
||||||
|
AUTOMAPMNU_PTOVERLAY = "Overlay portals";
|
||||||
|
|
||||||
// Automap Controls
|
// Automap Controls
|
||||||
MAPCNTRLMNU_TITLE = "CUSTOMIZE MAP CONTROLS";
|
MAPCNTRLMNU_TITLE = "CUSTOMIZE MAP CONTROLS";
|
||||||
|
@ -1925,6 +1926,7 @@ MAPCOLORMNU_ITEMCOLOR = "Items";
|
||||||
MAPCOLORMNU_COUNTITEMCOLOR = "Count Items";
|
MAPCOLORMNU_COUNTITEMCOLOR = "Count Items";
|
||||||
MAPCOLORMNU_OVERLAY = "Overlay Mode";
|
MAPCOLORMNU_OVERLAY = "Overlay Mode";
|
||||||
MAPCOLORMNU_OVCHEATMODE = "Overlay Cheat Mode";
|
MAPCOLORMNU_OVCHEATMODE = "Overlay Cheat Mode";
|
||||||
|
MAPCOLORMNU_PORTAL = "Portal Overlays";
|
||||||
|
|
||||||
// Message Options
|
// Message Options
|
||||||
MSGMNU_TITLE = "MESSAGES";
|
MSGMNU_TITLE = "MESSAGES";
|
||||||
|
|
|
@ -982,6 +982,7 @@ OptionMenu AutomapOptions
|
||||||
Option "$AUTOMAPMNU_OVERLAY", "am_overlay", "OverlayTypes"
|
Option "$AUTOMAPMNU_OVERLAY", "am_overlay", "OverlayTypes"
|
||||||
Option "$AUTOMAPMNU_TEXTURED", "am_textured", "OnOff"
|
Option "$AUTOMAPMNU_TEXTURED", "am_textured", "OnOff"
|
||||||
Option "$AUTOMAPMNU_FOLLOW", "am_followplayer", "OnOff"
|
Option "$AUTOMAPMNU_FOLLOW", "am_followplayer", "OnOff"
|
||||||
|
Option "$AUTOMAPMNU_PTOVERLAY", "am_portaloverlay", "OnOff"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
Option "$AUTOMAPMNU_SHOWITEMS", "am_showitems", "OnOff"
|
Option "$AUTOMAPMNU_SHOWITEMS", "am_showitems", "OnOff"
|
||||||
Option "$AUTOMAPMNU_SHOWMONSTERS", "am_showmonsters", "OnOff"
|
Option "$AUTOMAPMNU_SHOWMONSTERS", "am_showmonsters", "OnOff"
|
||||||
|
@ -1048,6 +1049,7 @@ OptionMenu MapColorMenu
|
||||||
ColorPicker "$MAPCOLORMNU_INTERLEVELCOLOR", "am_interlevelcolor"
|
ColorPicker "$MAPCOLORMNU_INTERLEVELCOLOR", "am_interlevelcolor"
|
||||||
ColorPicker "$MAPCOLORMNU_SECRETSECTORCOLOR", "am_secretsectorcolor"
|
ColorPicker "$MAPCOLORMNU_SECRETSECTORCOLOR", "am_secretsectorcolor"
|
||||||
ColorPicker "$MAPCOLORMNU_SPECIALWALLCOLOR", "am_specialwallcolor"
|
ColorPicker "$MAPCOLORMNU_SPECIALWALLCOLOR", "am_specialwallcolor"
|
||||||
|
ColorPicker "$MAPCOLORMNU_PORTAL", "am_portalcolor"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "$MAPCOLORMNU_CHEATMODE", 1
|
StaticText "$MAPCOLORMNU_CHEATMODE", 1
|
||||||
ColorPicker "$MAPCOLORMNU_TSWALLCOLOR", "am_tswallcolor"
|
ColorPicker "$MAPCOLORMNU_TSWALLCOLOR", "am_tswallcolor"
|
||||||
|
@ -1071,6 +1073,7 @@ OptionMenu MapColorMenu
|
||||||
ColorPicker "$MAPCOLORMNU_INTERLEVELCOLOR", "am_ovinterlevelcolor"
|
ColorPicker "$MAPCOLORMNU_INTERLEVELCOLOR", "am_ovinterlevelcolor"
|
||||||
ColorPicker "$MAPCOLORMNU_SECRETSECTORCOLOR", "am_ovsecretsectorcolor"
|
ColorPicker "$MAPCOLORMNU_SECRETSECTORCOLOR", "am_ovsecretsectorcolor"
|
||||||
ColorPicker "$MAPCOLORMNU_SPECIALWALLCOLOR", "am_ovspecialwallcolor"
|
ColorPicker "$MAPCOLORMNU_SPECIALWALLCOLOR", "am_ovspecialwallcolor"
|
||||||
|
ColorPicker "$MAPCOLORMNU_PORTAL", "am_ovportalcolor"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "$MAPCOLORMNU_OVCHEATMODE", 1
|
StaticText "$MAPCOLORMNU_OVCHEATMODE", 1
|
||||||
ColorPicker "$MAPCOLORMNU_TSWALLCOLOR", "am_ovotherwallscolor"
|
ColorPicker "$MAPCOLORMNU_TSWALLCOLOR", "am_ovotherwallscolor"
|
||||||
|
|
Loading…
Reference in a new issue