Easy win code for Taco Master (PCSE00771). This one is a bit complicated, so I left my notes in it. It was easy enough to set the Required number of completed orders to earn a gold medal in a stage to 1. The problem was that if this code was activated after an order was already completed, this put the game in a state where it didn't know what to do, so it just did nothing, locking the game until fixed. I could have just added a note saying "Hey! Activate this BEFORE you start making orders. or it'll crash!" but that's lame and I don't like seeing games crash... Plus it was fun to find a way to do this.
After the code, I'll add a write up for using code caves to make a "Pointer Condition" code, since that was what was required and we don't have it as a code type. Maybe it's used by someone in another game, maybe it's lost to the sands of time. Who cares, it was fun!
Memory for this game is stored like this:
We can easily set A and B to 1 to make winning easy. Completing an order will set both C and D to 1. But if we've already completed an order, before activating the code, the game sees that we have completed more orders than we were given, as it will not give us more orders than required for gold medal. C and D cannot be bigger than A.
To fix this, I tried locking C, D and E at 0. This just puts the game in an infinite loop that never actually completes. I also tried locking them to 1. This lets us do a single order, but then the game notices C and D=2 for a brief moment, locking the game. It then corrects itself to C and D=1, so the game thinks the stage has already been completed, still locking the game, but not actually finishing it.
What we needed to do was have a code that looks at C and asks "Is this bigger than 1?" and fixes that immediately, resetting all the problem areas back to 0s. The problem here is that these values are a pointer and we don't have a way to mix a conditional code with a pointer like we can with Pointer Compression and Pointer MOV. There just simply isn't a "Pointer Condition". We have to make one ourselves. We needed a static address. So, I've made one.
I started by setting A and B to 1 as we needed. Then I also used some blank spaces nearby to add a new address (0x839FFFF0). I placed this before the pointer by using a negative offset, because that area was very close and always blank. The area it led to was at the end of Segment 2, where there's a big padded area just full of 0s. Hopefully the game never uses this area. I also added a pointer in the static address's area to help with Pointer MOV later on. So now we basically have:
Great. We have a small code cave and a pointer to jump back to the normal code. I tried using Pointer MOV to copy A to 839FFFF0 directly, but it looks like Pointer MOV has to have the same Level on both sides of the command. I couldn't send the data from a level 3 pointer to a level 2 or static address. It had to be a level 3 to level 3. That's why I've added in the fake pointer in the code cave, so that I had an extra level to use to point to A (839FFFF0 + offset 0x0 + offset 0x10 + offset 0x70)
Now that we have a static code cave at 839FFFF0 and A copied to X, we can simply do a condition code. All we need to do is check if X is greater than 1. This gives us 3 states that the game can be in:
First, X=0, this state is perfect and will win the game in 1 turn and the code will do nothing.
Second, X=1, This state has either won the game or will lock up in one turn. The code will do nothing, as this is where we WANT the game to be.
Third, X=2 or more, This state is bad and will lock the game up. The code will now reset C, D and E to 0 (also changing X to 0). Completing 1 more order after this will win the game.
After the code, I'll add a write up for using code caves to make a "Pointer Condition" code, since that was what was required and we don't have it as a code type. Maybe it's used by someone in another game, maybe it's lost to the sands of time. Who cares, it was fun!
Code:
# Title: Taco Master
# Region: US
# Version: 1.00
# Type: NoNpDRM
# Code Author: Yohoki
# Source: https://gbatemp.net/threads/vitacheat-finalcheat-database.485343/page-116#post-8538407
# ID: PCSE00771
_V0 Instant Gold - Finish 1 Order to Win
$3202 851DFFE8 00000010
$3200 00000000 00000068
$3300 00000000 00000001 #set gold medal number to 1
# --------------------
$3202 851DFFE8 00000010
$3200 00000000 0000006C
$3300 00000000 00000001 #set bronze and silver to 1
# --------------------
$3202 851DFFE8 00000010
$3200 00000000 FFFFFFF0
$3300 00000000 839FFFF0 #add fake pointer to static address 839FFFF0
# --------------------
$0200 839FFFF0 851DFFE8 #add extra tier to main pointer to use pointer MOV
# --------------------
$8203 851DFFE8 00000010
$8200 00000000 FFFFFFF0
$8200 00000000 00000004
$8800 00000000 00000000
$8603 839FFFF0 00000000
$8600 00000000 00000010
$8600 00000000 00000070
$8900 00000000 00000000 #pointer MOV number of orders to static address
# --------------------
$D801 839FFFF4 00000001 #check if static address is bigger than 1
# -------------------- #if (Yes) {then
$7002 851DFFE8 00000010
$7000 00000000 00000070
$7702 00000000 00000000
$0003 00000004 00000000 #set important values to 0
Code:
0000000A 000B000C 000D000E
A= Number required for gold medal
B= Number required for bronze medal. Silver medal is calculated as: (A-B)/2 . If A=6 and B=4 then Silver=5.
C= Number of orders given (completed or not)
D= Number of orders completed
E= Number of orders failed.
To fix this, I tried locking C, D and E at 0. This just puts the game in an infinite loop that never actually completes. I also tried locking them to 1. This lets us do a single order, but then the game notices C and D=2 for a brief moment, locking the game. It then corrects itself to C and D=1, so the game thinks the stage has already been completed, still locking the game, but not actually finishing it.
What we needed to do was have a code that looks at C and asks "Is this bigger than 1?" and fixes that immediately, resetting all the problem areas back to 0s. The problem here is that these values are a pointer and we don't have a way to mix a conditional code with a pointer like we can with Pointer Compression and Pointer MOV. There just simply isn't a "Pointer Condition". We have to make one ourselves. We needed a static address. So, I've made one.
I started by setting A and B to 1 as we needed. Then I also used some blank spaces nearby to add a new address (0x839FFFF0). I placed this before the pointer by using a negative offset, because that area was very close and always blank. The area it led to was at the end of Segment 2, where there's a big padded area just full of 0s. Hopefully the game never uses this area. I also added a pointer in the static address's area to help with Pointer MOV later on. So now we basically have:
Code:
#In the Game's normal area
839FFFF0 ... 0000000A 000B000C 000D000E
# .....
#In a galaxy far far away at address 839FFFF0
851DFFE8 000X
Now that we have a static code cave at 839FFFF0 and A copied to X, we can simply do a condition code. All we need to do is check if X is greater than 1. This gives us 3 states that the game can be in:
First, X=0, this state is perfect and will win the game in 1 turn and the code will do nothing.
Second, X=1, This state has either won the game or will lock up in one turn. The code will do nothing, as this is where we WANT the game to be.
Third, X=2 or more, This state is bad and will lock the game up. The code will now reset C, D and E to 0 (also changing X to 0). Completing 1 more order after this will win the game.
Last edited by Yohoki,











