Forum posts

What sort of timer setup did you try making?

A simple resettable timer could be a game_counter that is constantly triggered by a multi_manager loop at a regular interval, and using a game_counter_set targetting the game_counter to reset it back to zero.
I tried, osprey start triggering trigger_multiple multiple time but not reset the timer. Monstermaker still die anyway regardless osprey still alive or not.
Posted 1 day ago2025-01-22 01:03:47 UTC
in New shadow error Post #349478
Are those pillars brushwork? I would try to turn them into func_wall or func_detail and compile that way to see the results.
Posted 2 days ago2025-01-20 12:04:29 UTC
in New shadow error Post #349477
bottom textbottom text
This is an old map, I just wanted to update it and get rid of some bugs that I've noticed over the years. Haven't touched this area, as far as I can remember, and yet this weird shadow glitch has suddenly happened. Anyone know what might be causing it? As you can see, it only seems to happen on every other pillar. Not the end of the world, just odd.
You can only set such a thing in anu dialog window only in gamemenu.res
Posted 6 days ago2025-01-16 20:41:34 UTC
in Surface Reflection Post #349475
I tried something similar some time ago, might want to take a look at my post.
Posted 6 days ago2025-01-16 15:39:02 UTC
in Surface Reflection Post #349474
youd need to script your own, else it wont be possible
Tarek TarekTrenchbroom is hard to learn......Someone shouldve told me that.
Posted 6 days ago2025-01-16 14:08:13 UTC
in Surface Reflection Post #349473
Can the Goldsrc implement phong reflection similar to the Source?
This post was made on a thread that has been deleted.
I don't think monster_apache respects the TriggerX attributes.

One way I can think of is having trigger_multiple entities along the path of the osprey, with both "monsters"and "no clients" flag checked. Use it to reset a timer. As long as the osprey is alive it will periodically hit the triggers, resetting the timer. When the osprey is destroyed the floating trigger would no longer be receiving triggers so the timer will time out, which you can set to kill the monstermaker.
Posted 1 week ago2025-01-14 18:27:36 UTC
in Half-Life Featureful SDK Post #349469
New update https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2025-01-14

Major changes:
  • Added corpse_player_collision_fix feature to fight the nasty Half-Life engine bug (described in more details in the changelog).
  • env_dlight now can be attached to entities or dynamic positions to allow dynamic light move along with position updates.
  • In the developer mode (when developer cvar is 1 or higher) the .json configuration files are reloaded automatically on the save-restore or level transition. This allows for easier testing that doesn't require the full game restart.
This post was made on a thread that has been deleted.
When they are in game, after osprey die, monstermaker still respawn alien regardless my trigger will kill the monstermaker entity or disable it.

{
"origin" "3088 1152 1440"
"targetname" "osprey1"
"target" "os1"
"TriggerCondition" "4" // TriggerCondition: Death
"TriggerTarget" "osprey_die" // If that Osprey die, the alien stop respawning
"angle" "270"
"classname" "monster_osprey"
}
{
"origin" "2925 985 1846"
"classname" "multi_manager"
"targetname" "osprey_die"
"spawn_stop" "0.1"
}
{
"origin" "2975 1021 1846"
"classname" "trigger_relay"
"target" "aspawn_OUT"
"triggerstate" "0" // Turn OFF monstermaker function
"delay" "10"
"targetname" "spawn_stop"
"killtarget" "aspawn_OUT" // Kill monstermaker "aspawn_OUT" entity as a 2nd method
}
{
"origin" "-1168 -1543 794"
"classname" "monstermaker"
"targetname" "aspawn_OUT" // Spawn target
"target" "aspawn_mm" // SFX effects
"angle" "45"
"monstertype" "monster_alien_slave"
"monstercount" "-1"
"delay" "13"
"m_imaxlivechildren" "3"
"netname" "alien"
}

How to disabled monstermaker "aspawn_OUT" after osprey die?
The long jump module is not a weapon, it's an item, that's two different things and you are mixing them up.

Just look at the long jump item code, check how it's given to the player and you can basically do the opposite.
Without custom code, the only way to interrupt a scripted sequence is light or heavy damage assuming the "Override AI" spawnflag is not ticked (or aiscripted_sequence is used) and the monster detect that condition (which is mostly the case since they need to play flinching animations).

For mods using custom code, there are several interesting spots to add "extra" conditions to scripted sequence interruptions: So in your case, adding bits_COND_SEE_ENEMY (I see an enemy) in the above spots should work. However, you might need to be careful about some edge cases where monsters will only look, listen and acquire enemies if they are in the same PVS (Potential Visible Set) or if they are already in combat.
It's an interesting question so I did some tests with KillTarget to see if killing the sequence entity would stop the NPC, but alas, it does not. Once the sequence has been triggered, it plays out.
Killing the scripted sequence entity just removes it from the world, it does not tell anything to the monster.
I don't think the engine reads a resource/newgamemenu.res file, only resource/gamemenu.res.
"command" "engine connect 127.0.0.1" does not work... :zonked:
I tried to follow up on the player_weaponstrip logic and adjust it so only a specific item or weapon (in this example the longjump-item) is removed. There is the logic to actually keep the suit so I thought I start there to understand how it works and what need to be changed. However I cant even get it to work to remove the Longjump at all.

Here is what I did:

player.cpp
void CBasePlayer::RemoveAllItems(bool removeLongjump)
{
if (m_pActiveItem)
{
ResetAutoaim();
m_pActiveItem->Holster();
m_pActiveItem = NULL;
}
m_pLastItem = NULL;
if (m_pTank != NULL)
{
m_pTank->Use(this, this, USE_OFF, 0);
m_pTank = NULL;
}
int i;
CBasePlayerItem* pPendingItem;
for (i = 0; i < MAX_ITEM_TYPES; i++)
{
m_pActiveItem = m_rgpPlayerItems[i];
while (m_pActiveItem)
{
pPendingItem = m_pActiveItem->m_pNext;
m_pActiveItem->Drop();
m_pActiveItem = pPendingItem;
}
m_rgpPlayerItems[i] = NULL;
}
m_pActiveItem = NULL;
pev->viewmodel = 0;
pev->weaponmodel = 0;
m_WeaponBits = 0ULL;
//Re-add suit bit if needed.
SetHasLongjump(!removeLongjump);
for (i = 0; i < MAX_AMMO_SLOTS; i++)
m_rgAmmo[i] = 0;
UpdateClientData();
}

...

pPlayer->RemoveAllItems(true);

player.h
bool HasLongjump() const;
void SetHasLongjump(bool HasLongjump);

...

inline bool CBasePlayer::HasLongjump() const
{
return (m_WeaponBits & (1ULL << item_LONGJUMP)) != 0;
}
inline void CBasePlayer::SetHasLongjump(bool HasLongjump)
{
if (HasLongjump)
{
SetWeaponBit(item_LONGJUMP);
}
else
{
ClearWeaponBit(item_LONGJUMP);
}
}

cdll_dll.h
item_LONGJUMP,

hl_baseentity.cpp
void CBasePlayer::RemoveAllItems(bool removeLongjump) {}

Any help please or maybe some Tutorial how I can make the Weaponstrip only take a specific item/weapon?
try putting "command" "engine connect 127.0.0.1"
I want to use a button in newgamemenu.res to connect to a server, but it seems no command other than 'play' works, and doesn't output anything to the console even with developer 1. Why does this happen? what can I do to get around it?`"ServerButton"
{
"ControlName" "Button"
"fieldName" "ServerButton"
"xpos" "40"
"ypos" "80"
"wide" "200"
"tall" "24"
"autoResize" "0"
"pinCorner" "0"
"visible" "1"
"enabled" "1"
"tabPosition" "3"
"labelText" "#GameUI_ConnectToServerButton"
"textAlignment" "center"
"dulltext" "0"
"command" "Connect 127.0.0.1"
"default" "0"
}
just to add to the information well, i do know that in CS: Condition Zero Deleted Scenes that scripted sequences have a flag called "Cancel on Alert" which does the behavior you've asked for, beyond that in just half-life itself i have not gotten this to work, but i hope you or someone else can find a solution !
It's an interesting question so I did some tests with KillTarget to see if killing the sequence entity would stop the NPC, but alas, it does not. Once the sequence has been triggered, it plays out.
monster_urby monster_urbyGoldsourcerer
I dont believe that its possible to cancel it mid sequence, as its supposed to be completed. I am not sure about this though fully as I dont really do GoldSrc Modding now (Im more of a source 2 modder / Mapping)
Tarek TarekTrenchbroom is hard to learn......Someone shouldve told me that.
Posted 2 weeks ago2025-01-07 18:21:41 UTC
in Half-Life Featureful SDK Post #349454
Posted 2 weeks ago2025-01-06 23:32:25 UTC
in PARANOIA: Earlier Prototype Versions Post #349453
Dear TWHL forum,

I am writing to you about a matter that is more about preservation and archiving, and locating where drivers and an old PC with a Cathode Ray Tube monitor would be at.

I know you might not be familiar with Half-Life and its game mod community, but the creator of the Half-Life mod known as PARANOIA, named Mikhail Kadikov (also known as BuZZeR) has given away his old drivers and old PC that uses a Cathode Ray Tube (CRT) monitor, has prototype versions and unused content of PARANOIA, ranging from 2003 to even as late October 2007 possibly.

The key files in the drivers to confirm what I am looking for, are hlparanoia(?), zombie_myaso.mdl, p_lab.bsp, paranoia.wad, p_kpp, test_kpp, p_silo.bsp, etc. I will also provide an image of what the monitor looks like as well. What I am calling for, is an estate/national scale investigation of who has the drivers and the old PC with a CRT monitor containing the prototypes and unused contents, and ask the current owner(s) of them, to share me all the file duplicates of the prototypes, etc, via email.

Once my email is shared, the owner can either use filetranser.io to give me copies of the prototypes, or via Yandex. Thanks for taking the time to read.

Yours sincerely,

Andrew Paul Matchett.

#halflife #halflifeparanoia #paranoia #prototypes #prototypebuilds #prototypeversions #2003 #2004 #2005 #2006 #2007

https://www.youtube.com/watch?v=q94_GI9aZW4
This post was made on a thread that has been deleted.
thx!
Hi! My apologies if I'm in the wrong section, even though I've read "modding".

I'm not sure if I'm using the correct words, but I cannot find anything online related to cancelling/interrupting scripted_sequences for Half-Life 1.
Basically, I have a scripted_sequence "seq1", with a female assassin "assassin1" that, when activated, walks towards it.
It works normally, the monster walks towards its destination uninterrupted unless I damage it and have the flag unchecked.

However, I want to be able to interrupt the monster mid-sequence without actually having to deal damage to it, but triggering the cancellation somehow. So far, I've tried a combination of solutions: Trigger relays with different states, directly triggering the scripted_sequence again mid-sequence, and checking/uchecking the Override AI, even though by description the flag has no relation to what I'm looking for. I tried triggering another scripted_sequence with and without Override AI just in case while mid-sequence of the original one, and it seems like the monster just really has to finish the original sequence.

The code for the sequence is messy, and I'd leave figuring out the code and monster/sequence resets and cleanups as last resort.
I didn't find a working link but I found an alternative : https://github.com/mrglaster/S2GConverter
im making a hl1 mod about the dark n' gritty beta of hl2, i need the converter for all the models i need.
Posted 3 weeks ago2024-12-31 18:41:13 UTC
in Half-Life Featureful SDK Post #349437
Posted 3 weeks ago2024-12-31 02:32:56 UTC
in Spirit's 3D Skybox emits Light? Post #349436
Thank you. ZHLT (and VHLT and SDHLT) supports a special texture for use with SoHL's env_sky entity. That texture is also called env_sky. If you don't have a WAD file with the texture, you can create one. I believe you can then use a simple light_environment just like you do with a regular skybox. Unfortunately I am unable to test that myself at this moment.
Oskar Potatis Oskar Potatis🦔
Posted 3 weeks ago2024-12-31 00:54:30 UTC
in Spirit's 3D Skybox emits Light? Post #349435
Bump for Oskar to comment ⬇
Penguinboy PenguinboyHaha, I died again!
OP says they're familiar with C++, but posts forum thread asking for help with the most basic beginner programming issue
i'm trying to recreate the doors in that one of section in Anticitizen One where all they are func_physbox entities, but I'm not sure how to go about it. I'm using Source SDK Base 2013 with Mapbase. I'd really appreciate any help or explanation on how to set this up properly. Thanks!
Posted 3 weeks ago2024-12-28 01:39:53 UTC
in Soulless Venture Thread Post #349432
another teaser for this thread...
I have my doubts, but okay. In either case, you should have a good idea of what to do now, i.e. declare that method.
Admer456 Admer456If it ain't broken, don't fox it!
I'm familiar with C++, as I have done mods for other games using it + coded my own game. I just haven't been able to find this out.
I see issues like these a lot, where beginners try to add/edit NPC code, weapon code etc., but some basic error happens and they have no idea what they're doing nor how to fix it.

If you knew what the error meant, you would realise that this class here is declared as well as its methods like Spawn, Precache and others:
class CHEVScientist : public CSquadMonster
{
public:
void Spawn(void);
void Precache(void);
int iSpikes;
int Classify(void);
void SetYawSpeed(void);
};
However, you are defining or implementing a method down here:
//=========================================================
// HandleAnimEvent - catches the monster-specific messages
// that occur when tagged animation frames are played.
//=========================================================
void CHEVScientist::HandleAnimEvent(MonsterEvent_t* pEvent)
{
...
}
Which is not declared in your class above. If you don't understand what I'm saying (methods, implemented, declared), then:

Learn the basics of C++, learn what a function is, what classes are, what declaring is, what members are, spend a couple months experimenting with C++ writing console apps or maybe even using a simple framework like Raylib, write a mini Half-Life SDK for studying, learn how to read code and study it, and then come back to this. Do not learn C++ while simultaneously learning the HL SDK - you will have a really hard time otherwise.
Admer456 Admer456If it ain't broken, don't fox it!
https://twhl.info/wiki/page/Tools_and_Resources_for_the_Source_Engine
This is one of the First Content I made, more will be added soon.
In the end I want many tools of lots of categories in there.

Edit: If someone doesnt like it that I have made another page, just tell me and ill try and integrate it into the existing page as a separate Paragraph.
Tarek TarekTrenchbroom is hard to learn......Someone shouldve told me that.
(also if it helps, i'm new to HL coding.)
I am trying to make a HL mod, but this error comes up. Here is the code:

//=========================================================
// monster template
//=========================================================
// UNDONE: Holster weapon?

#include "extdll.h"
#include "plane.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "schedule.h"
#include "animation.h"
#include "squadmonster.h"
#include "hgrunt.cpp"
#include "weapons.h"
#include "talkmonster.h"
#include "soundent.h"
#include "effects.h"
#include "customentity.h"

class CHEVScientist : public CSquadMonster
{
public:
void Spawn(void);
void Precache(void);
int iSpikes;
int Classify(void);
void SetYawSpeed(void);
};

LINK_ENTITY_TO_CLASS(monster_hev_survivor, CHEVScientist);

//=========================================================
// HandleAnimEvent - catches the monster-specific messages
// that occur when tagged animation frames are played.
//=========================================================
void CHEVScientist::HandleAnimEvent(MonsterEvent_t* pEvent)
{
Vector vecShootDir;
Vector vecShootOrigin;

switch (pEvent->event)
{
case HGRUNT_AE_DROP_GUN:
{
if (GetBodygroup(GUN_GROUP) != GUN_NONE)
{
Vector vecGunPos;
Vector vecGunAngles;

GetAttachment(0, vecGunPos, vecGunAngles);

// switch to body group with no gun.
SetBodygroup(GUN_GROUP, GUN_NONE);

// now spawn a gun.
if (FBitSet(pev->weapons, HGRUNT_SHOTGUN))
{
DropItem("weapon_shotgun", vecGunPos, vecGunAngles);
}
else
{
DropItem("weapon_9mmAR", vecGunPos, vecGunAngles);
}
if (FBitSet(pev->weapons, HGRUNT_GRENADELAUNCHER))
{
DropItem("ammo_ARgrenades", BodyTarget(pev->origin), vecGunAngles);
}
}
}
break;

case HGRUNT_AE_RELOAD:
EMIT_SOUND(ENT(pev), CHAN_WEAPON, "hgrunt/gr_reload1.wav", 1, ATTN_NORM);
m_cAmmoLoaded = m_cClipSize;
ClearConditions(bits_COND_NO_AMMO_LOADED);
break;

case HGRUNT_AE_GREN_TOSS:
{
UTIL_MakeVectors(pev->angles);
// CGrenade::ShootTimed( pev, pev->origin + gpGlobals->v_forward * 34 + Vector (0, 0, 32), m_vecTossVelocity, 3.5 );
CGrenade::ShootTimed(pev, GetGunPosition(), m_vecTossVelocity, 3.5);

m_fThrowGrenade = false;
m_flNextGrenadeCheck = gpGlobals->time + 6; // wait six seconds before even looking again to see if a grenade can be thrown.
// !!!LATER - when in a group, only try to throw grenade if ordered.
}
break;

case HGRUNT_AE_GREN_LAUNCH:
{
EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/glauncher.wav", 0.8, ATTN_NORM);
CGrenade::ShootContact(pev, GetGunPosition(), m_vecTossVelocity);
m_fThrowGrenade = false;
if (g_iSkillLevel == SKILL_HARD)
m_flNextGrenadeCheck = gpGlobals->time + RANDOM_FLOAT(2, 5); // wait a random amount of time before shooting again
else
m_flNextGrenadeCheck = gpGlobals->time + 6; // wait six seconds before even looking again to see if a grenade can be thrown.
}
break;

case HGRUNT_AE_GREN_DROP:
{
UTIL_MakeVectors(pev->angles);
CGrenade::ShootTimed(pev, pev->origin + gpGlobals->v_forward * 17 - gpGlobals->v_right * 27 + gpGlobals->v_up * 6, g_vecZero, 3);
}
break;

case HGRUNT_AE_BURST1:
{
if (FBitSet(pev->weapons, HGRUNT_9MMAR))
{
Shoot();

// the first round of the three round burst plays the sound and puts a sound in the world sound list.
if (RANDOM_LONG(0, 1))
{
EMIT_SOUND(ENT(pev), CHAN_WEAPON, "hgrunt/gr_mgun1.wav", 1, ATTN_NORM);
}
else
{
EMIT_SOUND(ENT(pev), CHAN_WEAPON, "hgrunt/gr_mgun2.wav", 1, ATTN_NORM);
}
}
else
{
Shotgun();

EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/sbarrel1.wav", 1, ATTN_NORM);
}

CSoundEnt::InsertSound(bits_SOUND_COMBAT, pev->origin, 384, 0.3);
}
break;

case HGRUNT_AE_BURST2:
case HGRUNT_AE_BURST3:
Shoot();
break;

case HGRUNT_AE_KICK:
{
CBaseEntity* pHurt = Kick();

if (pHurt)
{
// SOUND HERE!
UTIL_MakeVectors(pev->angles);
pHurt->pev->punchangle.x = 15;
pHurt->pev->velocity = pHurt->pev->velocity + gpGlobals->v_forward * 100 + gpGlobals->v_up * 50;
pHurt->TakeDamage(pev, pev, gSkillData.hgruntDmgKick, DMG_CLUB);
}
}
break;

case HGRUNT_AE_CAUGHT_ENEMY:
{
if (FOkToSpeak())
{
SENTENCEG_PlayRndSz(ENT(pev), "HG_ALERT", HGRUNT_SENTENCE_VOLUME, GRUNT_ATTN, 0, m_voicePitch);
JustSpoke();
}
}
break;

default:
CSquadMonster::HandleAnimEvent(pEvent);
break;
}
}

void CHEVScientist ::Spawn()
{
Precache(); // So the model loads

SET_MODEL(ENT(pev), "models/hevsci.mdl"); // So you can see him

UTIL_SetSize(pev, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX); // Let's make his size human. If you're smart enough (or have lots of patience) you can get replace the VEC_ stuff with "Vector( x, y, z)".

pev->solid = SOLID_SLIDEBOX; // SOLID SNAKE??
pev->movetype = MOVETYPE_STEP; // thump thump im walkin
m_bloodColor = BLOOD_COLOR_RED; // SPLATTY SPLAT SPLATA AAAh
pev->health = 30; // he's got bad health
pev->view_ofs = Vector(0, 0, 20); // eyes offset (he knows where you sleep)
m_flFieldOfView = 0.5; // how far can he see
m_MonsterState = MONSTERSTATE_NONE; // stupid idiot spawner

MonsterInit();
}

void CHEVScientist ::Precache()
{
PRECACHE_MODEL("models/hevsci.mdl");

PRECACHE_SOUND("construction/cn_pain1.wav");
PRECACHE_SOUND("construction/cn_pain2.wav");
PRECACHE_SOUND("construction/cn_pain3.wav");

}

int CHEVScientist ::Classify(void)
{
return CLASS_PLAYER_ALLY;
}

void CHEVScientist ::SetYawSpeed(void)
{
pev->yaw_speed = 90;
}

//=========================================================
// Monster's Anim Events Go Here
//=========================================================
#define HGRUNT_AE_RELOAD (2)
#define HGRUNT_AE_KICK (3)
#define HGRUNT_AE_BURST1 (4)
#define HGRUNT_AE_BURST2 (5)
#define HGRUNT_AE_BURST3 (6)
#define HGRUNT_AE_GREN_TOSS (7)
#define HGRUNT_AE_GREN_LAUNCH (8)
#define HGRUNT_AE_GREN_DROP (9)
#define HGRUNT_AE_CAUGHT_ENEMY (10) // grunt established sight with an enemy (player only) that had previously eluded the squad.
#define HGRUNT_AE_DROP_GUN (11) // grunt (probably dead) is dropping his mp5.
Also, before anyone asks, ive already been working on a small text file which includes some basic stuff already like the Map Editors and FGDs, but its by far not complete
Tarek TarekTrenchbroom is hard to learn......Someone shouldve told me that.
The title says it all. I have some stuff I could contribute to it and organise it, but thing is, im just too unskilled to set it up properly and I dont wanna do something wrong.
Tarek TarekTrenchbroom is hard to learn......Someone shouldve told me that.
So, we got 2025 nearing up, and another year worth of rewriting a mod from scratch, probably using Xash3D again, except this time avoiding to break it but still trying to crank it up because I have no other excuse to say that both it and the steam retail are "good, but not enough", and not writing a client-side particle system (kinda like mmod) to do with the limits of using way too many messages just for a few sprites on the screens, because I'm probably the only psychic in the HL community to try and cramp as much stuff in a mod as humanly possible, so someone please leave a message on how I should not modify Xash3D's to not break compatibility, blah blah blah, and how I should spend 2 extra years making retail mod improvements so everyone else can be happy and I can lose my remaining patience on GoldSrc, and admit that a shetpost-like mod doesn't deserve this amount of love and attention and I should get to stuff that is probably more important and whatever else.

Thank you.
xX-AyydrianIsReal-Xx xX-AyydrianIsReal-XxDa HECU's comin' to ur house
Posted 1 month ago2024-12-22 02:40:20 UTC
in ERROR: Couldn't open. Post #349422
Only use all lowercase letters for your map names.
Posted 1 month ago2024-12-20 16:14:24 UTC
in ERROR: Couldn't open. Post #349421
Make sure the Landmarks are at exactly the same position and height, as stated by the tutorial that explains it.
Tarek TarekTrenchbroom is hard to learn......Someone shouldve told me that.
Posted 1 month ago2024-12-20 05:20:35 UTC
in ERROR: Couldn't open. Post #349420
Help!
Im making a mod and when i go to the change level from "exit" to my other level it says "ERROR: Couldn't open." in the console and the player is in the ground as seen in this screenshot
User posted image
]

The trigger_changelevel in "exit" :

Landmark name: 2

New map name: KrampusCastle

The trigger in "KrampusCastle" map

Landmark name: 2

new map name: Exit

Help me if you can!
Posted 1 month ago2024-12-19 16:19:10 UTC
in Half-Life Featureful SDK Post #349419
New update https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2024-12-19

Now standard Half-Life weapons can be disabled (e.g. in order to decrease the number of precached resources)
Fixed some opfor NPC models distributed with the sample mod (wrong sound paths in the events, incorrect hitgroups).

Read the release notes on github for the full changelog.

This release also introduces noticeable changes to the codebase so if you're maintaining the fork of Featureful SDK read the changelog (the part about Codebase changes).