Compare commits
3 Commits
0f445d8e2b
...
8e3f5f2752
Author | SHA1 | Date |
---|---|---|
Marco Cawthorne | 8e3f5f2752 | |
Marco Cawthorne | 7994088423 | |
Marco Cawthorne | ab3d4a9346 |
79
README.md
79
README.md
|
@ -23,62 +23,40 @@ The engine you want to use to run this is FTEQW (https://www.fteqw.org), which i
|
|||
![Preview 4](img/preview4.jpg)
|
||||
|
||||
## Features and Improvements
|
||||
* Native support for Windows/Mac/Linux/BSD and wherever else FTEQW runs on
|
||||
* Better support for higher display modes and aspect ratios
|
||||
* Much easier modding by having the entire logic be in modern QuakeC
|
||||
* Netcode that's always improving and more advanced prediction
|
||||
* Open-source code for transparent modding
|
||||
* Very permissive license (ISC/BSD)
|
||||
* The code doesn't rely on others work, so nobody can shut it down :-)
|
||||
|
||||
## Installation
|
||||
Grab the latest binary release, extract and put an FTEQW engine binary (for your platform) into the same folder as the default.fmf and readme file.
|
||||
Get FTEQW here: https://www.fteqw.org/
|
||||
- Native support for Windows/Mac/Linux/BSD and wherever else FTEQW runs on
|
||||
- Better support for higher display modes and aspect ratios
|
||||
- Much easier modding by having the entire logic be in modern QuakeC
|
||||
- Netcode that's always improving and more advanced prediction
|
||||
- Open-source code for transparent modding
|
||||
- Very permissive license (ISC/BSD)
|
||||
- The code doesn't rely on others work, so nobody can shut it down :-)
|
||||
|
||||
Run the engine and when in-game download the needed content, or optionally merge your own HL + CS 1.5 installation.
|
||||
## Installing
|
||||
To run it, all you need is [FTEQW](https://www.fteqw.org), [FreeHL](https://www.frag-net.com/pkgs/package_valve.pk3), and [the latest release .pk3 file](https://www.frag-net.com/pkgs/package_cstrike.pk3), which you save into `Half-Life/valve/` and `Half-Life/cstrike/` respectively. That's about it. You can install updates through the **Configuration > Updates** menu from here on out.
|
||||
|
||||
### Notes
|
||||
|
||||
*You'd think this disclaimer may be unnecessary but here we go:*
|
||||
|
||||
**This project is designed for the CS 1.5 data files.**
|
||||
|
||||
You will have a bad time if you use it with later or earlier versions.
|
||||
|
||||
You won't be able to connect to most people their servers. Content may be missing.
|
||||
|
||||
This is designed for CS 1.5 and the Half-Life CD data files **ONLY**.
|
||||
**If you want to play and later version of CS, please do it on Steam.**
|
||||
### Disclaimer
|
||||
Please **do not** file bugs if you see missing/broken content **while not** using the original Half-Life and Counter-Strike 1.5 data.
|
||||
|
||||
## Building
|
||||
Here's the quick and dirty instructions for those unfamilar:
|
||||
|
||||
First of all, make sure you've got Nuclide cloned.
|
||||
```
|
||||
$ git clone https://code.idtech.space/vera/nuclide Nuclide-SDK
|
||||
$ cd Nuclide-SDK
|
||||
$ ./build_engine.sh # (only required if you don't have an up-to-date FTEQW & FTEQCC in your PATH)
|
||||
$ git clone https://code.idtech.space/fn/valve valve
|
||||
$ git clone https://code.idtech.space/fn/cstrike cstrike
|
||||
$ SKIP_UPDATE=1 SKIP_RADIANT=1 ./build_game.sh valve
|
||||
$ SKIP_UPDATE=1 SKIP_RADIANT=1 ./build_game.sh cstrike
|
||||
```
|
||||
|
||||
> git clone https://github.com/veravisions/nuclide
|
||||
|
||||
Then, **inside** of the cloned repo, you'll clone FreeHL.
|
||||
|
||||
> git clone https://github.com/eukara/freehl valve
|
||||
|
||||
Then, in the same directory (Nuclide's) you will clone this repo.
|
||||
|
||||
> git clone https://github.com/eukara/freecs cstrike
|
||||
|
||||
Run
|
||||
> ./build_game.sh valve
|
||||
|
||||
First, so we have a usable menu.
|
||||
|
||||
then either run Nuclide's `./build_game.sh cstrike` shell script, or issue `make` inside
|
||||
./cstrike/src for whenever you need to recompile FreeCS.
|
||||
You can also issue `make` inside `valve/src/` and `cstrike/src`, but it won't build an `entities.def` file for use in Radiant (level editor family).
|
||||
|
||||
** !! You need to also provide data-files !! **
|
||||
|
||||
There's separate scripts inside FreeHL's cloned valve/ directory and FreeCS's cstrike/ directory
|
||||
for grabbing/moving the data files from various install media.
|
||||
|
||||
The archive.org scripts for Half-Life will download content from the various demo builds of Half-Life, and can use yt-dlp for grabbing the music. You should be able to get everything required to play off the Internet.
|
||||
This should be self explanatory.
|
||||
Half-Life and Counter-Strike are owned by Valve and protected under copyright.
|
||||
|
||||
## Community
|
||||
|
||||
|
@ -93,10 +71,19 @@ 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
|
||||
- CYBERDEViL for his work on making Bots fascinated with Bomb Defusal
|
||||
- mikota for his work on refining the bullet spread code
|
||||
- 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-2022 Marco Cawthorne <marco@icculus.org>
|
||||
Copyright (c) 2016-2024 Marco Cawthorne <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
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
class CSGameRules:CGameRules
|
||||
{
|
||||
virtual void PlayerConnect(NSClientPlayer);
|
||||
virtual void PlayerDisconnect(NSClientPlayer);
|
||||
virtual void PlayerKill(NSClientPlayer);
|
||||
virtual void PlayerPreFrame(NSClientPlayer);
|
||||
virtual void PlayerDeath(NSClientPlayer);
|
||||
|
|
|
@ -175,27 +175,6 @@ CSGameRules::LevelNewParms(void)
|
|||
parm64 = FL_CLIENT;
|
||||
}
|
||||
|
||||
void
|
||||
CSGameRules::PlayerConnect(NSClientPlayer pl)
|
||||
{
|
||||
if (Plugin_PlayerConnect(pl) == FALSE)
|
||||
bprint(PRINT_HIGH, sprintf("%s connected\n", pl.netname));
|
||||
}
|
||||
|
||||
void
|
||||
CSGameRules::PlayerDisconnect(NSClientPlayer pl)
|
||||
{
|
||||
bprint(PRINT_HIGH, sprintf("%s disconnected\n", pl.netname));
|
||||
|
||||
/* Make this unusable */
|
||||
pl.solid = SOLID_NOT;
|
||||
pl.movetype = MOVETYPE_NONE;
|
||||
pl.modelindex = 0;
|
||||
pl.health = 0;
|
||||
pl.takedamage = 0;
|
||||
pl.SendFlags = PLAYER_MODELINDEX;
|
||||
}
|
||||
|
||||
void
|
||||
CSGameRules::PlayerKill(NSClientPlayer pl)
|
||||
{
|
||||
|
|
|
@ -36,7 +36,7 @@ CSMultiplayerRules::PlayerDisconnect(NSClientPlayer pl)
|
|||
if (health > 0)
|
||||
PlayerDeath(pl);
|
||||
|
||||
NSGameRules::PlayerDisconnect(pl);
|
||||
super::PlayerDisconnect(pl);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -44,8 +44,42 @@ CSMultiplayerRules::PlayerDeath(NSClientPlayer pl)
|
|||
{
|
||||
player targ = (player)g_dmg_eTarget;
|
||||
player attk = (player)g_dmg_eAttacker;
|
||||
NSRenderableEntity newCorpse;
|
||||
float deathAnimation;
|
||||
|
||||
FX_Corpse_Spawn(targ, ANIM_DEATH1);
|
||||
/* TODO: death anims based on hit-regions */
|
||||
if (targ.flags & FL_CROUCHING) {
|
||||
deathAnimation = ANIM_CROUCH_DIE;
|
||||
} else {
|
||||
switch (g_dmg_iHitBody) {
|
||||
case BODY_HEAD:
|
||||
deathAnimation = ANIM_DIE_HEAD;
|
||||
break;
|
||||
case BODY_STOMACH:
|
||||
deathAnimation = ANIM_DIE_GUT;
|
||||
break;
|
||||
case BODY_ARMLEFT:
|
||||
deathAnimation = ANIM_DIE_LEFT;
|
||||
break;
|
||||
case BODY_ARMRIGHT:
|
||||
deathAnimation = ANIM_DIE_RIGHT;
|
||||
break;
|
||||
default:
|
||||
bool isFacing = targ.IsFacingPosition(g_dmg_vecLocation);
|
||||
deathAnimation = ANIM_DEATH1;
|
||||
|
||||
if (isFacing == false)
|
||||
deathAnimation = ANIM_DIE_FORWARD;
|
||||
else
|
||||
deathAnimation = ANIM_DIE_BACK;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
newCorpse = FX_Corpse_Spawn(targ, deathAnimation);
|
||||
|
||||
targ.SpectatorDeathcam(newCorpse, attk, 3.0f);
|
||||
|
||||
/* obituary networking */
|
||||
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
|
||||
|
@ -108,6 +142,8 @@ CSMultiplayerRules::PlayerDeath(NSClientPlayer pl)
|
|||
targ.Death();
|
||||
targ.gflags &= ~GF_FLASHLIGHT;
|
||||
|
||||
targ.StartSoundDef("Player.Death", CHAN_AUTO, true);
|
||||
|
||||
/* gamerule stuff */
|
||||
targ.MakeTempSpectator();
|
||||
forceinfokey(targ, "*dead", "1");
|
||||
|
|
|
@ -226,7 +226,6 @@ player::Physics_InputPostMove(void)
|
|||
UpdatePlayerAnimation(input_timelength);
|
||||
|
||||
RemoveFlags(FL_FROZEN);
|
||||
ProcessInput();
|
||||
|
||||
#ifdef SERVER
|
||||
if (g_cs_gamestate == GAME_FREEZE) {
|
||||
|
@ -234,9 +233,14 @@ player::Physics_InputPostMove(void)
|
|||
if (getstati(STAT_GAMESTATE) == GAME_FREEZE) {
|
||||
#endif
|
||||
flags |= FL_FROZEN;
|
||||
}
|
||||
}
|
||||
|
||||
if (input_buttons & INPUT_BUTTON0) {
|
||||
w_attack_next = (w_attack_next > 0.1) ? w_attack_next : 0.1f;
|
||||
}
|
||||
|
||||
}
|
||||
ProcessInput();
|
||||
}
|
||||
|
||||
void Animation_PlayerUpdate(player);
|
||||
void Animation_TimerUpdate(player, float);
|
||||
|
|
Loading…
Reference in New Issue