Welcome to Open Carnage

A resource for Halo Custom Edition and MCC modding, with unique means of rewarding content creation and support. Have a wander to see why we're worth the time! - EST. 2012

Search the Community: Showing results for tags 'Mechanics'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


    • Site Bulletins
    • Member Introductions
    • Halo MCC: General
    • Halo MCC: Development
    • Halo CE: General
    • Halo CE: Development
    • Chimera
    • SAPP: General
    • SAPP: Scripts
    • SAPP: Script Requests
    • Halo PC: General
    • Halo PC: Development
    • General Gaming
    • Tech Chatter
    • Off-Topic

Outstanding Mapper

Found 68 results

  1. This script changes the way vehicles are synchronized on race gametype to prevent desync issues. The vehicles will appear a bit laggy but they will no longer desync when crashing into other vehicles or something. DOWNLOAD: race_desync_fix.lua
  2. Turns cheat_infinite_ammo on, while also disabling infinite grenades. Download: infinite_weapon_ammo.lua
  3. In the case of players being betrayed, this plugin will give the victim the option to remove the player from the game using the /vkick command. By default, it will ban the player for the duration of the game, but you can set it to a kick or set it to a timed ban, and it will allow victims to ban the player on if the betrayer has accumulated 2 team kills that game. Note: This plugin will not turn off Halo's automatic banning. You are responsible for doing this yourself if you do not want Halo to ban players automatically, but rather this plugin. Download: tkeject.lua
  4. Lately I've been running into an issue in my 2 servers where I check for aliases when a new player joins the server and I'm told there's no alias for the player, not even their current profile name. I checked the alias text files in both servers and found that one had been last modified on 8/30 and the other on 9/2. It seems to me that these files should be constantly changing as players join. Can anyone tell me why the alias text files are no longer being added to, perhaps there's a size limit to the document in SAPP. Help would be very much appreciated
  5. A script that, when you enter a vehicle after dying, teleports you to your last checkpoint (maintaining your yaw, pitch, and roll in those checkpoints as well.) This script is primarily made to accommodate maps that revolve around racing in vehicles (ex: halocart.) race_checkpoints.lua Note: Only works for Custom Edition.
  6. More info here: https://github.com/Nickzster/Halo-Lua-Projects/tree/master/Raids Hey everyone, so I've been working on this with my bud Ender (GoldyDeWise) for the past couple of weeks, and I think it is in a good state to demonstrate. You can watch the video here: Feel free to leave any feedback or suggestions! Documentation, copied from the github page: What is Raids? Raids is a dungeon-styled gametype for Halo Custom Edition, in which players must work together to defeat bosses. Classes Each class in Raids serves a function that is essential to killing the boss. Each class has a set of weapons to choose from, and an ultimate ability. Players can also use equipment to enhance their player with passive effects, like damage boosting, damage reducing, dodging, and critical strike chance. Spartan (Tank) Purpose: To hold agro, and have the boss attack them Max Health: 500 Ultimate Ability: God mode for 10 seconds Ultimate Ability cooldown: 90 seconds. Medic (Healer) Purpose: To heal other players Max Health: 100 Ultimate Ability: Heal all players nearby to full health. Ultimate Ability cooldown: 75 seconds. Special Notes: Healers can shoot friendly players to heal them, and shoot bosses to deal damage. Soldier (DPS) Purpose: To deal damage to the boss. Max Health: 100 Ultimate Ability: Bottomless clip for 10 seconds. Ultimate Ability cooldown: 60 seconds. Valiant (Gunslinger) Purpose: To deal damage to the boss from a distance. Max Health: 100 Ultimate Ability: Active camoflage for 30 seconds. Ultimate Ability cooldown: 90 seconds Special Notes: Is an elite. Bandolier Purpose: To deal sustained damage to the boss. Max Health: 100 Ultimate Ability: Fill all nearby player's ammo to full capacity Ultimate Ability cooldown: 75 seconds. COMMANDS /class <classname> | changes your class to <classname> /loadout <primary> <secondary> | changes your current class's loadout to <primary> and <secondary> /equip <equipment> | equip <equipment> to your player /ult | Activates your ultimate ability. You can press flashlight key to activate this now! /greed | Perform a greed roll for a boss drop. /need | Perform a need roll for a boss drop. /whoami | Prints your current class /moreinfo <item> | Read more information about a specified item in the mod RAID SIZES The raid will automatically scale depending on the number of players present. Here are some metrics you can expect depending on the number of players Extra Small Raid 0 - 3 players 1 Tank Allowed 1 Healer Allowed 1 Bandolier Allowed Boss Health is scaled at 1.0 normal health. If a boss has 1000 health, then the boss will have 1000 health in an extra small raid. Small Raid 4 - 5 Players 1 Tank Allowed 1 Healer Allowed 1 Bandolier Allowed Boss Health is scaled at 1.5 normal health. If a boss has 1000 health, then the boss will have 1500 health in a small raid. Medium Raid 6 - 10 Players 1 Tank is allowed 2 Healers are allowed 1 Bandolier is allowed Boss Health is scaled at 3.0 normal health. If a boss has 1000 health, then the boss will have 3000 health in a medium raid. Large Raid 11 - 12 Players 2 Tanks are allowed 2 Healers are allowed 1 Bandolier is allowed Boss Health is scaled at 5.0 normal health If a boss has 1000 health, then the boss will have 5000 health in a large raid Extra Large Raid 13 - 15 Players 2 Tanks are allowed 2 Healers are allowed 2 Bandoliers are allowed Boss Health is scaled at 10.0 normal health If a boss has 1000 health, then they will have 10,000 health in an extra large raid. Crates Crates are physical entities that players can find in the map. They come in three different flavors: Iron Crate Drops Equipment based items. Gold Crate Drops Armor based items. Crystal Crate Drops Weapon based items.
  7. It's here, finally... To anybody who has ever read my topic about this in the CE development section, you may remember that I mentioned that this script would be meant to work for every single map that contains AI and that's what I'm going to release here. The game and the community deserve it. However, it still has some limitations: - This WILL NOT work for protected maps, if the server is running this script and it loads a map that is protected, it will crash, and even if it doesn't it is highly probable that it won't work at all. - The clients must have Chimera installed and the client script in their respective scripts folder. You can do this renaming the script to the name of the map with AI you want to sync and moving it to the map scripts folder if you want to keep it sandboxed, but I would recommend you to place it in your global scripts folder so you won't need to rename and copy it manually. I've disabled all the console_out commands to avoid annoying messages coming out every time a map is loaded. - There are some minor aesthetical glitches still, but they rarely would affect the gameplay (Most, if not all, are just related to aesthetics). And... I think that's all! If you are going to run a server with this on it just load the server script from the init.txt file and it will do the rest, I've made sure to reset everything that's needed every time a new match starts so you won't have to modify anything, however, I've kept some cprint and say_all lines for debugging purposes but I think they won't be needed anymore, you can disable them easily, just search any of those commands in the code and comment or erase them. To finish, a video of me running it on a dedicated server and playing as a client: In this file: AI synchronization scripts by IceCrow14 v.1.1.rar I've included both the server and the client scripts. If you aren't going to run a server, just drop the client script to your Chimera global scripts folder. Anyway, just for caution, if the bipeds' appearance looks strange try leaving and joining back the server you are playing in, if any error message jumps out to your console, feel free to send me any information about it and I'll try to find out what causes it (and possibly fix it) and delete the script if you feel it's needed.
  8. This script has a function 'NextGameNow' and command 'next_game' which forces the next game to begin in just a few seconds, almost entirely bypassing the score screen, as long as sv_mapcycle_timeout is set to any value that is GREATER than 0. For example, you can add the lines: next_game "lua_call next_game NextGameNow" 4 sv_map_fast #1 #2 "map #1 #2; next_game" 4 to your commands.txt file. Now try entering a command like 'sv_map_fast bloodgulch CTF' and see how fast the game changed to the CTF gametype on Blood Gulch. This is useful, because players may get impatient and leave during the score screen. If game intermissions only take a couple seconds, then players are less likely to leave. You can also use 'next_game' if you want to quickly reload the map for whatever reason, but not risk crashing Halo with 'sv_map_reset' if the game is unstable. To show you how fast this works, here is a video of the above sv_map_fast command in action: You don't need to edit commands.txt to use next_game as a player. Download (SAPP): next_game.lua
  9. What Arcade CTF does is it combines aspects of CTF, Slayer, and King of the Hill into one game, allowing players to complete the game by capping, killing, and camping at the enemy base. Rather than being the first to reach a certain number of points, both teams start out with a set number of points that go down as players are killed, flags are captured, bases are held, and time passes. The goal is to get the other team's points to 0 points. The team scores are also scaled to the highest number of players that have played that single game. Score System: Game Start (+2000 to both teams) 4 players have joined (+1000 to both teams, up to 6000 total points; note that at least 4, 8, 12, and 16 players must be present at a given time to get this bonus, though it won't be taken away if players leave) Base invasion (-1 to the enemy team per second per player at the enemy team's base.) Kill (-25 to enemy team) Cap (-400 to enemy team) 1 minute has passed (-100 to both teams - note that this can lead to a tie if both teams hit 0 at the same time) Base invasion is the King of the Hill aspect. It simply requires a teammate being near the enemy base's flag stand. -1 per second may not seem like a lot, but it adds up, and snowballs with more teammates. Here is a table of how long it'll take to end the game with a set number of teammates camping the enemy base, factoring the -100 point penalty both teams incur every minute: Killing is the Slayer aspect. It requires that you kill an enemy. If you camp the enemy base and kill anyone who spawns, you can get tons of points fast. Capping is the CTF aspect. Just capture the flag. A game variant is included, which includes the following settings: Gametype: CTF - Flags do not need to be at home to score (Because there can be many caps before a game is over) Score Limit: 1 000 000 000 (this is just to remove the score ceiling; teams won't actually have a billion points) Time Limit: 60 minutes Objectives: Shown on HUD Weapons: Generic Default (Spawn with Assault Rifle and Pistol regardless of map, though modded maps may differ) Base Respawn Timer: 0 seconds (technically, that means it's 3 seconds) Suicide Penalty: 5 seconds Betrayal Penalty: 30 seconds Team is shown on HUD and motion sensor Vehicles: Default; 60 second respawn Feel free to modify it as you please. Note: I have not tested this on CE. I think it'll work, but I don't know. This script may also be buggy, as it's a direct copy of the version from the original Arcade CTF server before it was shut down on the 1st of October. Download Script (SAPP): arcade.lua Download Game Variant (PC and CE hybrid): Arcade CTF Gametype.zip
  10. Preface: If you're comfortable with Lua's MetaTable system, and are comfortable with Lua's prototype inheritance chain, then feel free to scroll down to the bottom of this post for the full implementation. For those who haven't worked with Lua's prototype system, metatables allow you to expand the functionality of an object by defining metamethods. Normally, if you try accessing a value in an object, and it does not exist, then it will return nil. That's not entirely true: It will first check the __index metamethod to see if it can find the value in there. If it can't find the value in __index, THEN it will return nil. This allows you to create multiple unique objects that conform to a class schema. Motivation Let's say you needed to have some stuff occur concurrently in the background for your project. For instance, you want to implement a class system (I.E, DPS, Tank, Healer, Etc.) and you want to give them all "abilities" that last x amount of seconds, and have to cool down for y seconds. You could probably use something like w8 x to allow the ability to run, and do the same for w8 y to execute the cooldown. There's two problems to this though: 1. It blocks the function that it is called in. 2. What if you want to do stuff during these times? Like tell the user that their ability has 5 seconds left, or that their cooldown for an ability ends in another 10 seconds? That simply will not work. So, I've taken a bit of inspiration from JavaScript, and I implemented a pseudo-EventQueue system for SAPP. EventItem Class If you've already peeked at the implementation, you'll notice that EventItem has three methods you can call. Let's go over them and see how they work: EventItem:new() function EventItem.new(self) ... end This returns a new object with the __index metamethod being set to EventItem. Basically, you can use all of the operations and values from EventItem on this new object. EventItem:set() function EventItem.set(self, props, eachTickCb, completedCb, time) ... end This allows you to set some values for your EventItem. Let me explain what each parameter does: time - The amount of time you want this event to last, in ticks. If you want this event to last for 30 seconds, then time should be 900 (30 * 30). If you set the time to be -1, this is a conditional event, and will only terminate once eachTickCb returns true. props - place any values in here that you want this EventItem to have access to. completedCb - Did you know that lua functions are first class citizens in lua? That allows you to treat them like a value. Simply define a function and reference it, or define the callback function directly in this parameter spot. This function is called when the event is completed. The props parameter is automatically passed into it when it is called. eachTickCb - This function is executed on every tick. This function is called with two parameters: props and time. This will execute on every tick, and allows you to do stuff while the event is counting down (I.E, display that status message from earlier). EventItem:isTimedOut() function EventItem.isTimedOut(self) ... end This function has no parameters, but it is important that you understand what it does: If you set the event with a finite time, then it decrements that time by 1 for every tick, and executes the eachTickCb until time is zero. When time is zero, the completedCb is executed. If you set the event for -1 time, then it will execute the eachTickCb until it returns true, in which it will then execute the completedCb. This allows you to queue events that are related to different things other than time. Full Implementation EVENT_TABLE = {} EventItem = { time=nil, completedCb=nil, eachTickCb=nil, props=nil } function EventItem.isTimedOut(self) if self.time == -1 then --conditional event if self.eachTickCb == nil and self.eachTickCb(self.props, self.time) self.completedCb(self.props) return true end return false elseif self.time == 0 then -- timed event expires self.completedCb(self.props) return true else --timed event has not expired self.time = self.time - 1 if self.eachTickCb ~= nil then self.eachTickCb(self.props, self.time) end return false end end function EventItem.set(self, props, eachTickCb, completedCb, time) self.time = time self.props = props self.completedCb = completedCb self.eachTickCb = eachTickCb end function EventItem.new(self) local newEventTableInstance = {} setmetatable(newEventTableInstance, self) self.__index = self return newEventTableInstance end function OnScriptLoad() ... other callback definitions register_callback(cb['EVENT_TICK'], "handleTick") end function handleTick() for key,_ in pairs(EVENT_TABLE) do if EVENT_TABLE[key]:isTimedOut() == true then EVENT_TABLE[key] = nil end end end I know it's a lot to take in, but I have found this VERY USEFUL for the stuff I am working on, and I love sharing these cool solutions for the interesting problems they solve. Please let me know if you have any questions about anything pertaining to this EventItem class or lua itself, and I'll be happy to help!
  11. In this gametype a team of players needs to kill a powerful monster. The monster has a lot of health and a powerful weapon and abilities. The weapon is fired by holding the left click, rocket and plasma abilities are grenades and nuke is activated by pressing X (exchange weapon). When a player is killed, they drop a skull. Those skulls can be collected by the monster to restore health. If other players collect 3 skulls, they will respawn with a rocket launcher (the skulls don't reset if the player dies). The script only works on unprotected maps with a classic tagset and only on the gametype specified in the script ("monster" by default). Various stats can be customized in the script. DOWNLOAD: monster.lua DOWNLOAD RECOMMENDED GAMETYPE: monster.rar
  12. This script disables fall damage if: Player speed is increased (you can set to what speed); Player left a banshee (or any other vehicle specified in the script). Fall damage will be enabled after player touches the ground. Both can be disabled in the script. I haven't tested too much but everything should work fine. The script may not work on protected maps. DOWNLOAD: fall_damage_thingy.lua
  13. A remake of Halo Reach's gametype headhunter. When you kill an enemy they will drop a skull and you will have to collect those skulls and carry them to the hill to score points. When you are killed you will drop all of your skulls. Players only drop a skull if killed by an enemy but they will always drop the skulls they were already carrying. The script works on both free for all and team gametypes. The script will show you how many skulls you are carrying and enemies/teammates that are carrying at least 1 skull. This information appears in the console and the messages will also be colored for Chimera users. For this script to work you need to create a king of the hill gametype and enter its name in the script's GAMETYPES table. DOWNLOAD: headhunter.lua Known issues: picking up a skull interrupts your weapon animation (not sure if I should fix this tbh) the sound "hill controlled" only plays if a single player is in the hill (you can just disable this sound in the script)
  14. This script will respawn oddballs if they were dropped down to unreachable places (like in damnation, gephyrophobia etc). You can set the global z coordinate below which oddballs will be respawned in all maps and add specific map coordinates if the global value doesn't work with that map. Edit: now oddball MetaID is checked on script load too. Edit 2: fixed crash when oddball object is removed (sv_map_reset) Edit 3: rewrote most of the script to improve several things, read the last post for more details Download: oddball.lua
  15. Background: If you care about this: How it works: Again, if you care Constraints: There are a few things to keep in mind to make this work correctly. 1) Normal weapon sets only This was made for high level competitive (or just fun) play, so I did not take the time to account for "special" weapon gametype modes. If you play a variant with all rockets, obviously this timer will provide very little use other than for timing powerups. If you use any of the non-generic weapon sets, this will not work right. It will likely just end up spawning everything as normal, and you won't get your rocket or sniper fest gametype. I'm not going to fix this, although as stated in the how it works section, the script is documented well enough you could probably get that working pretty easily. 2) Custom tags not guaranteed The easiest way to figure out what tags were what types was by parsing their names. Most maps played in the style this script was designed for use the classic tagset anyway, so no problems there. I tested it on Revolution maps, and because the rev tagset follows a pretty standard naming convention, they work as well. However, your [h3]yonlex2[reach][h4]Spiker.weapon certainly won't have its own timer. All tags should spawn correctly, given how the spawn system works by reading the scnario, so if you're going to use this for that, you can just alter the timer printouts to do away with unnecessary ones, or disable the item spawn timers altogether in the script config section. Easy peasy. You'll still get the timer at the bottom, but I didn't have the time or patience to make a notification system that caters to all tags, nor would I even have a good system to do so. Even the weapon-type enum in the weapon tag isn't necessarily consistent. 3) Multi-item spawns This was a pain in the ass with how the "percentage chance of spawn" works, so I made sure it worked with the shield-invisibility correctly, gave it a logic system that would handle n-number of items inside the item_collection, and left it at that. If you want to have a "random heavy" item_collection that spawns a flamethrower/fuel rod/rocket with each 33% chance, that should work. If you want to levitate them, it won't. I didn't support levitation for these types because I'd not seen it happen in any map, and it was more work than what the incredibly small percentage of maps that would benefit from it warranted. Sorry? Setup: There are two versions of this script here for download: <links at bottom> Classic PC Xbox The classic PC is probably the one you want, unless you're specifically using ported Xbox maps that don't feature the Fuel rod or Flamethrower. Either way, the setup is the same. Place the two (or all) lua files within the sapp/lua folder just like any Global Spawn Replacement (Xbox or standard) Dynamic ITMC (Xbox or standard) Within your SAPP init.txt you will need to load the global_spawn_replacement script. Classic PC: lua_load global_spawn_replacement Xbox: lua_load global_spawn_replacement_xbox Relevant FYIs: Map Skipping: STFU: Hac2 Beta: The official release of hac2 that is out right now (or if you aren't using it at all, lol) does NOT have the necessary console printing fix, and will likely result in print stuttering unless you use VSYNC. This is because OG Halo (and current Hac2) ties the console printing to your framerate, meaning nothing good. Generally this results in some weird stuttering and odd formatting, maybe even complete "blank outs" of the notifications. BETA FIX This is a file "hac.dll" that just goes on top of the existing release. If you have hac2 already installed, stick this hac.dll file in your root Halo directory: "C:\........\Halo\hac.dll" or "C:\........\Halo Custom Edition\hac.dll". It's a plug and play fix. hac.zip SCRIPTS: Release v1.3 global_spawn_replacement v1.3 (xbox and pc).zip PC: global_spawn_replacement.lua dynamic_itmc.lua Xbox: global_spawn_replacement_xbox.lua dynamic_itmc_xbox.lua I would appreciate it if anyone could post a video showing this in action, as I don't have any and am not at home right now to record one.
  16. This script will keep a more advanced record of your stats in a server. You have to press and hold Action (E) and Crouch (Ctrl) for it to be brought up. This is highly untested, sorry if it has bugs but, I scripted it in 2 hours so... yea. This will keep track of: - Time spent in server - Total points/score earned - Kills - Deaths - Assists - Suicides - Betrays - CTF Stats - Race Stats - Oddball Stats - Koth Stats - KDR Download = stats.lua NOTE: I updated the grammar in the note (uses 'will only update' instead of 'is only update.')
  17. This fixes backpack reload glitch. Let me know if there are any issues. anti_backpack_reload.lua
  18. This script will make servers register about 10-30% more of your shots if your cross-hair is red. This script is intended to be used server side only. How the script works: Well what it does is loop through all the bipd tags and change something called the autoaim_width, this is the effective range of the auto_aim in Halo (also known as bullet magnetism.) By reducing the auto_aim width, when you aim correctly the bullets will tend to curve stronger into the bipd, making them more likely to hit, and making the servers simulation more likely to give you the hit. hit_reg_fix.lua
  19. What this script will do is change a players spawn point if the spawn point picked by the game is under "suppression" (by a friendly player taking damage.) In the case it is suppressed, the script will then force a random ctf spawn (from your team) for you to spawn on. Spawns that are also under suppression or blocked will not be picked as well. This script borrows from Kavawavi's ralliedteams.lua, it was very useful in the making of this script. spawn_point_suppression.lua
  20. This plugin will kill a player if they leave the BSP. It works on all maps, including Danger Canyon, so you won't have to worry about people getting quick and cheap caps. Note that in Death Island, jumping out of the water outside of the map is considered being outside of the BSP, which is why if you try to crouch underwater, you can't uncrouch. That means that this plugin will not kill people who exit the map unless they are not in the water. Download (SAPP): firewall.lua
  21. This is a simple script that modifies the velocity of all weapons that use 'bullets' to travel their entire lifespan after being shot. This can remove that pesky 'lead' in no lead servers using big maps. It can also make the hit-registration feel more responsive. Hopefully this works on custom maps (protected or unprotected) but it relies on the 'hope' that custom mappers kept their custom weapons using Halo's default bullet speeds. Hitscan Script: Pastebin - Hitscan Note: Will not enable the the mod until EVENT_GAME_START is called. You can use "lua_call hitscan EnableHitscan" if you load the script while a game is already running though.
  22. This script allows one to choose a biped for each team. It requires a map that has either biped, and will not do anything if the custom biped could not be found. Download (SAPP): teambipeds.lua
  23. Double tap the forward key to run faster. If you sprint for too long, you will become exhausted and run slower. The server host can configure: - Running speed (default speed, tired speed, and sprinting bonus) - Time until exhausted and time to recover - Method of renewing energy (stop sprinting, holding still, or no recovery) - Required energy to begin sprinting - Admin level required to sprint - Damage percentage when sprinting (configurable for both health and shield) - Whether or not to show a sprinting bar (disabled by default) Disclaimer: This does not work on Oddball or Race game variants. This is due to Halo's engine preventing custom speeds set on these gametypes. Download (SAPP): sprinting.lua
  24. This script auto-deletes empty weapons and weapons that have reached maximum battery age. There are a few exceptions to what it will delete: Flags / Oddballs (any object that has the Must Be Readied flag set) Weapons that have no magazines and also do not have the "Cannot fire at max age" flag set such as Energy Swords Download (1.1; SAPP): remove_empty_weapons_1_1.lua Older versions:
  25. This script will allow you to drive as a gunner (and more.) Features: - Drive as gunner - Drive as passenger If there is no driver: (and drive as passenger is false) - Set passenger in driver seat If there is a driver: - Set passenger in gunner seat Download - Seat Mod