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

TCK

Member
  • Content count

    2,939
  • Joined

  • Last visited

  • Raffle Tickets

    0

Reputation Activity

  1. TCK liked a post in a topic by Pfhunkie in Currently Playing   
    Finally went ahead and installed The Outer Worlds to see what it's like. It's pretty good so far but I've heard it ends abruptly. 
  2. TCK liked a post in a topic by Sceny in Currently Playing   
    I've been playing all the main Borderlands games with friends.
  3. VoidsShadow liked a post in a topic by TCK in Command list   
    Found in a Gearbox forum post from 2003. All accepted functions and engine globals, with the exceptions of symbols like + - * /
     
    I did my best a couple years back to scour it and clear it of nonsense strings, I think I got most of them but there may be some remaining. Most that I would guess remain are just value types (for instance object_definition and object_list) which look like commands or globals at a glance without testing.
     
    http://www.mediafire.com/view/9bf1zc41u6uylw2/command_list.txt
     
  4. TCK liked a post in a topic by PiRate in Useless Information You Didn't Need to Know About sleep_until   
    While doing some reversing of Halo to fully integrate client functions into the scripting engine, I came across a curiosity regarding sleep_until.
     
    According to the references I can locate, sleep_until can accept two arguments - one required and one optional.
    Even the internal reference generated by script_doc affirms this:
     
     
    However, sleep_until has 3 parameters, and technically accepts even more arguments.
     
    Note: Any addresses below are for the 1.10 PC client, because most of my notes are on the PC client and have yet to be ported to the CE client. However, what I mention below holds true for the CE client. I am posting this under the CE section because I assume more people would be using Halo script in CE rather than PC.
     
    Below is the parsing function for sleep_until, in Cish (i.e. no guarantees it is legal C), translated from the assembly:
    // Note: I use BOOL below to convey meaning and it does not necessarily // reflect the width of Halo bools, depending on the compiler. // Returns TRUE if the script node referred to by node_id can evaluate // to the value type specified, and FALSE otherwise. // Has side-effects. BOOL parse_script_node_expected(identity_type node_id, enum_short type); BOOL parse_sleep_until(short function_index, identity_type script_node_id) { script_node *primary_node = get_script_node(script_node_id); script_node *function_node = get_script_node(primary_node->value.id); // ------------------------------ // condition argument, required // type: boolean (enum value 5) identity_type condition_node_id = function_node->next_script_node_id; if (condition_node_id == k_invalid_identity || !parse_script_node_expected(condition_node_id, value_type_boolean)) return FALSE; // condition argument is required // ------------------------------ // period argument, optional // type: short (enum value 7) script_node *condition_node = get_script_node(condition_node_id); identity_type period_node_id = condition_node->next_script_node_id; if (period_node_id == k_invalid_identity) return TRUE; // period argument is optional if (!parse_script_node_expected(period_node_id, value_type_short)) return FALSE; // period argument supplied but could not parse to short // ------------------------------ // timeout argument, optional // type: long (enum value 8) script_node *period_node = get_script_node(period_node_id); identity_type timeout_node_id = period_node->next_script_node_id; if (timeout_node_id != k_invalid_identity && !parse_script_node_expected(timeout_node_id, value_type_long)) return FALSE; // timeout argument supplied but could not parse to long return TRUE; } You can probably guess what this third argument and its type is. To confirm its meaning, here is a snippet from sleep_until's evaluation function:
    CPU Disasm Address Hex dump Command Comments 00489980 |. 8B00 MOV EAX,DWORD PTR DS:[EAX] ; EAX <- timeout (3rd argument) 00489982 |. 83F8 FF CMP EAX,-1 00489985 |. 74 0E JE SHORT 00489995 ; never timeout! 00489987 |. 8B12 MOV EDX,DWORD PTR DS:[EDX] ; EDX <- time of function call in ticks 00489989 |. 03D0 ADD EDX,EAX ; EDX <- timeout + function_call_time 0048998B |. A1 6C1D6F00 MOV EAX,DWORD PTR DS:[Globals::lpGameTimeGlobals] 00489990 |. 3950 0C CMP DWORD PTR DS:[EAX+0C],EDX ; lpGameTimeGlobals->game_ticks 00489993 |. 7D 77 JGE SHORT 00489A0C ; jumps to exit sleep_until context if game_ticks >= (timeout + function_call_time) The third argument is a timeout, in ticks relative to the time when sleep_until would be called! An updated description for the function should resemble:
     
    However, because Halo does not verify the number of arguments does not exceed 3, nor their type, Halo will gladly parse, compile, and evaluate the following:
    (sleep_until false 15 3600 "foo" 3.14159265359)  
    Fake edit for those that read this post: you can paste text into the client console by pressing F6. I have no idea if this holds for Mac users, but I found this information out while completing documentation of the console line buffer structure. I am also unsure if this works while using HAC2.
    Real edit: Turns out the timeout is not in absolute ticks, will slowly edit my post to reflect this (done).
  5. TCK liked a post in a topic by Vuthakral in Useless skills   
    I can bend all of my fingers / toes backwards at least 90 degreess; some much more. Except for my thumbs. Also I can bend the tips of all my fingers backwards as well; again except for my thumbs.
  6. Tucker933 liked a post in a topic by TCK in Useless skills   
    I can walk on my hands almost indefinitely. I can even climb one single stair on my hands, or at least I did one time on drugs.
  7. TCK liked a post in a topic by Zatarita in Useless skills   
    As in a deck of cards, or as in carpentry .-.
    bruh
    I don't think anyone can top that
    But it's not useless!!! Don't cut yourself short. People go to school to learn the things we do just tinkering around
    :DD a fellow hand Walker. Like I said before I did gymnastics for 10 years. I'm impressed. Takes a lot of practice c:
  8. Tucker933 liked a post in a topic by TCK in Useless skills   
    I can walk on my hands almost indefinitely. I can even climb one single stair on my hands, or at least I did one time on drugs.
  9. Tucker933 liked a post in a topic by TCK in Useless skills   
    I can walk on my hands almost indefinitely. I can even climb one single stair on my hands, or at least I did one time on drugs.
  10. TCK liked a post in a topic by gbMichelle in Mozz Editing Kit (MEK)   
    Mozz Editing Kit
     
    The MEK is a powerful easy to use set of powerful tools that can be used to mod Halo 1 and other games based on the blam! engine.
    It is fully Windows and Linux compatible.
     
    It comes with:
    Mozzarilla

     
    Mozzarilla is a replacement for Guerilla, it has support for multiple tags directories, exporting single tag blocks, more comment boxes explaining how things work and many tools. Like:
    a model compiler,
    physics compiler,
    animation compiler,
    animation decompressor,
    an option to import bitmaps directly from DDS,
    a batch bitmap converter/optimizer,
    bitmap source extractor,
    sound compiler (currently only Xbox ADPCM and 16bit PCM),
    tag directory error locator,
    string list and hud message compilers,
    converters that allow you to convert basically any type of model to a gbx model, or any object type to any other object type.
     
    It supports Vanilla, Opensauce, Stubbs the Zombie, and (Expirimental) Halo 3 tags.
    It also supports some Misc Halo file types like gametypes.
     
    It also has highly customizable themes (styles) and settings that allow you to choose exactly how you want to use the tool.
     

     
     
    Refinery

     
    Refinery is a tool for extracting tag data from maps, but also for viewing tag data in map files.
    It supports extracting tags from Vanilla Halo 1 PC, Custom Edition, Xbox, Demo.
    But also from OpenSauce and vap maps.
    Halo 2 is partially supported, and Halo 3 Xbox 360 maps have experimental support.
     
    If a map you want to rip is protected then have no fear! Refinery comes with a powerful deprotection option that can intelligently name tags and repair classes based on many heuristics found inside of the map.
     
    It also has a data extraction mode. The data extraction mode instead of extracting tags will extract bitmaps, models, animations, scripts.
    This is really useful if you for instance want to use assets from a map in something other than Halo CE.
     

     
     
    Pool

     
    Pool is a program made to help people who aren't super familiar with tool or command line applications.
    It comes with explanations for all commands, helpful templates, and options to for instance run batch jobs, or multiple simultaneous jobs.
    It also comes with various patches that you can apply to your tool.exe to for instance remove the map file size limit, increase the vertex and index buffer size, and a multi-language compatible resource maps fix.
     

     
     
    But that's not all...
    The MEK also comes with a plethora of 3DS Max scripts that are useful for 3D creation with the Halo engine.
    And there are more tools being worked on that fill different gaps in the open source Halo 1 modding kit. Ones that I am very excited to show you once they're ready.
     
     
    How do I install the MEK?
    There is a few ways to do this. But right now the best way is to get either the MEK or MEKE.
     
    MEKE (The easier to install windows-only version)
    Keep in mind that this version currently updates less frequently.
     
    1. Get the MEK_Essentials_Setup.exe
    Get it from here from here: [MEK Releases]
     
    2. Run the installer (lol)
     
    MEK (Python version, most up-to-date version)
    Installing the Python version of the MEK is actually pretty easy.
     
    1. Get Python from your favorite source.
    if you are on Windows I highly suggest getting it from the Windows store [link].
    The Windows Store version is nice because it automatically installs the right version (64-bit) and you don't need to do anything but just click the button.
    Don't worry, you won't need to log into the store.
     
    2. Get the MEK_Installer_Python.zip
    Get it from here from here: [MEK Releases]
     
    3. Run the MEK Installer
    Now watch out, wherever you put your MEK installer is where the MEK will install, UNLESS you pick an installation directory using the "Browse" option

     
    4. Click install and wait until it is done
     
    After this you are basically set, the files to run the MEK should have appeared in the current folder or whatever folder you chose to install to.
     
    Be sure to frequently run your MEK_Installer.py to check for updates.
     
     
    Credits
    (This section is probably very incomplete)
    Direct contributors
     
    @Moses_of_Egypt @gbMichelle Mimickal
    Other sources of information
    @Kavawuvi @Sparky Opensauce
    Frequent testers
    @Kavawuvi @Vaporeon @MrChromed @Masterz1337 CMT @Jesse @SOI_7 Whix
     
     
    Where can I in real time discuss these tools and how to use them?
    You can do so in the CE Reclaimers Discord Server [link]
    Of course this thread is also a good place to discuss the tools, but keep in mind that the Discord is more frequently checked.
    How can I contribute?
    You can find the sources at our GitHub organization, Sigmmma! [link]
    You can also report bugs on the GitHub repositories' issue pages, here, or in the Discord server. [link]
    You can also tell us what you'd like to see added, or what kind of tools you'd like to see in the future.
     
    Most of the libraries and programs in the MEK are licensed under the GNU General Public License v3.0. [link]
     
    Shout out to invader, another Opensource toolkit made by people who frequently help us out. [link]
     
  11. TCK liked a post in a topic by giraffe in Useless skills   
    I can sleep all day and still be tired.
  12. TCK liked a post in a topic by Sunstriker7 in Useless skills   
    I can cut a deck one handed.
  13. TCK liked a post in a topic by Vuthakral in Useless skills   
    Literally anything to do with the HEK
     
    As a more serious one, I've been whistling along to various songs, instruments, etc since I was very young and as a result now I can whistle just about any song I know, any instrument, etc. The ones I'm the most proud of being able to whistle are Night of Nights, Sandstorm, and most if not all Halo soundtracks
  14. TCK liked a post in a topic by Sceny in Useless skills   
    Does breathing count?
  15. TCK liked a post in a topic by Kavawuvi in Useless skills   
    I can rapidly list the letters in the alphabet in reverse. I don't know a lot of other people who can do that, but it does take a little practice.
     
    I can also write Halo mods.
  16. TCK liked a post in a topic by Tucker933 in Useless skills   
    I'm quite good at clicking my tongue to a tune way faster than anyone I've met, and while I'm almost 30, I can still put my feet behind my head.
     
    These are sounding pretty sexual...
  17. TCK liked a post in a topic by Zatarita in Useless skills   
    Name off some of your useless skills you're low key proud of.
     
    For example.
    I can solve a rubik's cube in under 30s
     
    I'm interested to hear what you got
  18. TCK liked a post in a topic by bobblehob in Show Yourself!   
    Holy fuck it's been a long time... I am following this whole red beard trend too
     
     
  19. Zatarita liked a post in a topic by TCK in Recorded Animations research dump   
    Definitely gonna read all the way through in the next few days, just able to skim at the moment.
     
    Somebody did release a small utility on Halomaps a few years back to make your own recordings in-game and save them as separate files which would be accessible through Opensauce I believe. Would be cool to have a tool compatible with stock CE, if that's what you're talking about doing.
  20. TCK liked a post in a topic by Zatarita in "AWW YEAH" Thread   
    I find irony in this
     
    Edit: my God I didn't realize how far back I was
  21. TCK liked a post in a topic by Calypso in "Everything's fucking shit" Thread   
    Stubbed my toe on kitchen island. Threw my head back in pain. Hit my head on kitchen cabinet.
     
    10/10 Sunday so far
  22. Zatarita liked a post in a topic by TCK in Recorded Animations research dump   
    Definitely gonna read all the way through in the next few days, just able to skim at the moment.
     
    Somebody did release a small utility on Halomaps a few years back to make your own recordings in-game and save them as separate files which would be accessible through Opensauce I believe. Would be cool to have a tool compatible with stock CE, if that's what you're talking about doing.
  23. TCK liked a post in a topic by Zatarita in Recorded Animations research dump   
    Hello!
    I recently moved across country, and I forgot my laptop in the other state -.- This put a lot of my projects on hold, Luckily it's with family. In the meanwhile I fell back to one of my older projects I can tackle. I've been studying recorded animations (RA), and I feel I have gathered enough information for an interesting read. Since I'm also working on scripting for other projects, I felt a good way to get a grasp is to write a program to process them. My goal is to create a IDE for halo script and RAs, since they're so closely related. I've already started writing an interpreter for RAs I call Radium. Hopefully with our collective knowledge we could expedite that a bit.
     
    Recorded Animations: What are they?
    A good way to think of recorded animations is "Emulated input." It's the engine controlling a character during say, a cutscene. A map can have many RAs, they are attached to a unit via script, or Devmode console
    (These will return a true value if it was able to start the RA on the unit, false if there was an issue.)
    recording_play <unit> <cutscene_recording> recording_play_and_delete <unit> <cutscene_recording> recording_play_and_hover <vehicle> <cutscene_recording> recording_play: will play the recording normally
    recording_play_and_delete: plays the recording, and deletes the unit it was attached to after
    recording_play_and_hover: plays the recording, and hovers once done. Think dropship; the pause between in, and out.
     
    You can see the remaining time on, or kill, a unit's RA
    recording_time <unit> recording_kill <unit> Recorded Animations: Where are they?
    RAs can be found in your maps scenario.
     
    To add one to your map:
    open in tag editor of your choosing, and find the Recorded Animations section.
    Add RA into the map. Save the scenario.
    open your scenario in Sapien. Add a biped marker, Assign the biped, give it a name.
    Compile the map, and attach the RA to the unit with the command above (console and devmode) 
     
    (Making one isn't easy right now, but theoretically is possible)
     
    Recorded Animations: How does it work?
    Well, I'll be honest and say I don't know 100%, but here is what I have found out. I haven't completely figured out the differences between the versions yet, this is only version: 4 control version: 4 currently.

    The header is structured as follows:
    struct RecordedAnimationHeader { char Name[32]; byte Version; byte RawAnimationData; byte ControlVersion; byte LengthOfAnimation; int Unknown1; int Unknown2; int DataOffset; int Unknown3; }; To be honest I haven't looked too much into this yet. I haven't concluded if unknown1 and 3 is padding or not. The header is pretty much the information we had available to us in our tag editors. 
     
    The Recorded animation its self is a bit more interesting. This is where I've been spending most of my time
    struct RecordedAnimation { ActorState InitActorState; ActorFocus InitActorFocus; ActionFlags InitActions; short InitWeaponIndex; short InitGrenadeIndex; Float InitVelocityX, InitVelocityY; Float InitFacingX, InitFacingY, InitFacingZ; Float InitAimX, InitAimY, InitAimZ; Float InitHeadX, InitHeadY, InitHeadZ; int SOMETHINGTODOWITHRAV4 int SOMETHINGELSETODOWITHRAV4 Float InitAdjustX, InitAdjustY, InitAdjustZ, Event RecordedAnimationEvents(); //Pseudo code, fight me }; All things prefixed are the units initial parameters for the RA. Most of the events inside of an RA basically just alter these parameters.
     

    Actor State:
    This determines the condition of the unit.
    enum ActorState { Sleep = 0, Alert1, Alert2, Stand1, Stand2, Flee, Flaming }; Actor Focus:
    Determines the units reflexes
    enum ActorFocus { Alert = 0, Relaxed }; Action Flags:
    struct ActionFlags { Nothing = 0x0 Crouch = 0x1 Jump = 0x2 User1 = 0x4 User2 = 0x8 Light = 0x10 LockFacing = 0x20 Action = 0x40 Melee = 0x80 VectorDesync = 0x100 Walk = 0x200 Reload = 0x400 PrimaryTrigger = 0x800 SecondaryTrigger = 0x1000 Grenade = 0x2000 Exchange = 0x4000 };
    Actions are kind of interesting. They act kinda like MIDI. Once the flags are set, if you don't change them back the action will repeat/continue.

    Lock Facing:
    Lock Facing causes all of the viewing vectors to synchronize. Hard Setting an exact facing and aim when a rotation is applied.

    Vector Desync:
    Vector desync causes all of the viewing vectors to desynchronize, allowing for independent control of the three viewing vectors. Move the head, but not the aim or facing for example.
     
    Weapon Index: Current weapon (Primary or secondary)
    Grenade Index: Grenades
     
    Vector2F Velocity:
    Velocity is used to control both walking, and driving. These are floats (I'm assuming since it was originally xbox) but for the most of the time the velocity is set to -1,0, or 1.
     
    (Note if vector desync isn't on you won't be able to alter these independently with events, it will rotate the whole group)
    Vector3F Facing:
    Controls which way the feet are pointing, and which direction the unit will walk.
    Vector3F Aim
    Controls the torso, and where the gun is pointing.
    Vector3FHead
    Controls the looking angle.
     
    Integer SOMETHINGTODOWITHRAV4:
    This is something that is only present in v4. Sometimes it looks like a reference, sometimes a tag. Most the time it's zero. I personally believe it has to do with RAs being called into another RA
    Integer SOMETHINGELSETODOWITHRAV4:
    This one is usually -1; however, there are some circumstances where I see it as something different.
     
    Vector3F InitAdjust:
    This is a final angle update before the RA begins. I believe this is so you can easily rotate an RA after it's been made for final adjustments without having to update all of the other vectors by a small portion over and over.
     
     
    Now the fun stuff.....
    Recorded Animations: Events
    Events are the whole way that recorded animations work. They are a single byte, and usually take a few parameters. There are four primary event types, and they're descriptors on the size of the time it takes to do the action.
        Instant: Instantly does the command.
        One Tick: Does the command in one tick worth of time.
        Byte Time: does the command in a byte sized chunk of time
        Short Time: does the command in a short sized chunk of time.
     
    they take up the first two bits of a byte.
    0x______10 is some function byte tme,
    0x______01 is one tick,
    etc.
     
    Every function has these 4 variations. When I give the functions later I will give you the instant function, to get the others just add the bit mask to it with your desired period.
    Eg.
    0x04 (binary: 1 00) = end
    0x05 (binary: 1 01) = end one tick
    0x06 (binary: 1 10)= end byte time
    0x07 (binary: 1 11) = end short time
     
    The time it takes to do the function is applied BEFORE the event happens. Think of it more as a delay. so if you tell it to do an event to update to primary fire, and you put a 120 tick time on it, it will wait 120 ticks THEN begin firing. If you want to pause AFTER the event, you put a delay on the NEXT event after it.
     
    If there is a time period designated, it will be the next byte or short in the stream before the parameters for the event.
     
    Example as it would show up in hex: rotate everything by (1,3):
    3a 3f 01 03
    3a = event
    3f = time
    01 = DeltaX
    03 = DeltaY
     
    So here are the functions I have found so far:
    Nothing = 0 ()
    End = 0x4 ()
    UpdateActorState = 0x8 (byte State)
    UpdateActorFocus = 0xC (byte Focus)
    UpdateAction = 0x10 (short ActionFlags)
    ChangeWeaponIndex = 0x14 (byte Weapon)
    UpdateVelocity = 0x18 (Float X, float Y)
    Still to be researched = 0x1C
    ChangeFacing = 0x20 (SByte DeltaX, SByte DeltaY)
    ChangeAim = 0x24 (SByte DeltaX, SByte DeltaY)
    Still to be researched = 0x28
    ChangeHead = 0x2c (SByte DeltaX, SByte DeltaY)
    ChangeHeadFacing = 0x30 (SByte DeltaX, SByte DeltaY)
    ChangeHeadAim = 0x34 (SByte DeltaX, SByte DeltaY)
    ChangeAimHeadFacing = 0x38 (SByte DeltaX, SByte DeltaY)
     
    Some of these might be SLIGHTLY off, I'll update these as I learn more; however, the current understanding is these so far

    I'm still doing a lot of studying on how it works; however, for now as a brief dump I wanted to share what I had. I'll keep updating as I find out more c: If you have anything to share please do, it'll definitely help.

    PS Hopefully this wasn't too hard to follow, I will edit for grammar after work.
  24. TCK liked a post in a topic by aLTis in Ascetic   
    Ascetic is a small symmetrical map designed for 4-6 players. Best played on CTF and KOTH but other game types can be fun as well.
     
    The map was originally being made back in 2015 after I had a dream of a small map similar to Sandtrap. I didn't think the map worked well so I stopped working on it. In late 2019 I had an idea that might make the map more interesting: mirroring one side of the map and duplicating the middle building to make the map bigger. After messing around with that idea I got inspired to finish the map. Since the map is still fairly small it allowed me to put a lot of detail on it without hitting the engine limits which I'm used to and that gave me more freedom. I spent a lot of time working on visuals to see how good I can make things look and I hope it shows. The map still isn't perfect and there are some things I'd rather change (I wish I had done something better with the doors in the middle that serve no real purpose) but I don't want to spend any more time working on this since nobody is going to play this map anyway lol.
    There is a backpack weapons script that requires a Chimera build that supports scripting. There are 2 Open Sauce post-processing effects: ambient occlusion and volumetric lighting. Volumetric lighting also requires Chimera to work.
     
    There are a few well-hidden easter eggs in the map. You won't be able to find them using devcam so look for clues first. I challenge all of you to find all of the secrets!
     
    DOWNLOAD: https://mega.nz/#!RP5ihQSb!tSAgsnYzlnB5gUVAMyIMOIFNxx5kJiGHwvb9V71l7vk
     
    Author: aLTis
     
    Thanks to:
    StormUndBlackbird team and everyone else who tested the map
    Solink: Forge Island sky
    Halo CE Refined team: HUD
    Burney: some light textures
    ShikuTeshi: upscaled spartan textures
    MrChromed: upscaled armor cubemap
    CtrlAltDestroy / [ZMT] L33T: backpack weapons
    sbdJazz, Hunter,Iq and Marty McFly: post processing effects
    Some textures are from textures.com
    Some textures are from the map Seclusion
    Some assets are from Halo 3 and Halo Reach
     
    Screenshots:






  25. PopeTX28 liked a post in a topic by TCK in Infint-MP   
    Damn, Infinity takes me back to my good ol' days of just fucking around with AI and cinematics for hours. This looks really nice man.