I need YOU to write hacks for Booster's Lab

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

Old topic!
The last post in this thread is over 60 days old. Posting in this thread will be considered a bump, so please make an attempt to be courteous if you go ahead with it.

If the last post is over 6 months old, it may instead be a better idea to start a new topic. If you aren't sure about what to do, feel free to ask a staff member for help, or try to locate a 'general questions'-type thread if it exists in this (sub-)forum.
  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: 5817
    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
    Professional Whatever
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4441
    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: 5817
    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
    Professional Whatever
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4441
    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: 167
    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: 1462
    Age: 20

    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
    Professional Whatever
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4441
  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
    Professional Whatever
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4441
  11. Feb 5, 2016
    zxin
    Perfectionist
    "I'm sorry Mario, but your princess is in another castle."
    Join Date: Dec 26, 2014
    Location:
    Posts: 1166
    Age: 107
    Mind fixing those links? I'd like to give this a try myself.
     
  12. Feb 5, 2016
    Doors
    Professional Whatever
    "Life begins and ends with Nu."
    Join Date: Jan 13, 2011
    Location: Lasagna
    Posts: 4441
  13. Feb 5, 2016
    zxin
    Perfectionist
    "I'm sorry Mario, but your princess is in another castle."
    Join Date: Dec 26, 2014
    Location:
    Posts: 1166
    Age: 107
  14. Feb 10, 2016
    Polaris
    Enjoying this wild Maze of Life
    "What're YOU lookin' at?"
    Join Date: Jan 18, 2013
    Location: 1000 battles, how many victories?
    Posts: 1112
    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
    Jpzarde Online
    Senior Member
    "I, Ikachan. The Life and Documentary of the OrigiNAL SQuiD."
    Join Date: Feb 13, 2015
    Location: Canada
    Posts: 178
    Age: 19
    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: 850
    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: 5817
  19. May 12, 2017
    EnlightenedOne
    Eyyyy.
    "Deaths: 4000"
    Join Date: Apr 23, 2013
    Location: Development HEAVEN
    Posts: 892
    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: 5817
    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.