Jump to content

silverlime

Veterans
  • Posts

    119
  • Joined

  • Last visited

  • Days Won

    1

 Content Type 

Profiles

Forums

Events

Reborn Development Blog

Rejuvenation Development Blog

Starlight Divide Devblog

Desolation Dev Blog

Posts posted by silverlime

  1. As I have implemented Reborn/Rejuvenation AI & Field Effects, I often find myself looking through the scripts of both games. One thing I noticed with Forewarn was that code was added which I think was meant to add the detected move to the AI move memory. However, there seem to be a few problems that I've found (Sorry this is kind of long. I've been working through it to fix it for my game as well):

     

    The code for forewarn starts with this line:

    if self.hasWorkingAbility(:FOREWARN) && @battle.pbOwnedByPlayer?(@index) && onactive

    but this means that if an opponent's Pokemon is the one with Forewarn, it will just skip over activating, meaning that the AI will not detect an opposing Pokemon's moves if it is the one sending out a Pokemon with Forewarn.

     

     

    Then here's the bigger problem:

       if moves.length>0
            move=moves[@battle.pbRandom(moves.length)]
            movename=PBMoves.getName(move)
            @battle.pbDisplay(_INTL("{1}'s Forewarn alerted it to {2}!",pbThis,movename))        
            if (self.index==0 || self.index==2) && !@battle.isOnline? # Move memory system for AI
              warnedMove = PokeBattle_Move.pbFromPBMove(@battle,PBMove.new(move),self)
              if @battle.aiMoveMemory[0].length==0 && warnedMove.basedamage!=0
                @battle.aiMoveMemory[0].push(warnedMove)
              elsif @battle.aiMoveMemory[0].length!=0 && warnedMove.basedamage!=0          
                dam1=@battle.pbRoughDamage(warnedMove,self,@battle.battlers[1],255,warnedMove.basedamage)
                dam2=@battle.pbRoughDamage(@battle.aiMoveMemory[0][0],self,@battle.battlers[1],255,@battle.aiMoveMemory[0][0].basedamage)
                if dam1>dam2
                  @battle.aiMoveMemory[0].clear
                  @battle.aiMoveMemory[0].push(warnedMove)
                end          
              end                    
              if @battle.aiMoveMemory[1].length==0 
                @battle.aiMoveMemory[1].push(warnedMove)        
              else
                dupecheck=0
                for i in @battle.aiMoveMemory[1]
                  dupecheck+=1 if i.id == warnedMove.id
                end
                @battle.aiMoveMemory[1].push(warnedMove) if dupecheck==0
              end 
              if @battle.aiMoveMemory[2][self.pokemonIndex].length==0 
                @battle.aiMoveMemory[2][self.pokemonIndex].push(warnedMove)        
              else
                dupecheck=0
                for i in @battle.aiMoveMemory[2][self.pokemonIndex]
                  dupecheck+=1 if i.id == warnedMove.id
                end
                @battle.aiMoveMemory[2][self.pokemonIndex].push(warnedMove) if dupecheck==0
              end         
            end        
          end

    This code (starting with the line with the comment '# Move memory system for AI') seems to have been copied from the other area in Pokebattle_Battler where the AI remembers which move one of the player's Pokemon uses except that it was changed to use warnedMove instead of choice[2]. Since this was the only change made, each time it refers to self it is referring to the Pokemon with Forewarn, not the actual Pokemon with the move. However, this introduces yet another problem because Forewarn doesn't reveal which opponent has the move in double battles.

     

    Based on how the code is currently, I think it would work like the following (though there's not an easy way to actually see how it would work so I'm just going off logic):

    If the Pokemon with Forewarn is owned by the player, the message will be played correctly, stating the move that was detected on the opponent's Pokemon. Then, the AI registers the the move detected on its own Pokemon as a move of the player's Pokemon.

    It should work so that if the player's Pokemon has Forewarn, the AI doesn't remember the move, and only a message should be played. If the AI sends out the Pokemon with Forewarn, it should register the move detected on the player's Pokemon as a move of that Pokemon.

     

    I've tried to fix the code for my own game and I'll post it here in case it's correct or helpful (I made it so the player and opponent are both alerted which Pokemon carries the move, but I'm still not really sure how the aiMoveMemory array works so there might be a problem with that):

        # Forewarn
        if self.hasWorkingAbility(:FOREWARN) && onactive
          PBDebug.log("[Ability triggered] #{pbThis} has Forewarn")
          highpower=0
          fwmoves=[]
          moveusers=[]
          for foe in [pbOpposing1,pbOpposing2]
            next if foe.fainted?
            for j in foe.moves
              movedata=PBMoveData.new(j.id)
              power=movedata.basedamage
              power=160 if movedata.function==0x70    # OHKO
              power=150 if movedata.function==0x8B    # Eruption
              power=120 if movedata.function==0x71 || # Counter
                           movedata.function==0x72 || # Mirror Coat
                           movedata.function==0x73 || # Metal Burst
              power=80 if movedata.function==0x6A ||  # SonicBoom
                          movedata.function==0x6B ||  # Dragon Rage
                          movedata.function==0x6D ||  # Night Shade
                          movedata.function==0x6E ||  # Endeavor
                          movedata.function==0x6F ||  # Psywave
                          movedata.function==0x89 ||  # Return
                          movedata.function==0x8A ||  # Frustration
                          movedata.function==0x8C ||  # Crush Grip
                          movedata.function==0x8D ||  # Gyro Ball
                          movedata.function==0x90 ||  # Hidden Power
                          movedata.function==0x96 ||  # Natural Gift
                          movedata.function==0x97 ||  # Trump Card
                          movedata.function==0x98 ||  # Flail
                          movedata.function==0x9A     # Grass Knot
              if power>highpower
                fwmoves=[j.id]
                highpower=power
                moveusers=[foe]
              elsif power==highpower
                fwmoves.push(j.id)
                moveusers.push(foe)
              end
            end
          end
          r=@battle.pbRandom(fwmoves.length)
          fwmove=fwmoves[r]
          fwuser=moveusers[r]
          if @battle.pbOwnedByPlayer?(@index)
            if fwmoves.length>0
              movename=PBMoves.getName(fwmove)
              @battle.pbDisplay(_INTL("{1}'s Forewarn alerted it to {2}'s {3}!",pbThis,fwuser.pbThis,movename))
            end
          elsif @battle.pbIsOpposing?(@index)
            if fwmoves.length>0
              warnedMove = PokeBattle_Move.pbFromPBMove(@battle,PBMove.new(fwmove))
              if @battle.aiMoveMemory[0].length==0 && warnedMove.basedamage!=0
                @battle.aiMoveMemory[0].push(warnedMove)
              elsif @battle.aiMoveMemory[0].length!=0 && warnedMove.basedamage!=0          
                dam1=@battle.pbRoughDamage(warnedMove,fwuser,self,255,warnedMove.basedamage)
                dam2=@battle.pbRoughDamage(@battle.aiMoveMemory[0][0],fwuser,self,255,@battle.aiMoveMemory[0][0].basedamage)
                if dam1>dam2
                  @battle.aiMoveMemory[0].clear
                  @battle.aiMoveMemory[0].push(warnedMove)
                end          
              end                    
              if @battle.aiMoveMemory[1].length==0 
                @battle.aiMoveMemory[1].push(warnedMove)        
              else
                dupecheck=0
                for i in @battle.aiMoveMemory[1]
                  dupecheck+=1 if i.id == warnedMove.id
                end
                @battle.aiMoveMemory[1].push(warnedMove) if dupecheck==0
              end 
              if @battle.aiMoveMemory[2][fwuser.pokemonIndex].length==0 
                @battle.aiMoveMemory[2][fwuser.pokemonIndex].push(warnedMove)        
              else
                dupecheck=0
                for i in @battle.aiMoveMemory[2][fwuser.pokemonIndex]
                  dupecheck+=1 if i.id == warnedMove.id
                end
                @battle.aiMoveMemory[2][fwuser.pokemonIndex].push(warnedMove) if dupecheck==0
              end         
            end   
          end
        end

     

  2. I don't think these are problems with the randomizer, but I encountered them in the randomizer, so I'll post them here.

    Strength Sap doesn't seem to factor in stat changes to the target's attack when calculating the amount healed, but this is what happens in the actual games. (I used it against the same Pokemon twice with successful attack drops, but the amount healed remained exactly the same.)

    When an opposing Pokemon dies from corrosive field entry damage, none of my Pokemon gain xp.

  3. Found a problem with Doom Desire. After using it, on the strike turn, it says "___ took the Chatter attack", the attack doesn't do any damage, and this error message pops up:

    ---------------------------
    Pokemon Rejuvenation
    ---------------------------
    [Pokemon Rejuvenation V12.1]
    Exception: NoMethodError
    Message: undefined method `>=' for nil:NilClass
    PokeBattle_Move:4220:in `pbReduceHPDamage'
    PokeBattle_Battle:5846:in `__clauses__pbEndOfRoundPhase'
    PokeBattle_Battle:5809:in `each'
    PokeBattle_Battle:5809:in `__clauses__pbEndOfRoundPhase'
    PokeBattle_Clauses:42:in `pbEndOfRoundPhase'
    PokeBattle_Battle:4710:in `pbStartBattleCore'
    PokeBattle_Battle:4709:in `logonerr'
    PokeBattle_Battle:4709:in `pbStartBattleCore'
    PokeBattle_Battle:4693:in `loop'
    PokeBattle_Battle:4714:in `pbStartBattleCore'
     

     

    EDIT: Also, if I'm using random moves, how am I supposed to use the TMX moves without buying all the golden items? The TM number for each TMX move stays the same, but when you use it on a Pokemon, it teaches a move that is different from the one listed in the TM. Is there a mod like the one included in Reborn's randomizer where you don't need HM moves to interact with the field?

  4. When I battle Gorebyss against a trainer or in the wild at a certain part of the game, it just skips its turn and doesn't do anything. Upon catching one, I realized that its moveset is Sacred Fire, Ice Ball, Struggle, and Lunge, so Struggle might be causing the problem.

     

    EDIT: Found out something else really weird. When I hover over Struggle in the move choices, it actually causes a turn to pass for both Pokemon without either of them being able to do anything, so Pokemon still take burn damage, etc. However, after that battle, the following message popped up before the game crashed:

    "Script 'Pokebattle_ActualScene' line 427: NoMethodError occurred.

    undefined method '>' for nil:NilClass"

  5. 8 hours ago, Devilish said:

    I'm experiencing an anomaly with the move Rollout in Amethyst Cave. 
     

    I've just started shiny hunting Meditite and have naturally encountered Geodudes. 
    Against my Mighyena when the wild Geodudes use Rollout, on one of it's 5 possible turns it doesn't land and gives me the text: "It doesn't effect Dusk". 
    This has occurred twice so far, the first time on the first turn and the second time was on the second turn. 
    It doesn't seem like this is a natural occurrence whist in the Crystal Cave field, though I've not tried it as a Rollout user myself. I don't like Rollout.  
     

    Whilst I'm on the subject, in the Nim battle, Sucker Punch didn't effect Espurr but effected Lunatone and Quick Attack didn't effect Inkay. 
    We go into this battle with no knowledge of her field so I just want to check, is that natural?

    The Crystal Cavern field makes it so Rock moves become randomly either Fire, Water, Grass, or Psychic type, so that would explain why Rollout sometimes wouldn't affect Mightyena. Moves like Sucker Punch and Quick Attack shouldn't work against Nim because Psychic Terrain disables priority moves, though I'm not sure why it would affect Lunatone (unless the field was changed when you used it against Lunatone).

  6. I have random items turned on, and sometimes one appears that is unable to be collected. This normally isn't a problem if it's an item in the overworld because it will be a different item the next time, but since one of my Pokemon is holding it, it can't be removed and no item can be given to it. The item seems to have no name. Here are some screenshots that could help:

    Spoiler

    image.thumb.png.2311c159a7e720c16c659e7de2816a1e.png

    image.thumb.png.253d72eef9395cfeb62c936cf754d025.png

    (Usually if there's no item, it says "None" in the area that displays the item, but this doesn't say anything.

     

    Also, sometimes (relatively frequently) when battling another Pokemon, it doesn't take its turns at all. I haven't seen any pattern with this, but it happens pretty often so I thought I'd mention it.

     

    Also, if a Pokemon gets the random move Struggle, when hovering over the slot that it appears to occupy (top right in this case), this error occurs:

    Spoiler

    Untitled.png

  7. You can walk on this tile and the one below it in Crawli's Gym

    image.thumb.png.69daabdb03f9aff41ce48b122af27529.png

     

    This is more of a suggestion, but maybe you'll consider changing the amount of tiles this trainer can see ahead of her to 1 so that she doesn't block you like this and cause you to go out of the map to reset her position..

    image.thumb.png.28efd09e9461d20011c8245cffa001b2.png

  8. In the building in the Conkeldurr Lumber Yard in Terajuma Jungle, the map allows you to see part of another room that probably shouldn't be visible.

    image.thumb.png.3d97ee475310f46f7821876410817122.png

     

    If you talk to the tile after catching the Vileplume here, it still displays the following message:

    image.thumb.png.28e6e758a91149bb4b5c24247e69aa5e.png

     

    When in the Safari Zone, I used bait on a Kangaskhan, and when I threw the first Safari Ball at it, it's sprite moved to the position shown in the screenshot:

     

    Untitled.png

  9. When fighting Melia on the xen battleship, when she is about to send in Zoroark and it's asking if I want to switch, the name it gave was the name of one of my Pokemon instead of the one her Zoroark was disguised as.

  10. If you go back to your room by getting zapped in Blacksteeple Castle when you're supposed to go find Saki to fix the wires in the cave, the cells aren't locked and you can't interact with her. If you go out and back in, it is fixed, though.

    image.thumb.png.1de8c6a765468cfb38e0af052bc66536.png

  11. I tested it out with two Pokemon without their hidden abilities and it seems as though they can actually produce a Pokemon with a hidden ability. 

  12. Thanks. I actually didn't even know there was even a department store in GDC lol even though I've gotten past that part of the game on a different save file. I might have to go back there to get some of those ability capsules now...

  13. I am trying to breed some of my Pokemon, and I'm trying to figure out how abilities are passed down. As far as I know, in the official games, the mother has a 60% chance of passing down a hidden ability and 80% chance of passing down a normal ability, but since hidden abilities are normally available in this game, are the rates different? Like can you get a hidden ability on a Pokemon whose mother has a regular ability?

  14. You can walk on this rock smashable rock here, and when I face right, it asks if I want to use rock smash. This is in Amethyst Cave.

    image.thumb.png.3ff2fe9f0221e938150232c4171471ee.png

     

    In Karrina's Base, if you go to the room on the bottom floor at the top left, you can walk over pretty much everything. You can also walk vertically through the couches which I don't think is usually possible. The 2 table blocks below the character are the only tiles that prevent you from walking on

    image.thumb.png.cb35b9036d1f75a31674afe4a64cd674.png

  15. Hi, I don't know if I'm just being stupid, but is there a way to add an additional save file to the game without going to the saved games folder and editing the saves there? I see that there is an option on the menu that says "Other Save Files", but I don't know how this works.

  16. When fighting Morty and Jasmine in the virtual league, Pokemon are able to gain experience, and these are the only battles that allow this. I think it is not intended to be this way. I have a screenshot:

    image.thumb.png.46ebcffdd9e842b9faa6019e34dc7373.png

  17. I found a couple of issues in Goldenwood Forest. Firstly, in the Xen cutscene towards the beginning of the game, I had my last healing location set to be the healing star on route 1.  Upon losing to a trainer after team xen appears, the player will be teleported back to the healing star. When going back to goldenwood forest, it appears as if nothing has happened yet. However, if you go into goldenwood cave and then back down, everything appears as intended.

     

    Another issue with goldenwood forest is with the Adrienn quest. If you complete the parts up until right before you are supposed to talk to the reporters who interview Adrienn and go into Goldenwood Cave instead, when you go back out, you are transported to the old goldenwood forest before it became the park. However, if you talk to Adrienn again, he will go through the cutscene again with the final transformation and then it will be back to how it was before. This does not happen if you enter goldenwood cave after the whole quest is completed.

  18. Spoiler

     

    Although this is purely visual, after defeating Isha, the player character disappeared from the screen from me (you could see it "teleport" away). This is strange, but he is back in the next scene.

    image.thumb.png.ccce30f99d8e2d2b23af145e46d60601.png

     

     

  19. An error when fighting Ryland: I kept stalling his Camerupt out with my Sylveon and eventually he switched into his Claydol. However, once this happened, his Claydol didn't use any moves and I could just keep attacking and using items without him going. I'm not sure if this would have happened on the rest of his pokemon, but my Sylveon swept them so unless they were supposed to be slower (Torterra and Camerupt), I couldn't tell if the problem persisted.

×
×
  • Create New...