mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-24 13:01:47 +00:00
Merge branch 'master' into scripting
Conflicts: src/p_effect.cpp src/p_effect.h src/p_local.h src/p_map.cpp src/thingdef/thingdef_codeptr.cpp
This commit is contained in:
commit
d8ea128f38
27 changed files with 220 additions and 85 deletions
|
@ -1260,18 +1260,20 @@ if( APPLE )
|
|||
LINK_FLAGS "-framework Carbon -framework Cocoa -framework IOKit -framework OpenGL"
|
||||
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/posix/osx/zdoom-info.plist" )
|
||||
|
||||
# Fix fmod link so that it can be found in the app bundle.
|
||||
find_program( OTOOL otool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin" )
|
||||
find_program( INSTALL_NAME_TOOL install_name_tool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin" )
|
||||
execute_process( COMMAND "${OTOOL}" -L "${FMOD_LIBRARY}"
|
||||
COMMAND grep "libfmodex.dylib (compat"
|
||||
COMMAND head -n1
|
||||
COMMAND awk "{print $1}"
|
||||
OUTPUT_VARIABLE FMOD_LINK
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
add_custom_command( TARGET zdoom POST_BUILD
|
||||
COMMAND "${INSTALL_NAME_TOOL}" -change "${FMOD_LINK}" @executable_path/../Frameworks/libfmodex.dylib "$<TARGET_FILE:zdoom>"
|
||||
COMMENT "Relinking FMOD Ex" )
|
||||
if( NOT NO_FMOD )
|
||||
# Fix fmod link so that it can be found in the app bundle.
|
||||
find_program( OTOOL otool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin" )
|
||||
find_program( INSTALL_NAME_TOOL install_name_tool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin" )
|
||||
execute_process( COMMAND "${OTOOL}" -L "${FMOD_LIBRARY}"
|
||||
COMMAND grep "libfmodex.dylib (compat"
|
||||
COMMAND head -n1
|
||||
COMMAND awk "{print $1}"
|
||||
OUTPUT_VARIABLE FMOD_LINK
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
add_custom_command( TARGET zdoom POST_BUILD
|
||||
COMMAND "${INSTALL_NAME_TOOL}" -change "${FMOD_LINK}" @executable_path/../Frameworks/libfmodex.dylib "$<TARGET_FILE:zdoom>"
|
||||
COMMENT "Relinking FMOD Ex" )
|
||||
endif( NOT NO_FMOD )
|
||||
endif( APPLE )
|
||||
|
||||
source_group("Assembly Files\\ia32" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/asm_ia32/.+")
|
||||
|
|
|
@ -1076,7 +1076,8 @@ FString BuildString (int argc, FString *argv)
|
|||
// %x or %{x} in the command line with argument x. If argument x does not
|
||||
// exist, then the empty string is substituted in its place.
|
||||
//
|
||||
// Substitution is not done inside of quoted strings.
|
||||
// Substitution is not done inside of quoted strings, unless that string is
|
||||
// prepended with a % character.
|
||||
//
|
||||
// To avoid a substitution, use %%. The %% will be replaced by a single %.
|
||||
//
|
||||
|
@ -1091,19 +1092,12 @@ FString SubstituteAliasParams (FString &command, FCommandLine &args)
|
|||
char *p = command.LockBuffer(), *start = p;
|
||||
unsigned long argnum;
|
||||
FString buf;
|
||||
bool inquote = false;
|
||||
|
||||
while (*p != '\0')
|
||||
{
|
||||
if (*p == '%' && ((p[1] >= '0' && p[1] <= '9') || p[1] == '{' || p[1] == '%'))
|
||||
if (p[0] == '%' && ((p[1] >= '0' && p[1] <= '9') || p[1] == '{'))
|
||||
{
|
||||
if (p[1] == '%')
|
||||
{
|
||||
// Do not substitute. Just collapse to a single %.
|
||||
buf.AppendCStrPart (start, p - start + 1);
|
||||
start = p = p + 2;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Do a substitution. Output what came before this.
|
||||
buf.AppendCStrPart (start, p - start);
|
||||
|
||||
|
@ -1115,14 +1109,50 @@ FString SubstituteAliasParams (FString &command, FCommandLine &args)
|
|||
}
|
||||
p = (start += (p[1] == '{' && *start == '}'));
|
||||
}
|
||||
else if (*p == '"')
|
||||
else if (p[0] == '%' && p[1] == '%')
|
||||
{
|
||||
// Don't substitute inside quoted strings.
|
||||
p++;
|
||||
while (*p != '\0' && (*p != '"' || *(p-1) == '\\'))
|
||||
// Do not substitute. Just collapse to a single %.
|
||||
buf.AppendCStrPart (start, p - start + 1);
|
||||
start = p = p + 2;
|
||||
continue;
|
||||
}
|
||||
else if (p[0] == '%' && p[1] == '"')
|
||||
{
|
||||
// Collapse %" to " and remember that we're in a quote so when we
|
||||
// see a " character again, we don't start skipping below.
|
||||
if (!inquote)
|
||||
{
|
||||
inquote = true;
|
||||
buf.AppendCStrPart(start, p - start);
|
||||
start = p + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
inquote = false;
|
||||
}
|
||||
p += 2;
|
||||
}
|
||||
else if (p[0] == '\\' && p[1] == '"')
|
||||
{
|
||||
p += 2;
|
||||
}
|
||||
else if (p[0] == '"')
|
||||
{
|
||||
// Don't substitute inside quoted strings if it didn't start
|
||||
// with a %"
|
||||
if (!inquote)
|
||||
{
|
||||
p++;
|
||||
if (*p != '\0')
|
||||
while (*p != '\0' && (*p != '"' || *(p-1) == '\\'))
|
||||
p++;
|
||||
if (*p != '\0')
|
||||
p++;
|
||||
}
|
||||
else
|
||||
{
|
||||
inquote = false;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -678,7 +678,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BFGSpray)
|
|||
|
||||
if (spray != NULL)
|
||||
{
|
||||
if (spray->flags6 & MF6_MTHRUSPECIES && spray->GetSpecies() == linetarget->GetSpecies())
|
||||
if (spray->flags6 & MF6_MTHRUSPECIES && self->target->GetSpecies() == linetarget->GetSpecies())
|
||||
{
|
||||
spray->Destroy(); // [MC] Remove it because technically, the spray isn't trying to "hit" them.
|
||||
continue;
|
||||
|
|
|
@ -533,6 +533,10 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill
|
|||
Printf (TEXTCOLOR_RED "Unloading scripts cannot exit the level again.\n");
|
||||
return;
|
||||
}
|
||||
if (gameaction == ga_completed) // do not exit multiple times.
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (levelname == NULL || *levelname == 0)
|
||||
{
|
||||
|
|
|
@ -318,7 +318,7 @@ FString level_info_t::LookupLevelName()
|
|||
checkstring[0] = '\0';
|
||||
}
|
||||
thename = strstr (lookedup, checkstring);
|
||||
if (thename == NULL || thename == lookedup)
|
||||
if (thename == NULL)
|
||||
{
|
||||
thename = lookedup;
|
||||
}
|
||||
|
|
|
@ -177,6 +177,11 @@ void D_LoadWadSettings ()
|
|||
{
|
||||
cmd[i] = conf[i];
|
||||
}
|
||||
if (i == 0)
|
||||
{
|
||||
conf++;
|
||||
continue;
|
||||
}
|
||||
cmd[i] = 0;
|
||||
conf += i;
|
||||
if (*conf == '\n')
|
||||
|
|
|
@ -586,12 +586,12 @@ void P_DrawSplash2 (int count, fixed_t x, fixed_t y, fixed_t z, angle_t angle, i
|
|||
}
|
||||
}
|
||||
|
||||
void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end, int color1, int color2, double maxdiff_d, int flags, PClassActor *spawnclass, angle_t angle, int duration, double sparsity, double drift, int SpiralOffset)
|
||||
void P_DrawRailTrail(AActor *source, const TVector3<double> &start, const TVector3<double> &end, int color1, int color2, double maxdiff, int flags, const PClassActor *spawnclass, angle_t angle, int duration, double sparsity, double drift, int SpiralOffset)
|
||||
{
|
||||
double length, lengthsquared;
|
||||
int steps, i;
|
||||
FAngle deg;
|
||||
FVector3 step, dir, pos, extend;
|
||||
TAngle<double> deg;
|
||||
TVector3<double> step, dir, pos, extend;
|
||||
bool fullbright;
|
||||
float maxdiff = (float)maxdiff_d;
|
||||
|
||||
|
@ -616,9 +616,9 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
// The railgun's sound is special. It gets played from the
|
||||
// point on the slug's trail that is closest to the hearing player.
|
||||
AActor *mo = players[consoleplayer].camera;
|
||||
FVector3 point;
|
||||
TVector3<double> point;
|
||||
double r;
|
||||
float dirz;
|
||||
double dirz;
|
||||
|
||||
if (abs(mo->x - FLOAT2FIXED(start.X)) < 20 * FRACUNIT
|
||||
&& (mo->y - FLOAT2FIXED(start.Y)) < 20 * FRACUNIT)
|
||||
|
@ -631,7 +631,7 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
// Only consider sound in 2D (for now, anyway)
|
||||
// [BB] You have to divide by lengthsquared here, not multiply with it.
|
||||
|
||||
r = ((start.Y - FIXED2FLOAT(mo->y)) * (-dir.Y) - (start.X - FIXED2FLOAT(mo->x)) * (dir.X)) / lengthsquared;
|
||||
r = ((start.Y - FIXED2DBL(mo->y)) * (-dir.Y) - (start.X - FIXED2DBL(mo->x)) * (dir.X)) / lengthsquared;
|
||||
r = clamp<double>(r, 0., 1.);
|
||||
|
||||
dirz = dir.Z;
|
||||
|
@ -663,7 +663,7 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
minelem = fabs(dir[i]);
|
||||
}
|
||||
}
|
||||
FVector3 tempvec(0,0,0);
|
||||
TVector3<double> tempvec(0, 0, 0);
|
||||
tempvec[epos] = 1;
|
||||
extend = tempvec - (dir | tempvec) * dir;
|
||||
//
|
||||
|
@ -674,16 +674,16 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
// Create the outer spiral.
|
||||
if (color1 != -1 && (!r_rail_smartspiral || color2 == -1) && r_rail_spiralsparsity > 0 && (spawnclass == NULL))
|
||||
{
|
||||
FVector3 spiral_step = step * r_rail_spiralsparsity * sparsity;
|
||||
TVector3<double> spiral_step = step * r_rail_spiralsparsity * sparsity;
|
||||
int spiral_steps = (int)(steps * r_rail_spiralsparsity / sparsity);
|
||||
|
||||
color1 = color1 == 0 ? -1 : ParticleColor(color1);
|
||||
pos = start;
|
||||
deg = FAngle(SpiralOffset);
|
||||
deg = TAngle<double>(SpiralOffset);
|
||||
for (i = spiral_steps; i; i--)
|
||||
{
|
||||
particle_t *p = NewParticle ();
|
||||
FVector3 tempvec;
|
||||
TVector3<double> tempvec;
|
||||
|
||||
if (!p)
|
||||
return;
|
||||
|
@ -696,7 +696,7 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
p->size = 3;
|
||||
p->bright = fullbright;
|
||||
|
||||
tempvec = FMatrix3x3(dir, deg) * extend;
|
||||
tempvec = TMatrix3x3<double>(dir, deg) * extend;
|
||||
p->velx = FLOAT2FIXED(tempvec.X * drift)>>4;
|
||||
p->vely = FLOAT2FIXED(tempvec.Y * drift)>>4;
|
||||
p->velz = FLOAT2FIXED(tempvec.Z * drift)>>4;
|
||||
|
@ -705,7 +705,7 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
p->y = FLOAT2FIXED(tempvec.Y);
|
||||
p->z = FLOAT2FIXED(tempvec.Z);
|
||||
pos += spiral_step;
|
||||
deg += FAngle(r_rail_spiralsparsity * 14);
|
||||
deg += TAngle<double>(r_rail_spiralsparsity * 14);
|
||||
|
||||
if (color1 == -1)
|
||||
{
|
||||
|
@ -730,18 +730,18 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
// Create the inner trail.
|
||||
if (color2 != -1 && r_rail_trailsparsity > 0 && spawnclass == NULL)
|
||||
{
|
||||
FVector3 trail_step = step * r_rail_trailsparsity * sparsity;
|
||||
TVector3<double> trail_step = step * r_rail_trailsparsity * sparsity;
|
||||
int trail_steps = xs_FloorToInt(steps * r_rail_trailsparsity / sparsity);
|
||||
|
||||
color2 = color2 == 0 ? -1 : ParticleColor(color2);
|
||||
FVector3 diff(0, 0, 0);
|
||||
TVector3<double> diff(0, 0, 0);
|
||||
|
||||
pos = start;
|
||||
for (i = trail_steps; i; i--)
|
||||
{
|
||||
// [XA] inner trail uses a different default duration (33).
|
||||
int innerduration = (duration == 0) ? 33 : duration;
|
||||
particle_t *p = JitterParticle (innerduration, drift);
|
||||
particle_t *p = JitterParticle (innerduration, (float)drift);
|
||||
|
||||
if (!p)
|
||||
return;
|
||||
|
@ -750,14 +750,14 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
{
|
||||
int rnd = M_Random ();
|
||||
if (rnd & 1)
|
||||
diff.X = clamp<float> (diff.X + ((rnd & 8) ? 1 : -1), -maxdiff, maxdiff);
|
||||
diff.X = clamp<double>(diff.X + ((rnd & 8) ? 1 : -1), -maxdiff, maxdiff);
|
||||
if (rnd & 2)
|
||||
diff.Y = clamp<float> (diff.Y + ((rnd & 16) ? 1 : -1), -maxdiff, maxdiff);
|
||||
diff.Y = clamp<double>(diff.Y + ((rnd & 16) ? 1 : -1), -maxdiff, maxdiff);
|
||||
if (rnd & 4)
|
||||
diff.Z = clamp<float> (diff.Z + ((rnd & 32) ? 1 : -1), -maxdiff, maxdiff);
|
||||
diff.Z = clamp<double>(diff.Z + ((rnd & 32) ? 1 : -1), -maxdiff, maxdiff);
|
||||
}
|
||||
|
||||
FVector3 postmp = pos + diff;
|
||||
TVector3<double> postmp = pos + diff;
|
||||
|
||||
p->size = 2;
|
||||
p->x = FLOAT2FIXED(postmp.X);
|
||||
|
@ -792,9 +792,9 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
if (sparsity < 1)
|
||||
sparsity = 32;
|
||||
|
||||
FVector3 trail_step = (step / 3) * sparsity;
|
||||
TVector3<double> trail_step = (step / 3) * sparsity;
|
||||
int trail_steps = (int)((steps * 3) / sparsity);
|
||||
FVector3 diff(0, 0, 0);
|
||||
TVector3<double> diff(0, 0, 0);
|
||||
|
||||
pos = start;
|
||||
for (i = trail_steps; i; i--)
|
||||
|
@ -803,13 +803,13 @@ void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end
|
|||
{
|
||||
int rnd = pr_railtrail();
|
||||
if (rnd & 1)
|
||||
diff.X = clamp<float> (diff.X + ((rnd & 8) ? 1 : -1), -maxdiff, maxdiff);
|
||||
diff.X = clamp<double>(diff.X + ((rnd & 8) ? 1 : -1), -maxdiff, maxdiff);
|
||||
if (rnd & 2)
|
||||
diff.Y = clamp<float> (diff.Y + ((rnd & 16) ? 1 : -1), -maxdiff, maxdiff);
|
||||
diff.Y = clamp<double>(diff.Y + ((rnd & 16) ? 1 : -1), -maxdiff, maxdiff);
|
||||
if (rnd & 4)
|
||||
diff.Z = clamp<float> (diff.Z + ((rnd & 32) ? 1 : -1), -maxdiff, maxdiff);
|
||||
diff.Z = clamp<double>(diff.Z + ((rnd & 32) ? 1 : -1), -maxdiff, maxdiff);
|
||||
}
|
||||
FVector3 postmp = pos + diff;
|
||||
TVector3<double> postmp = pos + diff;
|
||||
|
||||
AActor *thing = Spawn (spawnclass, FLOAT2FIXED(postmp.X), FLOAT2FIXED(postmp.Y), FLOAT2FIXED(postmp.Z), ALLOW_REPLACE);
|
||||
if (thing)
|
||||
|
|
|
@ -88,7 +88,7 @@ void P_RunEffects (void);
|
|||
|
||||
void P_RunEffect (AActor *actor, int effects);
|
||||
|
||||
void P_DrawRailTrail (AActor *source, const FVector3 &start, const FVector3 &end, int color1, int color2, double maxdiff = 0, int flags = 0, PClassActor *spawnclass = NULL, angle_t angle = 0, int duration = 35, double sparsity = 1.0, double drift = 1.0, int SpiralOffset = 270);
|
||||
void P_DrawRailTrail(AActor *source, const TVector3<double> &start, const TVector3<double> &end, int color1, int color2, double maxdiff = 0, int flags = 0, const PClassActor *spawnclass = NULL, angle_t angle = 0, int duration = 35, double sparsity = 1.0, double drift = 1.0, int SpiralOffset = 270);
|
||||
void P_DrawSplash (int count, fixed_t x, fixed_t y, fixed_t z, angle_t angle, int kind);
|
||||
void P_DrawSplash2 (int count, fixed_t x, fixed_t y, fixed_t z, angle_t angle, int updown, int kind);
|
||||
void P_DisconnectEffect (AActor *actor);
|
||||
|
|
|
@ -2957,7 +2957,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_MonsterRail)
|
|||
if (linetarget == NULL)
|
||||
{
|
||||
// We probably won't hit the target, but aim at it anyway so we don't look stupid.
|
||||
FVector2 xydiff(self->target->x - self->x, self->target->y - self->y);
|
||||
TVector2<double> xydiff(self->target->x - self->x, self->target->y - self->y);
|
||||
double zdiff = (self->target->z + (self->target->height>>1)) -
|
||||
(self->z + (self->height>>1) - self->floorclip);
|
||||
self->pitch = int(atan2(zdiff, xydiff.Length()) * ANGLE_180 / -M_PI);
|
||||
|
|
|
@ -727,6 +727,7 @@ bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line,
|
|||
floor->m_Type = DFloor::buildStair; //jff 3/31/98 do not leave uninited
|
||||
//jff 2/27/98 fix uninitialized crush field
|
||||
floor->m_Crush = (!usespecials && speed == 4*FRACUNIT) ? 10 : -1;
|
||||
floor->m_Hexencrush = false;
|
||||
floor->m_ResetCount = reset; // [RH] Tics until reset (0 if never)
|
||||
floor->m_OrgDist = sec->floorplane.d; // [RH] Height to reset to
|
||||
}
|
||||
|
|
|
@ -479,7 +479,7 @@ void P_TraceBleed (int damage, AActor *target); // random direction version
|
|||
bool P_HitFloor (AActor *thing);
|
||||
bool P_HitWater (AActor *thing, sector_t *sec, fixed_t splashx = FIXED_MIN, fixed_t splashy = FIXED_MIN, fixed_t splashz=FIXED_MIN, bool checkabove = false, bool alert = true);
|
||||
void P_CheckSplash(AActor *self, fixed_t distance);
|
||||
void P_RailAttack (AActor *source, int damage, int offset_xy, fixed_t offset_z = 0, int color1 = 0, int color2 = 0, double maxdiff = 0, int flags = 0, PClassActor *puff = NULL, angle_t angleoffset = 0, angle_t pitchoffset = 0, fixed_t distance = 8192*FRACUNIT, int duration = 0, double sparsity = 1.0, double drift = 1.0, PClassActor *spawnclass = NULL, int SpiralOffset = 270); // [RH] Shoot a railgun
|
||||
void P_RailAttack (AActor *source, int damage, int offset_xy, fixed_t offset_z = 0, int color1 = 0, int color2 = 0, double maxdiff = 0, int flags = 0, const PClassActor *puff = NULL, angle_t angleoffset = 0, angle_t pitchoffset = 0, fixed_t distance = 8192*FRACUNIT, int duration = 0, double sparsity = 1.0, double drift = 1.0, const PClassActor *spawnclass = NULL, int SpiralOffset = 270); // [RH] Shoot a railgun
|
||||
|
||||
enum // P_RailAttack / A_RailAttack / A_CustomRailgun / P_DrawRailTrail flags
|
||||
{
|
||||
|
|
|
@ -1064,8 +1064,8 @@ bool PIT_CheckThing(AActor *thing, FCheckPosition &tm)
|
|||
{
|
||||
unblocking = true;
|
||||
}
|
||||
else if (abs(thing->x - tm.thing->x) < (thing->radius+tm.thing->radius)/2 &&
|
||||
abs(thing->y - tm.thing->y) < (thing->radius+tm.thing->radius)/2)
|
||||
else if (abs(thing->x - tm.thing->x) < (thing->radius+tm.thing->radius) &&
|
||||
abs(thing->y - tm.thing->y) < (thing->radius+tm.thing->radius))
|
||||
|
||||
{
|
||||
fixed_t newdist = P_AproxDistance(thing->x - tm.x, thing->y - tm.y);
|
||||
|
@ -4150,12 +4150,12 @@ static ETraceStatus ProcessRailHit(FTraceResults &res, void *userdata)
|
|||
//
|
||||
//
|
||||
//==========================================================================
|
||||
void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, int color1, int color2, double maxdiff, int railflags, PClassActor *puffclass, angle_t angleoffset, angle_t pitchoffset, fixed_t distance, int duration, double sparsity, double drift, PClassActor *spawnclass, int SpiralOffset)
|
||||
void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, int color1, int color2, double maxdiff, int railflags, const PClassActor *puffclass, angle_t angleoffset, angle_t pitchoffset, fixed_t distance, int duration, double sparsity, double drift, const PClassActor *spawnclass, int SpiralOffset)
|
||||
{
|
||||
fixed_t vx, vy, vz;
|
||||
angle_t angle, pitch;
|
||||
fixed_t x1, y1;
|
||||
FVector3 start, end;
|
||||
TVector3<double> start, end;
|
||||
FTraceResults trace;
|
||||
fixed_t shootz;
|
||||
|
||||
|
@ -4278,11 +4278,16 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i
|
|||
// Spawn a decal or puff at the point where the trace ended.
|
||||
if (trace.HitType == TRACE_HitWall)
|
||||
{
|
||||
SpawnShootDecal(source, trace);
|
||||
AActor* puff = NULL;
|
||||
|
||||
if (puffclass != NULL && puffDefaults->flags3 & MF3_ALWAYSPUFF)
|
||||
{
|
||||
P_SpawnPuff(source, puffclass, trace.X, trace.Y, trace.Z, (source->angle + angleoffset) - ANG90, 1, 0);
|
||||
puff = P_SpawnPuff(source, puffclass, trace.X, trace.Y, trace.Z, (source->angle + angleoffset) - ANG90, 1, 0);
|
||||
}
|
||||
if (puff != NULL && puffDefaults->flags7 & MF7_FORCEDECAL && puff->DecalGenerator)
|
||||
SpawnShootDecal(puff, trace);
|
||||
else
|
||||
SpawnShootDecal(source, trace);
|
||||
|
||||
}
|
||||
if (thepuff != NULL)
|
||||
|
@ -4302,9 +4307,9 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i
|
|||
}
|
||||
|
||||
// Draw the slug's trail.
|
||||
end.X = FIXED2FLOAT(trace.X);
|
||||
end.Y = FIXED2FLOAT(trace.Y);
|
||||
end.Z = FIXED2FLOAT(trace.Z);
|
||||
end.X = FIXED2DBL(trace.X);
|
||||
end.Y = FIXED2DBL(trace.Y);
|
||||
end.Z = FIXED2DBL(trace.Z);
|
||||
P_DrawRailTrail(source, start, end, color1, color2, maxdiff, railflags, spawnclass, source->angle + angleoffset, duration, sparsity, drift, SpiralOffset);
|
||||
}
|
||||
|
||||
|
|
|
@ -177,11 +177,11 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
|||
|
||||
if ((TexMan.FindSwitch(side->GetTexture(side_t::top))) != NULL)
|
||||
{
|
||||
return (user->z + user->height >= open.top);
|
||||
return (user->z + user->height > open.top);
|
||||
}
|
||||
else if ((TexMan.FindSwitch(side->GetTexture(side_t::bottom))) != NULL)
|
||||
{
|
||||
return (user->z <= open.bottom);
|
||||
return (user->z < open.bottom);
|
||||
}
|
||||
else if ((flags & ML_3DMIDTEX) || (TexMan.FindSwitch(side->GetTexture(side_t::mid))) != NULL)
|
||||
{
|
||||
|
@ -194,7 +194,7 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
|||
else
|
||||
{
|
||||
// no switch found. Check whether the player can touch either top or bottom texture
|
||||
return (user->z + user->height >= open.top) || (user->z <= open.bottom);
|
||||
return (user->z + user->height > open.top) || (user->z < open.bottom);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ void FTagManager::AddSectorTag(int sector, int tag)
|
|||
|
||||
void FTagManager::RemoveSectorTags(int sect)
|
||||
{
|
||||
if (startForSector.Size() > 0)
|
||||
if (startForSector.Size() > (unsigned int)sect)
|
||||
{
|
||||
int start = startForSector[sect];
|
||||
if (start >= 0)
|
||||
|
|
|
@ -339,6 +339,7 @@ VideoModes[] =
|
|||
{ 1600, 900 }, // 16:9
|
||||
{ 1600, 1000 }, // 16:10
|
||||
{ 1600, 1200 },
|
||||
{ 1680, 1050 }, // 16:10
|
||||
{ 1920, 1080 },
|
||||
{ 1920, 1200 },
|
||||
{ 2048, 1536 },
|
||||
|
|
|
@ -178,6 +178,7 @@ static MiniModeInfo WinModes[] =
|
|||
{ 1600, 900 }, // 16:9
|
||||
{ 1600, 1000 }, // 16:10
|
||||
{ 1600, 1200 },
|
||||
{ 1680, 1050 }, // 16:10
|
||||
{ 1920, 1080 },
|
||||
{ 1920, 1200 },
|
||||
{ 2048, 1536 },
|
||||
|
|
|
@ -924,6 +924,8 @@ void OpenALSoundRenderer::SetSfxVolume(float volume)
|
|||
schan = schan->NextChan;
|
||||
}
|
||||
|
||||
alProcessUpdatesSOFT();
|
||||
|
||||
getALError();
|
||||
}
|
||||
|
||||
|
|
|
@ -395,6 +395,11 @@ void FTextureManager::ParseAnim (FScanner &sc, int usetype)
|
|||
}
|
||||
else if (sc.Compare ("range"))
|
||||
{
|
||||
if (picnum.Exists() && Texture(picnum)->Name.IsEmpty())
|
||||
{
|
||||
// long texture name: We cannot do ranged anims on these because they have no defined order
|
||||
sc.ScriptError ("You cannot use \"range\" for long texture names.");
|
||||
}
|
||||
if (defined == 2)
|
||||
{
|
||||
sc.ScriptError ("You cannot use \"pic\" and \"range\" together in a single animation.");
|
||||
|
@ -456,12 +461,20 @@ FAnimDef *FTextureManager::ParseRangeAnim (FScanner &sc, FTextureID picnum, int
|
|||
|
||||
type = FAnimDef::ANIM_Forward;
|
||||
framenum = ParseFramenum (sc, picnum, usetype, missing);
|
||||
|
||||
ParseTime (sc, min, max);
|
||||
|
||||
if (framenum == picnum || !picnum.Exists())
|
||||
if (framenum == picnum || !picnum.Exists() || !framenum.Exists())
|
||||
{
|
||||
return NULL; // Animation is only one frame or does not exist
|
||||
}
|
||||
|
||||
if (Texture(framenum)->Name.IsEmpty())
|
||||
{
|
||||
// long texture name: We cannot do ranged anims on these because they have no defined order
|
||||
sc.ScriptError ("You cannot use \"range\" for long texture names.");
|
||||
}
|
||||
|
||||
if (framenum < picnum)
|
||||
{
|
||||
type = FAnimDef::ANIM_Backward;
|
||||
|
@ -570,7 +583,7 @@ void FTextureManager::ParseTime (FScanner &sc, DWORD &min, DWORD &max)
|
|||
|
||||
void FTextureManager::ParseWarp(FScanner &sc)
|
||||
{
|
||||
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny | TEXMAN_ShortNameOnly;
|
||||
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny;
|
||||
bool isflat = false;
|
||||
bool type2 = sc.Compare ("warp2"); // [GRB]
|
||||
sc.MustGetString ();
|
||||
|
@ -591,8 +604,16 @@ void FTextureManager::ParseWarp(FScanner &sc)
|
|||
FTextureID picnum = CheckForTexture (sc.String, isflat ? FTexture::TEX_Flat : FTexture::TEX_Wall, texflags);
|
||||
if (picnum.isValid())
|
||||
{
|
||||
|
||||
FTexture *warper = Texture(picnum);
|
||||
|
||||
if (warper->Name.IsEmpty())
|
||||
{
|
||||
// long texture name: We cannot do warps on these due to the way the texture manager implements warping as a texture replacement.
|
||||
sc.ScriptError ("You cannot use \"warp\" for long texture names.");
|
||||
}
|
||||
|
||||
|
||||
// don't warp a texture more than once
|
||||
if (!warper->bWarped)
|
||||
{
|
||||
|
|
|
@ -1782,7 +1782,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CustomRailgun)
|
|||
if (linetarget == NULL && aim)
|
||||
{
|
||||
// We probably won't hit the target, but aim at it anyway so we don't look stupid.
|
||||
FVector2 xydiff(self->target->x - self->x, self->target->y - self->y);
|
||||
TVector2<double> xydiff(self->target->x - self->x, self->target->y - self->y);
|
||||
double zdiff = (self->target->z + (self->target->height>>1)) -
|
||||
(self->z + (self->height>>1) - self->floorclip);
|
||||
self->pitch = int(atan2(zdiff, xydiff.Length()) * ANGLE_180 / -M_PI);
|
||||
|
|
|
@ -110,6 +110,11 @@
|
|||
#include "rawinput.h"
|
||||
|
||||
|
||||
// Compensate for w32api's lack
|
||||
#ifndef GET_XBUTTON_WPARAM
|
||||
#define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam))
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define INGAME_PRIORITY_CLASS NORMAL_PRIORITY_CLASS
|
||||
|
|
|
@ -47,6 +47,15 @@ FString I_GetFromClipboard (bool windows_has_no_selection_clipboard);
|
|||
|
||||
void I_GetEvent();
|
||||
|
||||
enum
|
||||
{
|
||||
INPUT_DIJoy,
|
||||
INPUT_XInput,
|
||||
INPUT_RawPS2,
|
||||
NUM_JOYDEVICES
|
||||
};
|
||||
|
||||
|
||||
#ifdef USE_WINDOWS_DWORD
|
||||
#include "m_joy.h"
|
||||
|
||||
|
@ -121,14 +130,6 @@ public:
|
|||
virtual IJoystickConfig *Rescan() = 0;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
INPUT_DIJoy,
|
||||
INPUT_XInput,
|
||||
INPUT_RawPS2,
|
||||
NUM_JOYDEVICES
|
||||
};
|
||||
|
||||
extern FJoystickCollection *JoyDevices[NUM_JOYDEVICES];
|
||||
|
||||
void I_StartupMouse();
|
||||
|
|
|
@ -106,6 +106,7 @@ LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
|
|||
void CreateCrashLog (char *custominfo, DWORD customsize, HWND richedit);
|
||||
void DisplayCrashLog ();
|
||||
extern BYTE *ST_Util_BitsForBitmap (BITMAPINFO *bitmap_info);
|
||||
void I_FlushBufferedConsoleStuff();
|
||||
|
||||
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
||||
|
||||
|
@ -128,6 +129,7 @@ HANDLE MainThread;
|
|||
DWORD MainThreadID;
|
||||
HANDLE StdOut;
|
||||
bool FancyStdOut, AttachedStdOut;
|
||||
bool ConWindowHidden;
|
||||
|
||||
// The main window
|
||||
HWND Window;
|
||||
|
@ -644,6 +646,7 @@ void I_SetWndProc()
|
|||
SetWindowLongPtr (Window, GWLP_USERDATA, 1);
|
||||
SetWindowLongPtr (Window, GWLP_WNDPROC, (WLONG_PTR)WndProc);
|
||||
ShowWindow (ConWindow, SW_HIDE);
|
||||
ConWindowHidden = true;
|
||||
ShowWindow (GameTitleWindow, SW_HIDE);
|
||||
I_InitInput (Window);
|
||||
}
|
||||
|
@ -675,8 +678,10 @@ void RestoreConView()
|
|||
|
||||
SetWindowLongPtr (Window, GWLP_WNDPROC, (WLONG_PTR)LConProc);
|
||||
ShowWindow (ConWindow, SW_SHOW);
|
||||
ConWindowHidden = false;
|
||||
ShowWindow (GameTitleWindow, SW_SHOW);
|
||||
I_ShutdownInput (); // Make sure the mouse pointer is available.
|
||||
I_FlushBufferedConsoleStuff();
|
||||
// Make sure the progress bar isn't visible.
|
||||
if (StartScreen != NULL)
|
||||
{
|
||||
|
|
|
@ -132,6 +132,7 @@ extern bool FancyStdOut;
|
|||
extern HINSTANCE g_hInst;
|
||||
extern FILE *Logfile;
|
||||
extern bool NativeMouse;
|
||||
extern bool ConWindowHidden;
|
||||
|
||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||
|
||||
|
@ -912,12 +913,11 @@ void ToEditControl(HWND edit, const char *buf, wchar_t *wbuf, int bpos)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void I_PrintStr(const char *cp)
|
||||
static void DoPrintStr(const char *cp, HWND edit, HANDLE StdOut)
|
||||
{
|
||||
if (ConWindow == NULL && StdOut == NULL)
|
||||
if (edit == NULL && StdOut == NULL)
|
||||
return;
|
||||
|
||||
HWND edit = ConWindow;
|
||||
char buf[256];
|
||||
wchar_t wbuf[countof(buf)];
|
||||
int bpos = 0;
|
||||
|
@ -1049,6 +1049,30 @@ void I_PrintStr(const char *cp)
|
|||
}
|
||||
}
|
||||
|
||||
static TArray<FString> bufferedConsoleStuff;
|
||||
|
||||
void I_PrintStr(const char *cp)
|
||||
{
|
||||
if (ConWindowHidden)
|
||||
{
|
||||
bufferedConsoleStuff.Push(cp);
|
||||
DoPrintStr(cp, NULL, StdOut);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoPrintStr(cp, ConWindow, StdOut);
|
||||
}
|
||||
}
|
||||
|
||||
void I_FlushBufferedConsoleStuff()
|
||||
{
|
||||
for (unsigned i = 0; i < bufferedConsoleStuff.Size(); i++)
|
||||
{
|
||||
DoPrintStr(bufferedConsoleStuff[i], ConWindow, NULL);
|
||||
}
|
||||
bufferedConsoleStuff.Clear();
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// SetQueryIWAD
|
||||
|
|
|
@ -793,6 +793,8 @@ void I_StartupXInput()
|
|||
|
||||
#else // NO_XINPUT
|
||||
|
||||
#include "i_input.h"
|
||||
|
||||
void I_StartupXInput()
|
||||
{
|
||||
JoyDevices[INPUT_XInput] = NULL;
|
||||
|
|
|
@ -209,7 +209,7 @@ finline static uint32 xs_FloorToUInt(real64 val)
|
|||
|
||||
finline static uint32 xs_CeilToUInt(real64 val)
|
||||
{
|
||||
return (uint32)xs_CeilToUInt(val);
|
||||
return (uint32)xs_CeilToInt(val);
|
||||
}
|
||||
|
||||
finline static uint32 xs_RoundToUInt(real64 val)
|
||||
|
|
|
@ -386,6 +386,7 @@ D62DCA9EC226DE49108D5DD9271F7631 // Cheogsh 2 map04
|
|||
setthingz 1649 528
|
||||
}
|
||||
|
||||
E89CCC7E155F1032F693359CC219BE6C // hexen.wad map30
|
||||
B9DFF13207EACAC675C71D82624D0007 // XtheaterIII map01
|
||||
{
|
||||
DisablePushWindowCheck
|
||||
|
|
25
wadsrc/static/language.eng
Normal file
25
wadsrc/static/language.eng
Normal file
|
@ -0,0 +1,25 @@
|
|||
/* British English */
|
||||
|
||||
[eng]
|
||||
|
||||
GOTARMOR = "Picked up the armour.";
|
||||
GOTMEGA = "Picked up the MegaArmour!";
|
||||
GOTARMBONUS = "Picked up an armour bonus.";
|
||||
|
||||
SCORE_COLOR = "COLOUR";
|
||||
|
||||
TAG_SHADOWARMOR = "Shadow Armour";
|
||||
TAG_METALARMOR = "Metal Armour";
|
||||
TAG_LEATHER = "Leather Armour";
|
||||
TAG_ARMORER = "Armourer";
|
||||
|
||||
TXT_ARMOR1 = "MESH ARMOUR";
|
||||
|
||||
TXT_METALARMOR = "You picked up the Metal Armour.";
|
||||
TXT_LEATHERARMOR = "You picked up the Leather Armour.";
|
||||
TXT_SHADOWARMOR = "You picked up the Shadow armour.";
|
||||
|
||||
GOTCHEXARMOR = "Picked up the Chex(R) Armour.";
|
||||
GOTSUPERCHEXARMOR = "Picked up the Super Chex(R) Armour!";
|
||||
|
||||
OB_BIPEDICUS2 = "%o was slimed by an armoured bipedicus.";
|
Loading…
Reference in a new issue