ParaJVE Bugtracker

Viewing Issue Simple Details Jump to Notes ] << ] >> ] View Advanced ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0000017 [ParaJVE] Configuration feature N/A 2008-12-04 10:50 2008-12-05 10:28
Reporter parabellum View Status public  
Assigned To parabellum
Priority low Resolution open  
Status feedback   Product Version Release 0.6.0
Summary 0000017: Implement a generic way to add trainers / patches to roms
Description It could be nice to have, for each embedded game, a 'trainer' menu that would provides the user with ways to cheat the game (inifinite lives, god-mode, ...)

The code of ParaJVE does not have any special routine to handle any specific ROM (it is entirely generic), and unless absolutely necessary, this must stay this way.

So the way to go to add trainer menus would be to add a <patch> tag in the games section of the configuration.xml file. This section would define the patch name, as well as the bytes to alter when the patch is applied.
Additional Information
Tags No tags attached.
Cartridge -
Attached Files

- Relationships

-  Notes
(0000008)
parabellum (administrator)
2008-12-04 10:54

I would need feedback for this idea...
- Do you think it's a good idea, or is it useless ?
- What kind of patch/trainer, and which game would you prioritize?
- Any other comment is very welcome...
(0000009)
parabellum (administrator)
2008-12-04 11:33
edited on: 2008-12-05 12:47

Here is an example of how the patches could be defined in the configuration file (the addresses and data used in this example are completely meaningless, they are just fake place-holders for the sake of this example) :
<game id="MINESTORM" name="MineStorm">
  [...]

  <patches CRC32:system="$A6E4DAC4" CRC32:cartridge="0" >

    <patch type="trainer" label="Infinite Lives" description="...">
      <action type="install">
        <step="overwrite" destination="$E512" data="33" />
      </action>
      <action type="remove">
        <step="reload" destination="$E512" length="1" />
      </action>
    </patch>

    <patch type="trainer" label="Clear Mine Field" description="...">
      <action type="trigger">
        <step="wait"       register="PC"       value="$FE20"   />
        <step="overwrite"  destination="$FE07" data="33 20 00" />
        <step="set"        register="PC"       value="$FE00"   />
        <step="set"        register="A"        value="0"       />
        <step="resume"                                         />
        <step="wait"       register="PC"       value="$FE37"   />
        <step="reload"     destination="$FE07" length="3"      />
        <step="resume"                                         />
      </action>
    </patch>

    <patch type="patch" label="Level 13 Bug-fix" description="...">
      <action type="install">
        <step="wait"      event="t2-timeout" />
        <step="insert"    destination="$E200" data="33 20 55 60" />
        <step="overwrite" destination="$E122" data="33 20 55 60" />
        <step="delete"    destination="$E200" length="$54" />
        <step="copy"      destination="$E292" length="30" source="$E280" />
        <step="reset" />
        <step="resume" />
      </action>
      <action type="remove">
        <step="reload" destination="$E100" length="$0300" />
      </action>
    </patch>

  </patches>

</game>


(0000011)
parabellum (administrator)
2008-12-05 02:47

And an example that requests user input:
  <patch type="trainer" label="Go to Level..." description="...">
    <action type="trigger">
      <step="ask"       prompt="Which level?" var="level" size="UByte" />
      <step="wait"      register="PC"         value="$E800" />
      <step="set"       register="PC"         value="$FD20" />
      <step="overwrite" destination="$FE07"   data="@level" />
      <step="resume"                                        />
    </action>
  </patch>


Mantis 1.1.6[^]
Copyright © 2000 - 2008 Mantis Group
Powered by Mantis Bugtracker