Commented 2 weeks ago2024-05-14 08:28:02 UTC in vault item: BSP Runner [v1.1.1] Comment #106177
Looks useful if you want a more advanced launch stage of one's compilation process, great work! 👌
Commented 1 month ago2024-04-20 12:04:46 UTC in journal: Reporting in Comment #106147
Ah, a fellow snowboarder! 😃
Those mountains look lovely! I bet that slope was fun!
Commented 1 month ago2024-04-20 11:46:59 UTC in journal: Hiatus(Yes, again) Comment #106146
Taking breaks and resting is very important. No matter if it's work or hobby or chores.
I hope things get well and you get the rest you need 🙂
Commented 1 month ago2024-04-09 08:06:56 UTC in wiki page: Tutorial: Intro to the Tools of Hammer Comment #106121
Good idea! Will see about adding a section about the toolbars 🙂
Commented 1 month ago2024-04-07 19:52:21 UTC in journal: πŸ€πŸ€πŸ€πŸ€πŸ€ Comment #106118
Huh, didn't realise that about t0a0b and t0a0b2. Is one actually unused in the game?
Commented 1 month ago2024-04-07 00:41:46 UTC in journal: πŸ€πŸ€πŸ€πŸ€πŸ€ Comment #106115
I suppose we could do a search for "monster_rat" in the vanilla maps to get a correct count, and to make sure it really is only within the Hazard Course.
Wikis are community driven, so information isn't guaranteed to be correct. Someone might have made a guesstimate without checking, and the number was never fact-checked. That happens all the time :p
Commented 1 month ago2024-04-04 06:39:57 UTC in journal: Hiking Comment #106110
That's a nice photo!
Kind of reminds me of the mountains in southern Spain 🙂
Commented 2 months ago2024-03-18 14:32:55 UTC in journal: The Problem With Planning Comment #106073
Planning a map isn't only done by sketching ideas, but definitely can be done by just writing down ideas or even writing it as a kind of story.

In fact, writing down ideas is always a good thing to do as it helps preventing you from forgetting about it, and even if it gets unused in your current project it can be archived in an "idea bucket" where you can come back to later on to reuse ideas for new/other projects.

Myself, I like to do a combination. I start out writing down the main ideas and keywords etc I have for a project, and try to write a story of what I want to happen in the project, and sketch out things I have a visual idea for to help remembering it and to start fleshing out details I didn't think of first.
Commented 2 months ago2024-03-12 10:22:08 UTC in wiki page: func_pushable Comment #106062
Just to answer that age-old question that has been left unanswered for so long here:

The Hull Size (size) determines which of the three cliphulls to test its own collisions against.
This is why a big pushable using HULL1 or HULL3 might be clipping into world geometry when pushed around.
("Am I colliding with the world?" from the pushable's perspective).

This isn't the same sort of collisions as when a player is touching/climbing the pushable, in which case it's the player testing collisions against the pushable's own cliphulls, which are similar to its shape regardless of size.
("Am I colliding with the pushable?" from the player's perspective).
Commented 2 months ago2024-03-11 14:22:23 UTC in wiki page: func_pendulum Comment #106061
Just posting it here as well for convenience:

Linear Pendulum trick

If you want to simulate a linear pendulum (e.g. a weight on a spring that bobs up-and-down or side-to-side) you can do so by placing the ORIGIN brush at a distance far away from the pendulum.
To find the values to be given to the func_pendulum for a given length of oscillation you can use the equation
A = 2 Γ— sin⁻¹(h / d)
User posted image
where h is how far from the center the pendulum should oscillate (half the total distance),
d is how far the center of the ORIGIN is from the center of the pendulum,
and A is the resulting angle we will use for Distance (distance).

To make sure it oscillates properly we also need to set negative half A to Pitch Yaw Roll (angles) in the appropriate axis.
As for the Speed (speed) you'd want a value that's near A, otherwise it'll move too fast (as the origin is so far away, small changes in the angle results in great changes in position of the pendulum).

As an example, let's say we have a pendulum we want to move up-and-down by 32 units in the Y/Z plane. We create our pendulum and set the ORIGIN brush to be 7300 units away along the Y axis and we use the equation to find A = 2 Γ— sin⁻¹(32 / 7300) β‰ˆ 0.5Β°.
So for our func_pendulum we set Distance to 0.5, Pitch Yaw Roll to 0 0 -0.25, Speed to 0.2, and we set the Start on and X-axis flags.
Make sure to set your calculator to use degrees, not radians
Commented 2 months ago2024-03-11 10:21:45 UTC in poll: New Poll? Comment #106060
Have we had a poll for favourite TFC class yet?
Commented 2 months ago2024-03-07 21:39:49 UTC in poll: New Poll? Comment #106045
It sure do cause torture, but personally I wouldn't consider the recorder to count as a proper instrument, Oskar :p
Commented 2 months ago2024-03-06 18:47:45 UTC in poll: New Poll? Comment #106040
Since there had been talks about it in the Discord lately, how about a poll about if we play any instruments? 🙂
Commented 3 months ago2024-02-26 09:31:06 UTC in vault item: GoldSrc Map2Prop Comment #106014
That's really exciting to hear! Looking forward to seeing it! 😁
Commented 3 months ago2024-02-24 16:40:58 UTC in journal: Map2Prop supports MAP format now, what's next? Comment #106010
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.
Commented 3 months ago2024-02-24 00:10:08 UTC in journal: Map2Prop supports MAP format now, what's next? Comment #106008
Thank you! I had already started working on a FGD, currently it looks like this:
@SolidClass = func_map2prop : "Brushes for Map2Prop to turn into a model"
    spawnflags(flags) =
        1 : "Disable" : 0

    outname(string) : "Exported model's name"
    outdir(string) : "Exported model subfolder"
    gamma(string) : "Gamma (default 1.8)" : "1.8"
    smoothing(string) : "Smoothing threshold (0 disables)" : "60.0"
    scale(string) : "Scale" : "1.0"
    rotate(string) : "Rotate" : "0.0"
    convert_to(choices) : "Classname after conversion" : 0 =
        0: "cycler"
        1: "cycler_sprite"
        2: "env_sprite"
        3: "item_generic"
        4: "monster_furniture"
        5: "monster_generic"
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 3 months ago2024-02-22 17:00:53 UTC in journal: What is your opinion of melee combat in Op4? Comment #106001
As long as you make it clear they have to flee from the Gonarch and not engage in combat with it, it should be fine 🙂
Commented 3 months ago2024-02-22 15:10:39 UTC in journal: What is your opinion of melee combat in Op4? Comment #105999
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).
Commented 3 months ago2024-02-07 16:48:36 UTC in wiki page: Tools and Resources Comment #105966
@wasd Just make sure the dimensions (width and height) are divisible by 16, up to the max of 512x512.

If, for example, you have a texture that's 1024x550 you have to first get it to 512x512 or below. Scaling it down so the width becomes 512 (we already know this is divisible by 16) and preserving the aspect ratio you get a height of 275. We divide that by 16 to check if it's divisible, and end up with 17.1875, so it's not divisible.
The nearest number in this case would be 17, so we multiply that with 16 to get 272, which is what the height needs to be scaled/cropped to.
Commented 4 months ago2023-12-30 18:44:39 UTC in journal: func_illusionary and clipnodes Comment #105815
You're welcome! Just glad to help out with these things. Would be a shame if you or someone else had to do severe cuts to their map just because of wasted clipnodes :p
Commented 4 months ago2023-12-30 12:38:07 UTC in wiki page: Specification: JMF Comment #105812
With the December 2023 update the JMF version was changed to 122, now including a data for background images in the 2D displayports.
From what I've found so far, the new structure looks like this:
typedef struct {
    char[4] magic;                      // File format magic number, "JHMF" in ASCII encoding
    int32 version;                      // File format version (currrently 122)
    int32 ep_count;                     // Number of recent export paths
    p_char[ep_count] export_paths;      // Recent export paths
    bg_image[3] bg_images;              // Background images
    int32 group_count;                  // Number of groups in the map
    Group[group_count] groups;          // Group objects
    int32 visgroup_count;               // Number of VisGroups
    VisGroup[visgroup_count] visgroups; // VisGroups objects
    Vector cordon_min;                  // Minimum corner of the Cordon box
    Vector cordon_max;                  // Maximum corner of the Cordon box
    int32 camera_count;                 // Number of Camera objects
    Camera[camera_count] cameras;       // Camera objects
    int32 path_count;                   // Number of path objects
    Path[path_count] paths;             // Path objects (created with the Path tool)
    Entity[] entities;                  // All entities including worldspawn, read until the end of the file
} Jmf;
and for the background image struct:
typedef struct {
    p_char path;                        // Background image path
    double scale;                       // Image scale
    int32 luminance;                    // Image brightness (0-255)
    int32 filtering;                    // Image filtering (0=nearest, 1=linear)
    int32 invert;                       // Invert image colours
    int32 offset_x;                     // Image horizontal offset from center
    int32 offset_y;                     // Image vertical offset from center
    byte[4] unknown;
} bg_image
Commented 4 months ago2023-12-29 11:31:33 UTC in wiki page: env_sound Comment #105810
Just to document this somewhere:

The cvar waterroom_type (default 14) controls which env_sound Room Type is applied when the player is underwater. It's seemingly unused in the game.
Commented 5 months ago2023-12-26 20:11:01 UTC in journal: func_illusionary and clipnodes Comment #105799
So it's basically a permanent pointhull-only brush entity. Neat!
Commented 5 months ago2023-12-26 02:52:32 UTC in journal: A new home Comment #105791
Congrats on the new home!
Commented 5 months ago2023-12-16 14:50:49 UTC in journal: func_illusionary and clipnodes Comment #105749
HULL0 doesn't use clipnodes. It's pretty much just the BSP model(s).
Commented 5 months ago2023-12-07 09:46:34 UTC in journal: Starting half life map development Comment #105709

As for leaks, the map must be completely sealed against the "void".
While it has to do with how the compilers process the geometry and calculate what's supposed to be visible, you can think of it as entities not being allowed to come into contact with the void and so you must build an airtight container for all entities in your map.

It's easy to be tempted to put a giant hollow box around your map to prevent leaks, but this will cause the compiler to think everything in your map is supposed to be on the inside and fail at optimising it. It's essentially turning your entire map into one big open area, which the GoldSrc engine really doesn't like.
Commented 6 months ago2023-11-26 10:26:19 UTC in journal: So I drink coffee now... Comment #105658
As Urba says, try avoiding any caffeine in the afternoon.
If you find yourself enjoying the taste of coffee and would like some in the afternoon anyway, I can recommend caffeine-free coffee. Alternatively cocoa (either as hot chocolate or a bar of dark chocolate) is also a source of caffeine but at a much lower dose and better to have in the afternoon than coffee.

As for the last part, self-destructive behaviour is often a symptom of some other cause, like stress, anxiety, and it could help to talk to someone professional about it.
Commented 6 months ago2023-11-02 10:00:17 UTC in vault item: Learing HL sdk Comment #105614
Looks like you've already gotten the hang of the basics!

It looks fullbright so you've either not included any lights in the map, or there is a leak (there should be error messages in the compile log if there were any leaks). If you haven't added any lights yet, there's a tutorial here about the basics of that.

For the wall where you've written "break" with decals, the reason it's mirrored is because the texture on the wall itself is mirrored. So with the Texture Application Tool just set the X scale to its negative (i.e. change the scale from 1.00 to -1.00).

There are tons of tutorials in the wiki here that you can check out to learn more about mapping.

Good luck! 🙂
Commented 8 months ago2023-09-18 21:06:00 UTC in wiki page: Tutorial: Models and lighting Comment #105568
Another great guide, Hezus! Thanks for making this!
Commented 8 months ago2023-09-18 08:17:44 UTC in vault item: GoldSrc Map2Prop Comment #105567
@kimilil I'm already working on using the ORIGIN brush as model origin override, besides it wouldn't have enough information to make a skeleton chain.
I'm thinking instead of using a custom point entity (info_bone) that can hold a name and parent, and have it skinned to the vertices of any brushes grouped with it (or even radius around the entity, could use a keyvalue for that as well). Might look into it after the full release.

@SirYodaJedi I think it'll work fine, unless you use any Quake III curved surfaces. Just looked at the code now and realised it doesn't handle the curved surface array in each solid, which will corrupt all other solids after the first one. Already fixing that now 🙂
Commented 8 months ago2023-09-08 10:49:31 UTC in journal: Just need to vent a bit. Comment #105541
Venting is perfectly fine. Otherwise the metaphorical pressure builds up until something breaks.

The late hours do tend to promote thinking. It's quiet and no one else around, so the mind gets to wander more freely. For a night owl like me, that's when I'm also the most awake and productive.

At the same time, those late hours also often coincide with sleep deprivation, especially for those of us who have to wake up early for school or work and such. That can greatly exacerbate symptoms of depression and other conditions, and negative emotions in general. Not saying you shouldn't be up late, but just that you should be aware how it affects mental health (and, speaking from experience, insomnia and depression can easily start a positive feedback loop that spirals to very bad places).
Commented 8 months ago2023-09-08 09:12:48 UTC in journal: In other news... Comment #105540
Thanks, I'm glad you think so. 😊
I've done a couple freelance photography jobs over a decade ago but overall it has been pretty much just a hobby. Mostly I take photos for inspiration or reference for my other creative projects, other times because I think a scene or subject is pretty or when I just want to capture a moment.

Perhaps I could create a new portfolio and do it as a side hustle?
Commented 9 months ago2023-08-19 20:26:43 UTC in journal: So... that crazy Half-Life 3 estimate I made Comment #105492
I wasn't ready to realise it's already almost 16 years since Ep2, gosh.

As you say, at least we've gotten a new HL game already, even if it wasn't HL3. 😄
Commented 9 months ago2023-08-18 08:47:40 UTC in journal: My thoughts on the thanking discussion Comment #105489
You seem to think that merely discussing behaviour means establishing new rules, which it inherently isn't. A proposal for a rule may be brought up during a discussion, but that's not what has happened here. If you're worried a community is going to establish excessive or unnecessary rules, the best thing to do in that case is to discuss it and address the cause for why those rules were proposed in the first place.

The rules already in place on the site (and the discord you keep bringing up for whatever reason) are few and non-intrusive. As the context here is this community, are these the rules you view as "completely useless, dictatorial and rude"?

And no, I'm not here to educate anyone on social behaviour. I'm simply just airing my thoughts about a specific part of how we behave in this community, since I'm a part of it.
Commented 9 months ago2023-08-18 06:16:41 UTC in journal: Bringing a 20 year old map back to life Comment #105487
I actually played that func_vehicle invade-the-building one! It had some unique gameplay combined with the jankiness of the goldsrc physics which made it a very fun map 😄
Commented 9 months ago2023-08-17 21:01:16 UTC in journal: My thoughts on the thanking discussion Comment #105483
Oh, you were actually being serious. Reverse Poe's Law, I guess.

Well then. First of all, I haven't told anyone how to behave in my post (the closest to it is stating that it's rude to not thank someone for the help, because that's what it is). My final paragraph is directly addressing this.

Secondly, when you call "this" evil, are you referring to my post or to the act of telling someone to behave?
Either way, taking into consideration that we as people are social animals, and that this is a community, having discussions about norms, culture and behaviour is the healthy and good thing to do. In other words, it's beneficial to the majority in this context, i.e. it's what's morally good (for the community) here.
Not having this type of discussion will cause harmful and anti-social behaviour to go unaddressed and unchallenged, in turn harming the community and hurting its members. As this leads to a negative outcome for the majority, it can't be anything but morally evil (towards the community) in this context.

Of course, morals are relative. Perhaps your morals are based on what's good and un-impeding to yourself, and screw everyone else?
Commented 9 months ago2023-08-17 07:20:37 UTC in journal: Bringing a 20 year old map back to life Comment #105481
Welcome to TWHL! Always great to see more TFC content and returning veterans 😄 I already took a quick look at the map and it looks great!
(By the way, the Vault has a listing for Team Fortress Classic for the Game category, since I noticed you used HL) ;)
Edit: Just read the description in the vault entry 😅 There are still some people left still playing TFC (myself included!) so please don't feel discouraged from finishing it

Out of curiosity, since you said you released a few maps, which ones? I've played a lot of TFC through the years, perhaps I've already tried some of them?
Commented 9 months ago2023-08-16 21:52:23 UTC in journal: My thoughts on the thanking discussion Comment #105480
By using moralist language, you're indirectly telling me my behaviour is wrong and should be changed, doing exactly that which you are condemning 😏
Commented 9 months ago2023-08-16 12:36:57 UTC in journal: My thoughts on the thanking discussion Comment #105478
Yeah, I was under the same assumption too that thanking people for their help was the normal and expected thing to do.

Feedback is indeed very important, and I see it as the bare minimum someone should do in response to any help/answer.
Commented 10 months ago2023-07-23 20:45:19 UTC in journal: For those asking about reverse Map2Prop... Comment #105439
So what I was testing was vertex coordinate rounding (to keep CSG happy, of course) and while it worked okay enough on certain other models (they had relatively low poly densities), HD Barney from SC had a higher poly density which was dramatically affected by the coordinate rounding.
Commented 10 months ago2023-07-23 10:49:32 UTC in vault item: GoldSrc Map2Prop Comment #105437
@kimilil I will consider that for the future. Even after I finish v1.0 of Map2Prop I still have two mapping projects I'm working on I want to finish first before starting a new project.

@cindor That sounds similar to the concept Kimilil was talking about.

Someone in the Discord came up with the idea to use custom entities that would be turned into models and put back in the map. I guess one could call a program at the start of the compile process that'd extract these entities from the .map file and run Map2Prop on those (once I finish the .map format support) and then replace these entities with cycler_sprite or whatnot (possibly give it a CLI argument) before overwriting the .map and let the rest of the compile process go as usual. It wouldn't have Kimilil's baked lightmaps, but could been an alternative way of doing this.
Commented 10 months ago2023-07-22 13:29:59 UTC in vault item: GoldSrc Map2Prop Comment #105434
Thanks both of you. I'm glad to hear it's working well for you ^^
Commented 10 months ago2023-07-22 12:12:58 UTC in journal: I documented WAD3/RMF/JMF specifications Comment #105433
Thank you! This is exactly one of the two reasons why I wanted to get those specifications on the wiki here. So more knowledgeable people like you and Penguinboy would be able to add to it and make corrections.

That way we can have a more complete and correct picture which will very much help with my second reason for doing this: Make the specifications available and easy to find so other people wanting to use these to make cool apps would be able to do so ^^

I'll make the corrections to the WAD format 🙂
Commented 10 months ago2023-07-20 16:43:17 UTC in vault item: GoldSrc Map2Prop Comment #105422
On the outside it's mostly just a smaller filesize for the executable. A bloated library was refactored out to make that happen, and a lot of the math functions it provided were replaced with standard library ones or rewritten by myself.
Also found and fixed a bug related to reading .obj files with ORIGIN brushes.
Commented 10 months ago2023-07-19 21:45:37 UTC in vault item: GoldSrc Map2Prop Comment #105418
(Oh right, that new version mentioned above is out now)
Commented 10 months ago2023-07-19 17:10:33 UTC in vault item: GoldSrc Map2Prop Comment #105417
It was compiled on Win10 so it's possible it might not work on Win7 (it not being supported and all that).

The size is mostly due to a library I used for a lot of the math functions, and I agree it's unnecessarily large. Been working on refactoring out that bloated library since last week and should have a new version ready pretty soon. 🙂
Commented 10 months ago2023-07-18 22:12:06 UTC in journal: 3D Modelling on J.A.C.K. Comment #105411
Hey, pretty cool to see the converter being used for something other than a static prop! 😄
Commented 10 months ago2023-07-18 07:39:47 UTC in vault item: GoldSrc Map2Prop Comment #105408
Definitely! It basically lets you use your level editor to create models.
I hope it's useful to those that don't want to learn to use a 3D editor but still want to make model props for their maps. ^^
Commented 10 months ago2023-07-17 18:22:19 UTC in journal: Wassup! Comment #105406
Welcome! o/
Commented 10 months ago2023-07-16 10:40:25 UTC in journal: Whoa, I failed at the most important place Comment #105404
Thanks for a great read!

You shouldn't blame yourself for JD stop responding to you. As you said, Nightdive Studios were in contact with JD about purchasing the SiN franchise at the time, and it's not uncommon for the buyer putting a claim on any content related to the purchase and have related persons sign NDAs. It's possible JD just isn't allowed to speak to you at all about any of that content.

In other words, it's not a failing on your part. Things outside your control happened.