• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Forum moderator applications are now open! Click here for details.
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

[ARCHIVE] Simple Questions (SEARCH BEFORE ASKING A QUESTION)

Status
Not open for further replies.

DoesntKnowHowToPlay

Tiny Umbrella with Lots and Lots of Good
265
Posts
12
Years
  • Seen Feb 24, 2024
Hacking the types with ASM.

Do you actually need ASM for that? The type advantages are handled by a (somewhat strange) table somewhere, so you should just be able to change things to types past the normal ones without any ASM. Might have to break a few limiters and you'd obviously have to edit the type graphic, but IIRC there was space for a few freebie types.

(not to mention that if you retype curse and don't have eggs, ??? is perfectly usable as long as you either use the phys/spec split or break all the related checks)

http://www.pokecommunity.com/showthread.php?t=266698 relevant
 

destinedjagold

You can contact me in PC's discord server...
8,593
Posts
16
Years
  • Age 33
  • Seen Dec 23, 2023
A simple question: what are the variables which are safe to use in a Ruby ROM?

I am just recently introduced to vars (don't ask), and I created my very first script using vars, but I am not sure what variables are safe to use. :3
 

GoGoJJTech

(☞゚ヮ゚)☞ http://GoGoJJTech.com ☜(゚ヮ゚☜)
2,475
Posts
11
Years
Well DJG, there is no list for Ruby, but maybe deleting certain events that use them can ensure they're free. However, a var can hold a value from 0-65535, so you may only need like two. So just to be safe, vars in the 4000 area. I'm pretty sure 8000 and higher are unsafe or temporary

Pokefreake
Use NSE or in un-lz, import an image, write the import offset, import pal, and don't click automatically fix pointers.
 

destinedjagold

You can contact me in PC's discord server...
8,593
Posts
16
Years
  • Age 33
  • Seen Dec 23, 2023
Well DJG, there is no list for Ruby, but maybe deleting certain events that use them can ensure they're free. However, a var can hold a value from 0-65535, so you may only need like two. So just to be safe, vars in the 4000 area. I'm pretty sure 8000 and higher are unsafe or temporary

Yesh, the very first var I used is 4000, since I based it on Birch's script where he's being chased by a Poochyena.

Thankies for the info, by the way~ ;)
 

kearnseyboy6

Aussie's Toughest Mudder
300
Posts
15
Years
  • Seen Jun 22, 2019
Hi all, I am new to ASM and it's going pretty well. Here's my code

.text
.align 2
.thumb
.thumb_func
.global nature

main:
push {r0-r1, lr} \\lets me work with r0 and r1
ldr r0, .POKE_DATA \\ Loads the address of specified below as a 'word'
ldr r1, [r0] \\ Loads the value of the address into r1 as a 'word'
add r1, r1, #0x1 \\ adds 1 to the word in r1
str r0, [r1] \\ stores the 'word' in r1 to the address in r0.
pop {r0-r1, pc} \\ puts the registers back :)


.align 2
.POKE_DATA:
.word 0x02024284 \\address of the the PID

Now is their a reason why this doesn't add 1 to the PID? I know its encrypted but I expected a bad egg instead of nothing. 100% sure the script works.
 

karatekid552

What happens if I push it?....
1,771
Posts
11
Years
Hi all, I am new to ASM and it's going pretty well. Here's my code



Now is their a reason why this doesn't add 1 to the PID? I know its encrypted but I expected a bad egg instead of nothing. 100% sure the script works.

Just because it doesn't make a bad egg, doesn't mean it doesn't work. Did you open up the memory viewer at that address and check it before and after? (I haven't read your asm yet, I'm going back now..)

Edit: You made a very common mistake. One sec...

Code:
.text
.align 2
.thumb
.thumb_func
.global nature

main:
push {r0-r1, lr} \\lets me work with r0 and r1
ldr r0, .POKE_DATA \\ Loads the address of specified below as a 'word'
ldr r1, [r0] \\ Loads the value of the address into r1 as a 'word'
add r1, r1, #0x1 \\ adds 1 to the word in r1
[B][COLOR="Red"]str r1, [r0][/COLOR][/B] \\ stores the 'word' in r1 to the address in r0.
pop {r0-r1, pc} \\ puts the registers back 


.align 2
.POKE_DATA:
.word 0x02024284 \\address of the the PID

Str and ldr tend to confuse people.

ldr works like this:

ldr rX, [rH]
<-----------

str works like this:

str rX, [rH]
------------>

Understand? They move in different directions. You load right to left, and store left to right. There are very few commands that work left to right, and str is one of them, which trips people up. Remember, [] signify the data at an address. So, str r0, [r1] would read the PID as a memory address and try and store the address in r0 there. Not good..XD
 
Last edited:

Elaitenstile

I am legend
1,908
Posts
11
Years
  • Age 24
  • Seen Feb 27, 2015
(not to mention that if you retype curse and don't have eggs, ??? is perfectly usable as long as you either use the phys/spec split or break all the related checks)

http://www.pokecommunity.com/showthread.php?t=266698 relevant

The only problem being I'm positive that the escapade move Struggle is the ??? type. I'm not sure about that but I think so. However Curse is a defensive move so yeah, the re-typing wont effect it

A simple question: what are the variables which are safe to use in a Ruby ROM?

I am just recently introduced to vars (don't ask), and I created my very first script using vars, but I am not sure what variables are safe to use. :3

You'd be surprised to know that after a certain point (near Fortree I think) the game stats using vars like 0x1, 0x2, 0x3 etc.
 
Last edited:

kearnseyboy6

Aussie's Toughest Mudder
300
Posts
15
Years
  • Seen Jun 22, 2019
Spoiler:


Sorry KK552, your method worked, I must have understood JPAN wrong. It worked like a charm! I got my bad egg :) Now to fix the checksum and I will be rolling. Thanks for the push!

Also has anyone edited the PID? Or is it impossible haha!
 
Last edited:

karatekid552

What happens if I push it?....
1,771
Posts
11
Years
Yes it does thanks! Thanks for clearing it up the [] as well, I now understand how values are pulled from an address without moving the address too XD. But are you 100% on the str though? In JPANs doc it quotes thumb assembly doesn't swap the convention unlike other languages:



I am happy to change my thinking but when I use this code (modifies HP) it works perfectly. I also have memory viewer on auto update too :)
Spoiler:

What he meant there, was that str and ldr don't look like this:

ldr r1, [r0]
str [r0], r1

see how they are opposites?

~~~~~~~~
Judging from what I know, that code should not work.....
Seeing as how I wrote my own forme change code... I know how str works.....


Edit: what threw me off was the ldrh. That code will work. One sec....


.text
.align 2
.thumb
.thumb_func
.global healthbooster

main:
push {r0-r1, lr}
ldrh r0, .POKE_DATA /*You are loading an address into r0, always load the full thing, not half. Though, it may not make a difference, not a good habit.*/
ldrh r1, [r0] /*load what is at the address .POKE_DATA into r1. Here you are loading a word, shouldn't you be loading a half-word?*/
add r0, r0, #0x64 /*Add 100 to r0, and place on r0. Looks like, we are moving to the next pokemons HP, which is 100 bytes away...*/
strh r0, [r1] /*Store the bottom half of the address of the second pokemon at the random number you loaded from the pokemon data.*/
pop {r0-r1, pc}


.align 2
.POKE_DATA:
.word 0x02024287


Creating a correct version now....

Code:
.align 2
.thumb
.thumb_func
.global healthbooster

main:
    push {r0-r1, lr}
    ldr r0, .POKE_DATA
    ldrh r1, [r0]
    add r1, r1, #0x64
    strh r1, [r0]
    pop {r0-r1, pc}


.align 2
.POKE_DATA:
    .word 0x02024287

That should work. I also seriously confused myself while correcting the first one. Let me fix that... Fixed.
 
Last edited:

kearnseyboy6

Aussie's Toughest Mudder
300
Posts
15
Years
  • Seen Jun 22, 2019
What he meant there, was that str and ldr don't look like this:

ldr r1, [r0]
str [r0], r1

see how they are opposites?

~~~~~~~~
Judging from what I know, that code should not work.....
Seeing as how I wrote my own forme change code... I know how str works.....


Edit: what threw me off was the ldrh. That code will work. One sec....


.text
.align 2
.thumb
.thumb_func
.global healthbooster

main:
push {r0-r1, lr}
ldrh r0, .POKE_DATA /*You are loading an address into r0, always load the full thing, not half. Though, it may not make a difference, not a good habit.*/
ldrh r1, [r0] /*load what is at the address .POKE_DATA into r1. Here you are loading a word, shouldn't you be loading a half-word?*/
add r0, r0, #0x64 /*Add 100 to r0, and place on r0. Looks like, we are moving to the next pokemons HP, which is 100 bytes away...*/
strh r0, [r1] /*Store the bottom half of that address as the new HP on the original first pokemon.*/
pop {r0-r1, pc}


.align 2
.POKE_DATA:
.word 0x02024287


So, effectively, you stored the address of the second pokemon as the HP of the first pokemon. Which would have maxed it out.

Creating a correct version now....

Oh god! Sorry this is not my code! I edited it for my new one! This is the original (I know it's not 100% efficient!)

Spoiler:


Thanks for the help!
 

karatekid552

What happens if I push it?....
1,771
Posts
11
Years
Oh god! Sorry this is not my code! I edited it for my new one! This is the original (I know it's not 100% efficient!)

Spoiler:


Thanks for the help!


No problem.:P

Spoiler:


Edit: Don't worry about being inefficient. Game freak was SUPER inefficient in their code. When you start looking at the in game code, you will see what I mean.
 

Aethestode

Hacker
1,700
Posts
16
Years
  • Age 30
  • Seen Aug 14, 2023
How to remove the need of Badge to use HM moves outside of battle for Firered?

e.g. I want to remove the need of Soul Badge to use the move, Hm: Surf.
 

karatekid552

What happens if I push it?....
1,771
Posts
11
Years
That's the thing. If i remove the checkflag, it'll set the badge on. I don't want that. I want the player to be able to use the HM freely without the need of the badges.

No, not that script. The script that is called when you want to use an HM. It has a check flag, that needs to be removed. If it doesn't check the flag, it will just move through without the need of a badge. You are like the 500th person to ask that on this thread.
 
Status
Not open for further replies.
Back
Top