Commented 2 months ago2024-02-29 00:09:02 UTC
in wiki page: path_cornerComment #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_corners 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_doors 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_trains off the playable areas.
My theory is that func_trains check the keyvalues of the entities it uses as paths (usually path_corners) 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_corners: 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.)
Not that I know of. You could propably script it with replace but since they all have different names and also different characteristics (size and so on) it propably isn't worth the hustle.
I could just implement an parent_model key, where the value is another func_map2prop that becomes a template so to speak.
Perhaps add a spawnflag "Is submodel" that makes the mesh of this entity become a submodel of the template's model (or the worldspawn model, if no parent_model is set).
I have some ideas for skeletal stuff, but I'm saving that for post-release.
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.
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)
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).
So your mock-up was not far off, just missing some of the QC options.
Also instead of an offset key the mapper should just use an ORIGIN brush to set the model origin. It's a practice most mappers should be familiar with already. 🙂
The source code repo is still private, waiting until v1 to open that one.
Commented 2 months ago2024-02-23 10:56:45 UTC
in wiki page: game_textComment #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.
They have the option to flee, and also plenty of ways to avoid confrontation as they figure out how to flee. Also, two to 4 direct hits to the sack gibs the thing and I've loaded them up on armor and health is available.
I guess I won't know if it's too difficult until I get it playtested.
That's all good advice, thank you. Unfortunately I start them out with a gonarch (that they can run from). But I suppose I will not proceed with my plan to put them up against a voltigore shortly afterwards :-/
If you give the players no other options, they will eventually get used to using only melee.
Just be careful about the difficulty ramp. Warm them up with some headcrabs and breakables first and slowly increase the encounter difficulty instead of dropping the player directly into an arena with several gonomes and bullsquids. Let them become comfortable with it before challenging them, so to speak.
If the enemies have ranged attacks, give the player plenty of cover so they don't end up feeling defenceless (which in turn is experienced as unfair and difficult by the player).
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.
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:
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.
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 2 months ago2024-02-16 10:03:36 UTC
in vault item: A WAD of 897 Solid ColorsComment #105984
I thought about doing something like that, but I personally prefer searching for colors with intelligible names, rather than sorting through a list of hex values
Commented 2 months ago2024-02-16 08:28:49 UTC
in vault item: A WAD of 897 Solid ColorsComment #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.
Commented 2 months ago2024-02-12 09:56:20 UTC
in journal: Back Being an MDComment #105977
You can at least rest assured that you tried. There's always the possibility to play simulators with VR in your spare time, so you can still have this hobby in a safe manner.
Quite a great map right here, with so much detail crammed in it, that sometimes it feels surreal it was done during the compo. A lot of interesting placements, layouts, fun traps and secrets.
The sole cons I have, that stops this from being full perfect, is that it's quite a big map, so if the server isn't at least half full, you will have some trouble finding some players.
In my opinion, the coolant instantly killing you ( or hurting you very fast on the small puddles / waterfalls ), kinda makes it at times a punishing element if you miss a jump / get pushed, but its minor in my view.
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_corners withmomentary_doors
like this:p1
)target
=m1
wait
=0
spawnflags
= Teleport (2)m1
)target
=p2
wait
=0
p2
)target
=m2
wait
=0
spawnflags
= Teleport (2)m2
)target
=p1
wait
=0
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_trains off the playable areas.
My theory is that func_trains check the keyvalues of the entities it uses as paths (usually path_corners) 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_corners: atarget
, optionally await
,message
(fire on pass) orspeed
, andspawnflags
that don't conflict with that of a path_corner (therefore flag 1 will stop the func_train, flag 2 will teleport, etc.)They look very good!
Not that I know of. You could propably script it with replace but since they all have different names and also different characteristics (size and so on) it propably isn't worth the hustle.
parent_model
key, where the value is another func_map2prop that becomes a template so to speak.Perhaps add a spawnflag "Is submodel" that makes the mesh of this entity become a submodel of the template's model (or the worldspawn model, if no parent_model is set).
I have some ideas for skeletal stuff, but I'm saving that for post-release.
convert_to
.zhlt_usemodel
approach is more ideal. Maybe do both.target
keyvalue)Also instead of an offset key the mapper should just use an ORIGIN brush to set the model origin. It's a practice most mappers should be familiar with already. 🙂
The source code repo is still private, waiting until v1 to open that one.
Have you already opened the repo?
I like that smart idea of using 'contentwater' for mirror faces
What entities (and keyvalues) do you have in mind for the fgd?. I made a small mock-up in case you haven't thought of one yet, maybe this can help:
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.
I guess I won't know if it's too difficult until I get it playtested.
Just be careful about the difficulty ramp. Warm them up with some headcrabs and breakables first and slowly increase the encounter difficulty instead of dropping the player directly into an arena with several gonomes and bullsquids. Let them become comfortable with it before challenging them, so to speak.
If the enemies have ranged attacks, give the player plenty of cover so they don't end up feeling defenceless (which in turn is experienced as unfair and difficult by the player).
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.I have a few test case ideas:
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.
Good luck with your new medical practice!
But a good work overral!
Continue mapping!
Texturing — 10
Ambience — 10
Lighting — 10
Gameplay — 9
The sole cons I have, that stops this from being full perfect, is that it's quite a big map, so if the server isn't at least half full, you will have some trouble finding some players.
In my opinion, the coolant instantly killing you ( or hurting you very fast on the small puddles / waterfalls ), kinda makes it at times a punishing element if you miss a jump / get pushed, but its minor in my view.