DefaultReload( 6, PYTHON_RELOAD, 2.0, bUseScope );, so the actual 'ammo transfer' happens after 2 seconds. Apparently that's when you can fire the weapon again, even if the reload animation hasn't finished yet.
DefaultReloadalso contains the line
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 3;, which causes
CPython::WeaponIdleto pick a new idle animation after 3 seconds, regardless of whether the reload animation has finished.
CPython::WeaponIdlealso contains hard-coded durations for each of the idle/fidget animations.
CBarney::BarneyFirePistolmust be a virtual function. So in barney.cpp, change the following line:
void BarneyFirePistol( void );
Without that, the code in CBarney will always call CBarney::BarneyFirePistol, instead of <type-of-current-object>::BarneyFirePistol.
virtual void BarneyFirePistol( void );
Do both maps contain anAs that tutorial states, both maps must contain 1
info_landmarkwith exactly the same name? And does each
trigger_changelevelmatch an open, walkable space in the other level (relative to the landmarks)?
And just in case you haven't seen this yet: Tutorial: Changing Levels.
trigger_changeleveleach, but it sounds like you've put both
info_landmarksin the same level. Also, names are case-sensitive, so 'Ladm1' does not match 'ladm1'. Better stick to lowercase names everywhere, just to be safe. If you still can't get it to work after following that tutorial, consider uploading both maps to the vault so some of us can have a look at it.
trigger_auto, then it will fire again when you reload a savegame that was made in that map. That will invert the button-multisource relationship again, which is not what you want. So be sure to enable that flag on each
multisourceto act as its master. Enabling an entity is easier to do than disabling it, but both are quite doable (once you know how to work around a few quirks and bugs!).
func_buttonA, which must be enabled or disabled by
func_buttonB. We'll add a
multisourceMS, and set A's 'master' property to MS. Let's now look at 4 possible scenario's:
trigger_relayTR and make it toggle
multisourceMS, then make
trigger_relayTR. (if you let B target MS directly, you'll hit a bug where MS won't be triggered one out of every 4 button presses)
trigger_relayTR as soon as the level starts. This inverts the relationship between B and MS. (give the trigger_auto a small delay, otherwise it might fire before TR has been spawned)
multisourceMS. (buttons don't trigger their target when they auto-reset, unless their target is a multisource - so this scenario was designed to be easy to do)
trigger_relayTR that toggles
multisourceMS, and add a
trigger_relayTR when the level starts. But instead of making
trigger_relayTR directly (which you would do if B were a toggle button), make it target a
multi_managerMM. Then make
trigger_relayTR twice: first with a delay of 0, then with a delay that corresponds to
func_buttonB's auto-reset time (or slightly lower, just to be safe). (the problem here is that auto-resetting buttons do not trigger their target when the reset, so we'll have to use a multi_manager to simulate that behavior)
func_buttonA, then repeat the above steps for each of those buttons. And if you want to enable/disable multiple things at the same time, then just make all of those things use
multisourceMS as their master.
func_detailbrushes to cover the sides. Though I think it's easier to just make that texture emit some light, either by adding an entry to your compile tool's lights.rad file, or by adding an
info_texlightsentity to your map, as blsha already mentioned.
func_wall, set its 'Minimum light level' (_minlight) to 0. It was set to 1, making it fullbright.
func_wateris trickier: apparently water textures (textures whose name starts with an exclamation mark) are always rendered fullbright by the engine. If you don't need the water surface to be wavy then you can use a non-water texture instead. Otherwise, you can set the
func_water's 'Render Mode' to 'Texture', with a fairly low 'FX Amount'. That'll make the water more translucent, reducing its brightness against a dark background.
func_detail, it's a brush entity, so it won't show up in the list of point entities. But if you're turning a brush into an entity and still don't see
func_detailin that list, then perhaps you've got an older zhlt.fgd file?
func_detailwas introduced in Vluzacn's ZHLT version 25. I don't think I've ever heard about the compile tools you linked to (P2ST), but some searching and auto-translating suggests that it was developed entirely separate from the ZHLT 'family', and that it's somewhat related to the Xash3D engine? How does it compare to the latest VHLT tools?
effects) but I think it's different enough from Unq's that that's ok:
cache_free: not, or does it read
Cache_Free: not allocated? Because that gives a match in the Quake engine code (which HL is based on): Cache_Free: not allocated. I think this will only be triggered by a bug, not by a lack of memory. That file also explains the purpose of this cache memory:
Cache_??? Cache memory is for objects that can be dynamically loaded andIn another post you mentioned not knowing the difference between the
can usefully stay persistant between levels. The size of the cache
fluctuates from level to level.
Global Entity Nameattributes, so do you perhaps have a lot of entities with a global name? That might cause this bug to be triggered more easily. Only use
Global Entity Nameif you have to.
game_player_equipworks by calling CBasePlayer::GiveNamedItem, which spawns an item and then immediately makes it touch the player. This is also used by the
impulse 101uses a bit of a hack to ensure that the item is killed afterwards (just in case the player already has max ammo), so I think the easiest solution would be to always apply that hack.
rh_rat, along with instructions for MESS to 'rewrite' these entities to macro-inserting entities that use a
notoperator to MScript (alternative for
nonefunction arguments to the default value for the parameter's type, for non-optional parameters.
spawnflag<N>attributes now start at 0, not 1.
template_nameattribute is now a
target_destination, so J.A.C.K. can show links between macro entities and the templates they're using.
iSequence = LookupActivity ( NewActivity );line at the bottom - that's overwriting the animation you've selected with a random idle animation. If I were you I would also simplify this code by creating a function that returns the name of the NPC's weapon, so you only need a single if/else statement that decides between
"ref_aim_" + WeaponName()and
"crouch_aim_" + WeaponName()(that's not exactly how you concatenate strings in C or C++ - right now I don't have time to look that up - but you should get the idea).
ACT_IDLEpart in that grunt code? That's using
LookupActivity(NewActivity), which will randomly pick one of the animations that are marked with that activity tag (if I understand things correctly). That's not what you want.
ACT_RANGE_ATTACK2parts - those use
LookupSequence("sequence name")to pick a specific animation based on the grunt's weapon and posture. That's what you want to do. So if the new activity is
ACT_IDLE, and your NPC is holding an RPG, do
iSequence = LookupSequence("idle_rpg"), if the NPC is holding a crowbar, do
iSequence = LookupSequence("idle_crowbar"), and so on.
dmc.fgdinstead (this file is included in the FGD collection here).
-game dmcparameter. In normal mode, that goes in the 'Additional game parameters' input. In expert/advanced mode, it goes in the 'Parameters' input of the game_exe command (which is typically located at the bottom).
If so, change them to this:
$csg_exe $bspdir/$file $bsp_exe $bspdir/$file $vis_exe $bspdir/$file $light_exe $bspdir/$file
Command-line arguments are normally separated by spaces, so without the double quotes a filename that contains spaces is interpreted as multiple arguments. Unfortunately, Half-Life itself won't load the map, even when using double quotes:
$csg_exe "$bspdir/$file" $bsp_exe "$bspdir/$file" $vis_exe "$bspdir/$file" $light_exe "$bspdir/$file"
hl.exe +map "$file", so you'll have to start Half-Life, open the console and type
map "jack map". So yeah, it's easier to use filenames without spaces.
Why does nobody use monster_furniture...That's... a good question! Time to update the entity guide?