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

Kavawuvi

Administrator
  • Content count

    4,412
  • Joined

  • Last visited

Everything posted by Kavawuvi

  1. It's back. Many thanks to Jerry for porting this! There are still some things left to do, but a lot of scripts should work as they did before.
  2. I've been thinking more about the new scripting API, and having talked with a few other people, we found this to be the best thing for Chimera (and Halo modding in general) moving forward. There are two key things: No functions for reading/writing to arbitrary memory addresses More functions for reading/writing values of objects, gametypes, players, etc. Let's refill the ammo of the player's weapons, for example. In the Lua API, you do something like this: local player = get_player(PlayerIndex) local dynamic_player = get_dynamic_player(PlayerIndex) if dynamic_player ~= nil then for w = 0,12,4 do local weapon = read_dword(dynamic_player + 0x2F8 + w) if weapon ~= nil then write_float(weapon + 0x23C, 0) write_float(weapon + 0x240, 0) local weapon_tag_data = read_dword(get_tag(read_dword(weapon)) + 0x14) local magazine_count = read_dword(weapon_tag_data + 0x4F0) local magazine_address = read_dword(weapon_tag_data + 0x4F4) for m = 0,magazine_count-1 do local maximum_reserved_ammo = read_word(magazine_address + 0x8 + m * 112) write_word(weapon + 0x2B6 + m * 0xC, maximum_reserved_ammo) local maximum_loaded_ammo = read_word(magazine_address + 0xA + m * 112) write_word(weapon + 0x2B8 + m * 0xC, maximum_loaded_ammo) end end end end Using addresses requires assuming that everything uses the same offset. This might not be the case on some versions of the engines for some things. In theory, the same code above could be represented with this code instead: local player = engine.get_player(player_index) local dynamic_player = player.get_object() if dynamic_player ~= nil then for w = 0,dynamic_player.get_weapon_count()-1 do local weapon = dynamic_player.get_weapon(w) weapon.set_heat(0) weapon.set_battery(1) for m = 0,weapon.get_magazine_count()-1 do local maximum_reserved_ammo = weapon.get_maximum_reserved_ammo(m) weapon.set_reserved_ammo(maximum_reserved_ammo, m) local maximum_loaded_ammo = weapon.get_maximum_loaded_ammo(m) weapon.set_loaded_ammo(maximum_loaded_ammo, m) end end end Using functions does not require this assumption, as the mod handles this for you. This guarantees that your script will be portable for any version of the game that uses this scripting API. There may be some things that will only be possible in the older API that will not be possible in the new API, so the older API isn't going to be going away any time soon, even if I start on the newer API. However, note that anything that uses the older API will be stuck on its respective game. The new API, on the other hand, is intended to be portable, and it may be ported to other versions of Halo: Combat Evolved such as MCC (if MCC ever becomes viable to mod lol), and since these read/write functions may not work very well on non-Gearbox versions due to completely different addresses/offsets/signatures, the older API won't be ported over. I'm still planning on expanding the older API with newer functions, events, etc. It isn't going to be inferior to the newer one (besides the portability and verbosity), but note that it'll always be a product of its time (after all, doing things like this is how we've always modded Gearbox Halo, right?), and using it isn't advised if you want your script to work beyond whatever version(s) of the game you wrote it for. For some people who prefer the old ways of modding, I imagine they'll be fine just targeting Halo Custom Edition, retail Halo PC, and maybe even the demo version (of course, there's no way to detect what versions a script that uses the older API will work on, so it'll be up to the community to do that). For people getting into scripting as well as some more seasoned script writers who want to get back into modding Halo through Lua scripting, they may find the newer API's verbosity and portability to make their lives easier and their scripts more pleasant to read and write. Update (2020-11-18): I wrote down that I was going to use, but due to the apparent lack of support and updates for it, I might decide against that. Its forum is kinda dead, so, yeah... I'll probably use Lua for this too. Update (2011-11-19): Added information regarding the new vs. old API.
  3. Yes. Jerry is definitely MVP here.
  4. This is just a general topic for posting questions and suggestions for Chimera. You can also post issues in here if you are having issues with Chimera.
  5. I've gotten a large amount of feedback from people in regards to how the retail-only fixes are handled. Many people wish to have these fixes present in Halo Custom Edition, and the common suggestion is to have a toggle for these fixes. I think making this stuff optional globally isn't the right way to go about it, given that the scope of this project is to fix Halo. After all, would an update give you an option to re-break the game? Probably not. So instead, I'm looking into writing a Lua script that disables these fixes for select maps. This means that, for the maps that are broken by these fixes, you can choose to disable the fixes for them. Since most maps are not affected by this as they only use the stock tagset, it is safe to have the fixes on by default for most maps.
  6. When's creative mode coming out?
  7. The flashlight intensity has been corrected. Note that this fix will ONLY apply to retail Halo PC and the demo version. Custom Edition will not receive the fix to avoid altering the experience intended by map developers. Anyway, this mostly impacts the campaign, notably levels like 343 Guilty Spark, Keyes, Truth and Reconciliation, and The Maw. Lastly, before anyone asks, the yellower color of the reflections is due to how Halo PC does environment shaders. I'm not sure how to fix this. UPDATE: I've been asked by a couple people about why the flashlight fix is exclusive to retail Halo PC and the trial. There is no technical reason. Actually, the reason this fix doesn't apply to Halo Custom Edition is because there may be maps that use custom flashlights, and these would be affected by the change. Therefore, to preserve the map author's intended experience, the fix is disabled on Halo Custom Edition. Similar to the shader/fog fix, I added a compile-time flag you can set if you want to build a chimera.dll file that has the fixes enabled on all versions.
  8. Well, what can I say? Halo's a dark game.
  9. This cover is AMAZING.
  10. I'm working on a new map format that is intended to solve a few problems: Halo's tag space limit is only 23 MiB Halo is fragmented into different versions, with what seems like around 25% of the player base on the retail Halo PC version and the rest on Custom Edition Halo has some tag data features locked away that requires mods to fix, namely PCM audio and 32-bit environment textures Halo has an issue where indexed tags count towards the limit, resulting in potential crashing when using non-English loc.map files from certain languages of the game if you are close to the tag space limit when building for English The new format we're coming up with should aim to alleviate these issues. These are the following features being devised: Extended tag space (23 MiB ---> 48 MiB or 64 MiB depending on what we can get Halo to load successfully without an LAA patch through further testing) In all honestly, unless you have an excessively large BSP, it's unlikely that most maps will exceed 48 MiB of tag space All clients that load these maps support PCM audio and 32-bit environment map textures, giving you the option for the best quality textures and audio All clients that load these maps will also support indexed tags properly without it counting against the tag space limit Maps will work on both demo and full version (including both the retail Halo PC release and Custom Edition), with two separate "blobs" for each Each tag "blob" shares raw data and model data, so only BSPs and tag data have to be different between blobs This means tag data will be twice as large, but zstandard should mostly alleviate this issue If loaded on Custom Edition, ting volume and stun values are automatically fixed All stock multiplayer maps are indexed and CRC32'd, ensuring they will work over the Internet if joining a server provided that all tags are present and accounted for As for enabling this, you will need to ensure you have Custom Edition resource maps present. If you are on Halo Custom Edition, you already have that. If you are on the retail version of the game or the demo version, refer to this topic: I wanted to put this here before I started releasing tools that actually let you build these maps. I don't imagine I'll actually receive very much input about this, but I figured it was worth a try. It's worth noting that it isn't difficult to implement these things. Other mods are welcome to implement these changes, and if I do finish this, I'll document as much as I can about it.
  11. As @Sunstriker7 stated, modern PCs won't care. 64 - 23 = 41, thus Chimera will increase memory usage by a fixed 41 MiB. Extra RAM usage does NOT directly impact frame rate unless your system is starved of RAM. Most gaming PCs have at least 8 GiB of RAM, with the latest gaming PCs typically having 16 GiB of RAM or more. Not everyone is on a modern PC, so let's look at an old PC. Halo's system requirements are listed here: https://www.systemrequirementslab.com/cyri/requirements/halo-combat-evolved/10234 Halo recommends 512 MiB of RAM. We're talking about a PC from 2003, so 512 MiB was what was mid-ranged (perhaps slightly higher) back then. Pretty much every desktop PC sold within the past 10 years has had well over 512 MiB of RAM. 2-4 GiB was pretty common in 2008 with Core 2 Duo CPUs which seem to be pretty commonplace with Latin American players. But let's assume, for a moment, you were on a mid-ranged gaming PC from 2003 and you had 512 MiB of RAM. Would 41 MiB be a lot? 41 MiB / 512 MiB = around 8%. So, that means that if you're on a PC that is so old that you have only half a gig of RAM, an additional 8% of your total RAM will be used. I really don't think this is going to be noticeable if you're just running Halo and maybe a few things in the background and, again, your PC just so happens to be THAT old. Of course, if you're running a dedicated server, it's a slightly different discussion. If you're trying to host Halo on a box with only 512 MiB of RAM, then if the game normally takes up 100 MiB but now has to take up 141 MiB, the number of games you can run simultaneously is reduced from around 4 to now around 3. It's unlikely this will be a big deal for most people, but if you're the type of person that thinks it's a good idea to host about 200 Sniper Gulch servers, you're going to be needing another 8.6 GiB. All-in-all, 41 MiB is a small price to pay for a more than doubling of the tag space. That said, we were considering 48 MiB tag space instead of 64 MiB. This would mean only an extra 25 MiB instead of 41 MiB which might matter if you're trying to run against Halo Combat Evolved's absolute minimum requirement of 128 MiB of RAM. However, those systems probably shouldn't be used for playing even stock Halo. ...or games in general.
  12. So, first test! I want to see how well 64 MiB works on people's systems. As such, I've compiled a release of Chimera that increases the tag space usage. You shouldn't need any LAA patch for this to work, but if you do, let me know. Download: chimera-1.0.0.r698.44ada2d.7z I also got a couple questions asked from people: Does this mean Chimera will support Open Sauce maps? No. What does this mean for people who don't have Chimera (such as HAC2 or OS users)? The map format should be fairly straightforward to implement, and if I do this, I'll post documentation. I'm not planning on adding any tag extensions in the vein of Open Sauce. Anyway, if it works, let me know. Or if it doesn't, let me know. You'll know it didn't work if the game presents a "Can't allocate memory" sort of error message from Halo.
  13. Screw cheaters in multiplayer games. They are why anticheat exists, and anticheat is probably the second worst thing to come to PC gaming next to aggressive DRM. I'm 100% for this stuff being shut down.
  14. I fixed a crashing issue that occurred if you used chimera_load_ui_map or backed out of a server being spammed to join (it uses the same function to disable playing main menu music). This issue was reported yesterday, so thanks to the person who found it!
  15. If you want to remove AFKs, use the afk_kick command. AFKs aren't going to be detected as campers because they aren't technically camping. This is because camping implies some sort of strategical advantage to standing in one spot. Doing absolutely nothing, however, isn't very strategic to either you or your team. Basically, the whole point of the anti-camp script is to prevent players who are utilizing an aspect of the game not desired by the host. However, you aren't utilizing said aspect if you aren't killing. In fact, people who normally complain about camping probably won't accuse you of camping if you stand in one spot without gaining kills. They'd instead accuse you of being AFK (if you aren't moving) or they'd just kill you since you're basically free k/d. And there are some aspects where you may want to not move a lot. For example, if it's CTF and both teams have the flag, you may stand in one spot for a period of time rather than move around the map, exposing yourself. tl;dr - It's intentional, because being AFK is not the same as camping. Use afk_kick instead.
  16. 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
  17. Yes. Go to My Activity Streams on the top-right corner, click Unread Content, and click RSS on the top-right corner of that.
  18. I've been working on a new model compiler. It'll be a while before we see it, but nevertheless, I have plans for it! I've also done some more work on the wiki! The bitmap tutorial has been updated with information regarding cube maps and bitmap formats. I've also added a new tutorial for creating sounds. The sound tag tutorial discusses: Setting up your data folder structure Sound classes Split permutations Audio formats Resampling Remixing Sound tag generation Pitch ranges I've yet to see a sound tag tutorial quite as in-depth as mine, so check it out at https://github.com/SnowyMouse/invader/wiki/Creating-a-sound More tutorials are on the way.
  19. Invader is a work-in-progress, open source, cross-platform toolkit for creating Halo: Combat Evolved maps. There are a number of tools that come with Invader: invader-archive - CLI program for creating archives of all of the tags required to build cache files invader-bitmap - CLI program for generating bitmap tags invader-bludgeon - CLI program for backhanding uncooperative tags invader-build - CLI program for building cache files from scenario tags invader-compress - CLI program for compressing cache files invader-dependency - CLI program for listing the dependencies of a given tag OR the tags that depend on a given tag invader-edit-qt - GUI program for editing tags invader-extract - CLI program for extracting tags from a map invader-font - CLI program for generating font tags invader-index - CLI program for generating a list of all of the tags in a cache file or resource map (useful for invader-bitmap) invader-info - CLI program for getting metadata of a cache file invader-refactor - CLI program for renaming tags (or directories of tags) without breaking references invader-resource - CLI program for generating resource map files (i.e. bitmaps.map, sounds.map, loc.map) invader-sound - CLI program for generating sound tags ... and (hopefully) more programs to come! You may be wondering, why am I taking time to replace the Halo Editing Kit, something that already works fine? I'm glad you asked (or I asked?)! The Halo Editing Kit... ...is closed source. This means that you cannot make changes to it or add functionality without resorting to modifying the .exe file directly. Also, information has been obfuscated away through compilation. Invader is open source. ...is unsupported. Since it's closed source, you cannot rely on the developers to issue any updates to fix problems with the program. If they never update it, then it is the final version you get. An ideal program should never need updated, but the HEK is very far from ideal. Because Invader is open source, anyone may fork and support Invader at any time. ...is limited. Since it's closed source, you have to modify the .exe file directly in order to make changes to it. If you don't, you're limited to building 384 MiB cache files. Also, singleplayer maps are tied to the resource maps you built them with, thus users must have the same exact bitmaps.map and sounds.map you used to ensure the correct assets are displayed/played. Invader does away with most of Halo's arbitrary limits, even the 384 MiB cache file size limit (it's 4 GiB now!). ...was made for older PCs. As robust as Windows's backwards compatibility may be, even it has limitations, especially with Win32 GUI programs like Guerilla and Sapien. Invader runs natively on 64-bit x86-based PCs. ...is slow. This is due to thousands of unnecessary checks as well as the program, itself, not being compiled with optimizations. Building all stock multiplayer maps with tool.exe takes over 4x as long as Invader. ...only works on Windows. Not everyone uses Windows, and Wine compatibility on Linux is, at best, a mixed bag especially in regards to the GUI-based applications Sapien and Guerilla. Invader natively runs on both Windows and Linux without having to worry about Wine. tl;dr: You can't guarantee the Halo Editing Kit will continue to work indefinitely, and it doesn't meet all of our needs anymore. Invader is here to fix that. I recommend reading this post for more information on why it is important that the Halo Editing Kit should be replaced: Site: https://invader.opencarnage.net/ Source code: https://github.com/SnowyMouse/invader Builds: https://invader.opencarnage.net/builds/nightly/download-latest.html Original version of this post (for posterity):
  20. Hello and welcome!!!
  21. Some news today! I've reworked some bitmap-related things, including some details about mipmap generation and error handling. This isn't going to affect most bitmaps, but accuracy is accuracy! The GitHub repository has also been moved to https://github.com/SnowyMouse/invader. If you currently have the master branch of the Invader repository checked out using git, you can switch to the new upstream URL by running these commands: git remote set-url origin https://github.com/SnowyMouse/invader.git git pull People have requested tutorials for using Invader on the Invader Discord, so I've made the first tutorial: how to create a bitmap tag. You can find this at https://github.com/SnowyMouse/invader/wiki/Creating-a-bitmap. I'm planning on posting more there, later, such as a tutorial on how to make a map (after some prerequisite tools are finished). I probably won't post any of them here, as most people on this forum don't really use Invader.