I need YOU to write hacks for Booster's Lab

Discussion in 'Modding Discussion' started by Noxid, Oct 19, 2014.

  1. Oct 19, 2014
    Noxid
    In my body, in my head
    "Life begins and ends with Nu."
    Join Date: Aug 28, 2009
    Location: The Purple Zone
    Posts: 5721
    So you mighta saw that I finally added the hackinator to BL
    If you haven't, what the heck are you reading this for? Go download the latest version.

    Now, the great renaissance of the hackinator is that it lets you write customizable patches that people can load into BL and apply to their game. The hack files are in XML format, and you can edit them with any text editor (although I recommend something with some syntax highlighting like Notepad++)

    Specifically there are a few elements that I've defined and I'll try to explain them as best I can because XML is dumb and my implementation is even dumber

    So, here's a breakdown of a couple of my sample hacks.

    Basic information:
    First off, all XML files start with the XML version on the first line. You just gotta copy-paste this, pretty simple.
    Next we have the root node, which is a <hack>. You can only have one per file and in there is where you put all the stuff. It has one optional attribute, "name", which appears at the top of the panel.

    Next, is a <panel>. You could in theory place all your fields in the root <hack> node, but it won't look very good. If you're familiar with Swing layout managers, then the hack node uses a BoxLayout and panels use a GridBagLayout. There are a few gridbagconstraints you can use to arrange the elements by setting them as attributes on any child node of <panel>:
    'col' sets the column of the grid. Children are parsed in order and anything after it will be placed into the same column until you change it again. However, if you add a new child <panel>, then IT's layout starts at column 0 without affecting the parent's.
    'width' and 'height' are not currently implemented but planned to be. This is how many "cells" in the grid subsequently added elements take up.
    Currently the gridy attribute (the 'row') is locked at RELATIVE, meaning elements added in a column get put on the bottom.
    panels can also have a 'title' attribute, which will generate a titled border around them.

    The next most important element is the <field> tag, which lets you define a variety of elements depending on what you have set the 'type' as. Most field elements have an 'offset' attribute, which is where their relevant data gets patched to, and a 'size' indicating how many bytes of data are being changed

    [type='label']
    This is just a simple text label. Setting the size or offset does nothing, as labels never generate patches. Use this to tell your users what to fill in.

    [type='text']
    A plain text entry field. It will attempt to load the memory at the offset into the text field. Please keep in mind that if the size is 4, 2 or 1 it will assume that the value is a number and any other sizes are text. There isn't any checking for input validity at the moment, so hope whoever uses it puts the right values in! \o/
    Size defaults to 4 so if you are just modifying an int then you don't need to specify it, but it doesn't hurt to either in case I arbitrarily change the specification for no reason.

    [type='flags']
    Generates a set of checkboxes for selecting various flags. valid sizes for flag fields are 4, 2 and 1 bytes only. Each of the checkboxes have to be defined as <checkbox> elements inside the field element. A flags field may look like this:
    Code:
    			<field type="flags" size="1" offset="0x48f49c">
    				<checkbox name="0x01" value="0x01" />
    				<checkbox name="0x02" value="0x02" />
    				<checkbox name="Ignore solid" value="0x04" />
    				<checkbox name="Don't break when hit wall" value="0x08" />
    				<checkbox name="0x10" value="0x10" />
    				<checkbox name="Break blocks" value ="0x20" />
    				<checkbox name="Pierce blocks" value="0x40" />
    				<checkbox name="0x80" value="0x80" />
    			</field>
    
    The value of each checked checkbox gets OR'd together then applied to the address. Note that you don't have to have your values in order, nor do they have to be only single bit masks but it probably works best if they are.

    More field types TBA

    Player Physics:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <hack name="Player Physics">
    	<panel>
    		<panel title="water physics">
    			<field type="label">Max run speed:</field>
    			<field type="label">Max fall speed:</field>
    			<field type="label">Gravity</field>
    			<field type="label">Rising gravity</field>
    			<field type="label">Jump speed</field>
    			<field type="label">Walk speed</field>
    			<field type="label">Air control</field>
    			<field type="label">Friction</field>
    			
    			<field type="text" size="4" offset="0x4156E8" col="1"/>
    			<field type="text" size="4" offset="0x4156EF" />
    			<field type="text" size="4" offset="0x4156F6" />
    			<field type="text" size="4" offset="0x4156FD" />
    			<field type="text" size="4" offset="0x415704" />
    			<field type="text" size="4" offset="0x41570B" />
    			<field type="text" size="4" offset="0x415712" />
    			<field type="text" size="4" offset="0x415719" />
    		</panel>
    		
    		<panel title="regular physics" col="1">
    			<field type="label">Max run speed:</field>
    			<field type="label">Max fall speed:</field>
    			<field type="label">Gravity</field>
    			<field type="label">Rising gravity</field>
    			<field type="label">Jump speed</field>
    			<field type="label">Walk speed</field>
    			<field type="label">Air control</field>
    			<field type="label">Friction</field>
    			
    			<field type="text" size="4" offset="0x415712" col="1"/>
    			<field type="text" size="4" offset="0x415729" />
    			<field type="text" size="4" offset="0x415730" />
    			<field type="text" size="4" offset="0x415737" />
    			<field type="text" size="4" offset="0x41573E" />
    			<field type="text" size="4" offset="0x415745" />
    			<field type="text" size="4" offset="0x41574C" />
    			<field type="text" size="4" offset="0x415753" />
    		</panel>
    	</panel>
    </hack>
     
  2. Oct 19, 2014
    Reddeh Le Steddeh
    Simpatizador de Sovieticos
    "..."
    Join Date: Aug 3, 2014
    Location: Somewhere in England.
    Posts: 369
    Thanks Noxid, lots of fun'll be had with this.
     
  3. Oct 19, 2014
    Doors
    Still Dog Month
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4393
    Very neat. I'll see what I can do with this.

    I made a title screen hacker. You can use this to change the framerects and render position of the title screen (and 'new' and 'load') to easily give the ability to have a big nice picture for your title screen. It should work maybe.

    I've updated it so it looks less shitty and can render more stuffs.
     
  4. Oct 19, 2014
    Noxid
    In my body, in my head
    "Life begins and ends with Nu."
    Join Date: Aug 28, 2009
    Location: The Purple Zone
    Posts: 5721
    gr8

    I've added a couple new field types in the latest version

    [type='info']
    Like the label, but goes into a non-editable text pane wrapped in a scroll panel.
    This means you can fit a lot more text without sacrificing your layout space.

    [type='data']
    Fill this with hex pairs from the assembler or whatever and you can have big ready-to-go hacks. The patches are applied in order, so you could do something like write a custom NPC and then add some addresses that let you customize how fast it moves or something after.
     
  5. Oct 19, 2014
    Doors
    Still Dog Month
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4393
    Turns out i fucked up, change the render location for 'new' and 'load' to 321, 0 when using the title screen hack and you can't move where the cursor shows up yet
    i'll fix it later
     
  6. Oct 20, 2014
    Kayya
    Senior Member
    "I, Ikachan. The Life and Documentary of the OrigiNAL SQuiD."
    Join Date: Aug 30, 2013
    Location: ᕕ( ᐛ )ᕗ
    Posts: 164
    Age: 17
    I made a hack that can easily change the title screen's song.
    You just put the song's number in and it'll change the title screen's song to that.
    After seeing that Doors made a title screen hack, I thought a title screen song hack would go along well with it, so... I made it.
    (admittedly, i needed a bit of help from noxid to get it to work)
     
  7. Oct 21, 2014
    BLink
    Novice Member
    "Man, if only I had an apple..."
    Join Date: Apr 5, 2013
    Location: Ollydbg?!
    Posts: 1446
    Age: 19

    My infamous IBF hack:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <hack name="IBF command">
    	<panel>
    		<field type="label">NPC 352</field>
    		<field type="info">
    			Infinite Booster Fuel
    			An TSC hack that let's you fly forever with booster when set. Set = *IBF0002 Not set = *IBF 0000 NOTE: it says set/unset even if you die so you might want to throw an extra flag into the death script.
    		</field>
    			
    		<field type="data" offset="0x46d5d0">
             a1 d8 5a 4a 00 03 05 e0 5a 4a 00 82 79 01 49 0f
    		 85 4e 79 fb ff 82 79 02 42 0f 85 44 79 fb ff 82
    		 79 03 46 0f 85 3a 79 fb ff a1 e0 5a 4a 00 83 c0
    		 04 50 e8 f9 42 fb ff 83 c4 04 83 f8 02 74 0c c7
    		 05 f4 37 49 00 00 00 00 00 eb 0a c7 05 f4 37 49
    		 00 02 00 00 00 83 05 e0 5a 4a 00 08 e9 76 7c fb
    		 ff 00 00 a1 e8 e6 49 00 83 3d f4 37 49 00 02 74
    		 03 83 e8 01 a3 e8 e6 49 00 e9 16 86 fa ff
    		</field>
    		
    		<field type="data" offset="0x415c5d">
            e9 d1 79 05 00 90 90 90 90 90 90 90 90
    		</field>
    		
    		<field type="data" offset="0x424eaf">
            e9 1c 87 04 00
    		</field>
    	</panel>
    </hack>
    
     
  8. Oct 21, 2014
    Doors
    Still Dog Month
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4393
  9. Oct 25, 2014
    WoodenRat
    Pirate Member
    "Heavy swords for sale. Suitable for most RPG Protagonists. Apply now!"
    Join Date: Dec 26, 2007
    Location: Lithuania
    Posts: 1940
    Noxid I can barely write 20 words without forgetting what I was writing about and you're talking about programming codes wait what was I
     
  10. Feb 4, 2016
    Doors
    Still Dog Month
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4393
  11. Feb 5, 2016
    zxin
    Perfectionist
    "What're YOU lookin' at?"
    Join Date: Dec 26, 2014
    Location: The bedroom, ladies.
    Posts: 1041
    Mind fixing those links? I'd like to give this a try myself.
     
  12. Feb 5, 2016
    Doors
    Still Dog Month
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4393
  13. Feb 5, 2016
    zxin
    Perfectionist
    "What're YOU lookin' at?"
    Join Date: Dec 26, 2014
    Location: The bedroom, ladies.
    Posts: 1041
  14. Feb 10, 2016
    Polaris
    Wanderlust
    "What're YOU lookin' at?"
    Join Date: Jan 18, 2013
    Location: Toriningen Party!
    Posts: 1106
    Age: 18
    Hey, Noxid! I was going to be a productive member of society for once and try to write the Infinite Mimiga Mask hack, but it turns out that Hina already did...a year ago, actually. But since that was several months before the Hackinator reached completion, I'll link it as a small service.

    Thanks for all of your work on Booster's Lab, by the way. c:
     
  15. Feb 10, 2016
    Jpzarde
    Senior Member
    "I, Ikachan. The Life and Documentary of the OrigiNAL SQuiD."
    Join Date: Feb 13, 2015
    Location: Canada
    Posts: 173
    Age: 18
    Yes, many thanks for Booster's Lab, and thanks to those who made hacks for the hackinator!
     
  16. Feb 10, 2016
    Bionicobot
    Surprisingly not single anymore.
    Bobomb says: "I need a hug!"
    Join Date: Aug 16, 2014
    Location: Earth
    Posts: 845
    Age: 16
    Wait, it isn't actually complete though. The patch to make it function with the npcs was never put into it.
     
  17. Feb 10, 2016
    Hina
    ...
    "What're YOU lookin' at?"
    Join Date: Oct 17, 2011
    Location: somewhere...
    Posts: 1034
    Age: 20
    I really did?

    Then be a kind soul and finish it if you want to
     
  18. Jul 13, 2016
    Noxid
    In my body, in my head
    "Life begins and ends with Nu."
    Join Date: Aug 28, 2009
    Location: The Purple Zone
    Posts: 5721
  19. May 12, 2017
    EnlightenedOne
    I just finished a mod... and I have no idea how.
    Bobomb says: "I need a hug!"
    Join Date: Apr 23, 2013
    Location: Development HEAVEN
    Posts: 861
    Age: 19
    Hey babe I wrote the remaining bullet tables and labeled the unknown one that was in misc-bullets.

    So now you can edit whimsical stars/curly's nemesis/spur trails/blade slashes etc.
    Even the clear_all_enemies one is in there though pretty sure editing that won't really work as intended.

    I don't think I'm finished either there might be more patches to come.

    EDIT: I made two more for FPS and Booster Fuel (Separating 0.8 and 2.0 even), the link above should house all of them.

    EDIT 2: lol I did this from 11 PM to 5 AM and now there is Map Boss Health. I'm gonna go die on my bed now.
     
    Last edited: May 12, 2017
  20. May 12, 2017
    Noxid
    In my body, in my head
    "Life begins and ends with Nu."
    Join Date: Aug 28, 2009
    Location: The Purple Zone
    Posts: 5721
    thanks dude
    I've included them in the most recent update, as well, a note for anyone who uses github the hacks directory is part of the repo so you can submit a pull request to https://github.com/taedixon/boosters-lab and submit hacks that way now as well.