Assuming you want to just use the Oak intro, but want to skip the naming of the player and the rival, which bytes would you change, and which ones would stay??
setvar 0x8002 0x1 //aka bulbasaur setvar 0x8003 0x1 // aka pound....... callasm 0xsomething...this would check the whole party for a bulbasaur with pound. -_- i am not talking about checkattack.
Littlesuggestion here, even though I don't hack FR, but I think it'd be hella dank cool asf 420
How about perhaps possibly maybe new weather effects? As in, in the OW and in battle?
.text
.align 2
.thumb
.thumb_func
main:
ldr r6, .battleType @check if it's a trainer battle
ldrb r6, [r6]
cmp r6, #0x4
beq oldStuff
mov r6, r0
ldr r2, .trainerData @table to trainer data
ldr r0, =(0x20386AE)
ldrb r0, [r0]
sub r0, r0, #0x1
mov r1, #0x28
mul r1, r1, r0
add r2, r2, r1 @pointer to trainer's name
mov r4, r2
mov r0, r6 @pokemon
mov r1, #0x7
ldr r3, =(0x804037C +1) @set OT name
bl linker
mov r0, r6 @pokemon
mov r2, r4
sub r2, r2, #0x1 @gender byte
lsl r2, r2, #0x18
lsr r2, r2, #0x1F @Isolate first bit on the last byte, which is gender
mov r1, #0x31
ldr r3, =(0x804037C +1) @set OT gender
bl linker
oldStuff:
mov r6, r0
mov r5, #0x0
ldr r0, =(0x8040B46 +1)
bx r0
linker:
bx r3
.align 2
.battleType:
.word 0x2022B4C
.trainerData:
.word 0x823EAF4
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r6, lr}
ldr r0, =(0x20370B8) @slot of pkmn to modify
ldrb r1, [r0]
mov r2, #0x64
mul r1, r1, r2
ldr r0, =(0x2024284)
add r0, r0, r1
mov r6, r0
ldr r2, .trainerData @table to trainer data
ldr r0, =(0x20370BA) @var 0x8001 = trainer's ID
ldrb r0, [r0]
sub r0, r0, #0x1
mov r1, #0x28
mul r1, r1, r0
add r2, r2, r1 @pointer to trainer's name
mov r4, r2
mov r0, r6 @pokemon
mov r1, #0x7
ldr r3, =(0x804037C +1) @set OT name
bl linker
mov r0, r6 @pokemon
mov r2, r4
sub r2, r2, #0x1 @gender byte
lsl r2, r2, #0x18
lsr r2, r2, #0x1F @Isolate first bit on the last byte, which is gender
mov r1, #0x31
ldr r3, =(0x804037C +1) @set OT gender
bl linker
pop {r0-r6, pc}
linker:
bx r3
.align 2
.battleType:
.word 0x2022B4C
.trainerData:
.word 0x823EAF4
Pokemon Storage Addon: Full Party Swap
So last time I did just a quick swap one Pokemon at a time. Here I made some code basically "mass-swap" the storage and the current Player's party all at the same time.
How to insert:
Compile and insert into free space the following routine:
Spoiler:
Code:.text .align 2 .thumb .thumb_func main: push {r0-r5, lr} mov r3, #0x0 loop: cmp r3, #0x6 beq StorageToParty ldr r0, .UNUSED mov r1, #0x50 mul r1, r1, r3 add r0, r0, r1 @dest ldr r2, .PARTY mov r1, #0x64 mul r1, r1, r3 add r1, r1, r2 @src mov r2, #0x50 @size push {r3} ldr r4, =(0x8040B08 +1) bl linker pop {r3} add r3, r3, #0x1 b loop StorageToParty: mov r3, #0x0 loop2: cmp r3, #0x6 beq UnusedToStorage ldr r0, .PARTY mov r1, #0x64 mul r1, r1, r3 add r0, r0, r1 @dest ldr r2, .STORAGE mov r1, #0x50 mul r1, r1, r3 add r1, r1, r2 @src mov r2, #0x50 @size push {r3} ldr r4, =(0x8040B08 +1) bl linker pop {r3} ldr r0, .PARTY mov r1, #0x64 mul r1, r1, r3 add r0, r0, r1 @dest push {r3} ldr r4, =(0x803E47C +1) @calc stats bl linker pop {r3} add r3, r3, #0x1 b loop2 UnusedToStorage: ldr r0, .STORAGE @dest ldr r1, .UNUSED @src mov r2, #0xF0@size lsl r2, r2, #0x1 ldr r4, =(0x8040B08 +1) bl linker updateCounters: ldr r0, .STORAGE sub r0, r0, #0x1 ldrb r0, [r0] ldr r1, = (0x20370B8) strb r0, [r1] ldr r0, =(0x2024029) ldrb r0, [r0] ldr r2, .STORAGE sub r2, r2, #0x1 strb r0, [r2] ldr r0, =(0x2024029) ldrb r1, [r1] strb r1, [r0] pop {r0-r5, pc} linker: bx r4 .align 2 .UNUSED: .word 0x202402C @this is exactly 600 bytes of space .STORAGE: .word 0x203C001 @storage location; use JPAN's save block hack if you want .PARTY: .word 0x2024284 @player's party
Here is a compiled version:
Code:3F B5 00 23 06 2B 0F D0 20 48 50 21 59 43 40 18 20 4A 64 21 59 43 89 18 50 22 08 B4 1E 4C 00 F0 34 F8 08 BC 01 33 ED E7 00 23 06 2B 18 D0 19 48 64 21 59 43 40 18 16 4A 50 21 59 43 89 18 50 22 08 B4 15 4C 00 F0 21 F8 08 BC 12 48 64 21 59 43 40 18 08 B4 11 4C 00 F0 18 F8 08 BC 01 33 E4 E7 0B 48 0A 49 F0 22 52 00 0B 4C 00 F0 0E F8 08 48 01 38 00 78 0A 49 08 70 0A 48 00 78 04 4A 01 3A 10 70 08 48 09 78 01 70 3F BD 20 47 2C 40 02 02 01 C0 03 02 84 42 02 02 09 0B 04 08 7D E4 03 08 B8 70 03 02 29 40 02 02
Usage:
Just callasm to the routine +1. Be careful though, always check that the storage isn't empy. You can swap out your entire party for no Pokemon and create a nice little bugged questionmark when you open the Pokemon menu (the one in my avatar :3).
This time instead of a script I present to you a video :D
Link in case embedded fails: https://www.youtube.com/watch?v=haPE6iohJMY
Will this works?FBI agent;8510724 [h1 said:Party Item Checker:[/h1]
How it works:
So I use the variables 0x8000 and 0x8001again.
0x8000 Should be set to Pokemon species (2 bytes)
0x8001 Needs to be set to Item ID (1 byte...can be changes to 2 if you inserted more than 255 items)
case 1:
If a Pokemon in your party has the item specified by 0x8001 and the species matches 0x8000, return that Pokemon's slot
case 2:
If 0x8000 is set to 0x0 (no species), the routine will search your whole party and return the slot of the Pokemon holding the item specified in 0x8001
case 3:
If no Pokemon in the party are holding the item, returns 0x6.
The result will be stored in variable 0x8000. The result will, obviously, be 0x0-0x5 (slot) for item found and 0x6 for not found.
How to insert:
Compile and insert into free space the following routine:
Spoiler:
Code:.text .align 2 .thumb .thumb_func main: push {r0-r6, lr} ldr r6, =(0x2024029) ldrb r6, [r6] mov r5, #0x0 PokeLoop: cmp r6, r5 beq none mov r0, #0x64 mul r0, r0, r5 mov r1, r0 ldr r0, =(0x2024284) add r0, r0, r1 mov r1, #0xC ldr r2, =(0x803FBE8 +1) bl linker ldr r3, .ITEM ldrb r3, [r3] cmp r0, r3 beq PokeMatch next: add r5, r5, #0x1 b PokeLoop PokeMatch: ldr r4, .MON ldrh r4, [r4] cmp r4, #0x0 beq found ldr r2, =(0x803FBE8 +1) mov r0, #0x64 mul r0, r0, r5 mov r1, r0 ldr r0, =(0x2024284) add r0, r0, r1 mov r1, #0xB bl linker ldr r4, .MON ldrh r4, [r4] cmp r0, r4 bne next found: ldr r2, .MON strb r5, [r2] pop {r0-r6, pc} none: ldr r0, .MON mov r1, #0x6 strb r1, [r0] pop {r0-r6, pc} linker: bx r2 .align 2 .ITEM: .word 0x020270B8 + (0x8001 * 2) @ITEM ID .MON: .word 0x020270B8 + (0x8000 *2) @PKMN SPECIES
Here's a compiled version:
Code:7F B5 18 4E 36 78 00 25 AE 42 22 D0 64 20 68 43 01 1C 15 48 40 18 0C 21 14 4A 00 F0 1E F8 0F 4B 1B 78 98 42 01 D0 01 35 EE E7 0D 4C 24 88 00 2C 0C D0 0E 4A 64 20 68 43 01 1C 0B 48 40 18 0B 21 00 F0 0B F8 06 4C 24 88 A0 42 EC D1 04 4A 15 70 7F BD 03 48 06 21 01 70 7F BD 10 47 BA 70 03 02 B8 70 03 02 29 40 02 02 84 42 02 02 E9 FB 03 08
Usage:
In a script,
setvar 0x8000 0xspecies
setvar 0x8001 0xItemID
callasm 0x[Where you inserted the above routine +1]
That's it!
...
callasm 0x800001
comparevar 0x8000 0x85[eevee]
if 0x85 goto @have
...
#org @have
callasm 0x800001
comparevar 0x8000 0x1[master ball]
if 0x1 goto @have2
...
#org @have2
msgbox @1 0x6
...
If anyone could help me out implementing Ditto's Imposter ability into Firered, that would be outstanding.
Do you think there would be a way to make a pokemon's offensive and defensive typing different? Like perhaps making a pidgey act like a flying type when dealing damage but act like a psychic type when taking damage. My thought would be to tie defensive typing to personality value so individual pokemon would feel "strong" and "weak" to different things.
I've read through these a couple of times, and have one question is there a way to pre-store pokemon into the PSS to transfer out??; store 2 pokemon which will be traded with current party during an event
Would it be possible to make routines for the forme mons?
Specifically Arceus, Giratina, and Shaymin.
You already have a silent evolution routine working. This handles Deoxys already. The coding to change Rotom's attacks isn't difficult (I was able to do it on my other computer, but it was sloppy.)
You have new hold items made, party item checker, and silent evolution routines that work. If you could mix the 3 then that would probably do the trick (taking into account changing Arceus move type for Judgement. Not difficult though). This would handle Arceus and Giratina.
Shaymin is the most difficult imo. It requires the silent evolution with a time check. That's not too bad in a script. The problems arise when calling the script to change forme at night and in-battle change when it is frozen.
Public routines for formes would be a massive contribution to the entire community. At least, that's how I feel.
I've came up with two new suggestions, both of them about Marts, to allow a better customization of them.
1.- Set different prices for the items regardless the original prices you put on an Item Editor.
2.- Make some items unavailable to purchase after having purchased one, like the TM on latest games.
Will this works?
Because, I want in my script, if I have Eevee holding Masterball then it jumps in an offset and if it has no eevee holding masterball then it jumops in other offset
I don't understand the point in number one. Why would you make a hack with different prices when you can fix the prices in the item editor? It just doesn't make sense to me :/
In the games, "sales" for the big shopping stores can happen randomly. Guessing he may be trying to have some control over it.
Yeah, you call the same routine twice giving a different slot number each time.
I don't understand the point in number one. Why would you make a hack with different prices when you can fix the prices in the item editor? It just doesn't make sense to me :/
ldr r0, =(0x2024284)
ldr r0, =(0x203C001)
2: a way to stop the player using running shoes in certain areas
Updated light ball to raise Pikachu's attack:
Spoiler:
At 3F020: 00 49 08 47 XX XX XX 08 00 00 00 00 00 00 00 00 00 00
Code:.text .align 2 .thumb .thumb_func mov r3, r10 cmp r3, #0x2d beq ball cmp r3, #0x41 bne noboost ldrh r0, [r6, #0x0] sub r0, #0x68 lsl r0, r0, #0x10 lsr r0, r0, #0x10 cmp r0, #0x1 bhi noboost ldr r1, return1 bx r1 ball: ldrh r0, [r6, #0x0] cmp r0, #0x19 bne noboost ldr r1, return1 bx r1 noboost: ldr r1, return2 bx r1 .align 2 return1: .word 0x0803F033 return2: .word 0x0803F037
The map header will allow or prevent the player from being able to run (there are several threads on this topic)
if you search the forums you should be able to do this.
of course if you are looking for a way to do this within a map(some parts of a map you can run, others you cannot), idk.
a script for this would be cool, so we could put green S tiles and as the player ran over them they would stop running and walk, (or visa versa)
Oh, and I'm assuming that renaming the OT of a Pokémon in the PSS would be as simple as using your existing overworld routine, but replacing this line:
with this:Code:ldr r0, =(0x2024284)
Code:ldr r0, =(0x203C001)
I don't understand the point in number one. Why would you make a hack with different prices when you can fix the prices in the item editor? It just doesn't make sense to me :/
For 2, you can do this in a script I believe. Set a flag when the item is purchased and make it impossible to purchase more if that flag is set.