On A Rail Uncut - Re-Adding Cut Areas/Scenes (Expansion Project)

I say just split the maps.

Can you not create two versions of the same map, with one keeping just the tracks, dropping all of the office complex details except the cafeteria? Because you won’t see any of that shit you’ve put in the office complex while riding the train below it - unless you wanna noclip.
Remember railroad bridge in HL2? I’d say have a look at that.

NO, don’t start making any major changes to the map at the start.

First, Just start cutting down on minor effects (sparks etc…)
If you still need to cut more out, maybe remove a couple of unimportant npcs here and there
Then if it still goes over the limit, maybe reduce some of the detail in the map a bit. (Like scattered props and random unimportant scenery like pipes behind grates embedded into walls or the floor etc. etc…).

If you still can’t get it to work, as a last of the last resorts, then start cutting stuff from the actual level out and make radical changes to the layout to get the map back within Source’s limits.
Chickenprotector’s idea at the bottom of the last page would work as a viable solution if you absolutely have to resort to altering the layout of the level itself to get it working properly.

Honestly ODB, if you read over my post it’s similar to what you proposed, but it keeps the elements of the level intact and allows for a little more freedom of moving the Level transition without cutting content (I think). It’s also radical though.

@Sully: Well Text did say he didn’t want to remove entities. The idea I proposed is better by miles and allows for a level transition to be put in the middle of the Office Complex instead of inside the tunnel. As you said though, it’s a radical solution. Main reason I proposed it was to keep the entity count the same and allow for a little more freedom as I stated. 'Sides, it keeps the levels architecture intact (save for adding a few brush/model-based entities).

Separating office complex and security office from the bottom level should work. It would keep all the props and would not require a third transition.

Just wanted to say, I don’t mind it cutting off somewhere in the offices themselves.

You don’t really need the damn tunnel to collapse if you have one map that just keeps the tracks on the bottom level (which you can still walk on to skip the office complex onto the next level, preserving the integrity of the map) and the other that just keeps the offices, do you? The only problem I reckon would be a player somehow dropping off the upper levels down to the tracks - but assumingly that can be fixed by a level transition.

Or invisible walls.

^ Mind elaborating? Edit: God I’m slow tonight, yeah I figured it out after I thought a little. My brain’s fried right now. It’s a good idea, but it has its issues too.

Basically he’s saying put the Office Complex as an off-to-the-side area (like HL1’s bottom of the rocket place, I forget the map name). It’s a far better idea than mine.

And for falling down into the pit, ladders? Only apart of the section would be collapsed. Rest of the tunnel would be intact, and we haven’t played the level yet, so I’m assuming there’s a stair case at the end of the tunnel when it makes the turn into the next section like in Half-Life 1. I’m calling it a night, I’ll pick this back up in the morning Eastern time.

What is there to elaborate?
You have your tracks on the bottom as one map.
And then you have office complex as a (admittedly, skippable and optional as you can still go on foot) separate map. The only track section to keep is the one you can see from the cafeteria.

That’s all there is to it.
See highway 17 bridge for reference.

P.S. Admitedly I don’t really know how much load it will remove that way. But then again, you can change it to this:
-One map has the tracks and a fair bit of the office complex.
-The other one has the office complex chunks that remain.

Office complex is a big enough area to have a transition in.
The only question would be, where exactly?

I vote for ODB’s idea. Shit’s got a ring to it and I like it far better than mine. It keeps the level intact.

Oh yeah, Nitro already said that putting the transition after 50 cal would only remove 5-10% of the props.

Has to be somewhere in the office complex then.
I suggested to keep the tracks on a separate map purely because Nitro mentioned the third level transition.
Highway 17 bridge had overlapping areas as separate maps and it worked like a charm.

I vote for removing as many inconsequential entities as possible to keep the map as one map with the correct layout.

…And I just watched the vid again and realised that the idea won’t work as there’s a second stairway leading to the tracks near the cafeteria.

You can, though, block it off (some rubble will do) and force the player to backtrack to the barrier.
To note, I am also strongly opposed to the idea floating around about having a second train waiting for you there, so I figure that would be a way out.
It is kinda worthless having to work all your way trough the whole of the office complex and then just get down to the very end of the map.
If you’re using the train, you’re backtracking anyway. If you decide to go on foot - why the fuck waste your time in the office complex?

Life’s a bitch, motherfucker, so kindly shut you mouth and get back to the barrier you spent your sweet ass time to open … or summin’…
We’re all here for gameplay time, are we not?

It would require this balcony (which is fairly useless really, why the fuck would anyone go in there) to be removed/replaced too - so that you would not have to load that part of the tracks:

EDIT: But then again, it will remove the ‘observing Alien vs HECU fight from below the floor’ bit.
Fucking bollocks buddy. Fucking bollocks… maybe move it someplace else? It’s so easily missable where you had it in that vid.

Did you make the duel tracks on A2 switchable? Otherwise you could remove that.

Guess how many entities that’ll remove.

Actually, it could potentially work. I booted up my own copy of Source SDK to take a look at this, and I think it could be possible to have multiple transition locations. It would probably just need some clever usage of info_landmarks, trigger_changelevels and trigger_transitions. First you would place on info_landmark at the stairs to the second floor (or wherever). Then you would place another landmark at the cafeteria section. Then place changelevels and transitions where needed, and link them to their respective landmarks. Problem solved.

If you want to see exactly how this works, boot up Source SDK and load the map d1_town_03. In case you’re wondering, this is Ravenholm.

I for one support splitting the bottom floor and second/third floors into a separate map. If you want to save on your entities, this would cut the number of transitions needed back down to two.

Otherwise, yes. It would be time to start thinking about deleting unessential entities. I see that as the only other alternative as having no transitions whatsoever throughout this area.

EDIT:

You wouldn’t even have to delete the balcony, just place a trigger_changelevel where it is needed here. I admit that jumping through the balcony would necessitate loading up a level, but that’s more of a design issue than a technical issue. Then again, you would probably take fall damage from that height, so most players probably won’t attempt it.

According to the way you replied, not that much :stuck_out_tongue: Sorry, I’m not that advanced in Source Map Building.

Text, just put the loading screen in the middle of the office complex like you said. Don’t delete anything. I would gladly go through it three times and have more stuff to look at rather than go through it once and see very little content.

Half-Life 1 had tons of loading screens. That didn’t stop it from being one of the best games ever made.

Keeping the tracks on a separate map is certainly one option, albeit a drastic one. That’ll probably be what I do if I cannot find a less drastic way to overcome this serious issue.

Having had a bit of time now to step back and assess the issue once more, I’ve come to the conclusion that it may be possible for me to simplify some I/O chains and remove some entities, in the hope of bringing entdata back to within “acceptable” bounds. I’ve thought of a few things I may be able to simplify with little effect on the actual experience.

The only thing is, I’m not sure precisely how much entdata % is acceptable. Having done a bit of research into it - Hammer’s entdata %age limit is hardcoded and not at all representative of what the engine can handle. It’s more of a general, inaccurate guideline. From what I can tell, the amount of entities the game can handle just depends on how the game is coded. I’m guessing that Black Mesa’s figure is just somewhere shy of 200%. My reason for saying this is that the problem only emerged fairly recently, as entdata is currently at 215%, and older builds of the map were pushing 195% entdata with no side effects seen. I’m hoping that simplifying a few logical entity chains and some of the lighting might push down the entdata to within acceptable bounds.

This doesn’t mean less content, I’ll be quick to point that out. Not at this stage.

For example, the system I currently use to make battle sounds happen before a fight (so it seems like the fight is already happening before the player shows up) is actually really inefficient. Of course, the inefficiency doesn’t make a damn bit of difference when you’re not near a limit, but it does when you’re at the limit. The system I currently use for the Office Complex is there are 2 Vorts hidden out of sight, encased in an invisible wall, set to attack an invisible target. Next to them are 2 HECU Marines, also attacking that same target. This produces a very natural sounding battle. The taunts, firing sounds, bullet impacts, charging, vorts talking, etc, etc all plays out perfectly as their AI is behaving as it should. It’s an excellent system - if you’re not pressed for resources. On the I/O side of things it’s inefficient - I need an npc_bullseye, 2 npc_alien_slaves, 2 npc_human_grunts, 3 ai_relationships (one to make those Vorts and humans like one another so they don’t fight, one to make the Vorts hate the bullseye, and one to make the Humans hate the bullseye), 2 aiscripted_schedule, and 2 logic_relays (to start and stop the battle), and then of course all the I/O linkages between these entities, which all counts towards entdata.

Theoretically I can reduce the I/O load an awful lot simply by prerecording a battle and then just putting the sound there instead. That would mean I’d only need one single ambient_generic. On the practical side of things this does mean that eventually the battle sounds will loop which may sound repetitive, and would also require a lot of careful editing to avoid any notable patterns in the sound. Less pretty result, for sure, but much nicer for the entity data load.

Flickering lights also have a pretty enormous I/O load. I may have to remove quite a few of them, if necessary. It’s a shame because they look so good.

Just so everyone knows, any entity counts towards entdata. Static props and func_detail are not considered entities by the engine. Info_overlays are not entities either. EVERYTHING ELSE - physics props, dynamic props, lights, logical entities, etc, etc, are considered as part of the entdata.

I’ll see. Like I said you’ll probably have to wait till tomorrow evening to play it, but I’m 60% confident that with some I/O simplification I might be able to keep it relatively intact.

The example you put in for the fights has a slight drawback, and that’s for those of us who use custom sounds in place of the originals. There’ll be inconsistencies.

What about having a ambient_generic play a custom sound script with the accumulative sounds for the vort, marine, and weapons? I have no idea if it’ll even play more than one sound, so it could be more inefficient than the current system for the fights.

You’re right, that’s actually a pretty damn serious drawback which I really hadn’t considered. Let me see how and if I can solve that. I think use of scripted_sentence combined with a custom .vcd should do the trick, but I don’t know. I don’t know how powerful soundscripts actually are, I don’t work with them much - the furthest I normally delve into that is soundscaping.

^ That could work, but if you can link the ambient generic to multiple sound scripts, you can still keep the consistency. My issue is: can it link to more than one soundscript at once.

https://developer.valvesoftware.com/wiki/Ambient_generic

Having multiple "playsound"s with a logic override to play random ones instead? I’m not familiar with hammer, otherwise I’d test it myself.

Ex:
Playsound “NPC_Vortigaunt.idle”
Playsound “NPC_Vortigaunt.ClawBeam”
etc.

The blocks are found in the soundscripts I mentioned. If you use it like that, I’m assuming here, the engine should play a random .wav that’s in that block instead of just a single .wav.

In this case for the idle:

[code]“NPC_Vortigaunt.idle”
{
“channel” “CHAN_VOICE”
“volume” “VOL_NORM”
“pitch” “PITCH_NORM”
“soundlevel” “SNDLVL_NORM”

"rndwave"
{
	"wave"	"npc/alien_slave/vort_idle1.wav"
	"wave"	"npc/alien_slave/vort_idle2.wav"
	"wave"	"npc/alien_slave/vort_idle3.wav"
	"wave"	"npc/alien_slave/vort_idle4.wav"
	"wave"	"npc/alien_slave/vort_idle5.wav"
	"wave"	"npc/alien_slave/vort_idle6.wav"
	"wave"	"npc/alien_slave/vort_idle7.wav"
	"wave"	"npc/alien_slave/vort_idle8.wav"
	"wave"	"npc/alien_slave/vort_idle9.wav"
	"wave"	"npc/alien_slave/vort_idle10.wav"
}[/code]

The scripts you want are in this directory: …Steam\steamapps\sourcemods\BMS\scripts

with the exception of the marine: …Steam\steamapps\sourcemods\BMS\scripts\talker

Vort: npc_sounds_vortigaunt.txt

Weapons: game_sounds_weapons.txt

Marine: npc_human_grunt.txt

Edit: Nevermind about the marine taunts, the script uses .vcds so I don’t know if it’ll play properly. It’s worth a shot.

Edit #2: It’s a shame about the flickering lights, I’d love to have that doom-ish feel of not knowing what’s around the corner, hopfully you can keep the atmosphere intact without taking too many of them out. :wink:

Edit #3: If you want me to make a custom soundscript, I’ll be happy to help you and PM you it as an attachment or something of that sort. It shouldn’t be too hard to make. I just have to make sure it’s not going to interfere with BM’s original scripts, and make sure that I create the marine taunts/pain sounds from scratch. But that shouldn’t be tough.

Thanks for the offer - but the trouble isn’t making the soundscripts - I know how to do that, I’ve made plenty of soundscapes before. The trouble is getting them to work in game in a way that makes sense.

In the editor I call everything related to this setup “prefight_*”. It’s called prefight because those sounds obviously only play when the fight is supposedly offscreen. On the office complex, if you watch my video again, the prefight starts when the player gets up the stairs leading to the office complex, and finishes the moment I go round the corner after the conference room. That’s when the actual fight, with the actual NPCs and their scripted scenes, begins.

This system worked well because using a trigger I can instantly kill the scene when the player walks into view. The transition between the prefight and the fight was essentially totally seamless.

As far as I can tell, there’s no way to get an ambient_generic to play a soundscript configured like a soundscape. That would be the ideal solution, as I can use one entity for the entire battle and simply kill it when I want it to stop. Using an actual soundscape for it is not a good solution, as it would still require a complex I/O chain for it to start and stop properly - due to the way soundscapes work.

Here’s my current code for the script. If anyone has any creative/interesting solutions, please let me know. If anyone knows how to fix this code up so I can get it to run from an ambient_generic, please let me know. If someone were to find a way to fix this I would of course be very grateful, and provide full credit to that person. As I’ve said I want it to be tied to only a single entity which I can start/stop at will, that way the I/O chain is simplified heavily.

I’ve got this code contained within the file “game_sounds_npc_battle.txt” in the scripts folder. The file is also registered in the manifest, so that’s not the problem. When I try and point an ambient_generic at this script (with the filter set to game sounds so it looks at the scripts), it doesn’t show up. I’m assuming it’s because I’ve got it set up like a soundscape, but I don’t know.


"c2a2a2.officebattle"
{
	"channel"	"CHAN_STATIC"
	"volume"	"VOL_NORM"
	"soundlevel"	"SNDLVL_NORM"
	"pitch"		"PITCH_NORM"
	"dsp"	"0"
	"playrandom"
	{
		"volume"	"1.0"
		"pitch"		"90,110"
		"time"		"3, 7"
		"rndwave"
		{
		"wave"	"npc/alien_slave/vort_idle1.wav"
		"wave"	"npc/alien_slave/vort_idle2.wav"
		"wave"	"npc/alien_slave/vort_idle3.wav"
		"wave"	"npc/alien_slave/vort_idle4.wav"
		"wave"	"npc/alien_slave/vort_idle5.wav"
		"wave"	"npc/alien_slave/vort_idle6.wav"
		"wave"	"npc/alien_slave/vort_idle7.wav"
		"wave"	"npc/alien_slave/vort_idle8.wav"
		"wave"	"npc/alien_slave/vort_idle9.wav"
		"wave"	"npc/alien_slave/vort_idle10.wav"
		}
	}
	"playrandom"
	{
		"volume"	"0.8, 1.0"
		"pitch"		"90,110"
		"time"		"2, 4"
		"rndwave"
		{
		"wave"	"npc/alien_slave/vort_explode1.wav"
		"wave"	"npc/alien_slave/vort_explode2.wav"
		}
	}
	"playrandom"
	{
		"volume"	"0.8, 1.0"
		"pitch"		"90,110"
		"time"		"2, 4"
		"rndwave"
		{
		"wave"	"npc/alien_slave/vort_explode1.wav"
		"wave"	"npc/alien_slave/vort_explode2.wav"
		}
	}
	"playrandom"
	{
		"volume"	"0.8, 1.0"
		"pitch"		"90,110"
		"time"		"2, 4"
		"rndwave"
		{
		"wave"	"weapons\shotgun\single_npc.wav"
		}
	}
	"playrandom"
	{
		"volume"	"1.0"
		"pitch"		"90,110"
		"time"		"2, 8"
		"rndwave"
		{
		"wave"	"vo\npc\hgrunt\hg_monst00.wav"
		"wave"	"vo\npc\hgrunt\hg_monst01.wav"
		"wave"	"vo\npc\hgrunt\hg_monst02.wav"
		"wave"	"vo\npc\hgrunt\hg_monst03.wav"
		"wave"	"vo\npc\hgrunt\hg_monst04.wav"
		"wave"	"vo\npc\hgrunt\hg_monst09.wav"
		"wave"	"vo\npc\hgrunt\hg_medic11.wav"
		"wave"	"vo\npc\hgrunt\hg_medic00.wav"
		"wave"	"vo\npc\hgrunt\hg_medic09.wav"
		"wave"	"vo\npc\hgrunt\hg_medic10.wav"
		"wave"	"vo\npc\hgrunt\hg_cover00.wav"
		"wave"	"vo\npc\hgrunt\hg_cover01.wav"
		"wave"	"vo\npc\hgrunt\hg_taunt05.wav"
		"wave"	"vo\npc\hgrunt\hg_taunt07.wav"
		}
	}
}

If anyone has any creative solutions, I welcome them!

Founded in 2004, Leakfree.org became one of the first online communities dedicated to Valve’s Source engine development. It is more famously known for the formation of Black Mesa: Source under the 'Leakfree Modification Team' handle in September 2004.