Skip to content

Aura SDK

Latest
Compare
Choose a tag to compare
@sabianroberts sabianroberts released this 12 Nov 20:49

Welcome to the Aura 2.3 SDK!

This document walks you through getting started with the Aura 2.3 SDK, its new technologies, and its new features. Aura 2.3 was developed for use in ZAMNHLMP 2.9, though these days, The Phoenix Project Software now has plans to use Aura in other Half-Life 1 multiplayer mods – which is what it’s always been intended for. Let’s dive in!

Notable changes

Re-organised file-structure

The first thing you’ll notice about the Aura 2.3 SDK is that the file-structure has completely changed.

  1. Assets – this folder contains images used in the GitHub Readme doc.
  2. MapFiles – the Room Map Format files for ZAMNHLMP’s multiplayer maps
  3. ModelSources – some model sources we’ve used in ZAMNHLMP
  4. SourceCode – the Aura Server-side source code.
  5. TextureSources – original renders & Photoshop documents for certain textures in ZAMNHLMP.

Improved shield regeneration logic

In the player source code, the shield (formerly “suit energy”) regeneration logic has been updated to become more stable. Furthermore, we emit sounds depending on the state of the player’s shield.

	if (pev->armorvalue <= 0)
	{
		if (!isShieldEmpty && (currentTime - lastShieldSoundTime > 1.0f))
		{
			EMIT_SOUND(ENT(pev), CHAN_AUTO, "player/shield_empty.wav", 0.85, ATTN_NORM);
			EMIT_SOUND(ENT(pev), CHAN_AUTO, "player/shield_depleted2.wav", 0.7, ATTN_NORM);
			isShieldEmpty = true;
			lastShieldSoundTime = currentTime;
		}
	}
	else
	{
		if (isShieldEmpty)
		{
			STOP_SOUND(ENT(pev), CHAN_AUTO, "player/shield_empty.wav");
			isShieldEmpty = false;
		}
	}

The above code emits a sound (with a 1 second delay between each frame to not distort the sound) when the player’s shield is zero. This alerts the player properly that their shield has depleted and makes them more aware, which didn’t happen in Aura 2.2.

New technologies

Mapcycle selector

In Aura 2.2 / ZAMNHLMP 2.8, we wanted to move our mapcycle files to a different folder in order to reduce clutter in the main game folder. However, the mapcyclefile command still wanted “mapcycles/file.txt” as its value instead of “file” due to the command being engine-side. However, this has been remedied with a rather hack-ish solution in the gamerules code.

	// Sabian: Get the user input for mapcyclefile
	char userInputMapCycleFile[256];
	char* userInput = (char*)CVAR_GET_STRING("mapcyclefile");

	// Sabian: Remove ".txt" if present in user input
	size_t len = strlen(userInput);
	if (len > 4 && strcmp(&userInput[len - 4], ".txt") == 0) {
		userInput[len - 4] = '\0';  // Truncate the ".txt" part
	}

	// Sabian: Format the path as "mapcycles/%USERINPUT%.mc"
	sprintf(userInputMapCycleFile, "mapcycles/%s.mc", userInput);

Aura EX: the “experimental” branch

If you’ve cloned from Git you may have noticed the new “experimental” branch which we also refer to as Aura EX. Aura EX contains work-in-progress implementations and features that we want to try but don’t feel confident with them enough for them to be in the main game just yet. If you want to use Aura EX, switch the branch to “experimental” and build. Aura EX works just fine on ZAMNHLMP 2.9.x for now.

Aura EX: initial co-op gameplay

The main feature currently of Aura EX, which is also partly implemented in Aura 2.3 is co-op gameplay. Nearly all the monster NPCs now have logic to only spawn if two conditions are met:

  1. The new command sv_aura_coop is set to 1.
  2. Their targetname in the map is “FIREFIGHT”.
    Furthermore, experimentally, the monster_hgrunt entity is coded to respawn in its starting position on the map in Aura EX. This is not fully coded in and currently the monster freezes in place until resuming its AI for a few seconds after its death.
    Our implementation of co-op gameplay means that map-makers can spawn as many monsters in the map as possible and it won’t interfere with standard gameplay.
    If you look at the Room Map Formats for Crossfire and Subtransit you will see that these are full of nodes and monsters ready to be used in Aura EX in its co-op condition.