The PokéCommunity Forums (http://www.pokecommunity.com/index.php)
-   Research & Development (http://www.pokecommunity.com/forumdisplay.php?f=195)
-   -   Development Getting the min/max level of your Pokémon party (http://www.pokecommunity.com/showthread.php?t=207337)

 HackMew February 3rd, 2010 2:36 PM

Getting the min/max level of your Pokémon party

# Brief Intro

Here I've got a couple of routines for you. They are designed to get the minimum and maximum levels respectively.

# Description

As you can see, the routines are pretty short and simple so I did not comment them on purpose.
Either way, here's a brief description of what happens:
1. Get the Pokémon party level address into r1.
2. Load the first value into r0, and assume it's the minimum (or maximum) value yet.
3. Loop 5 times, and update the mininum (or maximum) value if needed.
4. Get the LASTRESULT var address into r1 and store the minimum (or maximum) level.
The minimum routine, however, is slighty different because a zero-level is not an acceptable value so there's an extra check to take that into account (otherwhise as long as your team is not full, the minimum level would always be zero, which is no good obviously). That also means the routine will loop up to 5 times rather than always 5 as it happens in the maximum routine.

# The Code

## GetMinPartyLevel

• FireRed/LeafGreen

Code:

```.text .align 2 .thumb .thumb_func .global GetMinPartyLevel main:         push {r0-r3, lr}         ldr r1, .PARTY_LVL         ldrb r0, [r1]         mov r3, #0x5 loop:         add r1, #0x64         ldrb r2, [r1]         cmp r2, #0x0         beq return         cmp r2, r0         bge next         add r0, r2, #0x0 next:         sub r3, #0x1         cmp r3, #0x0         bne loop return:         ldr r1, .VAR         strh r0, [r1]         pop {r0-r3, pc} .align 2 .PARTY_LVL:         .word 0x02024284 + 0x54 .VAR:         .word 0x020270B6 + (0x800D * 2)```
• Ruby/Sapphire

Note: The routine is the same as the FR/LG one; just replace the bottom part with the following:

Code:

```.align 2 .PARTY_LVL:         .word 0x03004360 + 0x54 .VAR:         .word 0x0201E8C2 + (0x800D * 2)```
• Emerald

Note: The routine is the same as the FR/LG one; just replace the bottom part with the following:

Code:

```.align 2 .PARTY_LVL:         .word 0x020244EC + 0x54 .VAR:         .word 0x020275D6 + (0x800D * 2)```

## GetMaxPartyLevel

• FireRed/LeafGreen

Code:

```.text .align 2 .thumb .thumb_func .global GetMaxPartyLevel main:         push {r0-r3, lr}         ldr r1, .PARTY_LVL         ldrb r0, [r1]         mov r3, #0x5 loop:         add r1, #0x64         ldrb r2, [r1]         cmp r2, r0         ble next         add r0, r2, #0x0 next:         sub r3, #0x1         cmp r3, #0x0         bne loop return:         ldr r1, .VAR         strh r0, [r1]         pop {r0-r3, pc} .align 2 .PARTY_LVL:         .word 0x02024284 + 0x54 .VAR:         .word 0x020270B6 + (0x800D * 2) ```
• Ruby/Sapphire

Note: The routine is the same as the FR/LG one; just replace the bottom part with the following:

Code:

```.align 2 .PARTY_LVL:         .word 0x03004360 + 0x54 .VAR:         .word 0x0201E8C2 + (0x800D * 2)```
• Emerald

Note: The routine is the same as the FR/LG one; just replace the bottom part with the following:

Code:

```.align 2 .PARTY_LVL:         .word 0x020244EC + 0x54 .VAR:         .word 0x020275D6 + (0x800D * 2)```

This research document is Copyright © 2010 by HackMew.
You are not allowed to copy, modify or distribute it without permission.

 Spherical Ice February 4th, 2010 4:33 AM

Wow, this routine unlocks some pretty cool stuff, such as a FR/LG Battle Frontier-style thing (the opponents' Pokémon are the same level as your max Pokémon, for example). It's real cool. Nice one, HackMew!

 0m3GA ARS3NAL February 4th, 2010 9:09 AM

don't mean to put ya down, but couldn't this be done with a script as well?

 HackMew February 4th, 2010 9:43 AM

Quote:
 Originally Posted by The Master (Post 5522316) Wow, this routine unlocks some pretty cool stuff, such as a FR/LG Battle Frontier-style thing (the opponents' Pokémon are the same level as your max Pokémon, for example). It's real cool. Nice one, HackMew!
You're welcome :)

Quote:
 Originally Posted by 0m3GA ARS3NAL (Post 5522627) don't mean to put ya down, but couldn't this be done with a script as well?
As far as I know, there's no special that can do that. Feel free to prove me wrong.

 0m3GA ARS3NAL February 4th, 2010 10:22 AM

No specials really it would just be a long script I suppose... Probably much more space-efficient to use your routine... (A script version would require tons of copybyte's and comparefarbytes' as well as knowing RAM locations of variables, it's better to just use your routine and call it with callasm...)

 HackMew February 4th, 2010 12:14 PM

Quote:
 Originally Posted by 0m3GA ARS3NAL (Post 5522765) No specials really it would just be a long script I suppose... Probably much more space-efficient to use your routine... (A script version would require tons of copybyte's and comparefarbytes' as well as knowing RAM locations of variables, it's better to just use your routine and call it with callasm...)
Yeah, indeed. Those routines are definitely more space- and time-efficient then any scripting equivalents.

 cooley February 7th, 2010 6:28 AM

Nice routine. I'll definitely be using this in the long run, thanks a lot!

 xGGxToiZ May 16th, 2010 6:51 PM

*Big big Bump*

Wow. This is so cool!
I could use this for my hack :P

And yeah, it takes less space (about 28 bytes in hex?) than the longer script version.
SO cool. :)

 All times are UTC -8. The time now is 5:34 AM.

© 2002 - 2015 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2014 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.

Acknowledgements
Use of PokéCommunity Assets