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

Home  Search Register  Login Member ListRecent Posts
  
 
»Forums Index »Halo Custom Edition (Bungie/Gearbox) »Halo CE General Discussion »Air/Ground Unit Hybrid

Author Topic: Air/Ground Unit Hybrid (24 messages, Page 1 of 1)
Moderators: Dennis

Russian Poot Man
Joined: Oct 7, 2018

coming from sandvich land


Posted: Oct 21, 2018 07:53 PM    Msg. 1 of 24       
Has anyone done this before? Halo doesn't support characters that can fly and walk, its one or the other, so I made this. Its WIP but I think Halo can support this kind of thing fully with a little work.
https://www.youtube.com/watch?v=BfXzzaK3HJs


The Gravemind
Joined: Jul 26, 2016

I Am The Monument To All Your Sins


Posted: Oct 21, 2018 09:30 PM    Msg. 2 of 24       
interesting I didn't know that was possible, great job.


Russian Poot Man
Joined: Oct 7, 2018

coming from sandvich land


Posted: Oct 22, 2018 05:36 AM    Msg. 3 of 24       
Made an update. Now the bugger can land. He can switch back and forth whenever now.
https://www.youtube.com/watch?v=0Z3U9JS1eZo

Quote: --- Original message by: The Gravemind
interesting I didn't know that was possible, great job.

Thanks.
Edited by Russian Poot Man on Oct 22, 2018 at 05:36 AM


SOI_7
Joined: Mar 23, 2012

ZA WARUDO! TOKI WO TOMARE!


Posted: Oct 22, 2018 06:53 AM    Msg. 4 of 24       
This is really cool. Did you make this using actor_variant transformations?

P.S. And would you mind telling me where did you get those Bugger animations? The only ones I'm aware of are those from Lumoria
Edited by SOI_7 on Oct 22, 2018 at 06:53 AM


R93_Sniper
Joined: Feb 13, 2011

When in Doubt, RUN!


Posted: Oct 22, 2018 04:16 PM    Msg. 5 of 24       
Didn't Kirby already do this with some OS work?


Russian Poot Man
Joined: Oct 7, 2018

coming from sandvich land


Posted: Oct 22, 2018 04:29 PM    Msg. 6 of 24       
Quote: --- Original message by: SOI_7

This is really cool. Did you make this using actor_variant transformations?

P.S. And would you mind telling me where did you get those Bugger animations? The only ones I'm aware of are those from Lumoria
Edited by SOI_7 on Oct 22, 2018 at 06:53 AM


I got the tags from thros's maps. I used default halo and split the bugger into two bipeds, one for the air and ground. I attach and detach them with my primitive scripts when necessary.
https://www.youtube.com/watch?v=7lqrOvCajIs
This time I attach them differently, because they were having collision issues before, the tag has some issues, so my attach method now looks worse, but functions as intended. I just threw this together and it worked, it could be vastly improved.

This could look pretty much flawless if the bugger coll was fixed.

Edit: It would be ideal if we could find a way to make the ground bugger fall slower. It's not top priority for me, but it would look better. I want to get the ground bugger to move right, and it has trouble navigating. I feel like this tag could be improved.
Edited by Russian Poot Man on Oct 22, 2018 at 06:08 PM


Spartan314
Joined: Aug 21, 2010

Former biped rigger & FP animator


Posted: Oct 22, 2018 11:20 PM    Msg. 7 of 24       
This is interesting, I don't think I've ever noticed that they were dichotomous.
It's pretty cool to see this work though


Spiral
Joined: Apr 3, 2011

I hope i'm out of the way


Posted: Oct 23, 2018 03:31 AM    Msg. 8 of 24       
Quote: --- Original message by: R93_Sniper
Didn't Kirby already do this with some OS work?


Yeah that is what I remembered.
https://youtu.be/iJPHIMENmD4

From what I remember this isn't the latest progress Kirby made. I recall being shown drones that perched on walls and properly ran on the floor during combat when flight wasn't necessary.

Russian Poot Man, good job dude!
Glad to see others are still making interesting posts and works in progress regarding CE.

Edited by Spiral on Oct 23, 2018 at 03:32 AM


Russian Poot Man
Joined: Oct 7, 2018

coming from sandvich land


Posted: Oct 23, 2018 11:41 PM    Msg. 9 of 24       
Made an update. I rewrote everything and made it support encounters instead of named objects.

Working on refining and getting the buggers to fly when its best for combat, and also when they want to. Also now their health isn't reset.

https://youtu.be/cZroRr3tdy0

Quote: --- Original message by: Spiral

Quote: --- Original message by: R93_Sniper
Didn't Kirby already do this with some OS work?


Yeah that is what I remembered.
https://youtu.be/iJPHIMENmD4

From what I remember this isn't the latest progress Kirby made. I recall being shown drones that perched on walls and properly ran on the floor during combat when flight wasn't necessary.

Russian Poot Man, good job dude!
Glad to see others are still making interesting posts and works in progress regarding CE.

Edited by Spiral on Oct 23, 2018 at 03:32 AM


Thats cool, thanks for showing. Glad you're interested.

Edit: I've made some updates to this.
Edit2: The update.
https://youtu.be/93k0FrWLS3Q

(script startup spawn
(ai_place bug_ground)
(ai_place bug_fly)
(object_teleport (unit (list_get (ai_actors bug_ground) 0)) bg1start)
)

(script continuous bug1fly
(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))
(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)
)

(script continuous bug1ground
(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_ground) 0)))-1))
(sleep_until (= (volume_test_objects bugoffvol (unit (list_get (ai_actors bug_ground) 0)))1))
(sleep_until (= (ai_status bug_fly)1))
(ai_magically_see_players bug_ground)
(sleep 150)
(objects_attach (unit (list_get (ai_actors bug_fly) 0)) "head" (unit (list_get (ai_actors bug_ground) 0)) "head")
(objects_detach (unit (list_get (ai_actors bug_fly) 0)) (unit (list_get (ai_actors bug_ground) 0)))
(object_teleport (unit (list_get (ai_actors bug_fly) 0)) bugoff)
(sleep 150)
)

(script continuous bug1land1
(sleep_until (= (volume_test_objects land_bugvol1 (unit (list_get (ai_actors bug_fly) 0)))1))
(sleep_until (= (volume_test_objects land_playervol1 (players))1))
(sleep_until (!= (unit_get_health (unit (list_get (ai_actors bug_ground) 0)))-1))
(sleep_until (= (volume_test_objects bugoffvol (unit (list_get (ai_actors bug_ground) 0)))1))
(sleep_until (!= (ai_status bug_fly)1))
(ai_magically_see_players bug_ground)
(sleep 150)
(objects_attach (unit (list_get (ai_actors bug_fly) 0)) "head" (unit (list_get (ai_actors bug_ground) 0)) "head")
(objects_detach (unit (list_get (ai_actors bug_fly) 0)) (unit (list_get (ai_actors bug_ground) 0)))
(object_teleport (unit (list_get (ai_actors bug_fly) 0)) bugoff)
(ai_magically_see_players bug_ground)
(sleep 150)
)

Now it looks nearly flawless, and the bugger can somewhat land in combat.

Still working on making the bugger land in combat when necessary everywhere, not just rooms. I can make him wait before deciding to fly when in combat, make him decide what to do based on player location, with bigger trigger volumes.

Edit3: I got him to switch during combat. It also looks way better now. Uploading vid.
https://youtu.be/C2A77bIQ_Nk

I found a way of overriding the behavior and giving the AI more of a preference. For example: If the player is in a hard to reach area from above, the bugger may decide to land and go after you on foot. Working on implementing this for the next vid.
Edited by Russian Poot Man on Oct 24, 2018 at 05:00 AM


Spartan314
Joined: Aug 21, 2010

Former biped rigger & FP animator


Posted: Oct 24, 2018 08:08 AM    Msg. 10 of 24       
Bumped for interesting content


Masters1337
Joined: Mar 5, 2006

halonaminator's unfortunate idol


Posted: Oct 24, 2018 09:18 AM    Msg. 11 of 24       
This is all really cool, really nice to see someone smart and intelligent show up with new creative methods of doing things.

I would suggest though trying to cut down on some of the conditions to making them switch. You could probably do something a bit more dynamic that requires less setup by tieing it to some ai status conditions. I'd also enable the can walk on walls flag for the ground unit. If you can get these guys to switch while they are moving left and right in the air, the momentum might be able to let them "throw" themselves onto surfaces. I think you'd have to abandon attaching the object and instead have to enter them into the seat of the flying unit, as the unit should maintain it's momentum then.
Edited by Masters1337 on Oct 24, 2018 at 09:21 AM


Russian Poot Man
Joined: Oct 7, 2018

coming from sandvich land


Posted: Oct 24, 2018 06:18 PM    Msg. 12 of 24       
Thanks, glad people are showing interest. I made an update, but the scripts are getting too long and need to be rewritten again. This is what I meant by the override, the buggers will always want to fly after a second or two in combat, but when both the player and bugger are in the their detect volumes, the bugger might decide to land. He can also choose to fly again. Need to work out some kinks, but some kinks might become a feature.

Edit: The bugger being able to choose flight inside the area its meant to land could actually be helpful in some cases, the bugger could unstick himself or fly to place closer to where he should be. With some adjustments and parameters, this could iron out quite nicely.

I tried making them walk on every surface, but it ended up looking terrible, I think this is a tag issue. I'd like the buggers to walk on walls too. I tried that again when I was filming the vid, but it still didn't really work, but it did help them get over those warthogs. I could try to get that flinging to surface idea working.

I also fixed a collision bug in the flying bugger.

https://youtu.be/dJn4OdFctKY


Edited by Russian Poot Man on Oct 24, 2018 at 07:58 PM


SOI_7
Joined: Mar 23, 2012

ZA WARUDO! TOKI WO TOMARE!


Posted: Oct 25, 2018 02:47 PM    Msg. 13 of 24       
Sadly bipeds refuse to walk on walls if they're too big or non-spherical, we had this issue with our Jackal Forms in SPv3 and we had to remove this ability. You could, however, make them stick on strategic walls. And you should definitely switch to the actor_variant transformation system, it could help you save scripts slots.


Russian Poot Man
Joined: Oct 7, 2018

coming from sandvich land


Posted: Oct 25, 2018 04:34 PM    Msg. 14 of 24       
Quote: --- Original message by: SOI_7
Sadly bipeds refuse to walk on walls if they're too big or non-spherical, we had this issue with our Jackal Forms in SPv3 and we had to remove this ability. You could, however, make them stick on strategic walls. And you should definitely switch to the actor_variant transformation system, it could help you save scripts slots.


I've been thinking about upgrading to opensauce. Does the actor_variant transformation system transfer health and shield status? I stopped using object_destroy and started teleporting them, so at least their health wouldn't reset. I could switch back and that would save me scripting time and effort to organize it all.


SOI_7
Joined: Mar 23, 2012

ZA WARUDO! TOKI WO TOMARE!


Posted: Oct 25, 2018 05:31 PM    Msg. 15 of 24       
Quote: --- Original message by: Russian Poot Man
Quote: --- Original message by: SOI_7
Sadly bipeds refuse to walk on walls if they're too big or non-spherical, we had this issue with our Jackal Forms in SPv3 and we had to remove this ability. You could, however, make them stick on strategic walls. And you should definitely switch to the actor_variant transformation system, it could help you save scripts slots.


I've been thinking about upgrading to opensauce. Does the actor_variant transformation system transfer health and shield status? I stopped using object_destroy and started teleporting them, so at least their health wouldn't reset. I could switch back and that would save me scripting time and effort to organize it all.


Yes, you can transfer health, shield and even the original encounter. The system is quite versatile


JadeMcLain
Joined: Nov 13, 2018


Posted: Dec 4, 2018 11:00 AM    Msg. 16 of 24       
I plan on making a better thread for this with my new account. I have ways of making them perch now (the exit animation is bugged, but that can be fixed). I have ways of making them land before switching to ground combat and a rewritten system for them. I hope these inspire you to use them or help out.

https://www.youtube.com/watch?v=wVghLq0_rHg

Edit: I've been thinking of a new system for bipeds in general with this seat boarding idea (bipeds can be entered like vehicles, and vehicle load magic works on them). For example, if you want climbing bipeds, you may be able to board a biped with the climbing walls feature when you enter a trigger volume, and it kicks you out when you're not in that volume. This might allow certain parts of the map to be climbable. I haven't tested this enough yet though.
Edited by JadeMcLain on Dec 4, 2018 at 11:51 AM


Kal_El
Joined: Feb 4, 2015


Posted: Dec 4, 2018 12:42 PM    Msg. 17 of 24       
as far as the climbing walls feature, I have noticed as you fly closer to that wall while in flight; and move about that wall, it appears you are climbing anyways?


JadeMcLain
Joined: Nov 13, 2018


Posted: Dec 4, 2018 12:58 PM    Msg. 18 of 24       
Quote: --- Original message by: Kal_El
as far as the climbing walls feature, I have noticed as you fly closer to that wall while in flight; and move about that wall, it appears you are climbing anyways?


If you were flying, the moment you enter the trigger vol, which would be placed along the wall, you would enter the seat of an invisible biped just like the one you're playing as, this seat would make you play the right animations, and the biped can walk on walls. This feature would be ideal for AI.

Walk on walls doesn't really work for most characters, so you would be kicked out of this biped after leaving the vol. This walk feature could work on some surfaces though. I haven't tested this enough.
Edited by JadeMcLain on Dec 4, 2018 at 01:04 PM


Kal_El
Joined: Feb 4, 2015


Posted: Dec 8, 2018 12:58 PM    Msg. 19 of 24       

Edited by Kal_El on Dec 8, 2018 at 12:58 PM


DeadHamster
Joined: Jun 8, 2014


Posted: Dec 8, 2018 04:05 PM    Msg. 20 of 24       
(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)
(begin

(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.



Edit



(global short ai_index 0)


(script continuous bug1fly


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

(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) ) )
(begin

(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


SBB_Michelle
Joined: Nov 4, 2015

Floof


Posted: Dec 9, 2018 10:19 AM    Msg. 21 of 24       
It doesn't take 6 seconds to check. Because the *interval* is 30 ticks, it also checks it on tick 0.

The problem only happens if all conditions aren't met at once, then this delay happens.

Formatting suggestion:

(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)


You see how one line is repeated?
I just copied Hamster's text and added newlines and some spaces. You have to format your code so you can avoid mistakes like this and so you can still read it if you haven't touched it within a week. This was a mistake I found simply by adding proper formatting.
Edited by SBB_Michelle on Dec 9, 2018 at 10:20 AM


JadeMcLain
Joined: Nov 13, 2018


Posted: Dec 10, 2018 11:49 AM    Msg. 22 of 24       
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.

I have started on this new system, and I fixed up the drone animation tag to use the proper animations for ground combat. This vid is to show them landing before switching over, I will give them better reasons to land or fly.

https://www.youtube.com/watch?v=7aLYQ42H88I

I need to get the drones moving like this in ground mode.
https://www.youtube.com/watch?v=KrEybLLh3Rw

I'm trying to study how these things behave in the air.
https://www.youtube.com/watch?v=zSoo0o1rg7M
https://www.youtube.com/watch?v=4Q6LQ9mGvRw
Edited by JadeMcLain on Dec 10, 2018 at 01:55 PM


DeadHamster
Joined: Jun 8, 2014


Posted: Dec 10, 2018 05:48 PM    Msg. 23 of 24       
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


JadeMcLain
Joined: Nov 13, 2018


Posted: Dec 11, 2018 03:04 PM    Msg. 24 of 24       
Quote: --- Original message by: DeadHamster

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


I know, and I finally got this working with migration. I've switched back from named bipeds to encounters now. Need to tweak some parameters but this will iron out nicely.

https://www.youtube.com/watch?v=B2560MBQJcM

I also have a way for them to judge distance by attaching them with detector AI. Working on implementing that again with this new system.

EDIT: Forget what I said, I have something way better now and a massive update coming soon.
Edited by JadeMcLain on Dec 20, 2018 at 11:38 PM

 

 
Previous Older Thread    Next newer Thread







Time: Thu March 21, 2019 11:00 PM 250 ms.
A Halo Maps Website