A Community discussion forum for Halo Custom Edition, Halo 2 Vista, Portal and Halo Machinima

Home  Search Register  Login Member ListRecent Posts
Viewing User Profile for: DeadHamster
About Contact
Joined: Jun 8, 2014 05:02 PM
Last Post: Yesterday @ 05:48 PM
Last Visit: Yesterday @ 06:11 PM
Your Age:
What Games do you play:

Send Private Message
Post Statistics
DeadHamster has contributed to 726 posts out of 467774 total posts (.16%) in 1,648 days (.44 posts per day).

20 Most recent posts:
Halo CE General Discussion » Air/Ground Unit Hybrid Yesterday @ 05:48 PM (Total replies: 22)

Quote: --- Original message by: JadeMcLain

Thanks for the advice, its been very helpful. I'll be sure to keep that formatting tip in mind. I would love to use the ai_index but I can't get this to work with migration, so I had to revert back to using named bipeds.

AI index is a global value I created, not an actual engine value. A variable, an integer in this case.

I want to debug and help solve your "migration" issue, because named bipeds are useless to me and I don't want to have to figure this out from scratch.

What were you trying to do with migration, what was the intended result, what happened instead?

If you answer those 3 questions with a bit of detail we'll figure this out.

Edit: OpenSauce has distance script functions. You can make the AI fly when over 15m from the chief, but stalk after him if they're closer. This would eliminate trigger volumes and a large number of scripting, and it would work in any map you added them to.
Edited by DeadHamster on Dec 10, 2018 at 05:50 PM

Halo CE General Discussion » Air/Ground Unit Hybrid Dec 8, 2018 04:05 PM (Total replies: 22)

(sleep_until (= (volume_test_objects land_bugvol1 (unit (list_get (ai_actors bug_fly) 0)))0))
(sleep_until (= (volume_test_objects land_playervol1 (players))0))
(sleep_until (!= (unit_get_health (unit (list_get (ai_actors bug_fly) 0)))-1))
(sleep_until (= (volume_test_objects bugoffvol (unit (list_get (ai_actors bug_fly) 0)))1))
(sleep_until (!= (ai_status bug_ground)1))

This is very wrong.

First it checks if the bug is near the ground once every 30 ticks
Then it checks if the player is near the ground once every 30 ticks
Then it checks if the first AI exists or not once every 30 ticks.
Then it checks if the AI isn't in combat once every 30 ticks.

What happens if the bug is near the ground, but the player isn't? The first condition passes and the next sits in waiting. Then 6 seconds go by, the player goes to the ground but now the bug is up in the air near the top of the map. But that condition was already checked, once the player goes near the ground the rest of the script runs and you end up with a bug going into ground mode.

(script continuous bug1fly

(if (!= (unit_get_health (unit (list_get (ai_actors bug_fly) 0)))-1)

(sleep_until (and (= (volume_test_objects land_bugvol1 (unit (list_get (ai_actors bug_fly) 0)))0) (= (volume_test_objects land_playervol1 (players))0) (= (volume_test_objects bugoffvol (unit (list_get (ai_actors bug_fly) 0)))1) (= (volume_test_objects bugoffvol (unit (list_get (ai_actors bug_fly) 0)))1) (!= (ai_status bug_ground)1) ) 10)

(ai_magically_see_players bug_fly)
(sleep 150)
(objects_attach (unit (list_get (ai_actors bug_ground) 0)) "head" (unit (list_get (ai_actors bug_fly) 0)) "head")
(objects_detach (unit (list_get (ai_actors bug_ground) 0)) (unit (list_get (ai_actors bug_fly) 0)))
(object_teleport (unit (list_get (ai_actors bug_ground) 0)) bugoff)
(sleep 150)



Now your script won't even check unless the AI exists, and it checks ALL the variables simultaneously, and will only execute the script if all of them are valid at the same time. It also checks every 10 ticks, to make it more responsive.

I'm interested in these. Let me know if I can help any with finishing these up or improving them, I'd very much like to use them. Would recommend OS if you haven't started using it already, as others have said. They have biped switching that's tag based, might be worth looking into instead of a script based function.


(global short ai_index 0)

(script continuous bug1fly

(if (!= (unit_get_health (unit (list_get (ai_actors bug_fly) ai_index)))-1)

(if (and (= (volume_test_objects land_bugvol1 (unit (list_get (ai_actors bug_fly) ai_index)))0) (= (volume_test_objects land_playervol1 (players))0) (= (volume_test_objects bugoffvol (unit (list_get (ai_actors bug_fly) ai_index)))1) (= (volume_test_objects bugoffvol (unit (list_get (ai_actors bug_fly) ai_index)))1) (!= (ai_status bug_ground)1) ) )

(ai_magically_see_players bug_fly)
(sleep 150)
(objects_attach (unit (list_get (ai_actors bug_ground) ai_index)) "head" (unit (list_get (ai_actors bug_fly) ai_index)) "head")
(objects_detach (unit (list_get (ai_actors bug_ground) ai_index)) (unit (list_get (ai_actors bug_fly) ai_index)))
(object_teleport (unit (list_get (ai_actors bug_ground) ai_index)) bugoff)
(sleep 150)


(set ai_index (+ ai_index 1))
(if (< 31 ai_index)
(set ai_index 0)

Small adjustment, added a global called ai_index which is set to 0 by default. After each pass, it increases in value by 1. If at any point it hits 32, it resets to 0. Also, in each of your list_get passes, I used ai_index instead of 0. Now the script will process up to 32 AI in whatever squad it's running on, instead of only 1.

Edited by DeadHamster on Dec 8, 2018 at 04:16 PM

Halo CE General Discussion » Sierra 117 Dec 8, 2018 02:00 AM (Total replies: 1178)

Well if anybody would finish the rest of it, I would be willing to look into the last BSP section for 3DS max alone.

But I'm also not just going to do that for no reason. So if somebody is interested in legitimately doing this let me know.

Quote: --- Original message by: Halo CE Noob Modder117
Well we did it. Cortana now talks and the rest all happens AFTER clearing that encounter... I swapped it to a dormant script of course because the encounter itself doesn't spawn until later in the mission so as a startup script due to nothing being spawned yet everything triggered at the beginning of the mission. But I managed to clear everything else up. Couldn't have done it without you guys.

Just an FYI, better a startup script that sleeps until the conditions are met, IE a trigger volume or a sequence of events.

If you create a single startup script that runs dormant scripts, the player may break sequence by escaping a section of the level or finding an exit you didn't think of, whatever it may be. If that becomes the case, your main script is waiting for a sequence of events that the player already bypassed, and all the rest of the dormant scripts can't get called because the main script that would call them is waiting for something that will never happen.

If you instead have a separate startup for each section of the level, it'll sleep_until the conditions are met and start immediately. If the player leaves before completing that section, that's okay. The next section has it's own script and will start as soon as the player enters the area, or whatever the sleep_until has it's requirement filled. The player can break sequence and still play out the rest of the level.

Halo CE General Discussion » Sierra 117 Dec 7, 2018 06:17 PM (Total replies: 1178)

Quote: --- Original message by: MatthewDratt
BSPs aren't done yet. Scripting and placing encounters is the next big thing. The last BSP is going to be a big pain. If someone could do that, really only left is scripting stuff in which shouldn't be terribly hard. Some issues also result of theres so much fking scenery that AI in H1 are stupid and just run into everything

When you say the last BSP isn't done and is going to be a big pain, are you referring to Sapien or 3DS max?

Halo CE General Discussion » CE3ish Video Casting Call Dec 7, 2018 06:12 PM (Total replies: 16)

Nessa was a female texture artist for PC back in the day.

That's all I have to contribute. Good luck with your video Dratt.

Quote: --- Original message by: ass crack
Dennis is a redneck

It must be a rough life when you're a loser even in a community that mods a 15 year old video game.

Get laid sometime. Get some friends.

Halo CE General Discussion » 3DS MAX or Tool is super mega ultra FUDGED! Dec 1, 2018 01:40 AM (Total replies: 6)

Use select faces tool.

Drag over top of the edges that are red.

Find a hidden flat face.

Sometimes when you weld two vertices, it doesnt remove all the faces. So you get a phantom face that mirrors alongside the edge that you have to delete.

That's most likely the issue you ran into. But again, Tool works exactly as it's supposed to. Run that .JMS through 1000 times it'll come out the same. Export that model to .jms 1000 times it'll come out the same. The only thing that changed here was the 3D mesh prior to import. That's on you.

Again, not trying to say you suck or anything along those lines. But if you blame the toolset you won't be able to learn what legitimate mistakes you're making. There was something wrong in the geometry, whatever it might have been.

Mistakes are fine, this is a complicated engine and toolset and it's very outdated. It can be easy to blame the tools when things don't work; the other day I asked someone if vehicle_test_seat was broken. It wasn't, even though I was convinced I had it right I was making a mistake. It worked the way it was supposed to.

But again, Tool doesn't check for sealed world rules for render geometry. So I don't know what you were doing, but something along the way was wrong.

AFAIK, Dennis has personally checked the contents of every mapfile on the site.

That means opening and verifying the level runs.

Each one on the site.

Halo CE General Discussion » 3DS MAX or Tool is super mega ultra FUDGED! Dec 1, 2018 12:20 AM (Total replies: 6)

Quote: --- Original message by: Halo CE Noob Modder117

But other threads suggest to cap, weld etc. So far its been working fine for me.

Proof to show that Tool is weird and buggy. I imported the warthog base and got it back into Halo with NO problems. A day later, I wanted to do an edit but had to import it again and repeat what I did as I forgot to save a scene. Now all of a sudden Tool isn't happy. Like WTF Tool you just made it yesterday and now today you feel like complaining? I'm telling you something is terribly wrong with this crap.

I capped the holes, the SAME holes as I did yesterday and now today Tool is complaining about them when in 3DS MAX there are virtually no holes where the caps are, and, well, it was friggen happy yesterday! Tool must have a mind of its own...

These programs are buggy as hell I'm telling ya!
Edited by Halo CE Noob Modder117 on Dec 1, 2018 at 12:11 AM

Tool doesn't check for collision when making render models. What are you doing and why are you doing it so wrong? :)

BTW, when you post about an issue if you want actual help the "tool is buggy" parts of your post are useless because No tool is not buggy you're doing it wrong. I don't mean that to be so harsh, but Tool does exactly what it's supposed to. What is useful is copy/pastes of the error messages you get and specific explanations of what you were doing. Including the tool commands as you typed them out.

And before we go any further, you must always run every program as an administrator at all times regardless of what anybody told you. Even tool, right click it and go to it's properties. That's not going to fix your problem, your problem is that you're doing something wrong. But it will rule out any possible issue outside of you doing it wrong.

Quote: --- Original message by: SBB_Michelle
Edit: Btw Hamster, you can also do:
(sleep_until ((unit_get_health banshee1) (unit_get_health banshee2) 0) 5)

And even more useful for you, an improvement to your 'secret save routine'
(sleep_until (game_safe_to_save) 5)

This value only rings true under much of the same conditions as (game_all_quiet) EXCEPT, it doesn't ring true when the player is airborne. Fixing your falling death save issue.
Edited by SBB_Michelle on Nov 30, 2018 at 05:31 PM

I assumed you missed the = sign and meant

(sleep_until (= (unit_get_health banshee1) (unit_get_health banshee2) 0) 5)

Definitely much cleaner that way.

I always assumed (mistakenly, apparently) that game_all_quiet checked for more than the game_safe_to_save did. Good to know, updating all that immediately. Thanks for the tip.

Halo CE General Discussion » 3DS MAX or Tool is super mega ultra FUDGED! Nov 30, 2018 04:12 PM (Total replies: 6)

Quote: --- Original message by: Halo CE Noob Modder117
Ok guys, seriously now. I've made like a dozen scenery items over the past week and a bit (alongside my scripts, thanks for the help again guys). So, red triangles...

Why in the hell, you fix one triangle, JUST 1, TOOL SAYS THERE IS 1 BAD TRIANGLE and after you fix it and use Tool again... TOOL CRAPS OUT ANOTHER 50 TRIANGLES!!! What is the go? How does fixing 1 triangle cause Tool to later say another 200 magically appeared? Da Farq is going on?!

I fixed 1 hole. JUST 1 HOLE was the only issue, used Tool for the 2nd time and now random red lines have appeared all over the mesh. Have I missed something? I weld and tessellate whenever these issues occur but just this ONE model I'm trying to do refuses to work.

I swear to god 3DS MAX boils my blood more than a damn volcano brews before bursting out that hot lava...

You shouldn't be tessellating anything really except for in early stages. It adds a lot of weird geometry if anything is at angles. If you don't know how to redraw it and what to look for you get screwed a lot by coplanar issues and flat faces.

The reason, also, is because Tool stops running as soon as it can no longer compile your model. It then gives you an error message and some details (the .WRL) to help you debug. Which is pretty huge, honestly. Otherwise you'd be legitimately screwed.

So if there are 100 errors, it can't find the other 99. It ran into an issue and stopped at the first one. The other 99 were always there.

But yeah, the issue is sloppy modelling. Halo does not allow sloppy modelling, and welding and tessellating are two of the sloppiest methods.

Detail Object Collections do exactly this.

Quote: --- Original message by: SBB_Michelle
Preferably you order these in in order of: thing you want to be 0, 0.
This is just for clarity and you can shrug it off as me being picky.


I have no rhyme or reason as to what order I place the variables when dealing with > or <, I flip back and forth. But (= 0 is always the way. Return to the light.

Quote: --- Original message by: SBB_Michelle
Again watch out with this too (deadhamster's example):

(= 0 (ai_living_count test_encounter) 5)

This checks if (0 == (ai_living_count test_encounter) == 5)

And that can never be true as 0 != 5

O_O Yikes! Thank you for fixing that for me michelle. What that was intended for was;

(sleep_until (= 0 (ai_living_count test_encounter)) 5)

Which would check for the value to be true every 5 ticks as opposed to once per second as is stock. Missed a ) and completely disregarded putting in the (sleep_until out front.

I had typed out this really verbose post listing different methods of having AI retreat and using trigger volumes to move AI around a BSP area based on where the player went. It took so long to type the browser lost my session, and I lost my post. So I said screw that and just typed out that command really quick. A bad command, it would seem.

But I should be all set to retype most of that post out now;

Halo CE Guy

Rest of the post is towards you.

So, you shouldn't be using (= 0 (ai_living_count)

First, like michelle said get Notepad++ and then after download this;

Hamp's Custom Blamscript Language

That's a style sheet I've been using and customizing for 4-5 years now. Not perfect, but it's helpful for sure. CMT also released one, feel free to disregard me completely and find theirs instead.

To install the styles, open notepad++, go to the language menubar item, scroll to the bottom and click "Define Your Language". Import the .xml file in the download, and then Click Save As and name it BLAM or whatever. Now, close the Define Your Language menu, go BACK to the Language menubar item, scroll BACK to the bottom and select BLAM or whatever you saved it as. Now your blamscripts will look like this instead;

Unless you disregarded me completely and downloaded CMTs. Then it probably won't look like that at all.

This separates different functions. I might have mixed some up, but the general rule of thumb is;

Red- Script startup lines (script, global, startup, dormant)
Green- Script functions (sleep, if, begin, cond, set)
Blue- Game Functions (ai_place, object_create)
Orange- Return Functions (unit_get_health, volume_test_objects, device_get_position)
Brown- Variables or Object Properties (vehicle_name, short, object_list, trigger_volume)
Purple- Inherent Values (True, False, None, Void, Min, Max)

This makes breaking a script apart much easier, as each part of the script is sectioned off from the rest by obvious color differences.

But, again, you shouldn't be using (sleep_until (= 0 (ai_living_count encounter))5)

You should be using something like this

This waits until the AI are almost dead. Then it makes them retreat, or call in reinforcements. The AI in the game are all different, and should be treated as such. Not even an alien army is fearless of death; grunts should retreat, jackals regroup to higher ground. You can use trigger volumes to read how the player is moving around the map, and then run something like this based on where the player is;

This checks if the player is either in cliffs or the beach, and moves the snipers away from him and the elites and jackals towards him. This is assuming you have two squads made, where cliff AI has firing points around some cliffs, and Beach AI has them on the beach. Or whatever, not limited to cliffs and beaches obviously. Just concepts.

Also, instead of just checking for one variable (AI being less than 4), why not two?

(sleep_until (or (> 4 (ai_living_count encounter)) (= 0 (ai_living_count encounter/elites)) 5)

That will sleep until either 4 total AI are left, or both elites have been killed, sending their subordinates into a panic perhaps. Or maybe, having given up hope, the grunts perform a suicide rush with grenades. Or maybe at that point Krypto the superdog descends from the heavens and bites the master chief square in his crotch. Only you get to make that decision.

(= 0 (ai_living_count test_encounter) 5)

= 0

what you put waited until 0 < ai_living_count.

Which means it happened immediately.

Quote: --- Original message by: Halo CE Noob Modder117

Yeah. I forgot to edit my post. Basically, in one night I figured out almost EVERYTHING I wanted to know... There is however, just 1 little thing I am having troubles with...

Making those 'if' variable scripts. I want to initiate something AFTER eliminating an encounter. I found a thread (I cannot friggen find it now, I should have bookmarked these things...) Gamma927 explained how to make a waypoint and explained what each of the lines within the script meant so all I had to do was name and match my objects and flags so it was pretty well done and easy to follow.
Edited by Halo CE Noob Modder117 on Nov 28, 2018 at 07:53 AM

Google Search

Use site:www.websitename.com in google to only search a specific website. Google's site search is much, much better than any forum's search feature. The first result on that link has the answer you were looking for from Gamma.

Objective text is added using (hud_set_objective_text <hud_message>)

The start menu's text I believe is part of the HUD bitmaps, not part of a script.

Doing missions all depends on how the objectives are setup. I generally have one "master" script running that calls on static scripts or continuous scripts to do specific functions. For example

(script dormant step2
(ai_place seconds)
(object_create ghost1)
(object_create ghost2)
(vehicle_load_magic ghost1 "" seconds/pilot)
(vehicle_load_magic ghost2 "" seconds/pilot)
(objects_attach dropship1 "small_cargo01" ghost1 "" )
(objects_attach dropship1 "small_cargo02" ghost2 "" )

(script dormant step3
(ai_place thirds)
(object_create ghost3)
(object_create ghost4)
(vehicle_load_magic ghost1 "" thirds/pilot)
(vehicle_load_magic ghost2 "" thirds/pilot)
(objects_attach dropship1 "small_cargo01" ghost1 "" )
(objects_attach dropship1 "small_cargo02" ghost2 "" )

(script startup master
(ai_place initial)
(sleep_until (or (= 1 (volume_test_objects trigger1 (players))) (= 0 (ai_living_count initial)) 5)
(wake step2)
(sleep_until (or (= 1 (volume_test_objects trigger2 (players))) (= 0 (ai_living_count seconds)) 5)
(wake step3)
(sleep_until (game_all_quiet) 5)

To control sounds, run a separate startup script that's first command sleeps until the player enters the area or does whatever you want them to do. Then have another sleep_until conditions for music ending, and stop the looping sound.

Edited by DeadHamster on Nov 28, 2018 at 12:08 AM

Halo CE Technical / Map Design » Rebuilt map anomaly Sep 26, 2018 02:13 PM (Total replies: 4)

Sounds like something is eating particles. Theres a cap, my guess is when you look north the object isnt in view and isnt rendering, but when you turn it does. Any emitters or funky scenery tags doing anything south of the player's position?

Halo CE General Discussion » project proposal... boarding extraction! Sep 22, 2018 08:14 PM (Total replies: 8)

Quote: --- Original message by: Spartan314
Make a playable demo
Then people will join you

No they won't. Then you end up with an oversized mod whose weight is slowly crushing you.

Halo CE General Discussion » [WIP] El secreto Sep 20, 2018 10:18 PM (Total replies: 6)

Wow that looks really good. Really good.

Reminds me a bit of the style in the map Church. Always thought that level was overhyped, even when it was released. Some poor choices for weapon spawns and things like that, and didn't care for over-detailed bitmaps on under-detailed geometry. Felt like a really good Unreal map.

But regardless of the overhype, still a fantastic map. Looked great.

So does this, keep it up, excited to see how it comes out.

Time: Tue December 11, 2018 7:25 AM 297 ms.
A Halo Maps Website