Commit graph

285 commits

Author SHA1 Message Date
David Carlier
12509f6242 habdful of little simplifications. 2022-02-27 09:03:06 +00:00
Yamagi
7004565c72 Reset the clip mask in ThrowHead() to MASK_SHOT.
xatrix uses MASK_SHOT and it sounds saner than 0.
2022-02-05 17:26:48 +01:00
Yamagi
a0cd32dddb Fix door_go_up(), G_UseTargets() exiting early if no activator is given.
The problem in door_go_up() may prevent doors from crushing something
blocking them. The problem in G_UseTargets() may prevent targets from
getting killed or fired.

Pointed out by @maraakate.
2022-02-05 17:02:24 +01:00
Yamagi
9d827b13da Force an empty clip mask for thrown heads.
The ThrowHead() and ThrowClientHead() functions are special. They
transform the entity given in `self` (mostly the caller itself) into a
ripped off head. They don't reset the entities clip mask, which may
cause problems in interactions with other entities. Fix that by reseting
the clip mask to `0`. `0` should be save, because that's the default and
and least SV_TestEntityPosition() handles `0` clip masks.

Suggested by @BjossiAlfreds.
2022-02-05 16:55:12 +01:00
Yamagi
acf92bdd08 Add back call to rotation_blocked() lost in 896bb48.
If `ent->dmg` is `0` it's set to `2`:

```
if (!ent->dmg)
{
	ent->dmg = 2;
}
```

This enforces func_rotate dealing at least `2` damage points per tick.
Vanilla Quake II had this code a few lines below:

```
if (ent->dmg)
{
	ent->blocked = rotating_blocked;
}
```

The if clause is always true. PVS studio complained about that. By
mistake the whole block was removed, essentially preveting func_rotate
from freeing itself when blocked. This broke at least the 'Emulsifying
Flesh Press' in the fact2.bsp.

Closes #786.
2022-02-05 16:26:37 +01:00
BjossiAlfreds
65b1cd167c Moved code hacks for waste3 to waste3.ent and addressed more issues with that map 2021-12-11 14:02:09 +00:00
BjossiAlfreds
6df8052f10 Fixed player_noise entity leak and improved stability surrounding player noises 2021-11-06 02:25:14 +00:00
Yamagi
84746289fa Move setting health for soldiers above SP_monster_soldier_x().
Otherwise the sound effects may desynchronize after savegame load.
Pointed out by @BjossiAlfreds.
2021-11-05 07:07:03 +01:00
Yamagi
e42d2736fa Fix soldiers never showing their pain skins as long as they're alive.
Since `self->helth` is set after calling `master_start()`
`self->max_health is always 0. Found by @drakonorodny and
analyzed by @BjossiAlfreds. Closes #761.
2021-11-04 18:35:47 +01:00
BjossiAlfreds
c3b57bc81d Made the game able to handle entity overload better 2021-10-29 17:54:26 +00:00
De-Seppe
b471578c3e Rename variable to conform to naming guidelines
Change the name of the cvar machinegun_norecoil to g_machinegun_norecoil to conform to the naming guidelines
2021-09-27 18:29:37 +02:00
De-Seppe
41a134a195 Add cvar machinegun_norecoil
Add cvar machinegun_norecoil
This cvar allows to disable machinegun recoil in single player.
The default value is the original Quake 2 behaviour.
2021-09-27 12:56:22 +02:00
Yamagi
1ff3760c76 Refine the g_footstep cvar.
There were complains that always generating footsteps is annoying,
because there will be footsteps while swimming or jumping. Refine
the cvar a little bit:

* `0`: No footsteps at all.
* `1`: Vanilla Quake II behavior.
* `2`: Always footsteps as long as the player has a ground entity.
* `3`: Always footsteps.

The changes the meaning of the values, `2` has become `3`.

Closes #738.
2021-08-25 18:34:24 +02:00
BjossiAlfreds
d41d90d8b3 Fix for some player sound bugs 2021-04-30 01:43:15 +00:00
BjossiAlfreds
75d671656e Shark bbox fix and added check for inuse after entity thinking 2021-04-18 01:07:07 +00:00
BjossiAlfreds
23f55b72c7 Map fixes for old and newly discovered bugs + removed code hacks 2021-04-08 13:42:18 +00:00
David Carlier
4bbf7ef27a game data packing representation of the headers 2021-04-01 12:18:13 +01:00
Yamagi
ee945625d3 Add a cvar g_commanderbody_nogod to make the com. body destructable.
The commanders body entity is special, because it's spawned in god mode.
That's no problem in the baseq2 and addons campaigns. But it may break
some custom maps and prevents some hacks, one example is putting the
entity inside an killbox.

Submitted by Евгений T.
2021-03-31 19:28:20 +02:00
BjossiAlfreds
fe517fd755 Console warning and fix for triggered monsters with no targetname 2021-03-28 17:16:36 +00:00
Yamagi
4ef0a71b63 Fix another mapbug in city2.bsp.
There's a floater spawned in but never triggered, messing up the monster
count on medium and hard difficulty.

Closes #674.
2021-03-10 09:42:54 +01:00
Yamagi
ae9a248e9e Add a cvar g_footsteps to control the generation of footstep sound.
1: The Vanilla Quake II behaviour, footsteps are generated when the
   player is faster than 255.
0: Footstep sounds are never generated.
2: Footstep sounds are always generated.

Defaults to `1`, cheat protected to `1`.

Closes #666.
2021-03-02 15:08:23 +01:00
Yamagi
69f029e236 Fix mapbug in lab.bsp: monstercount is off by two on medium skill.
In lab.bsp near the commanders head two parasites spawn in an hidden
place in the ceiling. On hard difficulty the box cracks open, exposing
the parasites. On medium skill it doesn't. Work around that by lowering
the monster count by 2.

Closes #668.
2021-03-02 14:51:22 +01:00
Yamagi
4c16fbe6dc Fix mapbug in cool1.bsp: monstercount is off by one on medium skill.
When coming down the river near the end on hard difficulty a gladiator
breaks out of a big metal crate to the left. On medium difficulty the
gladiator is spawned but never triggered. Work around this by lowering
the monstercount by one when skill is set to 1. This doesn't happen on
easy difficulty.

Closes #667.
2021-03-02 14:44:35 +01:00
Daniel Gibson
9bc2fe29fe Clean up savegame's ReadGame() a bit
less duplicate code, more readable usage of strcmp()
2021-01-12 07:12:19 +01:00
Daniel Gibson
ee7923a9dd Fix architecture detection on Windows in Makefile, bump SAVEGAMEVER
$PROCESSOR_ARCHITECTURE seems to contain the architecture of the host,
but we need the architecture the current MinGW shell is targeting.
$MINGW_CHOST seems to be just that, and on my system it's either
i686-w64-mingw32 (mingw32.exe) or x86_64-w64-mingw32 (mingw64.exe)
(No idea what it looks like for Windows on ARM...)

As fixing this would otherwise break existing savegames, I bumped the
SAVEGAMEVER to "YQ2-4" and added a quirk for older savegameversions:
On Windows i386 savegames that contain "AMD64" instead of "i386" as
architecture are also accepted.
(For YQ2-1 this didn't seem necessary, apparently "i386" was hardcoded)
2021-01-12 05:04:11 +01:00
Denis Pauk
be2e91e142 Sync LoadSP2, turret_driver_die, SP_info_player_intermission declarations
src/client/refresh/gl1/gl1_model.c:39:6: warning: type of ‘LoadSP2’ does not match original declaration [-Wlto-type-mismatch]
src/game/g_turret.c:29:6: warning: type of ‘infantry_die’ does not match original declaration [-Wlto-type-mismatch]
src/game/g_spawn.c:43:6: warning: type of ‘SP_info_player_intermission’ does not match original declaration [-Wlto-type-mismatch]
2020-12-16 22:44:38 +02:00
Michael Barth
7e025a5eac Fix P_ProjectSource forward declaration 2020-12-08 06:39:39 -05:00
Daniel Gibson
fd0c058b2e Implemented coop_elevator_delay cvar (for func_plat)
In coop it's often hard to get on the same elevator together, because
they're immediately triggered once the first player steps on it.
This cvar sets a delay (1 second by default) for the elevator to wait
before moving, so other players have some time to get on it.
If you like elevators/platforms that suck, just set it to `0` :-P

Currently only used in func_plat, if it turns out that other entities
are used for automatically triggered platforms, we'll have to adapt
those as well (I guess wait_and_change() is generally useful for that).

We're not bumping the savegame version because they should only break in
an uncommon corner case: *Coop* savegames created with clients including
this change will not work on older clients - SP savegames are not
affected and old savegames on new clients also still work.
2020-08-10 14:27:35 +02:00
Yamagi
1a6dea5a0b Add coop_pickup_weapons, allow a weapon to be taken several times.
In coop a weapon can be picked up only once. That's annoying, because in
coop ammunition is sparse and not getting the ammunition that comes with
a weapons make things worse. When `coop_pickup_weapons` is set to `1` a
weapon may be picked up if:

1) The player doesn't have the weapon in their inventory.
2) No other player has already picked it up.
2020-08-10 13:52:33 +02:00
Yamagi
ea0c0c04a2 Fix crash with some projectiles generating sound targets.
Some projectiles like grenades or rockets are classified as enemies.
Their explosion spawn a sound entity, monsters should move to that. But
the projectile is destroyed when exploding, it's entity struct is set to
NULL. Therefor the self->enemy pointer is also NULL. The self->enemy
check was removed in bc5f5698. Work around this by pretending that the
enemy is already there.

This was reported by @Soldy, closes yquake2/xatrix#56.
2020-06-04 08:12:36 +02:00
Yamagi
7f339952cb
Merge pull request #575 from kondrak/master
Fixed the Jorg skin bug present since the original Quake 2 release.
2020-05-11 12:59:06 +02:00
Krzysztof Kondrak
6d9930fd75 Fixed the Jorg skin bug present since the original Quake 2 release. 2020-05-10 15:00:34 +02:00
BjossiAlfreds
8de243a42f Fix for gunner AI freeze bug 2020-05-08 22:10:34 +00:00
Mitchell Richters
85fb607010 Implement accurate-aiming CVAR in baseq2 game code. 2020-04-21 06:17:40 +10:00
BjossiAlfreds
ef5c0adf0c Fix for some items playing wrong sound when instantly used 2020-04-11 01:50:57 +00:00
Simon McVittie
6f6e27644e Add a separate noreturn macro for function pointers
C11 _Noreturn is only accepted on function declarations, not on function
pointers, so we can't use it on callbacks like game_import_t.error and
refimport_t.Sys_Error. Use a separate macro for those.

The problematic situation doesn't currently happen because the Makefile
hard-codes -std=gnu99, which disables C11 features; but removing
-std=gnu99 (resulting in the compiler's default, currently gnu11) causes
compilation failures with at least gcc 9.x.

Signed-off-by: Simon McVittie <smcv@debian.org>
2020-03-21 18:32:15 +00:00
Yamagi
6b7af81cd2 Change show_hostile from int to float and remove unnecessary casts.
In the vanilla code show_hostile was a qboolean what's clearly wrong.
For wome reasons I don't remember I changed it to an integer and added
the casts. This is problematic because show_hostile is derived from
level.time which is a float. The loss in precision broke some corner
cases like monsters becoming activated when they shouldn't.

Found, analyzed and reported by @BjossiAlfreds #525. Closes #525.
2020-03-10 10:24:44 +01:00
Yamagi
340b32827f Limit the fix against black debris (1f1a45a) to gibs, debris, monsters.
Pushing all entities slightly away from non-horizontal may let items to
slide to unreachable locations, or let monsters getting stuck.

This is part of yquake2/xatrix#50
2020-02-19 18:49:54 +01:00
Daniel Gibson
95a3e46bdd PVS Studio fixes for game/ 2020-02-10 17:55:41 +01:00
Daniel Gibson
ae3723c900 YQ2_ATTR_NORETURN for functions that don't return (Sys_Error() etc)
must be used in front of functions, not behind (the GCC __attribute__
allows both, but MSVC and C11 don't!)
2020-02-10 17:55:41 +01:00
Denis Pauk
b1d3ddebbc use vsnprint in Com_Printf functions 2020-01-30 22:28:13 +02:00
NeonKnightOA
6047c64e36 Easier handling of skill levels by using defines instead of numbers 2020-01-22 12:57:37 -03:00
BjossiAlfreds
18d38c46e0 Monster frame handling improvements 2020-01-11 22:38:14 +00:00
BjossiAlfreds
115c5cf619 Fix for insane marines not firing deathtarget right away 2020-01-02 23:27:45 +00:00
BjossiAlfreds
8be755caa2 Quad sound for quadded hand grenades 2019-10-01 21:07:46 +00:00
BjossiAlfreds
3074c2ddf8 Added cycleweap command for generalized xatrix-like weapon switching 2019-09-29 11:57:09 +00:00
BjossiAlfreds
8b62c972ac Added missing '== RANGE_MELEE' 2019-09-28 03:13:51 +00:00
Yamagi
a0d2604030
Merge pull request #468 from BjossiAlfreds/dodge
Fix monsters being disoriented after ducking
2019-09-27 11:08:50 +02:00
BjossiAlfreds
cfedd92b4f Fix monsters being disoriented after ducking 2019-09-27 00:16:21 +00:00
BjossiAlfreds
981801f6b3 Merge branch 'master' into makron 2019-09-26 13:56:27 +00:00