Compare commits
3 Commits
f3596f2aef
...
9d3ec2b89c
Author | SHA1 | Date |
---|---|---|
Marco Cawthorne | 9d3ec2b89c | |
Marco Cawthorne | ba23ecfab0 | |
Marco Cawthorne | 64c793126c |
36
README.md
36
README.md
|
@ -11,29 +11,29 @@ are present.
|
|||
This is 100% original code, feel free to audit however you wish.
|
||||
No proprietary SDKs have been looked at or taken apart, unlike similar projects.
|
||||
|
||||
The engine you want to use to run this is FTEQW (https://www.fteqw.org), which is a project
|
||||
unrelated to this. It just happens to support the file-formats FreeHL needs.
|
||||
|
||||
![Preview 1](img/preview1.jpg)
|
||||
![Preview 2](img/preview2.jpg)
|
||||
![Preview 3](img/preview3.jpg)
|
||||
![Preview 4](img/preview4.jpg)
|
||||
|
||||
## Installing
|
||||
To run it, all you need is [FTEQW](https://www.fteqw.org) and [the latest release .pk3 file](https://www.frag-net.com/pkgs/package_valve.pk3), which you save into `Half-Life/valve/`. That's about it. You can install updates through the **Configuration > Updates** menu.
|
||||
|
||||
## Building
|
||||
Clone the repository into the Nuclide-SDK:
|
||||
Clone the repository into the Nuclide-SDK and build it:
|
||||
|
||||
> git clone REPOURL valve
|
||||
```
|
||||
$ git clone https://code.idtech.space/fn/valve valve
|
||||
$ SKIP_UPDATE=1 SKIP_RADIANT=1 ./build_game.sh valve
|
||||
```
|
||||
|
||||
then either run Nuclide's ./build_game.sh shell script, or issue 'make' inside
|
||||
./valve/src!
|
||||
|
||||
Obviously make sure that Nuclide has fteqw and fteqcc set-up for building and that you have some proficiency in QuakeC.
|
||||
You can also issue `make` inside `valve/src/`, but it won't build an `entities.def` file for use in Radiant (level editor family).
|
||||
|
||||
## Notes
|
||||
If you're playing a mod that relies on FreeHL, selecting it from the Custom Game
|
||||
menu alone works fine. However if you want to launch it via the command-line
|
||||
you need to make sure to add `-game valve` before `-game modname`.
|
||||
The order is important.
|
||||
The engine should automatically detect Half-Life when placed within the game directory, however you may need to pass `-halflife` just in case you have one massive directory with multiple FTE-supported games in it for example.
|
||||
|
||||
You can also launch mods like this: `fteqw -halflife -game cstrike`
|
||||
Useful for development, so you don't always have to use the **Custom Game** menu.
|
||||
|
||||
## Community
|
||||
|
||||
|
@ -48,10 +48,18 @@ and other such things. It's bridged with the Matrix room of the same name!
|
|||
### Others
|
||||
We've had people ask in the oddest of places for help, please don't do that.
|
||||
|
||||
## Special Thanks
|
||||
|
||||
- Spike for FTEQW and for being the most helpful person all around!
|
||||
- Xylemon for the hundreds of test maps, verifying entity and game-logic behaviour
|
||||
- Theuaredead`, preston22, dqus for various patches
|
||||
- To my supporters on Patreon, who are always eager to follow what I do.
|
||||
- Any and all people trying it, tinkering with it etc. :)
|
||||
|
||||
## License
|
||||
ISC License
|
||||
|
||||
Copyright (c) 2016-2021 Marco Hladik <marco@icculus.org>
|
||||
Copyright (c) 2016-2024 Marco Hladik <marco@icculus.org>
|
||||
|
||||
Permission to use, copy, modify, and distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
|
|
|
@ -110,6 +110,10 @@ Obituary_Add(string attacker, string victim, float weapon, float flags)
|
|||
int x, y;
|
||||
x = OBITUARY_LINES;
|
||||
|
||||
if (attacker == "worldspawn" || attacker == victim) {
|
||||
attacker = "";
|
||||
}
|
||||
|
||||
/* we're not full yet, so fill up the buffer */
|
||||
if (g_obituary_count < x) {
|
||||
y = g_obituary_count;
|
||||
|
@ -157,6 +161,8 @@ Obituary_Draw(void)
|
|||
g_obituary[i].icon = g_obituary[i+1].icon;
|
||||
}
|
||||
g_obituary[OBITUARY_LINES-1].attacker = "";
|
||||
g_obituary[OBITUARY_LINES-1].victim = "";
|
||||
g_obituary[OBITUARY_LINES-1].icon = 0;
|
||||
|
||||
g_obituary_time = OBITUARY_TIME;
|
||||
g_obituary_count--;
|
||||
|
@ -170,7 +176,7 @@ Obituary_Draw(void)
|
|||
for (i = 0; i < OBITUARY_LINES; i++) {
|
||||
string a, v;
|
||||
|
||||
if (!g_obituary[i].attacker) {
|
||||
if (!g_obituary[i].victim) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -123,15 +123,13 @@ HLGameRules::PlayerPostFrame(NSClientPlayer pl)
|
|||
void
|
||||
HLGameRules::PlayerConnect(NSClientPlayer pl)
|
||||
{
|
||||
if (Plugin_PlayerConnect(pl) == FALSE)
|
||||
bprint(PRINT_HIGH, sprintf("%s connected\n", pl.netname));
|
||||
super::PlayerConnect(pl);
|
||||
}
|
||||
|
||||
void
|
||||
HLGameRules::PlayerDisconnect(NSClientPlayer pl)
|
||||
{
|
||||
if (Plugin_PlayerDisconnect(pl) == FALSE)
|
||||
bprint(PRINT_HIGH, sprintf("%s disconnected\n", pl.netname));
|
||||
super::PlayerDisconnect(pl);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -58,18 +58,23 @@ entity
|
|||
FX_Corpse_Spawn(player pl, float anim)
|
||||
{
|
||||
NSRenderableEntity body_next = (NSRenderableEntity)FX_Corpse_Next();
|
||||
setorigin(body_next, pl.origin + [0,0,32]);
|
||||
body_next.SetMovetype(MOVETYPE_TOSS);
|
||||
|
||||
if (pl.flags & FL_CROUCHING) {
|
||||
body_next.SetOrigin(pl.GetOrigin() + [0,0,32]);
|
||||
} else {
|
||||
body_next.SetOrigin(pl.GetOrigin());
|
||||
}
|
||||
|
||||
body_next.SetMovetype(MOVETYPE_BOUNCE);
|
||||
body_next.SetSolid(SOLID_CORPSE);
|
||||
setmodel(body_next, pl.model);
|
||||
setsize(body_next, VEC_HULL_MIN, [16, 16, -16]);
|
||||
body_next.SetModelindex(pl.modelindex);
|
||||
body_next.SetAngles(pl.angles);
|
||||
body_next.velocity = (pl.velocity) + [0,0,120];
|
||||
body_next.colormap = pl.colormap;
|
||||
body_next.SetModel(pl.GetModel());
|
||||
body_next.SetSize(VEC_HULL_MIN, [16, 16, -16]);
|
||||
body_next.SetAngles(pl.GetAngles());
|
||||
body_next.SetVelocity(pl.GetVelocity() + [0,0,120]);
|
||||
body_next.SetFrame(anim);
|
||||
body_next.frame1time = 0.0f;
|
||||
body_next.ScheduleThink(FX_Corpse_Update, 0.0f);
|
||||
body_next.colormap = pl.colormap;
|
||||
body_next.frame1time = 0.0f;
|
||||
return (entity)body_next;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -3,7 +3,7 @@ entityDef monster_alien_grunt
|
|||
"spawnclass" "NSMonster"
|
||||
"model" "models/agrunt.mdl"
|
||||
"netname" "Alien Grunt"
|
||||
"health" "skill:alien_grunt_health"
|
||||
"health" "skill:agrunt_health"
|
||||
"mins" "-16 -16 0"
|
||||
"maxs" "16 16 72"
|
||||
"eye_height" "64"
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
monster_generic.thud
|
||||
BodyDrop.Light
|
||||
{
|
||||
sample common/bodydrop1.wav
|
||||
sample common/bodydrop2.wav
|
||||
sample common/bodydrop3.wav
|
||||
}
|
||||
|
||||
BodyDrop.Heavy
|
||||
{
|
||||
sample common/bodydrop1.wav
|
||||
sample common/bodydrop4.wav
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue