Skeetendo

’Cause all games were better on the GBC

You are not logged in.

#1 2012-02-19 09:04:58

Xellos
New member
Registered: 2012-02-12
Post 4/5

Starter Always Loyal

Does anyone know what to change in order to make your starter pokemon not immune to level-loyalty limits? What I mean by this is that usually when you catch a pokemon and raise its level too high and you don't have the correct badge(s), then it will disobey you in battle and such. However, since RBY, which has continued into GSC, how does one change it so that your starter pokemon is not immune to this phenomenon?

Thanks.

Offline

#2 2012-02-19 11:00:59

Miksy91
Member
Registered: 2010-10-16
Post 788/2,308

Re: Starter Always Loyal

Whether a pokemon may disobey you or not depends on its ID number.
So basically, I believe every time you use one of the four "FIGHT" commands with your pokemon, the game checks the OT of that pokemon and if OT = "PLAYER" --> Skip calling asm code for "whether to obey you or not".

Later...

I found what should solve the problem: Change the byte in 0x34410 to 00 (00 = nop (= no instruction performed)).
Anyway, might as well explain why to do that.

Before the code, the game stores the ID of the used in-battle pokemon in register pair hl.

$34405
ld a, (D1A1) (loads a register with the value at $D1A1 in ram (used for one of two bytes determining PLAYER's ID)
cp (hl) (compares the values of register a with register hl's (=compares the first byte of PLAYER's ID with the first byte of used pokemon's ID)
jr nz, $4411 (if the bytes are not same, go to offset $34411)
inc hl (increases register pair hl by one --> [hl] = "second byte of used in-battle pokemon's ID")
ld a, (D1A2) (loads the second byte of PLAYER'S ID to register a)
cp (hl) (the same thing again)
ret z (if bytes are same --> return to the code loaded before-hand)
$34411 (right after ret z)
ld hl, (D57C) (loads value in $D57C into hl (="checks how many badges PLAYER has")
etc.

And the following code is used for checking if player has defeated Clair or other gym leaders which make it possible to make traded pokemon obey you and stuff like that.

Last edited by Miksy91 (2012-02-19 11:03:29)

Offline

#3 2012-02-19 14:57:09

Xellos
New member
Registered: 2012-02-12
Post 5/5

Re: Starter Always Loyal

Hmm I'm not sure if I clearly articulated what I wanted and you may have misunderstood. I don't want it so that all pokemon will obey regardless of level or Trainer ID. I want those things to stay. I just want to make it so that your starter pokemon (in this case Chikorita, Cyndaquil, and Totodile) do not always obey just because they are your starter.

What I'm trying to do is independent of trainer ID because even a pokemon's OT ID is the same as yours, if you level too it up too high without correct badges, it will disobey. I want this to be possible with starters, too.

Offline

#4 2012-02-19 15:09:13

YamaArashi
New member
Registered: 2012-01-21
Post 2/8

Re: Starter Always Loyal

No. Only traded pokemon will disobey if their level is too high. Starters are not special in any way.

Offline

#5 2012-02-19 17:11:46

ElectrikeInc
Member
Registered: 2012-02-14
Post 25/120

Re: Starter Always Loyal

I think you can do it by turning the starter into a gift Pokemon where the OT is from Elm or something. This is because only traded Pokemon disobey, which has been stated by everyone else on this thread. Therefore, you can make the starter count as a traded Pokemon (with a different ID) and it won't always obey. The Pokemon's ID cannot be the same as yours in order to disobey.


I haven't been on this site for a very long time. Sorry about that! >.<
I am probably not going to get very far in the ROM projects that I've started, at least until I get more experience hacking, so I apologize.

Offline

#6 2012-02-19 17:25:48

Miksy91
Member
Registered: 2010-10-16
Post 789/2,308

Re: Starter Always Loyal

Starter pokemon is obviously the one you receive for starting out in your hack ?
In that case you can assume that no one cheats him-/herself a pokemon before receiving the starter and after "give pkmn" command is gone through, you just change the bytes at $DA30-DA31.

Or...you can do it properly by modifying the asm code I posted here.

Last edited by Miksy91 (2012-02-19 17:26:56)

Offline

Board footer

Powered by FluxBB