Content:
Slate
Blackcurrant
Watermelon
Strawberry
Orange
Banana
Apple
Emerald
Chocolate
Marble
Background:
Slate
Blackcurrant
Watermelon
Strawberry
Orange
Banana
Apple
Emerald
Chocolate
Marble
Pattern:
Blank
Waves
Notes
Sharp
Wood
Rockface
Leather
Honey
Vertical
Triangles
Welcome to Xbox Chaos: Modding Evolved
Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.
Search the Community: Showing results for tags 'Retail'.
Found 45 results
-
Can Anyone Plz Give Me A Link For The Halo 4 DLC Infinity Armour Pack I will love to have those armours For My Jtag
-
With maybe 3 or 4 gametype modders still around... I decided to make my tutorials, which have been reserved for people I trust with learning to mod gametypes, now open to everyone here. If you are exploring the forums in search of tutorials on how to get started with online gametype mods, then you've come to the right place. Keep in mind that cheating is not tolerated, and there has been reason for us keeping little to no documentation on this stuff strictly because of people ready to boost their Customs Stats. Do not do this. If you haven't a clue on where to begin, then download this collage for instructions on setup and more. Getting Started For Step 2- You'll need... Microsoft .NET Framework 4.5 Microsoft Visual C++ 2012 Redistributable Package (x86) Once you've gotten comfortable with that, or you are ready to start scripting, use this as your training wheels. Basics on Triggers Know that you should really, really learn to read gametypes before you start writing. If you can't read it, you probably can't write it. If you have troubles understanding things, try compiling a gametype and opening it using the WumboScript Viewer. Also keep in mind that gametypes are limited to anything 343i had planned to be able to do with gametypes. If you can't imagine it in a gametype by 343i, you probably can't do it here. Something we have over 343i though, is that we are creative Happy scripting.
-
EDIT: This has been solved (unfortunately not in a comment on here), so please ignore this post. So as some of us know, the Mythic Infection Mod doesn't work correctly in the latest version, and it lacks features. I've attempted a few times to set up infection style spawning within the slayer mod, but it's mostly been concept and not practical in most cases. Here are the main parts: -Respawn Zone set to 0 centered around infected spawn point(s) -Respawn Zone set to 1 centered around human spawn 1 -Respawn Zone set to 2 centered around human respawns (except 1) -Respawn Zone set to 3 around human respawn 1 -Award Points Zone on human respawn 1 so as to end the round The method I use is that the humans spawn in these chambers where they have to unblock the respawn point, which is either right in front of them and is only blocked by an explosive, or elsewhere and requires a switch. The downside to the switch is that it uses a lot of resources and can lag the game a lot. Teleporters and team-switching zones are used, so as to keep the "team but ffa scoring" that infection has. The zombies also have to reblock their spawn so others don't spawn there. The reason for these chambers and blocking is to ensure that the last guy who gets infected can respawn and end the round. I don't see any other way of ending it besides with the award points zone. Does anyone know of a more practical way to do this type of spawning? The way I have it is to essentially have the game be able to tell how many people there are so it can spawn just the right amount. It's not very practical as you can't join in session and suicides are always zombies. Scoring is also screwed up. For those who want more detail: I've made two somewhat different methods of spawning. Here they are: 1: There are 15 spawn chambers for the humans. The initial spawn has them destroy a fusion coil in front of them to free the respawn point. The problem is that they can just walk forward and teleport to the map regardless, so I have to trust that they won't break the game. The respawn point is positioned so that whoever respawns there can't walk backward into the teleporter and break the map that way as well. They have to destroy a switch that makes a block spawn and block their spawn. Once again, good faith is in play since I didn't want the game to lag too much. As for the zones, there's a general respawn zone over all the respawns with a lower spawn sequence number than the one centered on the 1st spawn (aka the one with the award points). If there's an extra spawn not blocked, or one too many blocked, the game will not end or end too soon, respectively. There's also respawn zones centered on the initial spawns of human 1 and the zombie(s), the former of which is to ensure there's a spawn for the last human. 2: Just like with the 1st one, there are 15 spawn chambers. The fusion coil has been replaced with a switch that unlocks the door in front of them. This also frees up the respective respawn point. The respawn zones are also the same as was described above. Respawning has the exact same format in this case as initial spawning. This ensures no one can break the game, but it also takes up a lot more with lag and resources. 45 bombs spawned in just for the switches that destroy. Not helping is that the switches don't work with explosives, so you're down to vehicles and turrets. It cripples your budget. Method 1 is less costly but easily breakable. Method 2 is very hard to break but more costly. Can anyone help me figure out a middle ground? I will also post screenshots of the chambers if people need them.
-
Download: All objects are invincible. Players in the cyan team will spawn as monitors.
-
Here's another long over due tutorial, this time on making trait zones. This was written with an earlier version than 5040. You may or may not need to change the widget number depending on if your gametype already uses Widget0. It is also worth noting that only 4 traits can be shown within the gametype's options. 1. Add this to the StringTable: <String name="Alpha Traits"> <English>[Alpha: 0] Trait Zone Traits</English> <Japanese>[Alpha: 0] 形質ゾーンの特徴</Japanese> <German>[Alpha: 0] Merkmal Zone Merkmale</German> <French>[Alpha: 0] Caractéristiques du caractère zone</French> <Spanish>[Alpha: 0] Rasgos de la zona de rasgo</Spanish> <Mexican>[Alpha: 0] Rasgos de la zona de rasgo</Mexican> <Italian>[Alpha: 0] Tratti di zona del tratto</Italian> <Korean>[Alpha: 0] 기능 영역 기능</Korean> <ChineseTrad>[Alpha: 0] 功能區功能</ChineseTrad> <Portuguese>[Alpha: 0] Traços da área recursos</Portuguese> </String> <String name="Bravo Traits"> <English>[Bravo: 1] Trait Zone Traits</English> <Japanese>[Bravo: 1] 形質ゾーンの特徴</Japanese> <German>[Bravo: 1] Merkmal Zone Merkmale</German> <French>[Bravo: 1] Caractéristiques du caractère zone</French> <Spanish>[Bravo: 1] Rasgos de la zona de rasgo</Spanish> <Mexican>[Bravo: 1] Rasgos de la zona de rasgo</Mexican> <Italian>[Bravo: 1] Tratti di zona del tratto</Italian> <Korean>[Bravo: 1] 기능 영역 기능</Korean> <ChineseTrad>[Bravo: 1] 功能區功能</ChineseTrad> <Portuguese>[Bravo: 1] Traços da área recursos</Portuguese> </String> <String name="Trait Zone Desc"> <English>Traits applied to players within a Trait Zone.</English> <Japanese>形質ゾーン内のプレーヤーに適用される特性。</Japanese> <German>Merkmale, die auf Spieler innerhalb einer Trait-Zone angewendet.</German> <French>Caractéristiques appliquées aux joueurs au sein d'une Zone de Trait des traits.</French> <Spanish>Rasgos aplicados a los jugadores dentro de una zona de rasgo.</Spanish> <Mexican>Rasgos aplicados a los jugadores dentro de una zona de rasgo.</Mexican> <Italian>Elementi applicati ai giocatori all'interno di una zona caratteristica</Italian> <Korean>특성 특성 영역 내에서 플레이어에 게 적용 합니다.</Korean> <ChineseTrad>應用於球員特質區域內的性狀。</ChineseTrad> <Portuguese>Traços aplicados a jogadores dentro de uma zona de traço.</Portuguese> </String> <String name="Traits Applied"> <English>Traits Applied</English> <Japanese>適用の特徴</Japanese> <German>Merkmale Angewendet</German> <French>Appliquée des traits</French> <Spanish>Rasgos Aplicados</Spanish> <Mexican>Rasgos Aplicados</Mexican> <Italian>Tratti Applicati</Italian> <Korean>특성 적용</Korean> <ChineseTrad>應用特性</ChineseTrad> <Portuguese>Traços Aplicados</Portuguese> </String>2. Add this to the PlayerTraits: <entry nameIndex="Alpha Traits" descIndex="Trait Zone Desc" name="Alpha Trait Zone" /> <entry nameIndex="Bravo Traits" descIndex="Trait Zone Desc" name="Bravo Trait Zone" /> 3. Add this to the HudWidgets: <Widget position="4" name="Widget0" /> 4. Add this to the ObjectFilters: <Filter labelIndex="trait_zone" name="trait_zone"></Filter>5. Add this to the Triggers: <Trigger execMode="OnEachPlayer" name="TriggerWidgets"> <Elements> <E type="Action" name="WidgetSetText"> <Param type="Widget">Widget0</Param> <Param type="Tokens2" stringIndex="Traits Applied"></Param> </E> <E type="Action" name="WidgetSetPlayerVisibility"> <Param type="Widget">Widget0</Param> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="Bool">False</Param> </E> </Elements> </Trigger> <Trigger execMode="OnObjectFilter" name="TriggerTraitZone" objectFilter="trait_zone"> <Elements> <E type="Action" name="ObjectSetUnknownFilter"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="EntityFilter" filterType="Any" /> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnEachPlayer" name="TriggerTraitZone_Sub1"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Team" varRefType="Object.OwnerTeam" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Team" varRefType="Player.OwnerTeam" dataType="Iterator.Player" /> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Team" varRefType="Object.OwnerTeam" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Team" varRefType="ExplicitTeamType" dataType="TeamNeutral" /> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="ObjectIsInBoundary" unionGroupID="-2"> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player"></Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="TriggerTraitZone_Sub1_Sub1"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="ApplyPlayerTraits"> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player"></Param> <Param type="PlayerTraitsReference">Alpha Trait Zone</Param> </E> <E type="Action" name="WidgetSetPlayerVisibility"> <Param type="Widget">Widget0</Param> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="Bool">True</Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="TriggerTraitZone_Sub1_Sub2"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="ApplyPlayerTraits"> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player"></Param> <Param type="PlayerTraitsReference">Bravo Trait Zone</Param> </E> <E type="Action" name="WidgetSetPlayerVisibility"> <Param type="Widget">Widget0</Param> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="Bool">True</Param> </E> </Elements> </T> </Param> </E> </Elements> </T> </Param> </E> </Elements> </Trigger>
-
Please note that this tutorial is not written using the newest version of KSoft but the old repack version. This tutorial is long overdue, but here it goes. If you would like to force someone's biped to a monitor in Halo Reach, simply add the following PlayerObject and Trigger. 1. Add PlayerObject0 to Objects under PlayerVariables <PlayerVariables> <Objects> <var networkState="HighPriority" name="PlayerObject0" /> </Objects> </PlayerVariables>2. Add this trigger under Triggers <Trigger execMode="OnEachPlayer" name="TriggerMonitor"> <Elements> <E type="Condition" name="ObjectIsSameType" unionGroupID="-2"> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player"></Param> <Param type="ObjectTypeIndex">spartan</Param> </E> <E type="Condition" name="ObjectIsSameType" unionGroupID="-3"> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player"></Param> <Param type="ObjectTypeIndex">elite</Param> </E> <E type="Action" name="CreateObject"> <Param type="ObjectTypeIndex">monitor</Param> <Param type="ObjectReference" varRefType="Player.ObjectVar" dataType="Iterator.Player">PlayerObject0</Param> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player"></Param> <Param type="ObjectFilterIndex">NONE</Param> <Param type="CreateObjectFlags">0</Param> <Param type="UInt24">7</Param> <Param type="NameIndex">NONE</Param> </E> <E type="Action" name="DeleteObject"> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player"></Param> </E> <E type="Action" name="PlayerSetUnit"> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player"></Param> <Param type="ObjectReference" varRefType="Player.ObjectVar" dataType="Iterator.Player">PlayerObject0</Param> </E> </Elements>
-
I have seen how useful Teancum's resource folder was to me when he released it, and I also know that it can be a pain to get a good collection of gametypes for reference. So here is my entire Reference Folder for use by anyone (except I am not retiring) It has 47 gametypes, all of the useful WumboScript Viewer things, and misc KSoft stuff that is very helpful to have at-hand So here ya are fellow modders. Reference Folder
-
Please note that this tutorial is not written using the newest version of KSoft but the old repack version, although should work with .5040 also. Explanation courtesy of OrangeMohawk: "Set the "scale" object filter on the items you want affected. The scale percentage will be determined by 10 times the spawn sequence number plus 100." So if you set the spawn sequence to 1 the object will be 110% it's original size while a spawn sequence of -1 will give give you an object 90% it's original size. A spawn sequence of ten will create an object twice it's original size. It is also important to note, as FreedTerror mentioned, object scaling ingame works best on objects with normal physics. "If you want to make an object float and scale to work, set the object to phased or fixed then without grabbing the object set the physics to normal. Depending on the object, it should stay in place and scale should work." Now object scaling is relatively simple, but I believe that it is important to have a standard scaling system; here is what I use in my newest gametypes. 1. Add this string under Strings <String name="scale"> <String>scale</String> </String>2. Add scale under ObjectFilters <ObjectFilters> <Filter labelIndex="scale" name="scale" /> </ObjectFilters>3. Add ObjectNumeric0 to Numeric under ObjectVariables <ObjectVariables> <Numeric> <Var name="ObjectNumeric0" varRefType="Int16">0</Var> </Numeric> </ObjectVariables>4. Add the following trigger to Triggers <Trigger execMode="OnObjectFilter" name="TriggerScale" objectFilter="scale"> <Elements> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object"></Param> <Param type="OperationType">Set</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">10</Param> <Param type="OperationType">Multiply</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">100</Param> <Param type="OperationType">Add</Param> </E> <E type="Action" name="ObjectScale"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="CustomReference" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">-9</Param> <Param type="ComparisonType">LessThan</Param> </E> <E type="Action" name="ObjectScale"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="CustomReference" varRefType="Int16">1</Param> </E> </Elements> </Trigger>
-
This is the Halo 4 version of Grenade Regeneration for Reach that I posted last night. This uses the same logic as Reach's Grenade Regen, but we've got a bit more stuff to work with in Halo 4 (16 entries for a UDF, and Pulse grenades in this case), so it's just a bit different here. Add these to the StringTable (Skip "Disabled" if your gametype already has it): <String name="Disabled"> <String>Disabled</String> </String> <String name="Grenade Regen Type"> <String>Grenade Regen Type</String> </String> <String name="Which grenades will be effected with Grenade Regeneration"> <String>Which grenades will be effected with Grenade Regeneration</String> </String> <String name="Grenade Regen Time"> <String>Grenade Regen Time</String> </String> <String name="How long it takes for grenades to regenerate."> <String>How long it takes for grenades to regenerate.</String> </String> <String name="One Frag"> <String>One Frag</String> </String> <String name="One Plasma"> <String>One Plasma</String> </String> <String name="One Pulse"> <String>One Pulse</String> </String> <String name="One Frag, One Plasma"> <String>One Frag, One Plasma</String> </String> <String name="One Frag, One Pulse"> <String>One Frag, One Pulse</String> </String> <String name="One Plasma, One Pulse"> <String>One Plasma, One Pulse</String> </String> <String name="One of Each"> <String>One of Each</String> </String> <String name="Instant"> <String>Instant</String> </String> <String name="One Second"> <String>One Second</String> </String> <String name="Two Seconds"> <String>Two Seconds</String> </String> <String name="Three Seconds"> <String>Three Seconds</String> </String> <String name="Four Seconds"> <String>Four Seconds</String> </String> <String name="Five Seconds"> <String>Five Seconds</String> </String> <String name="Six Seconds"> <String>Six Seconds</String> </String> <String name="Seven Seconds"> <String>Seven Seconds</String> </String> <String name="Eight Seconds"> <String>Eight Seconds</String> </String> <String name="Nine Seconds"> <String>Nine Seconds</String> </String> <String name="Ten Seconds"> <String>Ten Seconds</String> </String> <String name="Fifteen Seconds"> <String>Fifteen Seconds</String> </String> <String name="Twenty Seconds"> <String>Twenty Seconds</String> </String> <String name="Thirty Seconds"> <String>Thirty Seconds</String> </String> <String name="One Minute"> <String>One Minute</String> </String>Add these to your UserDefinedOptions (Replacing String6 with your gametype's blank string): <entry nameIndex="Grenade Regen Type" descIndex="Which grenades will be effected with Grenade Regeneration" name="Grenade Regen Type" valueIndex="0"> <Values defaultIndex="0"> <entry nameIndex="Disabled" descIndex="String6" value="0" /> <entry nameIndex="One Frag" descIndex="String6" value="1" /> <entry nameIndex="One Plasma" descIndex="String6" value="2" /> <entry nameIndex="One Pulse" descIndex="String6" value="3" /> <entry nameIndex="One Frag, One Plasma" descIndex="String6" value="4" /> <entry nameIndex="One Frag, One Pulse" descIndex="String6" value="5" /> <entry nameIndex="One Plasma, One Pulse" descIndex="String6" value="6" /> <entry nameIndex="One of Each" descIndex="String6" value="7" /> </Values> </entry> <entry nameIndex="Grenade Regen Time" descIndex="How long it takes for grenades to regenerate." name="Grenade Regen Time" valueIndex="0"> <Values defaultIndex="0"> <entry nameIndex="Instant" descIndex="String6" value="0" /> <entry nameIndex="One Second" descIndex="String6" value="1" /> <entry nameIndex="Two Seconds" descIndex="String6" value="2" /> <entry nameIndex="Three Seconds" descIndex="String6" value="3" /> <entry nameIndex="Four Seconds" descIndex="String6" value="4" /> <entry nameIndex="Five Seconds" descIndex="String6" value="5" /> <entry nameIndex="Six Seconds" descIndex="String6" value="6" /> <entry nameIndex="Seven Seconds" descIndex="String6" value="7" /> <entry nameIndex="Eight Seconds" descIndex="String6" value="8" /> <entry nameIndex="Nine Seconds" descIndex="String6" value="9" /> <entry nameIndex="Ten Seconds" descIndex="String6" value="10" /> <entry nameIndex="Fifteen Seconds" descIndex="String6" value="15" /> <entry nameIndex="Twenty Seconds" descIndex="String6" value="20" /> <entry nameIndex="Thirty Seconds" descIndex="String6" value="30" /> <entry nameIndex="One Minute" descIndex="String6" value="60" /> </Values> </entry>Under PlayerVariables > Timers, add a new timer (in my example and in the code, it's called PlayerTimer0) <Var name="PlayerTimer0" varRefType="Int16">0</Var>Add this trigger to your Triggers (This is in ksoft 5040 code, 4912 is at the bottom): <Trigger execMode="OnEachPlayer" name="GrenadeRegen"> <Elements> <E type="Action" name="TimerRateSet"> <Param type="TimerReference" varRefType="Player.TimerVar" dataType="Iterator.Player">PlayerTimer0</Param> <Param type="TimerRate">Minus100p</Param> </E> <E type="Condition" name="TimerIsZero"> <Param type="TimerReference" varRefType="Player.TimerVar" dataType="Iterator.Player">PlayerTimer0</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="GrenadeRegen_Frag"> <Elements> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">4</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">5</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">7</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="PlayerAdjustGrenades"> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="GrenadeType">Frag</Param> <Param type="OperationType">Add</Param> <Param type="CustomReference" varRefType="Int16">1</Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="GrenadeRegen_Plasma"> <Elements> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">2</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">4</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">6</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">7</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="PlayerAdjustGrenades"> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="GrenadeType">Plasma</Param> <Param type="OperationType">Add</Param> <Param type="CustomReference" varRefType="Int16">1</Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="GrenadeRegen_Pulse"> <Elements> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">3</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">5</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">6</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">7</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="PlayerAdjustGrenades"> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="GrenadeType">Pulse</Param> <Param type="OperationType">Add</Param> <Param type="CustomReference" varRefType="Int16">1</Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Timer" varRefType="Player.TimerVar" dataType="Iterator.Player">PlayerTimer0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Time</Param> <Param type="OperationType">Set</Param> </E> </Elements> </Trigger>And that's it! In Halo 4, the maximum count that the grenades will regenerate to is 2, rather than 4 as in Reach. Example: Slayer (Had to remove a couple UDF's to make enough room) Here's the trigger in ksoft 4912
-
I think that the switch and switch_door labels that I've added to the latest version of Mythic Slayer are pretty cool and hopefully you think so as well. Here should be all of the code used to make it work for your viewing desire. For those not aware, here is a crappy description: Switch Label Does not work on explosives. if the spawn sequence is negative it will have a waypoint and will spawn a fusion coil contraption to blow up. Switch_Door Label when an object with the switch label is destroyed and has a spawn sequence with the same absolute value; a positive spawn sequence will disappear. It will explode if less than 50. a negative spawn sequence will appear. a spawn sequence of negative 50 or less will disappear the next time the switch is destroyed a spawn sequence of positive 50 or more will reappear the next time the switch is destroyed Basically when the switch is destroyed something will happen to the switch label. As usual, this tutorial is written using an earlier version than .5040 so if you're using the newer version you would have to change some things such as the Uint24's. And of course you can some variables around if you've already used them for some reason but most of them are just used as scratch variables anyways. 1. Add the following strings to the string table like so: <StringTable baseNameIndex="BaseName"> <String name="switch"> <String>switch</String> </String> <String name="switch_door"> <String>switch_door</String> </String> <String name="migration"> <String>migration</String> </String> </StringTable> 2. Add the following object filters: <ObjectFilters> <Filter labelIndex="switch" name="switch" /> <Filter labelIndex="switch_door" name="switch_door" /> <Filter labelIndex="migration" name="migration"></Filter> </ObjectFilters>3. Add the following object variables if you have not already: <GlobalVariables> <Numeric> <Var name="GlobalNumeric2" varRefType="Int16">1</Var> <Var name="GlobalNumeric4" varRefType="Int16">0</Var> </Numeric> <Objects> <var name="GlobalObject0" /> <var name="GlobalObject1" /> <var name="GlobalObject2"></var> <var name="GlobalObject6" /> </Objects> </GlobalVariables> <ObjectVariables> <Numeric> <Var name="ObjectNumeric0" varRefType="Int16">0</Var> <Var networkState="HighPriority" name="ObjectNumeric1" varRefType="Int16">0</Var> </Numeric> <Objects> <var name="ObjectObject0" /> </Objects> </ObjectVariables>4. Add the following under an ObjectDeathEvent trigger like so: <Trigger trigType="ObjectDeathEvent" name="ObjectDeathEventTrigger"> <Elements> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="GlobalObject1"></Param> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="_ObjectType13"></Param> <Param type="OperationType">Set</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="ObjectDeathEventTrigger_SubSwitch"> <Elements> <E type="Condition" name="ObjectMatchesFilter" unionGroupID="-2"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="_ObjectType13" /> <Param type="ObjectFilterIndex">switch</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="_ObjectType13">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="OperationType">Set</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Global.NumericVar">GlobalNumeric4</Param> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="_ObjectType13"></Param> <Param type="OperationType">Set</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Global.NumericVar">GlobalNumeric4</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">-1</Param> <Param type="OperationType">Multiply</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="TriggerSwitchDoor_Sub1" objectFilter="switch_door"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="GlobalObject1" /> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object"></Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Global.NumericVar">GlobalNumeric4</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="TriggerSwitch_Sub1Delete"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">-1</Param> <Param type="ComparisonType">GreaterThan</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">50</Param> <Param type="ComparisonType">LessThan</Param> </E> <E type="Action" name="DetachObject"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> </E> <E type="Action" name="ObjectKillInstantly"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="Bool">False</Param> </E> <E type="Action" name="ObjectKillInstantly"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="Bool">False</Param> </E> <E type="Action" name="DeleteObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> </E> </Elements> </T> </Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="TriggerSwitch_Sub50"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">49</Param> <Param type="ComparisonType">GreaterThan</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="TriggerSwitch_SubDisappear"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="OperationType">Set</Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="TriggerSwitch_SubAppear"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Object" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="NONE"></Param> <Param type="ComparisonType">NotEqual</Param> </E> <E type="Action" name="DetachObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> </E> <E type="Action" name="DeleteObject"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="OperationType">Set</Param> </E> </Elements> </T> </Param> </E> </Elements> </T> </Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object"></Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">LessThan</Param> </E> <E type="Action" name="DetachObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="TriggerSwitch_Sub1Delete"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object"></Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">-49</Param> <Param type="ComparisonType">LessThan</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="DeleteObject"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="OperationType">Set</Param> </E> </Elements> </T> </Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="ObjectDeathEventTrigger_Sub2"> <Elements> <E type="Condition" name="ObjectMatchesFilter" unionGroupID="-2"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="_ObjectType13" /> <Param type="ObjectFilterIndex">switch</Param> </E> <E type="Condition" name="ObjectMatchesFilter" unionGroupID="-3"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="_ObjectType13" /> <Param type="ObjectFilterIndex">switch</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="_ObjectType13">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="OperationType">Set</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnEachObject" name="TriggerCivilian_Sub1"> <Elements> <E type="Action" name="DistanceBetweenObjects"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject1" /> <Param type="CustomReference" varRefType="Global.NumericVar">GlobalNumeric2</Param> <Param type="Bool">False</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Global.NumericVar">GlobalNumeric2</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="ObjectKillInstantly"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="Bool">False</Param> </E> <E type="Condition" name="ObjectIsSameType" unionGroupID="-2"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="ObjectTypeIndex">area</Param> </E> <E type="Condition" name="ObjectIsSameType" unionGroupID="-3"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="ObjectTypeIndex">stand</Param> </E> <E type="Condition" name="ObjectIsSameType" unionGroupID="-3"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="ObjectTypeIndex">destination</Param> </E> <E type="Action" name="DeleteObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> </E> </Elements> </T> </Param> </E> </Elements> </T> </Param> </E>5. Add the following under a local trigger like so: <Trigger trigType="Local" name="LocalTrigger"> <Elements> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="TriggerSwitchDoor" objectFilter="switch_door"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Object" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="NONE"></Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="TriggerSwitchDoor_Positive"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">49</Param> <Param type="ComparisonType">GreaterThan</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="CreateObject"> <Param type="ObjectTypeIndex">area</Param> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="ObjectFilterIndex">migration</Param> <Param type="CreateObjectFlags">NeverGarbage</Param> <Param type="UInt24">0</Param> <Param type="NameIndex">NONE</Param> </E> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="UInt24">0</Param> <Param type="Bool">True</Param> </E> <E type="Action" name="DetachObject"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> </E> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="UInt24">0</Param> <Param type="Bool">True</Param> </E> </Elements> </T> </Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">LessThan</Param> </E> <E type="Action" name="CreateObject"> <Param type="ObjectTypeIndex">area</Param> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="ObjectFilterIndex">migration</Param> <Param type="CreateObjectFlags">NeverGarbage</Param> <Param type="UInt24">0</Param> <Param type="NameIndex">NONE</Param> </E> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="UInt24">0</Param> <Param type="Bool">True</Param> </E> <E type="Action" name="DetachObject"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> </E> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="UInt24">0</Param> <Param type="Bool">True</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="OperationType">Set</Param> </E> </Elements> </T> </Param> </E> </Elements> </Trigger>6. Add the following triggers like so: <Trigger execMode="OnObjectFilter" name="TriggerSwitch_Door" objectFilter="switch_door"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">-1</Param> <Param type="ComparisonType">GreaterThan</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">50</Param> <Param type="ComparisonType">LessThan</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Object" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="NONE"></Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="CreateObject"> <Param type="ObjectTypeIndex">bomb</Param> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="ObjectFilterIndex">NONE</Param> <Param type="CreateObjectFlags">0</Param> <Param type="UInt24">0</Param> <Param type="NameIndex">NONE</Param> </E> <E type="Action" name="ObjectScale"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="CustomReference" varRefType="Int16">1</Param> </E> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="UInt24">0</Param> <Param type="Bool">True</Param> </E> <E type="Action" name="ObjectSetInteractionFilter"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="EntityFilter" filterType="None" /> </E> </Elements> </Trigger> <Trigger execMode="OnObjectFilter" name="TriggerSwitch" objectFilter="switch"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="SpawnSequence" dataType="Iterator.Object" /> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">LessThan</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="TriggerSwitchDoor_Positive"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Object" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="NONE"></Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="ObjectScale"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="CustomReference" varRefType="Int16">1</Param> </E> <E type="Action" name="CreateObject"> <Param type="ObjectTypeIndex">stand</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject6"></Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="ObjectFilterIndex">migration</Param> <Param type="CreateObjectFlags">0</Param> <Param type="UInt24">0</Param> <Param type="NameIndex">NONE</Param> </E> <E type="Action" name="ObjectCopyRotation"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject6"></Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="Bool">True</Param> </E> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject6"></Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="UInt24">0</Param> <Param type="Bool">True</Param> </E> <E type="Action" name="DetachObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject6"></Param> </E> <E type="Action" name="CreateObject"> <Param type="ObjectTypeIndex">fusion_coil</Param> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="ObjectFilterIndex">migration</Param> <Param type="CreateObjectFlags">0</Param> <Param type="UInt24">0</Param> <Param type="NameIndex">NONE</Param> </E> <E type="Action" name="ObjectCopyRotation"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="Bool">True</Param> </E> <E type="Action" name="CreateObject"> <Param type="ObjectTypeIndex">land_mine</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject2"></Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="ObjectFilterIndex">migration</Param> <Param type="CreateObjectFlags">0</Param> <Param type="UInt24">0</Param> <Param type="NameIndex">NONE</Param> </E> <E type="Action" name="ObjectCopyRotation"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject2"></Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="Bool">True</Param> </E> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject2"></Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject6" /> <Param type="UInt24">4</Param> <Param type="Bool">True</Param> </E> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject2" /> <Param type="UInt24">248</Param> <Param type="Bool">True</Param> </E> <E type="Action" name="ObjectScale"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject2" /> <Param type="CustomReference" varRefType="Int16">55</Param> </E> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject6"></Param> <Param type="UInt24">2</Param> <Param type="Bool">True</Param> </E> <E type="Action" name="ObjectSetNavpointVisibility"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="EntityFilter" filterType="Any" /> </E> <E type="Action" name="ObjectSetNavpointIcon"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="NavpointIconData" navpointIconIndex="21"></Param> </E> <E type="Action" name="ObjectSetPriority"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="NetworkPriority">Low</Param> </E> <E type="Action" name="ObjectSetDistanceRange"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="CustomReference" varRefType="Int16">0</Param> <Param type="CustomReference" varRefType="Int16">2</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="OperationType">Set</Param> </E> <E type="Action" name="ObjectSetInteractionFilter"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="EntityFilter" filterType="None" /> </E> </Elements> </T> </Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Object" varRefType="Object.ObjectVar" dataType="Iterator.Object">ObjectObject0</Param> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="NONE"></Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="ObjectKillInstantly"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> <Param type="Bool">False</Param> </E> </Elements> </Trigger>7. You should probably also add this Host Migration trigger like so: <Trigger trigType="HostMigration" name="HostMigrationTrigger"> <Elements> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="TriggerMigration" objectFilter="migration"> <Elements> <E type="Action" name="DeleteObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object"></Param> </E> </Elements> </T> </Param> </E> </Elements> </Trigger> 8. And don't forget to add the following entry points at the bottom of it all: <EntryPoints> <ObjectDeathEvent>ObjectDeathEventTrigger</ObjectDeathEvent> <HostMigration>HostMigrationTrigger</HostMigration> <Local>LocalTrigger</Local> </EntryPoints>Alright hopefully I didn't forget anything.
-
KSoft.Tool 1. Find <ObjectFilters> and add to this element: <Filter labelIndex="attach_parent" name="attach_parent" /><Filter labelIndex="attach_child" name="attach_child" /> 2. Find <StringTable baseNameIndex="BaseName"> and add to this element: <String name="attach_parent"> <String>attach_parent</String></String><String name="attach_child"> <String>attach_child</String></String> 3. Go to the bottom of the XML file and add the following trigger at the end of the <Triggers> element. I added comments to help you understand the code better. <!-- Go through all objects with the attach_parent label --><Trigger execMode="OnObjectFilter" name="TriggerAttach" objectFilter="attach_parent"> <Elements> <!-- Store parent object reference to scratch variable 0 --> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="ObjectScratch0" /> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="OperationType">Set</Param> </E> <!-- Call a subroutine trigger --> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <!-- Go through all objects with the attach_child label --> <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="TriggerAttach_Subroutine15" objectFilter="attach_child"> <Elements> <!-- Check if the user data of the parent object and child object match --> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Unknown8" dataType="ObjectScratch0" /> <Param type="VarReference" varRefKind="Custom" varRefType="Unknown8" dataType="Iterator.Object" /> <Param type="ComparisonType">Equal</Param> </E> <!-- Attach child object to parent object --> <E type="Action" name="AttachObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" /> <Param type="UInt24">0</Param> <Param type="Bool">True</Param> </E> </Elements> </T> </Param> </E> </Elements></Trigger>WumboScript 1. Add standard labels attach_child and attach_parent. 2. Define the tick event if one does not exist. 3. Add the following code to the tick event. for each current_object0 in objects matching filters.attach_parent do temp_object0 = current_object0 for each current_object1 in objects matching filters.attach_child do if temp_object0.user_data = current_object1.user_data then object_attach_relative(current_object1, temp_object0, 0, true) end endend
-
I have been pouring over the forums trying to find out how to make all fusion coils have more health, but I never found a discussion that had a definitive solution. Through some trial and error I managed to figure out how to do it, and I figured I'd post what I did here in case anyone else has difficulty with it. Unfortunately this technique uses one of the ten object variables, so it isn't usable if one's gametype needs all of them. I tried to find ways around this (like analyzing the object's teleporter channel), but I couldn't get anything else to work. The code is below! ----------------------------------------------------------------- In your ObjectVariables, add or rename one of the values and set its default value to 0. Note that since 0 is the default value, if the object whose health you're changing dies and respawns, it will respawn with that variable's value being 0. ...<ObjectVariables> <Numeric> <Var networkState="HighPriority" name="ObjectNumeric0" varRefType="Int16">0</Var> <Var networkState="HighPriority" name="ObjectNumeric1" varRefType="Int16">0</Var> ... <Var networkState="HighPriority" name="ObjectHealthHasBeenSet" varRefType="Int16">0</Var> ... </Numeric> ...</ObjectVariables>...Next add a trigger that loops through every object each tick: ...<!-- Sets the health of a fusion coil (or whatever has been given the compcoil_coil label) when it spawns --><Trigger execMode="OnObjectFilter" name="CoilHealthTrigger1" objectFilter="compcoil_coil"> <Elements> <!-- Check the ObjectHealthHasBeenSet object variable, which is 0 by default --> <!-- If it is still zero, that means its health hasn't been changed yet --> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectHealthHasBeenSet</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">Equal</Param> </E> <!-- Set the coil's maximum health to be the value the user specified --> <E type="Action" name="ObjectModifyMaximumBodyVitality"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="OperationType">Set</Param> <Param type="CustomReference" varRefType="UserDefinedOption">Coil Health</Param> </E> <!-- Set the coil's current health to 100. What this does is make the coil have 100% health, --> <!-- which will be the user-specified amount of health since we changed the max (100%) health --> <E type="Action" name="ObjectModifyHealth"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="OperationType">Set</Param> <Param type="CustomReference" varRefType="Int16">100</Param> </E> <!-- Set the coil's ObjectHealthHasBeenSet variable to 1 so we know not to change its health again --> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectHealthHasBeenSet</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="OperationType">Set</Param> </E> </Elements></Trigger>...NOTE: This trigger uses an OnObjectFilter trigger to loop through all the objects that have the specific filter; you could just as effectively simply loop through all objects and check to see if that object is the type you want instead. And that's really all there is to it! It has worked for me with many types of explosives and vehicles thus far, though I haven't tested everything yet (notably I don't know if this works for Extraction pieces). For as simple as this ended up being, it certainly put me through my paces to figure this out, haha! Hopefully this will help someone down the road
-
back in 2008 2009 the good old h3 online days i used to have bunch of fun custom game maps like the garbage man or the left 4 dead zombie on foundry there was a bunch i was hoping some one could give me user map files being the file share in dead :/
-
OneBarrel/TwoBarrels: value0 = rounds per second minvalue1 = rounds per second maxvalue2 = spin up acceleration timevalue3 = spin up deceleration timevalue4 = shots per fire minvalue5 = shots per fire maxvalue6 = fire recovery timevalue7 = soft recovery fractionvalue8 = bloom deceleration timevalue9 = damage error minvalue10 = damage error maxvalue11 = base turning speedvalue12 = dynamic turning speed minvalue13 = dynamic turning speed maxvalue14 = projectile distribution anglevalue15 = projectile error angle minvalue16 = projectile error angle maxvalue17 = heat generated per roundvalue18 = charge percentage subtractionvalue19 = aoe core radiusvalue20 = damage lowervalue21 = damage upper minvalue22 = damage upper maxvalue23 = air damage range minvalue24 = air damage range maxvalue25 = buckshot accuracyvalue26 = buckshot spreadOneBarrelWeapons/TwoBarrelWeapons: value0 = heat recovery thresholdvalue1 = overheat thresholdvalue2 = heat loss per secondvalue3 = heat illuminationvalue4 = overheated heat loss per secondvalue5 = autoaim anglevalue6 = autoaim longvalue7 = autoaim shortvalue8 = autoaim safe radiusvalue9 = magnetism anglevalue10 = magnetism longvalue11 = magnetism shortvalue12 = magnetism safe radiusvalue13 = deviation angleAnd for reference sake, these are the corresponding tag offsets for Assembly to find base values. The first offset is in the main tag, and the second if any is for inside whatever block the first offset pointed to.
-
I have a handy dandy file with all of my most used enums ready with all of the repetitive syntax already filled in so I rarely have to type more than a few words when writing for KSoft. I think I'll make this available to all who still write gametypes (You lovely people) and things can be made much faster. So here is the dropbox link for the spicy Italiano copy Pasta file! https://www.dropbox.com/s/y4ql8dskm1zhnau/Enums.xml Enjoy
-
I have been asked enough if it's possible to create team-based kill zones, so I decided to just write it up really fast so that if anyone needs, it's right here and ready to implement. Put this in the string table: <String name="team_kill"> <String>team_kill</String> </String>Put this in Object Filters: <ObjectFilters> <Filter labelIndex="team_kill" name="team_kill" /> </ObjectFilters>...and put this trigger, well, in the triggers: <Trigger execMode="OnObjectFilter" objectFilter="team_kill"> <Elements> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="PlayerScratch0" /> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="NONE" /> <Param type="OperationType">Set</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnEachPlayer"> <Elements> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Team" varRefType="Player.OwnerTeam" dataType="Iterator.Player" /> <Param type="VarReference" varRefKind="Team" varRefType="Object.OwnerTeam" dataType="Iterator.Object" /> <Param type="ComparisonType">NotEqual</Param> </E> <E type="Condition" name="ObjectIsInBoundary"> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player" /> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="PlayerScratch0" /> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="OperationType">Set</Param> </E> </Elements> </T> </Param> </E> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="PlayerScratch0" /> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="NONE" /> <Param type="ComparisonType">NotEqual</Param> </E> <E type="Action" name="ObjectKillInstantly"> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="PlayerScratch0" /> <Param type="Bool">False</Param> </E> </Elements> </Trigger>This is untested so tell me if it doesn't work. It certainly should. How it should work is it will kill anyone who isn't on the same team as it, and is in the boundary.
-
Enhanced Killfeed This mod displays the tool of destruction in the killfeed. Add these strings to the string table.If you don't have an IncidentTrigger, then add one.Add the following to the IncidentTrigger's <Elements> tag
-
Didn't see these on the site anywhere, so I figured I'd post them here for reference. Not Pictured: Decimal (as ksoft uses): Hex (actual byte values):
-
Sup guys! In this tutorial, I'll be showing everyone how to implement Bro, or "Proximity" traits into other gametypes. Bro Traits were first seen in Halo 3's VIP mode, which featured an option that gave allies traits if they were near the VIP. They were not featured in Reach as VIP was "removed" (A leaked and broken version exists today). Kornman brought them to Halo 4 and MegaloScript (They weren't even in the leaked Reach gametype) in his Halomods CTF gametype, and they are also in Hostage Rescue as well for allies that are escorting the Hostage. So how do we add them in? It's actually pretty easy. I decided to show the complete process. We need... -Strings -A Bro Radius option -The actual coding for bro traits -A new traitset to be applied to bros -Some visual indicator that you have them To start off, here's the strings... <---Name of UserDefinedOption---> <String name="Bro Radius"> <String>Bro Radius</String> </String> <---Description for UserDefinedOption---> <String name="Radius around objective player at which Bro Traits apply"> <String>Radius around objective player at which Bro Traits apply</String> </String> <---values for UserDefinedOption. They are translated into other languages as well and numbered, so if your gametype has the numbers, change them---> <String name="String71"> <English>Disabled</English> <Japanese>オフ</Japanese> <German>Deaktiviert</German> <French>Désactivé(e)</French> <Spanish>Desact.</Spanish> <Mexican>Desact.</Mexican> <Italian>No</Italian> <Korean>끄기</Korean> <ChineseTrad>停用</ChineseTrad> <ChineseSimp>Disabled</ChineseSimp> <Portuguese>Desat.</Portuguese> <Polish>Wyłączone</Polish> <Russian>Откл.</Russian> <Danish>Deaktiveret</Danish> <Finnish>Pois käytöstä</Finnish> <Dutch>Uitgeschakeld</Dutch> <Norwegian>Deaktivert</Norwegian> </String> <String name="String85"> <English>3 Units</English> <Japanese>3号機</Japanese> <German>3 Stück</German> <French>3 unités</French> <Spanish>3 Unidades</Spanish> <Mexican>3 Unidades</Mexican> <Italian>3 Unità</Italian> <Korean>3 대</Korean> <ChineseTrad>3單位</ChineseTrad> <ChineseSimp>3单位</ChineseSimp> <Portuguese>3 unidades</Portuguese> <Polish>3 Jednostki</Polish> <Russian>3 единицы</Russian> <Danish>3 enheder</Danish> <Finnish>3 Kpl</Finnish> <Dutch>3 Eenheden</Dutch> <Norwegian>3 stk</Norwegian> </String> <String name="String86"> <English>5 Units</English> <Japanese>5号機</Japanese> <German>5 Stück</German> <French>5 unités</French> <Spanish>5 Unidades</Spanish> <Mexican>5 Unidades</Mexican> <Italian>5 Unità</Italian> <Korean>5 대</Korean> <ChineseTrad>5單位</ChineseTrad> <ChineseSimp>5单位</ChineseSimp> <Portuguese>5 unidades</Portuguese> <Polish>5 Jednostki</Polish> <Russian>5 единицы</Russian> <Danish>5 enheder</Danish> <Finnish>5 Kpl</Finnish> <Dutch>5 Eenheden</Dutch> <Norwegian>5 stk</Norwegian> </String> <String name="String87"> <English>8 Units</English> <Japanese>8号機</Japanese> <German>8 Stück</German> <French>8 unités</French> <Spanish>8 Unidades</Spanish> <Mexican>8 Unidades</Mexican> <Italian>8 Unità</Italian> <Korean>8 대</Korean> <ChineseTrad>8單位</ChineseTrad> <ChineseSimp>8单位</ChineseSimp> <Portuguese>8 unidades</Portuguese> <Polish>8 Jednostki</Polish> <Russian>8 единицы</Russian> <Danish>8 enheder</Danish> <Finnish>8 Kpl</Finnish> <Dutch>8 Eenheden</Dutch> <Norwegian>8 stk</Norwegian> </String> <String name="String88"> <English>10 Units</English> <Japanese>10号機</Japanese> <German>10 Stück</German> <French>10 unités</French> <Spanish>10 Unidades</Spanish> <Mexican>10 Unidades</Mexican> <Italian>10 Unità</Italian> <Korean>10 대</Korean> <ChineseTrad>10單位</ChineseTrad> <ChineseSimp>10单位</ChineseSimp> <Portuguese>10 unidades</Portuguese> <Polish>10 Jednostki</Polish> <Russian>10 единицы</Russian> <Danish>10 enheder</Danish> <Finnish>10 Kpl</Finnish> <Dutch>10 Eenheden</Dutch> <Norwegian>10 stk</Norwegian> </String> <String name="String89"> <English>15 Units</English> <Japanese>15号機</Japanese> <German>15 Stück</German> <French>15 unités</French> <Spanish>15 Unidades</Spanish> <Mexican>15 Unidades</Mexican> <Italian>15 Unità</Italian> <Korean>15 대</Korean> <ChineseTrad>15單位</ChineseTrad> <ChineseSimp>15单位</ChineseSimp> <Portuguese>15 unidades</Portuguese> <Polish>15 Jednostki</Polish> <Russian>15 единицы</Russian> <Danish>15 enheder</Danish> <Finnish>15 Kpl</Finnish> <Dutch>15 Eenheden</Dutch> <Norwegian>15 stk</Norwegian> </String> <String name="String90"> <English>20 Units</English> <Japanese>20号機</Japanese> <German>20 Stück</German> <French>20 unités</French> <Spanish>20 Unidades</Spanish> <Mexican>20 Unidades</Mexican> <Italian>20 Unità</Italian> <Korean>20 대</Korean> <ChineseTrad>20單位</ChineseTrad> <ChineseSimp>20单位</ChineseSimp> <Portuguese>20 unidades</Portuguese> <Polish>20 Jednostki</Polish> <Russian>20 единицы</Russian> <Danish>20 enheder</Danish> <Finnish>20 Kpl</Finnish> <Dutch>20 Eenheden</Dutch> <Norwegian>20 stk</Norwegian> </String> <String name="String91"> <English>25 Units</English> <Japanese>25号機</Japanese> <German>25 Stück</German> <French>25 unités</French> <Spanish>25 Unidades</Spanish> <Mexican>25 Unidades</Mexican> <Italian>25 Unità</Italian> <Korean>25 대</Korean> <ChineseTrad>25單位</ChineseTrad> <ChineseSimp>25单位</ChineseSimp> <Portuguese>25 unidades</Portuguese> <Polish>25 Jednostki</Polish> <Russian>25 единицы</Russian> <Danish>25 enheder</Danish> <Finnish>25 Kpl</Finnish> <Dutch>25 Eenheden</Dutch> <Norwegian>25 stk</Norwegian> </String> <String name="String92"> <English>30 Units</English> <Japanese>30号機</Japanese> <German>30 Stück</German> <French>30 unités</French> <Spanish>30 Unidades</Spanish> <Mexican>30 Unidades</Mexican> <Italian>30 Unità</Italian> <Korean>30 대</Korean> <ChineseTrad>30單位</ChineseTrad> <ChineseSimp>30单位</ChineseSimp> <Portuguese>30 unidades</Portuguese> <Polish>30 Jednostki</Polish> <Russian>30 единицы</Russian> <Danish>30 enheder</Danish> <Finnish>30 Kpl</Finnish> <Dutch>30 Eenheden</Dutch> <Norwegian>30 stk</Norwegian> </String> <String name="String93"> <English>40 Units</English> <Japanese>40号機</Japanese> <German>40 Stück</German> <French>40 unités</French> <Spanish>40 Unidades</Spanish> <Mexican>40 Unidades</Mexican> <Italian>40 Unità</Italian> <Korean>40 대</Korean> <ChineseTrad>40單位</ChineseTrad> <ChineseSimp>40单位</ChineseSimp> <Portuguese>40 unidades</Portuguese> <Polish>40 Jednostki</Polish> <Russian>40 единицы</Russian> <Danish>40 enheder</Danish> <Finnish>40 Kpl</Finnish> <Dutch>40 Eenheden</Dutch> <Norwegian>40 stk</Norwegian> </String> <String name="String94"> <English>55 Units</English> <Japanese>55号機</Japanese> <German>55 Stück</German> <French>55 unités</French> <Spanish>55 Unidades</Spanish> <Mexican>55 Unidades</Mexican> <Italian>55 Unità</Italian> <Korean>55 대</Korean> <ChineseTrad>55單位</ChineseTrad> <ChineseSimp>55单位</ChineseSimp> <Portuguese>55 unidades</Portuguese> <Polish>55 Jednostki</Polish> <Russian>55 единицы</Russian> <Danish>55 enheder</Danish> <Finnish>55 Kpl</Finnish> <Dutch>55 Eenheden</Dutch> <Norwegian>55 stk</Norwegian> </String> <String name="String95"> <English>70 Units</English> <Japanese>70号機</Japanese> <German>70 Stück</German> <French>70 unités</French> <Spanish>70 Unidades</Spanish> <Mexican>70 Unidades</Mexican> <Italian>70 Unità</Italian> <Korean>70 대</Korean> <ChineseTrad>70單位</ChineseTrad> <ChineseSimp>70单位</ChineseSimp> <Portuguese>70 unidades</Portuguese> <Polish>70 Jednostki</Polish> <Russian>70 единицы</Russian> <Danish>70 enheder</Danish> <Finnish>70 Kpl</Finnish> <Dutch>70 Eenheden</Dutch> <Norwegian>70 stk</Norwegian> </String> <String name="String96"> <English>100 Units</English> <Japanese>100号機</Japanese> <German>100 Stück</German> <French>100 unités</French> <Spanish>100 Unidades</Spanish> <Mexican>100 Unidades</Mexican> <Italian>100 Unità</Italian> <Korean>100 대</Korean> <ChineseTrad>100單位</ChineseTrad> <ChineseSimp>100单位</ChineseSimp> <Portuguese>100 unidades</Portuguese> <Polish>100 Jednostki</Polish> <Russian>100 единицы</Russian> <Danish>100 enheder</Danish> <Finnish>100 Kpl</Finnish> <Dutch>100 Eenheden</Dutch> <Norwegian>100 stk</Norwegian> </String> <String name="String97"> <English>150 Units</English> <Japanese>150号機</Japanese> <German>150 Stück</German> <French>150 unités</French> <Spanish>150 Unidades</Spanish> <Mexican>150 Unidades</Mexican> <Italian>150 Unità</Italian> <Korean>150 대</Korean> <ChineseTrad>150單位</ChineseTrad> <ChineseSimp>150单位</ChineseSimp> <Portuguese>150 unidades</Portuguese> <Polish>150 Jednostki</Polish> <Russian>150 единицы</Russian> <Danish>150 enheder</Danish> <Finnish>150 Kpl</Finnish> <Dutch>150 Eenheden</Dutch> <Norwegian>150 stk</Norwegian> </String> <---Name of Traitset---> <String name="Bro Traits"> <String>Bro Traits</String> </String> <---Description of Traitset---> <String name="Traits applied to bros of the objective player within the bro radius."> <String>Traits applied to bros of the objective player within the bro radius.</String> </String>Now for the UserDefinedOption <---All these are numbered to specific strings, so if your gametype has those numbers, change them---> <entry nameIndex="Bro Radius" descIndex="Radius around objective player at which Bro Traits apply" name="Bro Radius" valueIndex="4"> <Values defaultIndex="3"> <entry nameIndex="String71" descIndex="String15" value="0" /> <entry nameIndex="String85" descIndex="String15" value="3" /> <entry nameIndex="String86" descIndex="String15" value="5" /> <entry nameIndex="String87" descIndex="String15" value="8" /> <entry nameIndex="String88" descIndex="String15" value="10" /> <entry nameIndex="String89" descIndex="String15" value="15" /> <entry nameIndex="String90" descIndex="String15" value="20" /> <entry nameIndex="String91" descIndex="String15" value="25" /> <entry nameIndex="String92" descIndex="String15" value="30" /> <entry nameIndex="String93" descIndex="String15" value="40" /> <entry nameIndex="String94" descIndex="String15" value="55" /> <entry nameIndex="String95" descIndex="String15" value="70" /> <entry nameIndex="String96" descIndex="String15" value="100" /> <entry nameIndex="String97" descIndex="String15" value="150" /> </Values> </entry>And the traitset to be applied <entry nameIndex="Bro Traits" descIndex="Traits applied to bros of the objective player within the bro radius." name="Bro Traits" />Finally, the meat of it all! The scripting! Add a boundary to the objective player (I found searching for the HUD banner to be an easy way to know it's placement). Change "Iterator.Player" to whoever the HUD banner is applied to if it is someone else To apply the HUD banner, the Bro Boundary, and other Objective Carrier Traits, gametypes apply the traits to all players BUT will check if the player has met certain conditions. So Iterator.Player should ALWAYS work. <E type="Action" name="ObjectSetBoundary"> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player" /> <Param type="Shape" shapeType="Sphere"> <Radius varRefType="UserDefinedOption">Bro Radius</Radius> </Param> </E>Now we add the part that applies the bro traits. This is assuming that the Objective Carrier was already set to PlayerScratch0 in the same Trigger. <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnEachPlayer"> <Elements> <---If a player is on the same team as the objective player---> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Team" varRefType="Player.OwnerTeam" dataType="Iterator.Player" /> <Param type="VarReference" varRefKind="Team" varRefType="Player.OwnerTeam" dataType="PlayerScratch0" /> <Param type="ComparisonType">Equal</Param> </E> <---AND he is not an Objective Player---> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="PlayerScratch0" /> <Param type="ComparisonType">NotEqual</Param> </E> <---AND he is in the boundary we made earlier (Check if that matches up)---> <E type="Condition" name="ObjectIsInBoundary"> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="Iterator.Player" /> <Param type="ObjectReference" varRefType="Player.SlaveObject" dataType="PlayerScratch0" /> </E> <---Apply these traits---> <E type="Action" name="ApplyPlayerTraits"> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="PlayerTraitsReference">Bro Traits</Param> </E> </Elements> </T> </Param> </E>Are done yet? Technically, but it is highly recommended to add some kind of notification telling the player that they're a bro. You can either use a small text widget or a larger one (experimental) Small 1. Add all strings as we did above 2. Add this to the HUDWidgets database. If you have a widget with the same number, change the number of this one <Widget position="10" name="Widget2" />3. Now we need to make sure this widget is always invisible unless turned visible. There should be a separate trigger that has commands that look similar to this already. <E type="Action" name="WidgetSetPlayerVisibility"> <Param type="Widget">Widget2</Param> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="Bool">False</Param> </E>4. Display the HUD Widget and set the text. Add this to the end of the code above where we applied the traits (we used "applyplayertraits") <E type="Action" name="WidgetSetText"> <Param type="Widget">Widget2</Param> <Param type="Tokens2" stringIndex="You are a bro!" /> </E> <E type="Action" name="WidgetSetPlayerVisibility"> <Param type="Widget">Widget2</Param> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="Bool">True</Param> </E>Larger Text This one's a bit odd to set up, as it's actually a 2D Navpoint, but when set up correctly, functions as a larger text widget. To use it, follow these steps -Add all strings as we did earlier -Get a reference to the skybox -Set the navpoint to the skybox -Make it visible 1. This is basically the name we're using to store the skybox in so it can be referenced later. Add this to the database for Global Objects. If you don't have one, make one under the objectfilters database. Here is what the completed thing looks like. <GlobalVariables> <Objects> <Var networkState="HighPriority" name="GlobalObject1" /> </Objects> </GlobalVariables>2. To get a reference to the skybox, add this as the very first trigger (Sorry for bad spacing) <Trigger execMode="OnEachObject" name="GetAnObjectForTheHUDTrigger"><Elements><!--Find the first object (usually the skybox)--><E type="Condition" name="Comparison" unionGroupID="-2"><Param name="Result" type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="GlobalObject0" /><Param name="OperationVar" type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="NONE" /><Param type="ComparisonType">Equal</Param></E><!--use this as our HUD marker--><E type="Action" name="VariableOperation"><Param name="Result" type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="GlobalObject0" /><Param name="OperationVar" type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="Iterator.Object" /><Param name="Operation" type="OperationType">Set</Param></E><!--Find the first object (usually the skybox)--><E type="Condition" name="Comparison" unionGroupID="-2"><Param name="Result" type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="GlobalObject1" /><Param name="OperationVar" type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="NONE" /><Param type="ComparisonType">Equal</Param></E><!--use this as our HUD marker--><E type="Action" name="VariableOperation"><Param name="Result" type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="GlobalObject1" /><Param name="OperationVar" type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="Iterator.Object" /><Param name="Operation" type="OperationType">Set</Param></E></Elements></Trigger>3. Now to display the navpoint. Add this under the "applyplayertraits" command we added earlier <E type="Action" name="ObjectSetNavpoint"><Param name="ObjectVar" type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject1" /><Param name="NavPointName" type="NameIndex">navpoint_megalo_message_hostile</Param></E><E type="Action" name="ObjectSetNavpointVisibility"><Param name="ObjectVar" type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject1" /><Param name="Param1" type="EntityFilter" filterType="Any" /></E><E type="Action" name="ObjectSetPriority"><Param name="ObjectVar" type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject1" /><Param name="Priority" type="NetworkPriority">High</Param></E><E type="Action" name="ObjectSetBountyText"><Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="GlobalObject1" /><Param type="Tokens1" stringIndex="You are a bro!" /></E>Now we're done. And this is why I shouldn't make tutorials, I probably just confused you all.
-
Posting these for a quick reference guide. Decimal (as ksoft uses): Hex (actual byte values):
-
Hey guys, here's a tutorial on how to set up a custom Grenade Regeneration with Megalo. The Halo 4 version of this can be found here. The script code in step 4 is written in version 5040.43099, but I have code for 4912.6622 included at the bottom. Add these to the StringTable: <String name="Grenade Regen Type"> <String>Grenade Regen Type</String></String><String name="Which grenades will be effected with Grenade Regeneration"> <String>Which grenades will be effected with Grenade Regeneration</String></String><String name="Grenade Regen Time"> <String>Grenade Regen Time</String></String><String name="How long it takes for grenades to regenerate."> <String>How long it takes for grenades to regenerate.</String></String><String name="One Frag"> <String>One Frag</String></String><String name="One Plasma"> <String>One Plasma</String></String><String name="One of Each"> <String>One of Each</String></String><String name="Instant"> <String>Instant</String></String><String name="One Second"> <String>One Second</String></String><String name="Two Seconds"> <String>Two Seconds</String></String><String name="Three Seconds"> <String>Three Seconds</String></String><String name="Five Seconds"> <String>Five Seconds</String></String><String name="Eight Seconds"> <String>Eight Seconds</String></String><String name="Ten Seconds"> <String>Ten Seconds</String></String><String name="Fifteen Seconds"> <String>Fifteen Seconds</String></String>Add these to your UserDefinedOptions (Replacing String26 with your gametype's blank string): <entry nameIndex="Grenade Regen Type" descIndex="Which grenades will be effected with Grenade Regeneration" name="Grenade Regen Type" valueIndex="0"> <Values defaultIndex="0"> <entry nameIndex="Disabled" descIndex="String26" value="0" /> <entry nameIndex="One Frag" descIndex="String26" value="1" /> <entry nameIndex="One Plasma" descIndex="String26" value="2" /> <entry nameIndex="One of Each" descIndex="String26" value="3" /> </Values></entry><entry nameIndex="Grenade Regen Time" descIndex="How long it takes for grenades to regenerate." name="Grenade Regen Time" valueIndex="0"> <Values defaultIndex="0"> <entry nameIndex="Instant" descIndex="String26" value="0" /> <entry nameIndex="One Second" descIndex="String26" value="1" /> <entry nameIndex="Two Seconds" descIndex="String26" value="2" /> <entry nameIndex="Three Seconds" descIndex="String26" value="3" /> <entry nameIndex="Five Seconds" descIndex="String26" value="5" /> <entry nameIndex="Eight Seconds" descIndex="String26" value="8" /> <entry nameIndex="Ten Seconds" descIndex="String26" value="10" /> <entry nameIndex="Fifteen Seconds" descIndex="String26" value="15" /> </Values></entry>Under PlayerVariables > Timers, add a new timer (in my example and in the code, it's called PlayerTimer3) <Var name="PlayerTimer3" varRefType="Int16">0</Var>Add this trigger to your Triggers: <Trigger execMode="OnEachPlayer" name="GrenadeRegen"> <Elements> <E type="Action" name="TimerRateSet"> <Param type="TimerReference" varRefType="Player.TimerVar" dataType="Iterator.Player">PlayerTimer3</Param> <Param type="TimerRate">Minus100p</Param> </E> <E type="Condition" name="TimerIsZero"> <Param type="TimerReference" varRefType="Player.TimerVar" dataType="Iterator.Player">PlayerTimer3</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="GrenadeRegen_Frags"> <Elements> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">3</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="PlayerAdjustGrenades"> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="GrenadeType">Frag</Param> <Param type="OperationType">Add</Param> <Param type="CustomReference" varRefType="Int16">1</Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" name="GrenadeRegen_Plasmas"> <Elements> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">2</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-3"> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Type</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">3</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="PlayerAdjustGrenades"> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="Iterator.Player" /> <Param type="GrenadeType">Plasma</Param> <Param type="OperationType">Add</Param> <Param type="CustomReference" varRefType="Int16">1</Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Timer" varRefType="Player.TimerVar" dataType="Iterator.Player">PlayerTimer3</Param> <Param type="VarReference" varRefKind="Custom" varRefType="UserDefinedOption">Grenade Regen Time</Param> <Param type="OperationType">Set</Param> </E> </Elements></Trigger>Note: If your gametype doesn't have Enabled/Disabled strings, you'll need to add those too: <String name="Enabled"> <String>Enabled</String></String><String name="Disabled"> <String>Disabled</String></String> And that's it! You'll now have your own customizable Grenade Regeneration Thanks to Matt for reminding me about Variable Operations, the timer wouldn't have worked without that. Example: Slayer As promised, the trigger in 4912:
-
This is from Abandoned Cashew's Plague gametype. All credit goes to him and Thunder who worked on that gametype together. User data sets scale of object x5% Only works on objects set to normal physics Create/Add to script (after Object Filters, before Triggers): <ObjectVariables> <Numeric> <Var networkState="HighPriority" name="ObjectNumeric0" varRefType="Int16">0</Var> </Numeric></ObjectVariables>Add to Strings: <String name="object_scale"> <String>object_scale</String></String>Add to Object Filters: <Filter labelIndex="object_scale" name="object_scale" />Create Trigger: <Trigger trigType="Local" name="LocalTrigger"> <Elements> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnObjectFilter" name="Trigger46_Subroutine47" objectFilter="object_scale"> <Elements> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="UserData" dataType="Iterator.Object" /> <Param type="OperationType">Set</Param> </E> <E type="Condition" name="Comparison"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">GreaterThan</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">5</Param> <Param type="OperationType">Multiply</Param> </E> <E type="Action" name="ObjectScale"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="CustomReference" varRefType="Object.NumericVar" dataType="Iterator.Object">ObjectNumeric0</Param> </E> </Elements> </T> </Param> </E> </Elements> </Trigger>
-
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <!--Info in Assembly, WGTZ>Jump To>UI>COMPONENTS>StringID--><msit name="multiplayer\megalo\global"> <names> <entry name="navpoint_ctf_flag_away" /> <!--Says "PROTECT"--> <entry name="navpoint_ctf_flag_carrier" /> <!--Says "KILL" for enemy or neutral team when flag is held, "PROTECT" for friendly--> <entry name="navpoint_ctf_flag_normal" /> <!--Says "CAPTURE" for enemy or neutral team, "DEFEND" for friendly--> <entry name="navpoint_ctf_flag_return" /> <!--Says "PROTECT" - StringID is "deliver"--> <entry name="navpoint_dom_last_stander" /> <!--Says "KILL"--> <entry name="navpoint_flood_player" /> <!--Crimson red downward arrow, no text--> <entry name="navpoint_megalo_extraction" /> <!--Says "EXTRACT"--> <entry name="navpoint_megalo_extraction_blink" /> <!--Blink of above--> <entry name="navpoint_megalo_extraction_beacon" /> <!--Says "DISARM" if on enemy team, "PROTECT" on friendly, "EXTRACT" on neutral--> <entry name="navpoint_megalo_extraction_beacon_blink" /> <!--Blink of above--> <entry name="navpoint_megalo_extraction_se_beacon" /> <!--Says "CONVERT" if on enemy team, "PROTECT" on friendly, "EXTRACT" on neutral--> <entry name="navpoint_megalo_extraction_se_beacon_blink" /> <!--Blink of above--> <entry name="navpoint_megalo_extraction_player_beacon" /> <!--Says "PROTECT" (friendly), "KILL" (enemy), "BEACON" (neutral)--> <entry name="navpoint_megalo_extraction_incoming" /> <!--Says "INCOMING" if neutral, "DEFEND" if friendly, "CAPTURE" if enemy--> <entry name="navpoint_megalo_extraction_red" /> <!--Says "CONVERT" if on enemy team, "PROTECT" on friendly, "EXTRACT" on neutral--> <entry name="navpoint_megalo_flood" /> <!--Seems to be related to safe havens according to Assembly. Should say "HAVEN" when attached to an object. Untested--> <entry name="navpoint_megalo_flood_blink" /> <!--Blink of above--> <entry name="navpoint_megalo_koth" /> <!--Says "CAPTURE" (enemy/neutral) or "DEFEND" (friendly)--> <entry name="navpoint_megalo_koth_blink" /> <!--Blink of above--> <entry name="navpoint_megalo_koth_incoming" /> <!--Says "INCOMING" if neutral, "DEFEND" if friendly, "CAPTURE" if enemy--> <entry name="navpoint_megalo_koth_timer" /> <!--variant of navpoint_megalo_koth with a timer on it--> <entry name="navpoint_megalo_koth_timer_blink" /> <!--Blink of above--> <entry name="navpoint_megalo_oddball" /> <!--A big, white, useless box. Supposed to say "DEFEND" (friendly) or "SCORE" (enemy/neutral)--> <entry name="navpoint_megalo_oddball_blink" /> <!--Blink of above--> <entry name="navpoint_megalo_general" /> <entry name="navpoint_megalo_general_blink" /> <!--Blink of above--> <entry name="navpoint_megalo_message_power" /> <!--Not visible--> <entry name="navpoint_megalo_message_hostile" /> <!--A 2D HUD waypoint, accepts BountyText--> <entry name="navpoint_megalo_one_row" /> <entry name="navpoint_megalo_two_row" /> <entry name="navpoint_megalo_three_row" /> <entry name="navpoint_oddball_player_blink" /> <!--Says "BALL"--> <entry name="navpoint_oddball_player_friendly_only" /> <!--Inherits navpoint_oddball_player, shows to friendly only--> <entry name="navpoint_oddball_goal" /> <!--Says "DEFEND" (friendly), "SCORE" (enemy/neutral)--> <entry name="navpoint_oddball_player" /> <!--Says "BALL" if neutral, "ESCORT" if friendly, "KILL" if enemy--> <entry name="navpoint_oddball_thrown" /> <!--Says "THROWN"--> <entry name="navpoint_oddball_trailing" /> <!--Says "DROPPED"?--> <entry name="navpoint_regicide" /> <!--Says "BOUNTY %n" for enemy team, "PROTECT" for friendly team, no text for a neutral team. Inherits icon from object, no override--> <entry name="navpoint_strong_base" /> <!--Says "CAPTURE"--> <entry name="navpoint_strong_base_countdown" /> <!--Says "FORTIFYING" (friendly) or "CAPTURE" (enemy/neutral), has meter around outer edge--> <entry name="navpoint_strong_base_defend" /> <!--Says "DEFEND" (friendly) or "CAPTURING" (enemy)--> <entry name="navpoint_strong_base_fort" /> <!--Says "CAPTURE"--> <entry name="navpoint_strong_base_fort_countdown" /> <!--Says "RESUPPLYING"or "CAPTURE" (enemy/neutral) - should have a timer???--> <entry name="navpoint_strong_base_fort_defend" /> <!--Says "DEFEND" (friendly) or "CAPTURING" (enemy)--> </names> </msit>I always have issues finding this so I'm going to post it here. Credits to Teancum for this.
-
Weaponless Vehicles Introduction In this tutorial, I will show you how to implement a Forge label which strips a vehicle of all of its weapons. All vehicles are compatible however note that the horn will also be removed from the Warthog and Mongoose. Vehicles without weapons will not have a reticle on the center of the screen. Screenshots >> Click here to see more screenshots Concept How does it work? Firstly, the distance between the objects attached to the vehicle regardless of position is zero. Therefore, all we need to do is to create a trigger which loops through each object with the 'weaponless' filter. Store the current object to scratch object variable 0. Inside this trigger, add another trigger looping through each game object. Next, we need to confirm that the object with the weaponless vehicle is not the same object in second trigger because the distance between an object and itself is zero. Now we have (in pseudocode): for each object with weaponless filter: temp1 = current object for each object: temp2 = current object distance = object_get_distance(temp1, temp2) if temp2 =/= temp1 and distance = 0 object_delete(temp1) end end end That's all, right?! Not so fast, Sparky. All objects inside a vehicle will have a distance of zero including the player's biped and the player's equipments meaning they will also get deleted. What you need to do now is to check whether the current object has an owner player and whether the object is a biped. I understand that you're in a hurry so here's the code. KSoft Code1. Add the following to the Megalo string table: <String name="weaponless"> <String>weaponless</String></String>2. Add the following to object filters: <Filter labelIndex="weaponless" name="weaponless" />3. Add the following trigger: <Trigger execMode="OnObjectFilter" name="TriggerWeaponless" objectFilter="weaponless"> <Elements> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="ObjectScratch0" /> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="OperationType">Set</Param> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnEachObject" name="Trigger0_Subroutine1"> <Elements> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="ObjectScratch1" /> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="OperationType">Set</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Scratch">NumericScratch1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="OperationType">Set</Param> </E> <E type="Action" name="ItemGetOwnerPlayer"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="PlayerReference" varRefType="ExplicitPlayerType" dataType="PlayerScratch0" /> </E> <E type="Action" name="ActivateTrigger"> <Param type="TriggerReference"> <T type="Trigger" trigType="Subroutine" execMode="OnEachPlayer" name="Trigger0_Subroutine1_Subroutine2"> <Elements> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Object" varRefType="Player.SlaveObject" dataType="Iterator.Player" /> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="ObjectScratch1" /> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="VariableOperation"> <Param type="VarReference" varRefKind="Custom" varRefType="Scratch">NumericScratch1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">1</Param> <Param type="OperationType">Set</Param> </E> </Elements> </T> </Param> </E> <E type="Action" name="DistanceBetweenObjects"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="ObjectScratch0" /> <Param type="CustomReference" varRefType="Scratch">NumericScratch0</Param> <Param type="Bool">False</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="ObjectScratch0" /> <Param type="VarReference" varRefKind="Object" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> <Param type="ComparisonType">NotEqual</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Scratch">NumericScratch0</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Custom" varRefType="Scratch">NumericScratch1</Param> <Param type="VarReference" varRefKind="Custom" varRefType="Int16">0</Param> <Param type="ComparisonType">Equal</Param> </E> <E type="Condition" name="Comparison" unionGroupID="-2"> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="PlayerScratch0" /> <Param type="VarReference" varRefKind="Player" varRefType="ExplicitPlayerType" dataType="NONE" /> <Param type="ComparisonType">Equal</Param> </E> <E type="Action" name="DeleteObject"> <Param type="ObjectReference" varRefType="ExplicitObjectType" dataType="Iterator.Object" /> </E> </Elements> </T> </Param> </E> </Elements></Trigger>WumboScript Code define event tick for each current_object0 in objects matching filters.weaponless do for each current_object1 in objects do skipped = 0 owner = object_get_owner_player(current_object1) for each current_player0 in players do if current_player0.biped = current_object1 then skipped = 1 end end distance = object_get_distance_between(current_object1, current_object0, false) if current_object0 != current_object1 and distance = 0 and skipped = 0 and owner = none then object_delete(current_object1) end end endend
-
Inserting Special Symbols in Megalo Strings Here's the locale symbol list for Halo 4 obtained from Assembly. Use this tool to convert the UTF-8 bytes from the list above into a 2-byte hex code point. Ensure that the "Hex UTF-8 bytes" option is selected. Now, enter the value without the '0x' prefix and with spaces in between each pair (byte). For example: If I want to use the symbol represented by 0xEE91B8, I would enter EE 91 B8 in the textbox and then press "Go". You want the hex code point value. Assuming you're using KSoft.Tool, insert ----; where you want the symbol to be. Replace the four dashes (----) with the Hex Code Point value.