PokéBase - Pokémon Q&A
5 votes
2,902 views

Hi, I'm playing Gen 2 (Crystal on cartridge). I'm trying to gather PP UPs from Kenji on Route 45, I've gotten 1 from him so far, and someone I know also playing the same game has received several. In each of these instances, it has been us calling Kenji. Most of the time he is training, but occasionally asks you to come to Route 45 (on the day, or tomorrow) and hands you a free PP UP (no rematch).

I am wondering whether anyone knows what the expected number of PP UPs is if he is called every day, say over 1 week? More generally, does anyone know the mechanics of the game in this regard?

I assume it is no different for Kenji than other trainers who hand out items, though that's just a guess.

It seems there isn't much info on this online. This post mentions timers and so on, but concerns trainers calling you, rather than you calling them for items.

by
edited by
I cannot make heads or tales of the assembly coding of crystal on github but maybe someone else here is more versed in the language.
no dude I couldn't find anything on this. Here's what bulbapedia says :
PP Up    Given by Blackbelt Kenji after calling him and visiting when he asks*     C
so even bulbapedia doesn't know what's the probablity of getting it. Maybe you were just unlucky in this.

2 Answers

3 votes
 
Best answer

Roughly you will get from 9 or 10 PP Ups every 30 days, but there's a pattern as it is not entirely random every day. The following is my own reading through the GitHub code, and tested on a real game too. I would like to further discuss if something was not clear.

Technically, Kenji has a secret daily countdown timer that, when it reaches 1, then when you call Kenji during the DAY (10 am - 6 pm), he will ask you to visit. If the timer reaches 2, then he will tell you to visit the next day. If you obtained the PP UP, then the daily countdown timer will reset to a random number between 3 and 6. If you did not call him or claimed the item, then the timer will be reset the next day in the same fashion.

So first, if you're just beginning to gather PP UP's, on any given day, without any info, you will have a 1/6 chance that Kenji will be on a break. It does not matter if you just registered him that same day. So you will need to call every day to check when he is on a break, but rest assured that this first step will take you at most six days.

Now for example, let's assume you obtained a PP UP from Kenji on a Monday. Then the next time Kenji will be on a break will be a random day between Wednesday and Saturday, with equal probability (1/4). And the corresponding "call me tomorrow" will pop up the day before (between Tuesday and Friday). So you should still be checking every day, but at least you know exactly a range of days where you should be expecting it. So let's say you got the next PP Up on Thursday, so now you know will receive the next one on a random day between Saturday and Tuesday of the next week. And so on and so forth...

Those are the probabilities, now for rough averages. From these numbers you'll get between 1 and 4 PP Ups a week (more commonly 2). No more or less. That's about 6 to 15 every month (30 days). Let's make a calendar starting from "Monday 1" (the first day you got a PP Up and you are keeping track)

Worst case scenario: you get PP Up every 5 days every time! The dates you get a PP Up are

Monday 1 - Saturday 6 - Thursday 11 - Tuesday 16 - Sunday 21 - Friday 26 (a total of 6 times)

Best case scenario: you get PP Ups every 2 days!

Monday 1 - Wednesday 3 - Friday 5 - Sunday 7 - Tuesday 9 - Thursday 11 - Saturday 13 - Monday 15 - Wednesday 17 - Friday 19 - Sunday 21 - Tuesday 23 - Thursday 25 - Saturday 27 - Monday 29 (a total of 15 times)

Of course, those extreme scenarios are just as common as encountering a shiny Pokémon with perfect IV's. You will more commonly get from 9 or 10 PP Ups after 30 days. So I hope that finally answers your question.

PS: Very briefly, if you're interested about the other trainers (Alan, Gina, etc) every time they call there is roughly a 6% to 9% chance they will give you an evolution stone. The Pokéfans will give nuggets with 25% chance, Jose will give you a Star piece with 22 % chance and Tiffany will give Pink Bows with 4% chance.

by
selected by
Oh snap I didn't find the reset timer when I looked through.  Nice job and thank you for that!  So, his taking a break response is not random it is just the amount of days between each break "x" being a random number from 3-6?  I don't know if I can convert my answer to a comment or if someone else has to do that but, this is the better answer.
Thank you for your time looking through the code!
Thank you. I am new to the site so I'm glad the info came out. Of course, I credit the GitHub contributors. If you are interested and exploring the mechanics a bit more, here are the code sources where you can see Kenji.

- Whenever you call Kenji: https://github.com/pret/pokecrystal/blob/7d3ea88611efbc2f9b903063e2816b1cae1bad35/engine/phone/scripts/hangups.asm#L152
- Whenever you talk to Kenji on Route 45: https://github.com/pret/pokecrystal/blob/7d3ea88611efbc2f9b903063e2816b1cae1bad35/maps/Route45.asm#L49
- The Kenji daily timer: https://github.com/pret/pokecrystal/blob/7d3ea88611efbc2f9b903063e2816b1cae1bad35/engine/overworld/time.asm#L125
For this one, https://github.com/pret/pokecrystal/blob/7d3ea88611efbc2f9b903063e2816b1cae1bad35/engine/overworld/time.asm#L125.  From line 136 to 143 what is the 11% and add 3 doing?  I don't know assembly code very well and just was figuring it out as I go.  It is always good to find more people to add to the base of knowledge.
Ok, so each line is executed sequentially, top to bottom.
First: "call Random" generates a number between 0 and 255. In other words, 8 binary digits 0-1, for example: 11011010
Second: "and %11" basically takes the last two digits of the previous number. So now from the example we have 10. This is the easiest way to generate a random number in a different range than 0-255. In this case two random digits will be any value between 0 and 3.
Third, "add 3" basically adds 3 to the result. After this, the random number is effectively between 3 and 6. In our example 10 in binary is the number two, so the final number is 5.

I learned assembly when I started studying this code a while ago so I totally understand. Just take it one step at a time. I hope it was helpful.
Thank you!  Some of it is pretty intuitive and just finding the references but, then This part made no sense until you explained it.
8 votes

Ok, so after watching Crystal_'s video and then, looking through the code from GitHub and testing it for myself, I think I figured it out.

First, in crystal version, Kenji does not call for a rematch ever so, this is not a possibility to interfere with your PP UP collecting.
Second, he will not call you to let you know when you can come and collect a PP UP from him.
Whenever Kenji call you he will say:

"Hey (Player's Name)! This is Kenji!
Are you still on your journey? I remain dedicated to my training. Oooooaaarrrgh!
Anyway, we’ll chat again!
"

Finally, you have to call him in order to find out when you can talk to him to get a PP UP. How does it work?

When calling Kenji, he has his greeting:

"Kenji here..."

and time-based response:

"(Player's Name)! Beautiful morning, hey?" During MORNING hours (4am-9:59:59am)
(Player's Name)! Beautiful weather, hey?" During DAY hours (10am-5:59:59pm)
(Player's Name)! Beautiful moonlight, hey?" *During NIGHT hours (6pm-3:59:59am)

and then... he has his 3 possible responses that are chosen randomly.

  1. "I apologize, but I don’t have time to chat while I am in training!
    I’ll have time to chat tomorrow!
    Yiiihah!
    "
  2. "I’m in training now. I apologize, but call me back another time.
    Oooooaaarrrgh!
    "
  3. His lunch break response which differs depending on morning, day, and night.

• “I plan to take a lunch break, so come see me then! Ayiiiyah!” (Morning)
• “I’m taking a break on ROUTE 45! Why not drop by if you are free?” (Day)
• “I rested up over my lunch break. Now it’s time to resume training! Ooooryaah!” (Night)

and then he will give you his farewell:

"Anyway, we’ll chat again!"

Now the important part is the third part, response, this is where it is decided if he will have a break or not.
In my findings and testing, I found that I could not find him directly on break any day I called. I would only get the 1. response where he tells me he has time tomorrow. Now, this is because he cannot have a break unless he tells you "I can chat tomorrow" making the 3 responses the game has to choose from to be only 2 choices. Since the lunch break response can't be triggered w/o the prior "we can chat tomorrow", it will fail as a choice returning it as a "call back another time" response. This makes your chances of getting a "we will chat tomorrow" response a 1/3 chance.

So, you have a 1/3 chance to trigger his "we can chat tomorrow" response, which guarantees the following day to be a lunch break day. Now, on lunch break days, you can only collect the PP UP from him during DAY hours. If it is MORNING, he hasn't gotten to break yet. If it is NIGHT, you missed your chance for a PP UP and have to wait until the next time.

If anything is unclear and needs clarification, let me know and I will do my best! This is all assuming the code from GitHub is accurate and true to the original game and that I had found all relevant information to Kenji and this gift event in the code.

See RareCandyBar's Answer for a more complete answer.

Other source used for reference Bulbapedia

by
edited by
Hi, I'd like to discuss further. I studied these mechanics a few months ago and even got all items and trainer rematch rates figured out, etc. It's just too much for the Bulbapedia contact list to handle in my opinion (I mentioned it in the discussion site of Pokegear too). I think you're missing a key variable which is a daily countdown that sets Kenji on a break when it reaches 1. Only then you can call him and he'll be on a break and he will give you a PP UP after visiting him. After getting the item, the timer resets to a random number between 3 and 6 (or it resets the next day if you did not called/visited). When the timer is at 2 (one day remaining), then Kenji will tell you to call the next day (response 1)
So, of course, calling on any given day the timer can have a value between 1 and 6, so there's a 1/6 chance that the timer is at 1. The "call me tomorrow" response is just a friendly reminder to call the next day but it is not mandatory.
If you plan to gather a lot of pp ups over time, then after getting one, the next day (and the next 3 days after) you'll have a 1/4 chance that you'll receive the "call me tomorrow" response, to get the pp up the day after. Rest assured that you will get a pp up at most after 5 days. (and 3-4 days on average). I hope I wasn't too confusing. I can point you out to code on the Github if you want, or write a more formal answer overall. Yours was very thorough by the way.
Thank you!  I try to provide a complete answer for things that I question while trying to answer the questions.  I would appreciate the code on github now that I know I missed something my curiosity is making me want to know what I missed XD.  Thank you!

Curiosity killed the cat but, the cat had 9 lives lol
I commented below with references to the code too! Just to not repeat the same comment here. Cheers