Forum posts

Posted 3 hours ago2021-01-19 10:46:13 UTC
in Changelevel issus Post #345251
I don't have L4D(2), but comparing your screenshots against this guide doesn't show any obvious problems. Did you compile both maps before starting the game, and did they compile without errors? (otherwise one or both of the maps might be outdated) What actually happens when you enter the room?
I've taken a look at the 357 reloading code. Apart from a few events that can be specified in animations, much of the timing appears to be hard-coded. Ideally you'd want the code to react to the end of an animation, but I don't know enough about the HL engine to say whether that's possible.

CPython::Reload calls 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.

DefaultReload also contains the line m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 3;, which causes CPython::WeaponIdle to pick a new idle animation after 3 seconds, regardless of whether the reload animation has finished. CPython::WeaponIdle also contains hard-coded durations for each of the idle/fidget animations.
Posted 4 days ago2021-01-14 23:13:26 UTC
in Ode to Lockdown [Map Jam] Post #345230
I don't know about padman, but the idea of a rats rats map sounds intriguing... Maybe I'll start working on something.
To make this work as intended, CBarney::BarneyFirePistol must be a virtual function. So in barney.cpp, change the following line:
void BarneyFirePistol( void );
virtual void BarneyFirePistol( void );
Without that, the code in CBarney will always call CBarney::BarneyFirePistol, instead of <type-of-current-object>::BarneyFirePistol.
Very nice! A happy new year to you, too!

I thought I heard a fireplace raging in the background, but you're telling me it was 8-bit noise? :walter:
Posted 1 week ago2021-01-11 17:06:51 UTC
in [HELP] Change level error/glitch Post #345203
Next time, please don't start multiple threads about the same problem (I'll remove the previous thread because this one contains more information).

Having said that, did you read my reply in your previous thread (see below)?
Do both maps contain an info_landmark with exactly the same name? And does each trigger_changelevel match 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.
As that tutorial states, both maps must contain 1 info_landmark and 1 trigger_changelevel each, but it sounds like you've put both info_landmarks in 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.
Posted 1 week ago2021-01-10 22:21:27 UTC
in Help with tank prefab brushwork Post #345199
How could I forget... there's also shear mode. Create a brush for one side of the front of the turret, then use shearing to move one of the sides and the top backwards. Then use the clipping tool to cut off the back of the brush and to make the side of the turret slanted. Then copy this brush to the other side and flip it, and you should end up with a reasonable turret front.

And just as with vertex manipulation, it's better to stick to slope ratios like 1:2 and 1:4 and to use coarser grid sizes.
Posted 1 week ago2021-01-10 21:09:36 UTC
in Disable func_button Post #345198
One detail I forgot to mention: if you don't enable the 'Remove On fire' flag on a 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 trigger_auto.
Posted 1 week ago2021-01-10 15:15:23 UTC
in train Post #345193
If you upload a test map to the vault then some of us could have a look. Without that it's difficult to see what's causing the problem.
Posted 1 week ago2021-01-09 17:19:13 UTC
in Buttons made using JACK not working! Post #345190
It's probably because the 'Health' attribute of your buttons is set to 1. That makes them only react to being shot.

I've got the same problem here. I normally press Ctrl+T to turn a brush into an entity, which turns it into the default brush entity (func_detail for me). I then start typing 'func_button' in the Class field, but by the time I type 'func_b' J.A.C.K. has selected 'func_breakable', and it'll add the attributes of that entity (including their default values). This sets 'Health' to 1. When I get to 'func_bu', J.A.C.K. knows it must be a func_button, but now it won't overwrite the existing 'Health' attribute anymore. Selecting 'func_button' from the Class dropdown list instead avoids the func_breakable detour.
Posted 1 week ago2021-01-09 15:00:58 UTC
in Help with tank prefab brushwork Post #345186
It looks like you've only been using the clipping tool so far? I don't think you can avoid vertex manipulation if you want to create a properly slanted M1 Abrams turret. The main rules for brushes are that they must be convex, and that all of their faces must be perfectly flat ('planar').

The M1 turret is a convex shape already, so that shouldn't be a problem, but it can still be useful to split it into multiple brushes (front/center/back), so each part can be manipulated separately.

Keeping faces flat is always tricky with slopes like this, but sticking to 'simple' slopes (1:2, 1:4, etc.) and coarser grid sizes can help reduce the chance that slope edges will meet at an off-the-grid point (this may cause non-planar faces). If that doesn't help, you can always use triangular faces. Either by starting with triangular brushes, or by splitting non-triangular faces by creating edges between vertices (this can be done by selecting them in vertex manipulation mode and pressing Ctrl+F).
Posted 1 week ago2021-01-09 13:08:37 UTC
in Disable func_button Post #345185
To enable or disable an entity, you'll need to use a multisource to 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!).

So we've got func_button A, which must be enabled or disabled by func_button B. We'll add a multisource MS, and set A's 'master' property to MS. Let's now look at 4 possible scenario's:

B is a toggle button...
  • ...that must enable A: add a trigger_relay TR and make it toggle multisource MS, then make func_button B target trigger_relay TR. (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)
  • ...that must disable A: same as above, but also add a trigger_auto that triggers trigger_relay TR 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)
B is an auto-reset button...
  • ...that must enable A: the most common and easy setup: just make func_button B target multisource MS. (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)
  • ...that must disable A: add a trigger_relay TR that toggles multisource MS, and add a trigger_auto that triggers trigger_relay TR when the level starts. But instead of making func_button B target trigger_relay TR directly (which you would do if B were a toggle button), make it target a multi_manager MM. Then make multi_manager MM target trigger_relay TR twice: first with a delay of 0, then with a delay that corresponds to func_button B'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)
If you want to use multiple buttons to enable/disable func_button A, 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 multisource MS as their master.
Posted 1 week ago2021-01-08 23:18:29 UTC
in Entity brushes are fullbright Post #345181
To be honest, I think that part of that tutorial is a bit confusing (or maybe it's outdated? who knows). The 'Minimum light level' setting controls the minimum light level of the entire entity, it's not related to texture lights.

If you want to use this trick then you'll have to use world or func_detail brushes 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_texlights entity to your map, as blsha already mentioned.
Posted 1 week ago2021-01-07 22:59:49 UTC
in Entity brushes are fullbright Post #345178
To fix the func_wall, set its 'Minimum light level' (_minlight) to 0. It was set to 1, making it fullbright.

The func_water is 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.

As for 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_detail in that list, then perhaps you've got an older zhlt.fgd file?
Posted 1 week ago2021-01-06 17:09:49 UTC
in Entity brushes are fullbright Post #345174
@blsha: according to the ZHLT Version history, func_detail was 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?

@sindikatas: can you show a screenshot - or better, upload your map to the vault (or at least the problematic part of it) so we can have a look at it? Without that, we can only guess.
This post was made on a thread that has been deleted.
Posted 3 weeks ago2020-12-23 14:50:48 UTC
in FUNC_VEHICLE 2020 Post #345101
aim_saturn is ready for duty:
Loading embedded content: Vault Item #6476
Posted 4 weeks ago2020-12-22 01:06:01 UTC
in FUNC_VEHICLE 2020 Post #345093
Almost done:
CT's (rockets) vs ET's (ufos)CT's (rockets) vs ET's (ufos)
Posted 4 weeks ago2020-12-19 18:44:37 UTC
in FUNC_VEHICLE 2020 Post #345090
Thanks! I might just have time to finish something now. It's another space-themed map (someone's gotta use Admer456's effects) but I think it's different enough from Unq's that that's ok:
Terror(ists) from Outer SpaceTerror(ists) from Outer Space
Posted 1 month ago2020-12-19 11:53:22 UTC
in cache_free: not Post #345089
Is the message 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 and
can usefully stay persistant between levels. The size of the cache
fluctuates from level to level.
In another post you mentioned not knowing the difference between the Name and Global Entity Name attributes, 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 Name if you have to.

Another hunch: are you loading previous savegames when testing? I don't know how robust HL is in this regard, but I suspect it might be causing issues if new (global-named) entities have been added to or removed from a map.
Posted 1 month ago2020-12-17 19:15:59 UTC
in cache_free: not Post #345081
I can't find that error in the game code, so I guess it's some kind of buffer in the engine that's too small to handle whatever you're doing. When you talk about a large sequence, do you mean a model animation that's very long?
Posted 1 month ago2020-12-15 00:50:51 UTC
in FUNC_VEHICLE 2020 Post #345063
Huh, that's interesting! It looks like these are the available effects - different kinds of dynamic lights (including a more subtle one that doesn't flicker), the yellow 'monster-stuck-in-wall' particle effect, a no-draw setting and a few other things. So if anyone wants to make a yellow-particle 'vehicle'...
I've created an example package for you. It doesn't solve the full-ammo problem, but it does make it much easier to add these high-speed weapon pickups to your maps. And if you do find a better solution, then all you need to do is update a single template and recompile your map.

To get back on topic, game_player_equip works by calling CBasePlayer::GiveNamedItem, which spawns an item and then immediately makes it touch the player. This is also used by the give and impulse 101 cheats. impulse 101 uses 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.
The only thing I can come up with is to first use a player_weaponstrip, but that's also a big change in terms of gameplay, with players only being able to carry one weapon at a time (unless you've got pickup spots that equip them with multiple weapons of course). If that's not acceptable then you'll have to modify the game code.

On a sidenote, you might be interested in a compile tool I've been working on, called MESS (Macro Entity Scripting System). It makes duplicating groups of related entities easier by letting you create a single template that can be reused. The latest version also lets you create custom entities for templates. With the right setup, you can place standard weapon and item entities in your map, and let MESS replace each of them with a trigger, multi_manager, game_player_equip and various sprites. And if you need to adjust something, you only need to modify a single template map, instead of every weapon pickup.
MESS 1.1 is now available! :)

The big changes in this version are a new 'rewrite rule' system for creating custom template-based entities, and support for J.A.C.K. map files (for template maps). The rewrite rule system makes it possible to create your own .fgd files, with custom entities like monster_warp or rh_rat, along with instructions for MESS to 'rewrite' these entities to macro-inserting entities that use a monster_warp.rmf or rh_rat.jmf template map.

Download links:
  • MESS 1.1 - The compile tool itself.
  • example maps - Updated example maps. Be sure to check out the new rathunt example, and its use of the custom rh_rat and rh_message_system entities!
  • Readme - An introduction to MESS, and instructions on how to get started.
  • Entity guide - Like TWHL's entity guide, but for MESS' macro entities.
  • Rewrite rules - For creating custom entities, and telling MESS to rewrite them to template-inserting entities.
  • Scripting system - Documentation for MScript, the scripting language used by MESS. See the functions section for a list of functions, many of which are new in 1.1.
Full list of changes:
  • Added a 'rewrite rule' mechanism, for creating template-based entities.
  • Added support for J.A.C.K. template map files (.jmf).
  • Added several string, math, trig, color, flags and directory-related MScript functions.
  • Added a not operator to MScript (alternative for !).
  • MScript now converts none function arguments to the default value for the parameter's type, for non-optional parameters.
  • Added a 'REPL' mode, for interactive testing of MScript expressions.
  • The special spawnflag<N> attributes now start at 0, not 1.
  • The template_name attribute is now a target_destination, so J.A.C.K. can show links between macro entities and the templates they're using.
  • Added MScript documentation.
  • Fixed that .rmf files without cameras failed to open.
Posted 1 month ago2020-12-01 13:36:44 UTC
in Post your screenshots! WIP thread Post #344988
Andy_Shou: that's looking very nice!

Kachito: that's a nice way to avoid the standard low-res GoldSource look. Very stylish!
Posted 1 month ago2020-12-01 13:05:27 UTC
in Mapping with Wall Worm? Post #344987
I haven't tried it, but it certainly sounds very interesting, especially for natural environments. It's a modern tool, useful for a lot more than just level-design, and it's also extensible.

On the other hand, 3ds Max isn't exactly cheap... If something like this was available for Blender then I would certainly give it a try, but 3ds Max just isn't worth it for me.
Posted 1 month ago2020-12-01 11:50:06 UTC
in [Help] Half-Life Flipsigns Post #344986
You're the one that decided to make a translation mod, so that's all up to you, right? If I were you I'd just leave it as it is - nobody could read it before anyway.

As for the military, Black Mesa was built around an old ICBM silo complex, and some nearby facilities were apparently still in use by the military. They were also involved in several weapon research programs, so you'd expect them to have some military personnel come over on a regular basis anyway.
Posted 1 month ago2020-11-26 22:55:05 UTC
in Review everything! [2nd edition] Post #344958
off-grid vertices in HL1 mapping

In my early years I would have frowned upon this, but now I wonder: what's the problem? Why shouldn't we be able to make tiny brushwork details? The reason why Hammer snaps them back is probably technical - either to make things easier for the compile tools, or so they can produce more optimal results, or to reduce problems caused by numeric (im)precision. Which reminds me of the 'Leak-o-matic' (I mean 'carve') tool. Carve with a cylinder and you'll get plenty of off-grid vertices, and multiple leaks as a bonus. But you'd probably get those leaks even without snapping. So remember kids: carve with care, and keep your vertices on the grid!

linerider (the game)
Posted 1 month ago2020-11-25 13:27:27 UTC
in Railroad swapper Post #344952
A path_track that has both a 'Next stop target' and a 'Branch target' will switch between these when triggered. By default, it'll point trains to the 'Next stop target', but after triggering the path_track, it will point trains to the 'Branch target'. Triggering it again will make it point to the 'Next stop target' again.

Pretty much like how a real railroad switch works: you 'trigger' it to switch it to another track, so that any train that comes by will be redirected to that track.
Posted 1 month ago2020-11-24 00:07:53 UTC
in Monstermaker enemies not hostile Post #344943
I did some monstermaker tests recently for a tool I'm working on, and I noticed the same. I think I've only seen it happen the first time a particular monster type spawned, so it might be some kind of initialization issue, but I didn't investigate it further.
Posted 1 month ago2020-11-20 14:02:00 UTC
in Need help with Activities and NPC coding Post #344908
The problem is that 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).

(I've also edited your post to fix the code formatting - for large code blocks, use triple ticks: ` ` ` code goes here ` ` `)
Posted 1 month ago2020-11-20 08:37:24 UTC
in Need help with Activities and NPC coding Post #344899
Did you look at the ACT_IDLE part 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.

Instead, look at the ACT_RANGE_ATTACK1 and ACT_RANGE_ATTACK2 parts - 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.
Posted 2 months ago2020-11-09 23:02:24 UTC
in TWHL Tower 2 Post #344841
Huh, is it that long ago already? I did start work on a floor, but abandoned it when it became clear that I couldn't finish it before the deadline... Anyway, looking forward to finally play this thing. Screenshots are looking very good. :)
Posted 2 months ago2020-10-21 21:14:18 UTC
in Programming video tutorials Post #344792
Looks promising! It's interesting to see what you're working on, too. :) I also like how you're using that dog to show 'emotion' and movement. Keep it up!
Posted 2 months ago2020-10-21 20:37:10 UTC
in Urby's Multiple Choice Half-Life Fan Fiction 2020 Post #344790
Calhoun, Shephard, Frohman or Joe? Let's hear what befell Barney's new buddies.
Posted 3 months ago2020-10-14 09:53:45 UTC
in Making Deathmatch Classic Maps in J.A.C.K? Post #344770
Go to 'Tools -> Options -> Game profiles' and create a new game configuration by copying your HL or HLDM configuration. Then:
  • Game tab: remove any .fgd files and add dmc.fgd instead (this file is included in the FGD collection here).
  • Directories tab: I think you only need to change the 'Mod Directory' to point at your Half-Life\dmc folder.
  • Textures tab: any .wad files you're using must either be part of DMC, or you'll have to distribute them alongside your map (you can embed textures into maps to make things easier for players). It's easier to only select DMC wad files for now.
  • Build Programs tab: you can use the same compile tools as for HL/HLDM, so no changes required here.
Finally, if you want to run your maps from the editor, go to the 'Run map' menu (by pressing F9 when a map is open) and make sure that the game is launched with the -game dmc parameter. 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).

I don't have DMC here to verify so I might be wrong on some of the details. Let us know if this works for you.
A 'few weeks' turned into a few months, but hey, it's finally here!

MESS is a Half-Life level compile tool that helps automating various tasks. It provides a templating system and several macro entities for creating template instances, which can be customized with a basic scripting system. Here are some of the things you can do with it:
  • Duplicating complex entity setups as if they were a single entity.
  • Covering terrain and other surfaces with props.
  • Turning a single brush into multiple entities.
MESS can be downloaded here (direct download link: For a full introduction, take a look at the readme and the entity guide. Also be sure to check out the example maps!
Here's what a template looks like, and how it can be instantiated:
Landmine templateLandmine template
Landmine instancesLandmine instances
There are also several example maps to get you started:
Loading embedded content: Vault Item #6451
I still have several other ideas I want to incorporate into this tool, such as a custom .fgd system (for creating entity 'aliases' for frequently used templates), a more general collision mask system (to make random level generation more viable), a viewer tool for seeing MESS expansion results in 'real-time', and perhaps support for external script files... but that's for later.

Please let me know if you find this tool useful, or if you encounter a problem with it, or if you have ideas for other features!
Posted 3 months ago2020-09-19 16:12:11 UTC
in Post your screenshots! WIP thread Post #344723
I'm working towards the first (beta) release of MESS. Currently working on some example maps:
Other examples are about using macro_insert entities to easily reuse a monster warp effect, or using a macro_fill entity to fill a pool with leeches, or using macro_brush entities to create fences and railings that do not block bullets (without having to manually cover them with clip brushes). I think I'll make a rat-hunt example map as well, to demonstrate the power of recursive templates.

The only things left to do now are writing additional documentation and fixing a few issues here and there. Almost there! :)
It looks like you accidentally made that bone hidden. Try unhiding everything (Edit -> Unhide all, or Ctrl+Shift+H if I'm not mistaken).
Your compile/run commands probably look like this:
$csg_exe $bspdir/$file
$bsp_exe $bspdir/$file
$vis_exe $bspdir/$file
$light_exe $bspdir/$file
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: 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.
Posted 4 months ago2020-08-25 20:28:18 UTC
in GoldSource error - model stuck in wall Post #344647
More test results:
  • cycler_sprites do precache their model after reloading, so that is not what's causing them to disappear.
  • the brush-based entity 'hack' does not suffer from the reloading problem (tested with func_wall and func_illusionary). However, this requires another entity to precache the model, and that precaching must be done before the brush-based entity is initialized, otherwise HL with hang or crash while loading the map. This depends on the order in which the entities are stored in the .bsp file.
  • J.A.C.K. does not handle brush-based entities without brushes well - in some cases it crashes, in other cases it puts them at (0, 0, 0).
  • monster_furnitures are dropped to the ground after spawning.
  • env_sprite seems to work just as well as cycler_sprite, without the reloading problem.
So I now think that env_sprite is the best way to go. The only downside is that, because halflife.fgd marks its 'model' attribute as 'sprite' instead of 'studio', J.A.C.K. does not display the model (and Hammer just crashes when loading such map files).

One way to solve that is to add a custom entity (let's call it env_model) to the fgd, with a 'model(studio)' attribute. That would give you proper editor support. Then you'd need a custom compilation step that renames all 'env_model' entities in the .map file to 'env_sprite', before the other compile tools start processing the .map file.
Posted 5 months ago2020-08-19 09:07:43 UTC
in GoldSource error - model stuck in wall Post #344631
Why does nobody use monster_furniture...
That's... a good question! Time to update the entity guide? ;)

I did a little bit of testing, and after loading a savegame:
  • cycler_sprites are not restored correctly. That probably wasn't implemented because it's just a sprite-viewer test entity after all.
  • monster_furnitures are restored correctly. They're also seen as targets by the auto-aiming system, and bleed a little when hurt by explosives.
  • trigger_autos that did not remove themselves after firing are triggered again.
Posted 5 months ago2020-08-13 09:04:15 UTC
in GoldSource error - model stuck in wall Post #344619
Try using a cycler_sprite instead. Despite its name, it can also be used to render models, and it won't be solid when used that way.

It's also possible to use models with a few brush-based entities, such as func_train. On top of my head: create a point entity, change its classname to func_train, add a 'model' attribute and set it to the path of the model you want to use. If it's a model that's not normally precached, then you also need to add a monster_generic or cycler_sprite entity to your map that references the same model. That entity can be killed after the level has started, its only purpose is to force the game to load that model. A bit of a hack, but it works.
Posted 5 months ago2020-08-08 09:49:13 UTC
in Post your screenshots! WIP thread Post #344609
If my last screenshot was a bit MESSy... this time Hammer complained with 'Too many visible objects.'. I guess filling an area with 500 instances of a recursive template is not a good idea:
User posted image
So I'm working on some macro entities that can quickly cover a surface or fill a volume with instances. Here's the source map. The blue blocks on the left delimit template areas, the big grey cube is a macro_fill entity and the grey/yellow brushes behind that are a macro_cover entity:
User posted image
Here's what it looks like after it's been processed. The template areas have been removed, but their contents have been copied multiple times onto the non-NULL faces of the macro_cover entity and on the inside of the macro_fill entity:
User posted image
There's still a whole bunch of details to finish up, but the core functionality of MESS is pretty much there: creating templates (macro_template and macro_remove_if, or separate map files), inserting them at specific points (macro_insert) or using them to cover a surface (macro_cover) or to fill an area (macro_fill), and customizing them with an expression/scripting system.
Posted 5 months ago2020-08-06 11:42:30 UTC
in I have a serious issue with curved brushes Post #344606
With the selection tool enabled, clicking inside a selection box in any of the 2D views will cycle between resize, rotate and shear mode.
Posted 5 months ago2020-08-05 22:07:33 UTC
in how can i disable a momentary_rot_button? Post #344603
I was going to say 'use a multisource master', but apparently a momentary_rot_button just ignores that, unlike most other entities.

But perhaps you can fake it by disconnecting the button from its door with a trigger_changetarget, then making the button invisible with an env_render and showing a non-moving replacement button instead (func_wall_toggle)?
Posted 5 months ago2020-08-05 21:29:44 UTC
in Making a block disappear after using Post #344602
Various options:
  • If you don't need your entity again, then just kill it (quite a few entities support the 'killtarget' property).
  • Use a func_wall_toggle. Trigger it to make it disappear (or reappear).
  • Use an env_render to make your entity invisible.
Posted 5 months ago2020-08-05 21:16:56 UTC
in I have a serious issue with curved brushes Post #344601
There are various tools that you can use:
  • Shearing is quick and easy, but significant shearing results in 'thin' brushes.
  • With the clipping tool (shift+X) you can start with a larger brush and cut away parts until you get the desired shape. Press shift+X again to cycle between modes (remove right side, remove left side, keep both sides).
  • With vertex manipulation (shift+V) you can move each vertex or edge individually, create new edges (by selecting two vertices or two edges on the same face and pressing ctrl+F) and remove vertices (by dragging them onto other vertices). This is a powerful tool, but keep in mind that each face must remain perfectly flat - bent or curved faces are invalid. Brushes must also remain convex (e.g. no U-shaped brushes). Press shift+V again to cycle between modes (vertices and edges, vertices only, edges only).
  • When creating a brush, you can choose between a few different shapes. 'block' is the default choice, but 'arch' is probably more useful in this case. Keep in mind that it'll be facing towards you in the 2D view that you most recently clicked on.
If 'hollow circular object' means you want to create a curved pipe, those can be tricky and time-consuming to do by hand, depending on how many segments you want. I usually stick to 1 or 2 segments, with 1:1 and 1:2 shearing. I also keep vertices in the straight parts on a 2-unit grid, so 1:2 shearing and clipping won't produce invalid brushes. There are also a few tools out there to generate curved shapes, but I'm not sure if they can do hollow pipes.
Posted 5 months ago2020-08-02 14:27:30 UTC
in Post your screenshots! WIP thread Post #344584
@I have a plan: that's Goldsource, right? Looking good!

Stress-testing Hammer a bit with a custom tool and recursive templates:
User posted image
I don't think I want to compile this though...