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 »Scripting Thread

Page 5 of 7 Go to page: · 1 · 2 · 3 · 4 · [5] · 6 · 7 · Prev · Next
Author Topic: Scripting Thread (231 messages, Page 5 of 7)
Moderators: Dennis

kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Jan 25, 2013 06:48 PM    Msg. 141 of 231       
Without OS, you would have the game type as CTF, and then monitor the spawn points. Another method you can try is having each player spawn in specialized rooms, with AI. Check which encounter goes into attack state, and use that to decide teams (then kill and respawn the AI to make sure they're calm before the next person comes through to insure results aren't skewed).


For changing teams, you have to have the players run the command themselves,
(change_team <short>)
change your team (0=red,1=blue,else=auto)

So, to do that without OS, you have to basically ask the user for input on who they are (unless you make them all deathless, and have them check whose spawning in this specialized respawn room when they join), which at that point.. you might as well tell them to just change the team on their own.


Or, you can just take the easy route and use OS with local player detection and team detection.


grunt_eater
Joined: Jan 26, 2011

Everything except biped rigging.


Posted: Jan 25, 2013 06:53 PM    Msg. 142 of 231       
Hmmmm. Fascinating. What command would i us to display a globals information?


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Jan 25, 2013 07:00 PM    Msg. 143 of 231       
To let another script command get the contents, you'd just write the name where ever that datatype is accepted. To print it to the screen, (inspect <name>)


grunt_eater
Joined: Jan 26, 2011

Everything except biped rigging.


Posted: Jan 26, 2013 01:33 AM    Msg. 144 of 231       
Okay, on last question. And i'm only asking it because i never saw a response to my PM :/

I'm still working on the h3 missile pod idea for CE. And I've found out the best way to do it.

(script continuous missilepod
(sleep_until (unit_has_weapon_readied (unit (list_get (players) 0)) "weapons\missilepod\missilepod"))
(objects_attach (unit (list_get (players) 0)) "body" otherguy "body")
(objects_detach (unit (list_get (players) 0)) otherguy) ;;Moves the second biped to the players position
(objects_attach otherguy "body" (unit (list_get (players) 0)) "body")
(set cheat_bump_possession 1)
(objects_detach otherguy (unit (list_get (players) 0)))
(set cheat_bump_possession 0) ;;makes the player bump possess the other biped
)


And this is where i'm stuck. The next step is to load the biped the player is controlling now into the players old body, but in order to do that i need a way to store the biped itself, not the players information, in a global. And that's what i'm asking. How would i go about storing the biped the player controls in a global?


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Jan 26, 2013 01:53 AM    Msg. 145 of 231       
(global unit player0 NONE)
(script static unit p0 (unit (list_get (players) 0)))
(script startup example
(sleep_until (= (list_count (players)) 1)) ;;wait for the player to spawn.
(set player0 (p0))
(inspect (= player0 (p0))) ;;Will display true on the screen.
(unit_kill (p0)) ;;Kills him
(sleep_until (= (list_count (players)) 1)) ;;Waits until he respawns
(inspect (= player0 (p0))) ;;Displays false on the screen.
(object_set_scale player0 5 1) ;;Will scale the corpse up, which regularly you'd have no interaction with.
)


Go use that ingame, watch it work, etc. I probably matched the parenthesis... lol, not really paying much attention, im half asleep right now (which is why I just wrote the script and not a discription)


grunt_eater
Joined: Jan 26, 2011

Everything except biped rigging.


Posted: Jan 27, 2013 04:39 PM    Msg. 146 of 231       
Awesome, now it's working great :D But i thought of another idea. Is there a way to check if a biped has been stunned? Like if you shoot it with a plasma rifle, it stuns them so they can't run. Is there a way to script a test for that?


game user10
Joined: Dec 9, 2011

Who is the Overseer?


Posted: Feb 3, 2013 02:14 AM    Msg. 147 of 231       
So far, I've seen no commands to check stun.


OpsY
Joined: Feb 19, 2007

Frobisher Bay


Posted: Feb 6, 2013 09:38 PM    Msg. 148 of 231       
And if anything, Stun Is very annoying


grunt_eater
Joined: Jan 26, 2011

Everything except biped rigging.


Posted: Feb 6, 2013 11:25 PM    Msg. 149 of 231       
But i had a thought on making EMP's for vehicles. If i could figure out how to test if a biped has been stunner, i could figure out making it so vehicles could be stunned.


bourrin33
Joined: Oct 19, 2009

HEK not installed tho


Posted: Feb 18, 2013 05:47 PM    Msg. 150 of 231       
Any way to make an AI change of weapon (eg if an ennemy is too close/bersek)?
Edited by bourrin33 on Feb 18, 2013 at 05:48 PM


MoooseGuy
Joined: Aug 10, 2008

I Approve This Message.


Posted: Feb 18, 2013 06:09 PM    Msg. 151 of 231       
You could create something kinda like it by sensing when that AI's biped's health is low, and then replacing him with a sword-wielding elite via attach/detach and destroying the old elite.


game user10
Joined: Dec 9, 2011

Who is the Overseer?


Posted: Mar 3, 2013 03:04 AM    Msg. 152 of 231       
Is there anyway to implement magic_melee_attack for each player in a multiplayer game if they use a different biped? (Example: A hunter)

I was thinking of using that host detecting script to accomplish this, or will that only work for the host?


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Mar 3, 2013 12:57 PM    Msg. 153 of 231       
Go play as a client, run it in devmode. You'll notice the other player is playing animations. Regardless, this isnt going to work. It doesn't ask for a player number, its either playing on the first player (host), or all the players. (I think it might just be host, because I ran it on my host machine, and I didnt see the client player doing any animations. Of course, both were cyborg, so they shouldnt of been playing animations, yet the client saw the host doing so when he(client) ran it)


Anyways, what you want to do, is use the animation importer in bluestreak, to import and reexport the melee animation of your choice. Make it a player usable animation (According to the cyborg animations, JMR), then inject it into your hunter animation tag with the animation editor on halomaps. Poof, people can use melee properly, no scripts involved.


Anyways, I noticed that I never made a tutorial on passing values between maps. I'll probably do it this afternoon after that essay I have to write.


MoooseGuy
Joined: Aug 10, 2008

I Approve This Message.


Posted: Mar 3, 2013 02:48 PM    Msg. 154 of 231       
Seems legit.

Scripting and multiplayer is like dubstep and goats.

http://www.youtube.com/watch?v=BdNryKEIkTE


game user10
Joined: Dec 9, 2011

Who is the Overseer?


Posted: Mar 26, 2013 09:41 PM    Msg. 155 of 231       
Is there any commands to check if all members of a squad have properly migrated to another squad? I'm currently using this:
(script continuous aiattack3
(sleep_until middlebase_captured)
(sleep_until (>= (ai_living_count "enemylastdefense/base squad2") 8))
(ai_migrate "enemylastdefense/base squad2" "enemylastdefense/Middle squad1")
)
(script continuous aiattack4
(sleep_until
(>=
(+ (ai_living_count "enemylastdefense/middle squad1")
(ai_living_count "enemylastdefense/base squad2")
)
9)
)
(ai_migrate "enemylastdefense/base squad2" "enemylastdefense/middle squad1")
)

Also, what's the command for spawning an AI if the player wields a sniper rifle?
(script continuous sniper1
(sleep_until (vehicle_test_seat s1 "scorpion-driver" (player0)))
;;gonna put an "or" in the above line right?
(ai_place enemylastdefense/sniper)
(sleep_until (!= (list_count (players)) player_spawn_count) 15)
(ai_command_list enemylastdefense/sniper sniper)
(ai_migrate enemylastdefense/sniper "enemy/attacking squad")
)


jawa
Joined: Jun 26, 2011

Utinni!


Posted: Mar 26, 2013 10:56 PM    Msg. 156 of 231       
I made a script the other day to make my own race game type, so I you could play race in slayer. I have two questions though. First my script is basically a trigger volume at the start, pass through it 3 times and you win. The problem is for some reason it does not always count it when you go through. I can make the trigger volume as big as I want (to allow more to register player), but it still will not always catch the player. Is there some way to fix that. Also I was making my own race mode because halo race does not allow normal vehicle spawn or scripts. Is there away around that?


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Mar 28, 2013 01:30 PM    Msg. 157 of 231       
I'm assuming you're using a sleep_until; what number did you include in the wait time? It will only check that often, so the player may of already passed through the volume before it checks again. Decrease the number. Anyways, you can object_create some vehicles in race mode. To see if its race mode (so the script only runs on race) you can place all the actual race spawn points in a seperate area outside the map, have a trigger volume there, when they enter, teleport them to somewhere in the map (a random cutscene flag). When the game starts, if someone enters that trigger volume within a few moments, its race, so spawn the race vehicles, etc.


jawa
Joined: Jun 26, 2011

Utinni!


Posted: Mar 28, 2013 02:37 PM    Msg. 158 of 231       
I am actually not using a sleep_until. But after taking another look at my script I may know the problem. I have a script continuous checking the trigger volume. I meant for the script to check then if you are in the trigger volume give you one lap, sleep 100, and then be ready for the next lap (so you cannot simply drive back and forth throught the start). But what I had continuously ran through check and then sleep. So I added the sleep to the if statement (instead of after) that is checking for the player. Now it will only sleep once it has detected you. Before I believe some of the times I went through it was sleeping.


game user10
Joined: Dec 9, 2011

Who is the Overseer?


Posted: Mar 30, 2013 02:38 AM    Msg. 159 of 231       
Quote: --- Original message by: game user10
What's the command for spawning an AI if the player wields a sniper rifle?
(script continuous sniper1
(sleep_until (vehicle_test_seat s1 "scorpion-driver" (player0)))
;;gonna put an "or" in the above line right?
(ai_place enemylastdefense/sniper)
(sleep_until (!= (list_count (players)) player_spawn_count) 15)
(ai_command_list enemylastdefense/sniper sniper)
(ai_migrate enemylastdefense/sniper "enemy/attacking squad")
)


unit_has_weapon right?
How do I specify the object definition? Something along the lines of globals?


MoooseGuy
Joined: Aug 10, 2008

I Approve This Message.


Posted: Mar 30, 2013 03:29 AM    Msg. 160 of 231       
(global object_definition TAG-LOCATION NAME)


cyboryxmen
Joined: Nov 7, 2010

--CG artist-- New mission. Refuse this Mission!


Posted: Apr 9, 2013 10:25 AM    Msg. 161 of 231       
A new scripting concept

After playing on the level Assault at the control room and then jumping off the bridge, I realised that there is a problem with the startup script. I suppose that you can use continuous scripts instead but there is a limit as to how much checks you can have at one time. After reading an article on Halo a.i. where it says that the a.i. is made unpredictable using the player as the player is unpredictable. So instead of doing that, why not have a bunch of dormant scripts lying around to be activated by a player? This obviously won't work with traditional check volumes as those are made for continuous scripts but I have another way of having the player activating scripts.

I call it the continuous script to continuously script them all. Basically, we'll have an a.i. attached to the player that will only be hostile to one biped. That way, when the player enters a room with the biped, the a.i will go into alert mode. A continuous script will pick this up and activate a dormant script depending on what the a.i. is currently looking at. We can also have 2 a.is, one that can see 360 degrees and one that is limited to the player's perspective. This is just a concept and can be modified to fit everyone's needs but I would like to hear your opinions about it. Kirbs?
-Zekilk


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Apr 9, 2013 12:21 PM    Msg. 162 of 231       
Quote: --- Original message by: cyboryxmen
So instead of doing that, why not have a bunch of dormant scripts lying around to be activated by a player?

You do realize thats exactly how the default SP scripts go, right? They're a huge cluster of dormant scripts, the startup starts the few for the AI in the region, and one for checking continuality a good 10 steps a head of you (incase you cheat your way over there). For the AI in the region your in, sure, theres a little continuality expected, however most is already active for a good distance. And, if you get too far a head, there is also the scripts for controling the second half the map already waiting for you to show up so it can do the same thing with that half the map.

Quote: --- Original message by: cyboryxmen
I call it the continuous script to continuously script them all. Basically, we'll have an a.i. attached to the player that will only be hostile to one biped. That way, when the player enters a room with the biped, the a.i will go into alert mode. A continuous script will pick this up and activate a dormant script depending on what the a.i. is currently looking at. We can also have 2 a.is, one that can see 360 degrees and one that is limited to the player's perspective. This is just a concept and can be modified to fit everyone's needs but I would like to hear your opinions about it. Kirbs?
-Zekilk
Why do we need meat shields?... the same system your using to see if your meat shield (which may very well of died from being a meat shield unless you made him immortal, which gives you an immortal meat shield) is looking at something that would be used to check if your in a trigger volume, so why would you give the game more to worry about?...


game user10
Joined: Dec 9, 2011

Who is the Overseer?


Posted: Apr 13, 2013 08:25 AM    Msg. 163 of 231       
Two questions:
1. Is there a script that can check if all actors in a squad have properly made it to their firing positions after they migrate? The ones that get left behind get stuck because of crappy pathfinding. Maybe if I script in to wait until all actors are in a trigger volume?

2. How do you attach navpoints to actors in an encounter?


bourrin33
Joined: Oct 19, 2009

HEK not installed tho


Posted: Apr 14, 2013 04:02 PM    Msg. 164 of 231       
Is there any way to trigger an animation when someone enters as passenger (different seats possible with different doors) to play an animation ?

Like door anims. I can do 1 door anim using the gunner functions, but I'd like not to waste the functions of the vehicle if it's possible through scripting


jackrabbit
Joined: Apr 27, 2005

Fight Against the Machine of Deth!


Posted: Apr 14, 2013 04:23 PM    Msg. 165 of 231       
Quote: --- Original message by: bourrin33
Is there any way to trigger an animation when someone enters as passenger (different seats possible with different doors) to play an animation ?

Like door anims. I can do 1 door anim using the gunner functions, but I'd like not to waste the functions of the vehicle if it's possible through scripting
I have a good idia but first can I ask how is it you managed to use gunner function on door open animation?
I have a warthog that actuly has 2 doors and no gunner but problem is the doors stay open until I get in it.
fixing that would be a great feet.

If I could use functions or a script to fix it. and still have a gunner well then Lets just say it would be a nice warthog.


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Apr 14, 2013 04:42 PM    Msg. 166 of 231       
Quote: --- Original message by: game user10
Two questions:
1. Is there a script that can check if all actors in a squad have properly made it to their firing positions after they migrate? The ones that get left behind get stuck because of crappy pathfinding. Maybe if I script in to wait until all actors are in a trigger volume?

You can change it from a static if you only need it once, anyways, When you call it, it will keep going until all living AI of that encounter are inside the trigger volume. It has 3 points, if your player is looking away from one of these points, it will teleport the AI over into that point (have it inside the trigger volume in the fight area, or else they'll keep teleporting there)
(global ai strg_enc NONE)
(global trigger_volume fightzone_trigg YOURTRIG)
(global short num 0)
(global cutscene_flag area_1 YOURFLAG1)
(global cutscene_flag area_2 YOURFLAG2)
(global cutscene_flag area_3 YOURFLAG3)
(script static void relocate_Straglers
(sleep_until
(begin
(if (not (volume_test_object fightzone_trigg (unit (list_get (ai_actors strg_enc) NUM))))
(cond
((not (objects_can_see_flag (players) area_1 90)) (object_teleport (unit (list_get (ai_actors strg_enc) NUM)) area_1))
((not (objects_can_see_flag (players) area_2 90)) (object_teleport (unit (list_get (ai_actors strg_enc) NUM)) area_2))
((not (objects_can_see_flag (players) area_3 90)) (object_teleport (unit (list_get (ai_actors strg_enc) NUM)) area_3))
)
)
(if (< num (list_count (ai_actors strg_enc))) (set num (+ num 1)) (set num 0))
(volume_test_objects_all fightzone_trigg (ai_actors strg_enc))
)
(begin
(set num 0)
(+ 0 0)
)
)
)

Quote: --- Original message by: game user10
2. How do you attach navpoints to actors in an encounter?

(activate_nav_point_object default (unit (list_get (players) 0)) (list_get (ai_actors YOURENCOUNTER) NUMBER) 1)
Or,
(activate_team_nav_point_object default_red player (list_get (ai_actors YOURENCOUNTER) NUMBER) 1)
Quote: --- Original message by: bourrin33
Is there any way to trigger an animation when someone enters as passenger (different seats possible with different doors) to play an animation ?

Like door anims. I can do 1 door anim using the gunner functions, but I'd like not to waste the functions of the vehicle if it's possible through scripting

(script continuous vehicle_1_door
(sleep_until (not (vehicle_test_seat_list <vehicle> <string> (vehicle_riders <unit>))) 5) ;;Waits until Nobody is in the named seat.
(sleep_until (vehicle_test_seat_list <vehicle> <string> (vehicle_riders <unit>)) 5) ;;Now waits until someone gets in (So that it doesnt loop the animation)
(custom_animation <unit> <animation_graph> <string> 1) ;;Play your door animation.
)

You can add an animation when you get out as well. Right now, this is assuming that you just swing the door open to get in, that it is defaultly closed. you can have a loop where it forces the door into your desired position, etc.
Place the vehicle name in both the vehicle, and unit slots. Seat in the string slot.


bourrin33
Joined: Oct 19, 2009

HEK not installed tho


Posted: Apr 15, 2013 01:40 PM    Msg. 167 of 231       
and about MP ? I'm thinking of using the global variable thing to get it to work easily (like on CAD's backpack script), and closing ?
Thanks for teh answer


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Apr 15, 2013 02:09 PM    Msg. 168 of 231       
Only the host would see the animation. You need the object name to use a script to tell it to use an animation, and object names aren't passed around online. For clients, it would require function blocks instead unless you want the doors as separate objects that lag along behind. (OS can return nearby objects so you don't need object names, but that would have a few hiccups for something like choosing an exact seat)


bourrin33
Joined: Oct 19, 2009

HEK not installed tho


Posted: Apr 16, 2013 06:06 AM    Msg. 169 of 231       
What ifI use something like this to define the players from MP ?

(global short plyrnum 0)

(script continuous increase_plyrnum
(begin
(set plyrnum (+ plyrnum 1))
)
)

(script continuous reset_plyrnum
(if
(= (> plyrnum 15) true)
(begin
(set plyrnum 0)
)
)
)

(script continuous backpack_ar
(if
(and
(unit_has_weapon (unit (list_get (players) plyrnum)) w_ar)
(not (unit_has_weapon_readied (unit (list_get (players) plyrnum)) w_ar))
true)
(begin
(object_set_permutation (unit (list_get (players) plyrnum)) "backpack" ar)
)
)
)

This is from Masterz, CMT backpack


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Apr 16, 2013 03:39 PM    Msg. 170 of 231       
That does NOTHING for targetting vehicles. Unless the doors are part of the players, then targetting players does nothing for you (Plus, if you wanted to target the player who was entering the seat, a few small tweaks to what I already gave you would do it)


game user10
Joined: Dec 9, 2011

Who is the Overseer?


Posted: Apr 20, 2013 04:47 AM    Msg. 171 of 231       
In regards to that relocate_stragglers script you gave me:

(global ai strg_enc NONE)
(global trigger_volume fightzone_trigg AI)
(global short num 0)
(global cutscene_flag area_1 AI1)
(global cutscene_flag area_2 AI2)
(global cutscene_flag area_3 AI3)
(script static void relocate_Stragglers
(sleep_until
(begin
(if (not (volume_test_object fightzone_trigg (unit (list_get (ai_actors strg_enc) NUM))))
(cond
((not (objects_can_see_flag (players) area_1 90)) (object_teleport (unit (list_get (ai_actors strg_enc) NUM)) area_1))
((not (objects_can_see_flag (players) area_2 90)) (object_teleport (unit (list_get (ai_actors strg_enc) NUM)) area_2))
((not (objects_can_see_flag (players) area_3 90)) (object_teleport (unit (list_get (ai_actors strg_enc) NUM)) area_3))
)
)
(if (< num (list_count (ai_actors strg_enc))) (set num (+ num 1)) (set num 0))
(volume_test_objects_all fightzone_trigg (ai_actors strg_enc))
)
(begin
(set num 0)
(+ 0 0)
)
)
)

(script continuous aiattack
(sleep_until (>= (ai_living_count "machines/attackers1") 2))
(ai_migrate "machines/attackers1" "machines/attackers2")
(relocate_Stragglers)
)

Is this the correct usage?
The fightzone trigvol is covering the area where the squad "attackers2" has its firing positions.
The three cutscene flags form a triangle shape inside the trigger volume.


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Apr 20, 2013 02:04 PM    Msg. 172 of 231       
Quote: --- Original message by: game user10
In regards to that relocate_stragglers script you gave me:

(global ai strg_enc NONE)
(global trigger_volume fightzone_trigg AI)
(global short num 0)
(global cutscene_flag area_1 AI1)
(global cutscene_flag area_2 AI2)
(global cutscene_flag area_3 AI3)
(script static void relocate_Stragglers
(sleep_until
(begin
(if (not (volume_test_object fightzone_trigg (unit (list_get (ai_actors strg_enc) NUM))))
(cond
((not (objects_can_see_flag (players) area_1 90)) (object_teleport (unit (list_get (ai_actors strg_enc) NUM)) area_1))
((not (objects_can_see_flag (players) area_2 90)) (object_teleport (unit (list_get (ai_actors strg_enc) NUM)) area_2))
((not (objects_can_see_flag (players) area_3 90)) (object_teleport (unit (list_get (ai_actors strg_enc) NUM)) area_3))
)
)
(if (< num (list_count (ai_actors strg_enc))) (set num (+ num 1)) (set num 0))
(volume_test_objects_all fightzone_trigg (ai_actors strg_enc))
)
(begin
(set num 0)
(+ 0 0)
)
)
)

(script startup aiattack
(sleep_until (>= (ai_living_count "machines/attackers1") 2))
(ai_migrate "machines/attackers1" "machines/attackers2")
(set strg_enc "machines/attackers2")
(relocate_Stragglers)
)

You need to set the encounter (This script is re-usable since its a static, you just re-assign the global variables and call the static again. AI are acceptable as a NONE, but trigger volumes arent, so thats why I had defined those at the top and not down here. You can reassign them for other areas that you perform these tasks, etc)


game user10
Joined: Dec 9, 2011

Who is the Overseer?


Posted: Apr 20, 2013 08:51 PM    Msg. 173 of 231       
But the AI respawn, at the rate of 30 seconds per actor. When there's two of them, they migrate to the squad in order to move.
There are multiple squads set up like this, so do I have to copy this entire script for each one?
Or do I also have to make trigvols and flags for each one?


kirby_422
Joined: Jan 22, 2006

Apparently public enemy number 1?


Posted: Apr 20, 2013 08:56 PM    Msg. 174 of 231       
Why are you even migrating if they just spawn and change?.. Just have the one encounter, and have its spawn points over at the one location..


game user10
Joined: Dec 9, 2011

Who is the Overseer?


Posted: Apr 20, 2013 09:23 PM    Msg. 175 of 231       
Enemies are in between the two squads.
Edit: How about this script?
(script continuous aiattack
(sleep_until (>= (ai_living_count "machines/attackers1") 2))
(ai_migrate "machines/attackers1" "machines/attackers2")
)
(script continuous aiattack2
(sleep_until (>= (ai_living_count "machines/attackers2") 7))
(set strg_enc "machines/attackers2")
(relocate_Stragglers)
(sleep_until
(volume_test_object fightzone_trigg (unit (list_get (ai_actors strg_enc) NUM)))
)
(ai_migrate "machines/attackers2" "machines/attackers3")
(ai_migrate "machines/attackers5" "machines/attackers3")
)
Edited by game user10 on Apr 21, 2013 at 02:09 AM

 
Page 5 of 7 Go to page: · 1 · 2 · 3 · 4 · [5] · 6 · 7 · Prev · Next

 
Previous Older Thread    Next newer Thread







Time: Thu January 19, 2023 4:10 AM 360 ms.
A Halo Maps Website