Comments

This comment was made on an article that has been deleted.
Commented 6 months ago2024-05-01 05:21:10 UTC in wiki page: func_conveyor Comment #106169
The scroll speed of scroll* textures for the entities are encoded in a hacky way by hijacking FX Color (rendercolor) and you can control the speed of scroll* textures in any brush entity, and even change them with env_render (I tested, it works! 😁)

An algorithm you can use is:
  • R - 0 if positive, 1 if negative
  • G - abs(speed) // 16 (floor division)
  • B - floor( abs(speed) * 16 ) % 256 (modulo or remainder)
Commented 6 months ago2024-04-28 12:33:18 UTC in wiki page: Vlatitude: Elevator Level Transition Comment #106164
DO NOT USE trigger_auto on the second map. trigger_auto fires only once.
DO USE instead "change target" in trigger_changelevel of the first map to fire eleend_mm on the second level. This makes it repeatable and reliable.
If the elevator is to be used both ways, the reverse setup is also needed.
If you want to study how Valve does it, use newbspguy and open any Half-Life map with elevator changelevels.
Commented 6 months ago2024-04-26 02:12:46 UTC in vault item: Riverpool 2 Comment #106159
SOMEBODY PLEASE HOST THIS MAP, THANKS 🙏‍
Commented 7 months ago2024-04-18 15:13:34 UTC in wiki page: Tutorial: Setting up Crowbar for Half-Life/GoldSrc Comment #106137
^ Crowbar is only a frontend for whichever studiomdl you choose. The problem you're facing seem to be errors with the .qc file referencing smd files that doesn't exist.
Commented 7 months ago2024-04-18 14:33:31 UTC in wiki page: Brush Entity Comment #106136
My FGD's ZHLT BaseClass is like this:
fgd
@BaseClass = ZHLT
[
    zhlt_lightflags(choices) : "ZHLT Lightflags" : 0 =
    [
        0 : "Default"
        1 : "Embedded Fix"
        2 : "Opaque (blocks light)"
        3 : "Opaque + Embedded fix"
        6 : "Opaque + Concave Fix"
    ]
    light_origin(string) : "Light Origin Target"
    zhlt_hull1(target_destination) : "info_hullshape (standing)"
    zhlt_hull2(target_destination) : "info_hullshape (big monsters)"
    zhlt_hull3(target_destination) : "info_hullshape (crouching)"
    zhlt_usemodel(target_destination) : "ZHLT Template Model Target"
    zhlt_copylight(target_destination) : "ZHLT Copy Lighting From Target"
    zhlt_noclip(choices) : "ZHLT No-clipping" : "" =
    [
        "" : "Default clipping"
        1 : "No clip"
    ]
    zhlt_invisible(choices) : "ZHLT Invisibility" : "" =
    [
        "" : "Default (visible)"
        1 : "Invisible"
    ]
    zhlt_customshadow(string) : "ZHLT custom shadow (Alpha/RGB)" : : "Float value that specifies opacity of this brush entity. 0.0 (opaque) -> 1.0 (no shadow). Enter three values for RGB."
    zhlt_embedlightmap(choices) : "ZHLT embed lightmap" : "" =
    [
        "" : "No"
        1 : "Yes"
    ]
    zhlt_embedlightmapresolution(choices) : "ZHLT embed lightmap resolution" : "" =
    [
        "" : "[UNSET]"
        1  : "1 "
        2  : "2 "
        4  : "4 "
        8  : "8 "
        16 : "16"
        32 : "32"
        64 : "64"
    ]
    skin(choices) : "Contents" : "" =
    [
        ""  : "[UNSET]"
        -1  : "Empty"
        -2  : "Solid"
        -3  : "Water"
        -4  : "Slime"
        -5  : "Lava"
//        -6  : "Sky"
        -15 : "Translucent"
        -16 : "Ladder"
        -17 : "Fly field"
        -18 : "Gravity fly field"
        -19 : "Fog"
    ]
]
Commented 7 months ago2024-04-08 22:31:40 UTC in wiki page: Tutorial: Intro to the Tools of Hammer Comment #106120
I feel like 2 of the toolbars need to be explained as well, as they've been a lot of cases of people accidentally having IG/TL/SL/UVL on, and getting confused... Ideally they should've RTFM but it wouldn't hurt drawing attention on the important ones.
Commented 7 months ago2024-03-28 09:56:50 UTC in wiki page: momentary_rot_button Comment #106092
Findings:
  • Door hack flag makes the entity un-use-able but solid (default is useable but not solid)
  • Not useable flag has no effect [not implemented?]
  • [bug] the entity only works well with positive distance (clockwise opening). Negative distance makes the internal value "start open". The linked momentary_door will always be opening when the momentary_rot_button moves clockwise and vice versa.
    • solution: have all linked momentary_rot_buttons have positive distance, and rotate the entity's yaw 180 degrees to make it spin counterclockwise (and now lighting needs to be taken to consideration)
  • [bug] [Related with negative distance also,] if there are 2 or more linked momentary_rot_buttons and the other has different signed distance then the other button will keep spinning past the end (and the internal ratio value would go past the 0 ≥ x ≥ 1 range)
    • solution: same as above
  • If 2 or more linked momentary_rot_buttons have different distance/speed the one being USEd will dictate the speed and distance of the others. Then when it reaches the full distance all the others will snap to their fully opened/closed positions.
  • As per RUST: Creating Proximity Doors triggering the momentary_rot_button every 0.1s does move it at the prescribed speed, but if "auto return" is not set it'd just continually ping-pong between opening and closing.

[2024-06-05]
This is common knowledge amongst pro mappers but the momentary_* setup is used on Uplink and Blue Shift for the dialing-in sequences through an off-the-playable-area setup where the momentary_doors push a func_pushable through several trigger_multiples that have "pushables" flag set. One of them is the "correct, dialed in" position, the others unset it.

One very basic application for this that I can think of is replicating HL2 Route Kanal sliding gate setup locking at its open position by having a trigger_once at the very end of the momentary_door, and when the func_pushable touches it, kills the momentary_* entities and replaces them with func_wall_toggles of the setup frozen at their final positions.
Commented 7 months ago2024-03-26 01:06:50 UTC in wiki page: activator Comment #106087
In vanilla SDK, there is no way for any entity to specify the activator in the target field. However in Spirit of Half-Life, Sven Coop, and Featureful, you can use these special names:
  • !activator (SC, Featureful)
  • *locus (SoHL, Featureful)
Commented 8 months ago2024-03-11 06:35:21 UTC in vault item: Bored Comment #106059
I found a server that has cardboard maps, just not this exact map. High probability it's using textures from this map. Very cool concept overall. I just wish more servers host cool maps.
Commented 8 months ago2024-03-11 06:29:57 UTC in vault item: DM_WEEDFORT Comment #106058
If somebody's hosting this make sure to replace HEV charging sounds with bong bubbling sounds!
Commented 8 months ago2024-03-10 16:35:32 UTC in wiki page: target_cdaudio Comment #106056
Fun fact: Track 1 is unassigned because on the original HL CD track 1 is the data part of the CD. Track 1 is Half-Life.
Commented 8 months ago2024-03-02 08:22:42 UTC in wiki page: Vlatitude: Multi_manager Tutorial Comment #106023

Addendum

To trigger the same target multiple times, subsequent keys should be suffixed with #N where N is a number. This is simply because key names need to be unique to be exported to .map properly. The game code drops the suffixes when reading the entity keyvalues.
Example:
Key Value
boop 0.01
boop#1 0.5
boop#2 0.9
boop#3 1.2
boop#4 1.4
boop#5 1.5
All of these target boop.
Commented 8 months ago2024-02-29 23:52:12 UTC in wiki page: Tutorial: Making textures with WadMaker Comment #106022
By setting your canvas to multiples of 16 when you start.
If you're already past that then resize to multiples of 16.
Protip: use a calculator. ;)
Commented 8 months ago2024-02-29 00:09:02 UTC in wiki page: path_corner Comment #106019
Fun fact: the logic of picking movement waypoints of a func_train is entirely within func_train itself. It is therefore possible to make a valid path with other entities mixed in. I've successfully mixed path_corner's with momentary_doors like this:
path_corner (`p1`)
  • target = m1
  • wait = 0
  • spawnflags = Teleport (2)
momentary_door (`m1`)
  • target = p2
  • wait = 0
path_corner (`p2`)
  • target = m2
  • wait = 0
  • spawnflags = Teleport (2)
momentary_door (`m2`)
  • target = p1
  • wait = 0
I can then use momentary_rot_button to move the momentary_door's around and vary the distance the func_train has to travel.

It is a setup for an experiment where I can vary the time a func_train spends on one part of the map vs the other because it's being used to occlude LOS between me and a monster to test its AI schedule but that's off topic.

But you can likewise use it to have dynamically timed sequence with the mom_doors and func_train's off the playable areas.
My theory is that func_train's check the keyvalues of the entities it uses as paths (usually path_corner's) without checking that their classname is actually path_corner. You can therefore use any entity as long as it has keyvalues that concur with that of path_corner's: a target, optionally a wait, message (fire on pass) or speed, and spawnflags that don't conflict with that of a path_corner (therefore flag 1 will stop the func_train, flag 2 will teleport, etc.)
[2024-09-22] Most monsters use "target" to patrol `path_corner`s. Should denote all attributes on whether they apply to [Apaches/Ospreys/Monsters/Trains].
[2024-09-23]
List of monsters that patrols path_corners in their target kvs: Need to update the target attribute in their pages. For all others, also need to update that target does nothing.
[2024-10-07]
  • tidied up formatting for this comment for some reason.
  • Added trigger_camera and func_guntarget to page
  • Changed lists to tables on account of there being like 6 different use cases for this entity now
Commented 8 months ago2024-02-24 14:04:39 UTC in journal: Map2Prop supports MAP format now, what's next? Comment #106009
Suggestions (might be a repeat from the vault):
  1. A way to place/reuse the model multiple places in the map. Maybe a point entity that targets the main func_ entity, inheriting the func_'s convert_to.
    • Technically you can do this with MESS that runs after map2prop, but why use 2 tools when 1 tool do job.
    • Using brush entities that inherit others is actually mighty useful actually, to get the right sizing and positioning in the map. Maybe something like zhlt_usemodel approach is more ideal. Maybe do both.
  2. More bones 🦴, a way to assign different parts of meshes to different bones, and a way to set bone hierarchy (easy enough using target keyvalue)
  3. A way to create separate meshes (i.e. separate bodygroup parts) that is later combined into a single model. Probably separate entities that has a shared keyvalue (like MESS). Probably needs a way to set the main entity from the group too (also like MESS).
Commented 8 months ago2024-02-23 10:56:45 UTC in wiki page: game_text Comment #106006
There should be more information about character sets: what the game supports, how to get the best results on displaying most languages in whatever charset env is necessary (like VNs requiring shift-jis system charset).
Decided to test for myself.

Vanilla Half-Life's text engine seem to be broken for anything that's not ASCII. It consumes single-byte character sets (presumably ANSI/Windows-1252/system locale) but the text rendering is consuming UTF-8. This results in the broken text consistent with the table in this page: https://www.i18nqa.com/debug/utf8-debug.html

Haven't looked at the other SDKs or engines (candidates include Updated/Unified/Featureful/Xash-fwgs/Pathos) on how they handle text. Hopefully better than the unrecoverable mess vanilla is in right now.

ALSO, JACK will purposefully mangle non-ASCII texts. You'd need to edit the .map directly and feed it to the compilers yourself.
2024-06-29
apparently HLCSG also needs -notextconvert argument. sauce: singularmurderer
Commented 9 months ago2024-02-20 13:55:04 UTC in wiki page: Tutorial: The Complete Guide to Lighting Comment #105993
Back from AFK, got HL and JACK back and working again.

I tested light_surface and it works exactly as I expected, proving the description is indeed incorrect. I will pass my test map to you for you to incorporate into this page. (tip: gl_wireframe 1 would be useful when taking screenshots for this map)
Edit 2024-03-17
No correction on the above has been made yet. As of now the information on light_surface page is updated and correct, yet this page is still repeating the outdated and incorrect information.
Commented 9 months ago2024-02-16 12:54:53 UTC in wiki page: Tutorial: The Complete Guide to Lighting Comment #105985
Can you test the difference between light_surface's Filter max range [_frange] and Filter max dist to plane [_fdist]? I know what the words mean, but the description seem to contradict my understanding of the meaning of planes and how they work.

I have a few test case ideas:
  1. A wall of tiling 16x16 brushes textured with a texlight.
    • _frange should make only a disk of those brushes around the light_surface emit light.
    • _fdist, if my interpretation of plane is correct, should light up all of them since the normal distance of all the faces to the plane is identical even if they're infinitely far away. That's the nature of planes.
  2. Similar setup to the above but the next row above recedes 16u behind the previous row, producing a staircase. Place light_surface in the middle of this flight of stairs.
    • _frange should produce a sphere of lit up faces.
    • _fdist, if my interpretation of plane is correct, should have all faces on the same row light up until a certain distance away from the entity because again, all of them should have same normal distance to the plane.
Unfortunately I can't do these tests myself right now as my drive did a resonance cascade and I'll be afk for a couple of days.
Commented 9 months ago2024-02-16 08:28:49 UTC in vault item: A WAD of 897 Solid Colors Comment #105983
You could probably fit all 1100 colours if you use just the hex values for names e.g. COLOR<RRGGBB>. Has the unintended side effect of the alphabetical sort being quite logical too as it sorts by hex values.

...maybe I should attempt this myself.
Commented 9 months ago2024-02-15 14:37:55 UTC in wiki page: monster_human_grunt Comment #105982
^ Spawn one with a shotgun. HECU shotgunners always wear balaclavas.
[2024-08-25] I tried a weird weapon combo of just handgrenades (2) but it doesn't work as I expected:
  • Weapon clip amount defaults to AR's (36)
  • Ranged attack defaults to shotgun shot, even if grunt doesn't have one
So the guy ended up being way more OP than regular shotgunner.
Commented 9 months ago2024-01-31 23:32:38 UTC in vault item: Steamboat Willie oriented sprite Comment #105945
Rimrook's weedfort seem to have used this one I gave him, so you might want to download this to play the map.
Commented 9 months ago2024-01-31 13:38:37 UTC in vault item: Scissorlift Prefabs | Static and functional | 6 texture variants | MESS support | v1.2 Comment #105944
^ Ayy, thanks! 😁

Also, version 1.2 just dropped. This adds support for extended static lifts, and functional lifts that start already extended.
I highly recommend updating your local copy to this version.
Commented 9 months ago2024-01-28 05:39:48 UTC in vault item: Scissorlift Prefabs | Static and functional | 6 texture variants | MESS support | v1.2 Comment #105938
It's a known issue. Please read Important Information #2.

I might have to take a look at the template and do the fix again.
Commented 9 months ago2024-01-27 23:22:14 UTC in vault item: Scissorlift Prefabs | Static and functional | 6 texture variants | MESS support | v1.2 Comment #105936
By popular demand, sample BSP included.
Commented 10 months ago2024-01-20 09:05:40 UTC in wiki page: VERC: Chairs, Scientists and Barneys Comment #105906
The sit1 animation in barney.mdl is one of the special ones which contain sequence event ID 1003s. These will try to trigger entities in your maps, and this could be unintentional. It's important to check with Half-Life Asset Manager (modern, feature-rich descendent of HLMV. Use it instead of HLMV) for these events in the animation you want to use. If such events exist, then you can either:
  1. Take advantage of it by naming entities you want to get triggered as part of the choreography, just like introchair, or
  2. Avoid naming any entity in the map with the options value of the event[s]
Commented 10 months ago2024-01-17 02:08:35 UTC in wiki page: monster_bullchicken Comment #105884
The cooldown between spits is apparently reset when it loses sight of you, so you can cheese the bullsquid to turbo-spit you by timing the LOS between you and the bullsquid; immediately block LOS on or after the frame where the projectile spawns, then immediately unblock LOS the next frame (maybe even the same frame)
Commented 10 months ago2024-01-13 00:20:03 UTC in wiki page: VERC: Doors With Glass Comment #105869
I discovered a trick with using User posted image BOUNDINGBOX brush which eliminates the lip math. You make it the same width as the main door and tie it to the glass part. No messing with lip value for the glass door; use the same value as the main door.
Commented 10 months ago2024-01-12 09:11:27 UTC in vault item: Interactive_Vehicle_Frmk Comment #105858
Thank you Lei Shi, very cool.
Commented 10 months ago2024-01-09 22:56:28 UTC in wiki page: Tutorial: Compiler charts and limits Comment #105855
I wrote a short journal entry on how all 15 lumps relate to each other. I used the relational model to visualize it.

Because the referencing of entries by other entries is done with indices into the lump using mostly 16-bit shorts, it places a hard limit on how many of the target lump's entries can exist before their indices becomes out of bounds for the data types used. In addition, Carmack makes a few of these data types do double (sometimes triple) duty e.g. positive values refer to one type, negative values means entirely different type, and 0 means null, so that halves the capacity of a type's max index. clipnodes suffer the most from this; an entire half (the negative half) of addressable values in 2^16 is used to assign only 2 significant values -1 and -2.

I've incorporated the information into the first section of this page. You can read the table as:
The resource A has a limit of X because it is referenced by JKL with data type T, using [Remark]
The resource clipnodes has a limit of 32768 because it is referenced by other clipnodes with data type short, using positive values > 0
Commented 10 months ago2024-01-09 13:16:25 UTC in wiki page: VERC: MAP File Format Specification Comment #105854
Additional context:
  • This version of the map format is colloquially known as Valve20 to differentiate from the original Quake version
  • Valve20 is now the de-facto map format all Quake-based and Quake-derived editors and compilers support due to the precision in texture alignment
  • TrenchBroom uses the OS's clipboard for copy and paste (not the case with JACK/VHE3.x) and uses the map format to represent brush & entity data to be pasted. It also means clipboard-based IPC can be done using the map format.
Commented 10 months ago2024-01-06 06:19:43 UTC in wiki page: func_detail Comment #105850
What I can gather from the community's collective wisdom:
  • func_detail does not reduce world leaves
  • func_detail instead reduce VIS portals generated by HLBSP. if without it HLBSP makes VIS portals around detail geometry, with it it just treat the surrounding area as a single VIS leaf
  • func_detail is gone at the end of HLBSP, and is world geometry after that point
  • hence HLRAD cannot treat it in any way other than opaque world brush because it's gone by the time it's run
Commented 10 months ago2024-01-05 12:12:36 UTC in wiki page: func_tracktrain Comment #105848
Some findings about func_tracktrain:
  • wheels distance is only measured forward from origin. To make the train travel as much on the path as possible, the origin needs to be located at the center of the back axle.
  • wheel distance defaults to 100.
  • target of a path_track is fired when the origin passes the path_track.
  • the position and angle is set wrt the origin point as follows:
    1. trace a line forward.
    2. if there's enough distance to the end of the current path, keep heading
    3. if wheel distance > distance to next path, subtract current distance to next path, then iterate the path forwards until the distance fits the path. the point where distance is 0 is the new heading.
    4. origin moves forward
    5. angle is adjusted to point to the heading. this will in all cases be shorter than wheel distance; the sharper the curve the more noticeable. this also means the front wheel part will always overshoot the path. but the origin is guaranteed to always be on the path.

[2024-05-12] While I am a proponent of the origin at the back axle, more realistically moving trains, I can see how it is totally incompatible with track [auto]changers. Gotta have to pick your poison, I guess.
[2024-05-13] Also, a tutorial for track trains is needed.
[2024-07-10] You can control a func_tracktrain remotely using game_counter_set entities. Value 1 throttles up one notch, -1 down a notch.
Commented 10 months ago2024-01-02 15:54:34 UTC in vault item: The Rimpository v1.07 - Just more stuff I suppose... Comment #105830
It'd be pretty cool to use the visgroups to assign attribution e.g. all of sir's prefabs is assigned a visgroup to his name. This is to comply with the "BY" aspect of the CC license.
Commented 10 months ago2024-01-01 07:44:43 UTC in wiki page: Tutorial: Editing Compiled BSPs With newbspguy: The Basics Comment #105827
@karaulov
textures can be scaled as need because now lightmap can be recalculated after any changes.
You still need to be careful because the maximum lightmap size for a face is apparently 16x16 luxels. A lot of faces you'll find in maps are already at 16 luxels on either (or both) sides. GoldSrc doesn't support lightmaps larger than that size, and scaling down a texture that results in a face with lightmaps over that size crashes the engine. (IDK if it's supported on svengine). Hence my verdict is don't do it.

As for vertex editing, I just don't recommend it at all too. It's way more cumbersome, and way way harder to get satisfactory result than to get completely broken result. I honestly don't know how a face whose vertices are non-planar would act inside the game. If there's face splitting ability in world faces and easier vertex shifting via handles vs textboxes then it might be feasible, but still not recommended because of the non-planar thing. *

The main takeaway is that just because it's doable with the BSP structure doesn't mean the game engine that's going to parse and run the BSP would like it. If the game engine doesn't like it, don't do it.
I still don't have any draft for a part 2 of this tutorial. 😅
EDIT 1:
* Tested face vertex editing. It messes up lightmaps elsewhere on a map.
Commented 10 months ago2023-12-31 19:52:10 UTC in wiki page: Tutorial: Models and lighting Comment #105822
From reading the code it seems that sv_skyvector_* and sv_skycolor_* are the culprits of models forcibly taking the sky's color, because from looking at texlight data itself there's nothing to discern sky light from normal light. The engine probably trace a vector set in sv_skyvector_* from the origin (feet) and if it hits the sky texture, overrides the model's lighting with the sv_skycolor_*.

sv_skycolor_* is read from the brightness value of light_environment at map load, and sv_skyvector_* from the entity's angle also at map load.
[2024-09-12] I think I solved the black_hidden debacle. It's hidden as world brush BUT visible when made part of a brush entity. the folks who saw the texture probably didn't realize that it won't work on entities.
[2024-09-15] A primer about origin would be good. Models whose origin are inside the walls won't get lighting and be rendered black, and a way to shift it with QC and HLAM. Additionally, a way to have wall-mounted models take lighting from the walls instead of the floor when you shine a flashlight around, for example. I touched on the latter in my tutorial about model health/hev chargers.
Commented 10 months ago2023-12-30 18:39:37 UTC in wiki page: scripted_sequence Comment #105814
The behaviour of this entity is so complex it might need a flow chart
Commented 10 months ago2023-12-26 11:18:40 UTC in journal: A new home Comment #105794
My ancient-ass mind when I heard anything about Malta
Anyway, best of luck out there. Keep an eye out for the memelord himself, grandayy.
Commented 10 months ago2023-12-24 00:46:29 UTC in wiki page: trigger_gravity Comment #105782
That cliphull# trick is neat, and i think should apply just as well to all brush triggers.
Commented 10 months ago2023-12-22 10:54:47 UTC in wiki page: Entity Attribute: Custom Appearance Comment #105779
Trivia: It's preset 10 (flourescent flicker) that made the news about how the lighting presets survived all the way from Quake to Half-Life Alyx unchanged.
Commented 10 months ago2023-12-21 23:19:38 UTC in vault item: Bloody Christmas Comment #105776
Merry Bloody Christmas!

P.S. it was a 4 but 1 star had to be docked because I can't eat the cookies 🚫🍪😭
Commented 11 months ago2023-12-18 21:37:16 UTC in wiki page: Tutorial: Editing Compiled BSPs With newbspguy: The Basics Comment #105764
^ Thanks for the plentiful added features! 😁

This tutorial definitely needs a part 2 for the more advanced tasks e.g. vertex manipulation, bsp import/export, lightmap editing.
Commented 11 months ago2023-12-18 20:07:21 UTC in journal: Goldsrc BSP relational model Comment #105762
^ Thanks for the links! 😃
Commented 11 months ago2023-12-16 12:33:41 UTC in wiki page: Tutorial: Hint Brushes Comment #105743
Relaying other member's comment on this page: a top-down view of the setup was sorely needed. In that aspect the Tutorial: Total Map Optimisation Part 2 (VIS, Hints) page is much more helpful (and much more thorough tbh).
Commented 11 months ago2023-12-16 12:02:30 UTC in wiki page: SKY texture Comment #105742
I found that compiling with VHLT will make sky lighting not work on sky brushes that aren't all textured with sky texture, making that particular brush not emit skylight.

It's also particular about having different sky "ceiling" brushes at different levels. Hard to explain why; I think it can only emit light from one side, and so having one sky brush act as both wall and ceiling of a skybox makes it only emit light on the wall side. So it might mean one sky brush emits light on only one face.
My solution was to have rooms with sky be at only one ceiling level each.
Commented 11 months ago2023-12-16 09:30:25 UTC in wiki page: Tool Textures Comment #105738
I made a version with legends and emojis. The aim is threefold:
  1. trim the wasted space the table headers are using, and give more space for the description column
  2. Immediately infer the properties with emojis without constantly having to look up the yes/no columns back to the header way up the page
  3. hopefully get this to display better on mobile
For now it's in this comment for my personal use. If feedback is favourable then we can merge this version into the main page.
merged to main page 2024-05-03
2024-06-09
  • for the !cur textures, you can make them invisible by using the _HIDDEN suffix, so !cur_0 becomes !cur_0_HIDDEN

2024-08-29
  • _HIDDEN suffixes doesn't work in entities for some reason. since models don't take lighting from brush entities anyway there's no use case for it, so probably just use NULL instead.
  • Found a way to use tool textures in a way which imparts its properties, but without having it be part of any resulting face of the brush, but it only works on MAP files. You just insert an additional line defining a plane of the brush using the tool texture of interest, but the plane is way, way out towards the extremities of the map that it never intersects with any other planes of the brush:
{
( 80 144 96 ) ( 80 144 32 ) ( 80 208 96 ) NULL [ 0 -1 0 0 ] [ 0 0 -1 16 ] 0 1 1
( 144 144 96 ) ( 144 144 32 ) ( 80 144 96 ) NULL [ 1 0 0 0 ] [ 0 0 -1 16 ] 0 1 1
( 80 208 32 ) ( 80 144 32 ) ( 144 208 32 ) NULL [ -1 0 0 -0 ] [ 0 -1 0 0 ] 0 1 1
( 144 144 96 ) ( 80 144 96 ) ( 80 208 96 ) NULL [ 1 0 -0 0 ] [ 0 -1 0 0 ] 0 1 1
( 144 144 96 ) ( 144 208 32 ) ( 144 144 32 ) NULL [ 0 1 0 -0 ] [ 0 0 -1 16 ] 0 1 1
( 144 208 32 ) ( 144 144 96 ) ( 80 208 96 ) NULL [ 1 0 -0 0 ] [ 0 -1 0 0 ] 0 1 1
( 80 208 96 ) ( 80 208 32 ) ( 144 208 32 ) NULL [ -1 0 0 -0 ] [ 0 0 -1 16 ] 0 1 1
( 32767 32768 32768 ) ( 32768 32768 32767 ) ( 32768 32767 32768 ) !CUR_0 [ -0.707107 0.707107 0 0 ] [ 0.408248 0.408248 -0.816497 0 ] 0 1 1
}
  • The above spawns a NULL brush but with cur_0 contents. I figure a map pre-processor like MESS could implement this featur, inserting tool texture faces into the resulting brush defs in the output .map.
Commented 11 months ago2023-12-07 14:41:36 UTC in wiki page: Tutorial: In the Beginning Part 5 Comment #105710
The original Part 5 of Worldcraft 2.x's tutorial covers more things than just prefabs (which aren't available in JACK, which made people skip this part and miss other basic detailing things)

For now, I'll copy-paste just this part, until there's an agreement on a more permanent inclusion of this part or the whole of WC's original tutorial series into the wiki.
Excerpt from wc.hlp
Details. These are the things that aren't necessary to the gameplay of your level, but they do help to give it a certain atmosphere, which is essential. Right now, the tutorial level is just a couple boxes separated by a tube. There really isn't anything in it to draw your attention besides a flickering light. This must change!

Once again, here is out baseline picture...
User posted image
Now, I'm thinking..."What are these rooms??" This is the main question that should help you decide what to put into a room as details. This could be some type of control room. In that case, there would be some type of computer equipment. Most places will have some type of ventilation system. Let's say this room has it exposed. Some pipes, running to...who knows where? Basically, you have free reign to add all the touches to the level that make it "yours".

Go ahead and add stuff to your tutorial level, or load up tut5.rmf in Worldcraft to see my example.
User posted image
As you can see from the above pictures, details make a big difference. Some of the things done were:
  • signs - the biohazard sign and the emergency shower sign give the area a realistic look. Half-Life's texture set includes a number of signs that can be used within your levels.
  • furniture and accessories - in the starting room, there is a swivel chair and ashtray, and a shelving unit with some random boxes on it. None of this would matter in gameplay of course, but it gives the level an interesting look.
  • exits - although they don't go anywhere, and in fact do not even open, I've inset two doors in the level to make it appear like this is actually a part of a building. It is important to make the player feel like he is not just being dropped into a box.
  • interactive objects - the medikit box on the wall can open, dispensing health. (It is actually a rotating door with its "healthvalue" key set to "15", so that when the player opens the door, 15 health points are transferred to him). The boxes on the shelves are explodable if shot.
  • shaping - the immediate tendency for most people when they start editing is to make everything square and flat. Square rooms, doors flush with walls, and things like that. It is important to get to know the three main types of brush shaping Worldcraft has to offer: Carving, Clipping, and Vertex Manipulation.
Sounds like fun...
Sound is another important aspect of a level. Up until now, the only sound you'd hear in your level is your own footsteps. Let's add some other sounds now. The computer, pipes, and flickering light are candidates for sounds.
User posted image
To give an object a sound, you need to place an ambient_generic entity near it. The only thing you'll need to do in the entity properties is specify which WAV file to play.

Evolution
Well, from the first tutorial to now, you can see quite a bit of evolution at work.
User posted image
I tried to grab the accompanying tutorial files but the installer cannot be run. sorry.
Commented 11 months ago2023-12-07 09:07:28 UTC in journal: Starting half life map development Comment #105708
In the good old days of 1998 when Half-Life hit the shelves, bundled in the CD with the game is Worldcraft 2.0. It's really primitive and so is the compilers, but it has one very crucial thing: A step by step "In The Beginning..." tutorial that guides you step by step of making a playable, presentable first Half-Life map. The tutorial series was dropped in later Worldcraft versions, and that I think was a misstep. Sure, everyone is borderline terminally online 25 years later but not having an "official" tutorial series leaves new people reaching, bewildered by 25 years of accumulated knowledge, and become paralized.

Luckily for you, the "In The Tutorial" series has been somewhat recreated here on TWHL.
It's good enough but one part deviates from the formerly-official series so it left a basic knowledge gap. Luckier still, I have the old help file, with the original tutorial series, decompiled below:
Loading embedded content: Vault Item #6737
You can take a look at the original tutorials and start your journey the same way I did in the early 00s. Note: the images are not embedded into the text document but you can just cross-reference with the images on the archive.
Commented 11 months ago2023-12-04 15:33:45 UTC in vault item: corridors_collide Comment #105689
aww, why not include the file instead of removing the ambient_generics?
btw it's from opposing force. i would've just copied it from there to get it working...prior to the update that is.
Commented 11 months ago2023-12-01 01:01:05 UTC in wiki page: Tutorial: Total Map Optimisation Part 3 (wpoly, clipnodes, engine limits, compile parameters) Comment #105680
we should migrate the images from imgur