• Do not use Discord to host any images you post, these links expire quickly! You can learn how to add images to your posts here.
  • Eevee Expo's webhost has been having technical issues since Nov. 20th and you might be unable to connect to our site. Staff are also facing issues connecting, so please send a DM to Cat on-site or through Discord directly for faster service!

Idea Need help in making this cool mechanic I came up with

TheWolfLovers

Rookie
Member
Joined
Jan 6, 2025
Posts
4
Well this will be difficult to explain. So I got the idea to have a stealth mission section to my game: Pokémon: Simon's Story.basically Simon will turn into an Eevee.I managed to sort out the menu switching mechanic and got that out of the way, however I still have a while to go... and I don't know much ruby at all.instead of explaining everything I need in a big 'ol paragraph I'm going to list them:
  • I need to stop the player from throwing a Pokéball and sliding off screen when battle starts, assuming player is in Eevee form.
  • Migrate player's party into a hidden box via script and also add Simon in slot 1 (and ofc move that in a box when Simon returns to normal)
  • Edit party UI to hide panels 2-6 and shove panel 1 in the middle. This will be Simon's info. Unless if I am able to get help designing overwise because I don't think a single panel is gonna look too good.
Again I have limited Ruby knowledge (from scratch anyway I can edit some code)any help would be appreciated! (and who knows I may add an "Eevee form only" area adding people who help :P)
I am using Modular Menus plugin for the menu switching by the way
 

SquishySquad

Rookie
Member
Joined
Jan 10, 2025
Posts
2
I have a similar idea. I want a way to treat the player as a 7th Pokemon. If the player has no Pokemon or all Pokemon have fainted the player is sent into battle. Also if the player faints, but still has Pokemon the player immediately blacks out and goes to a pokecenter. Finally the player can't be removed from party by sending it to a pc box.

Unfortunately I'm in the same boat of not yet knowing enough Ruby or being familiar enough with Essentials code to pull something like this off myself.
 

Swdfm

Game Developer
Member
Joined
Sep 3, 2018
Posts
39
Because you're new, I'll more or less give you a walkthrough here
Objectives
When player is an Eevee:
1) Disables trainer and throwing Pokeball animation
2) Moves current party to a safe place, and moves them back when done
3) Have only first panel show in party screen, and centre it

Method
Doing 2) first will likely be easier, as we need to tell the game when the player is an Eevee

Solution to 2)
Put this in a Plugin, or script above main
Code:
Expand Collapse Copy
PLAYER_EEVEE_TEAM = 400 # Another number if variable is already used up!
PLAYER_EEVEE_SELF = 401 # Another number if variable is already used up!

def pbBecomeEevee
  pbUnbecomeEevee unless pbPlayerIsEevee? # Stops potential crash!
  pbSet(PLAYER_IS_EEVEE, $player.party.clone)
  if pbGet(PLAYER_EEVEE_SELF).is_a?(Integer)
    # NOTE: Change this as and where needed!
    p = Pokemon.new(:EEVEE, 12)
    p.gender = $player.gender
    pbSet(PLAYER_EEVEE_SELF, p)
  end
  $player.party = [pbGet(PLAYER_EEVEE_SELF)].clone
end

def pbUnbecomeEevee
  return unless pbPlayerIsEevee? # Failsafe
  pbSet(PLAYER_EEVEE_SELF, $player.party.clone)
  $player.party = pbGet(PLAYER_EEVEE_TEAM).clone
  pbSet(PLAYER_IS_EEVEE, 0)
end

def pbPlayerIsEevee?
  return pbGet(PLAYER_EEVEE_TEAM).is_a?(Array)
end

I'll finish the rest later
 

Swdfm

Game Developer
Member
Joined
Sep 3, 2018
Posts
39
1) Would be quite hard, but luckily, we have the Following Pokemon Plugin, where it slides your Pokemon on screen
I have very slightly modified it. You don't need to understand most of the script here!
Again, put this in your page
If you are already using the following pokemon, this can again be modified. let us know
Code:
Expand Collapse Copy
class Battle::Scene::Animation::PokeballPlayerSendOut < Battle::Scene::Animation
  def initialize(sprites, viewport, idxTrainer, battler, startBattle, idxOrder=0)
    @idxTrainer     = idxTrainer
    @battler        = battler
    @showingTrainer = startBattle && !pbPlayerIsEevee?
    @idxOrder       = idxOrder
    @trainer        = @battler.battle.pbGetOwnerFromBattlerIndex(@battler.index)
    @shadowVisible  = sprites["shadow_#{battler.index}"].visible
    @sprites        = sprites
    @viewport       = viewport
    @pictureEx      = []   # For all the PictureEx
    @pictureSprites = []   # For all the sprites
    @tempSprites    = []   # For sprites that exist only for this animation
    @animDone       = false
    if pbPlayerIsEevee? && startBattle &&
       battler.index == 0
      createFollowerProcesses
    else
      createProcesses
    end
  end

  def createFollowerProcesses
    delay = 0
    delay = 5 if @showingTrainer
    batSprite = @sprites["pokemon_#{@battler.index}"]
    shaSprite = @sprites["shadow_#{@battler.index}"]
    battlerY = batSprite.y
    battler = addSprite(batSprite, PictureOrigin::BOTTOM)
    battler.setVisible(delay, true)
    battler.setZoomXY(delay, 100, 100)
    battler.setColor(delay, Color.new(0, 0, 0, 0))
    battler.setDelta(0, -240, 0)
    battler.moveDelta(delay, 12, 240, 0)
    battler.setCallback(delay + 12, [batSprite,:pbPlayIntroAnimation])
    if @shadowVisible
      shadow = addSprite(shaSprite, PictureOrigin::CENTER)
      shadow.setVisible(delay, @shadowVisible)
      shadow.setDelta(0, -Graphics.width/2, 0)
      shadow.setDelta(delay, 12, Graphics.width/2, 0)
    end
  end
end
[/script]

3) Changing where the party panel is placed
A simple override to the Party UI
May not work if you or another plugin has overriden this method!
You would also have to change the background, which I have pointed out in the script

Code:
Expand Collapse Copy
class PokemonParty_Scene
  def pbStartScene(party, starthelptext, annotations = nil, multiselect = false, can_access_storage = false)
    @sprites = {}
    @party = party
    @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
    @viewport.z = 99999
    @multiselect = multiselect
    @can_access_storage = can_access_storage
    # NOTE: Change background here! if pbPlayerIsEevee?
    addBackgroundPlane(@sprites, "partybg", "Party/bg", @viewport)
    @sprites["messagebox"] = Window_AdvancedTextPokemon.new("")
    @sprites["messagebox"].z              = 50
    @sprites["messagebox"].viewport       = @viewport
    @sprites["messagebox"].visible        = false
    @sprites["messagebox"].letterbyletter = true
    pbBottomLeftLines(@sprites["messagebox"], 2)
    @sprites["storagetext"] = Window_UnformattedTextPokemon.new(
      @can_access_storage ? _INTL("[Special]: To Boxes") : ""
    )
    @sprites["storagetext"].x           = 32
    @sprites["storagetext"].y           = Graphics.height - @sprites["messagebox"].height - 16
    @sprites["storagetext"].z           = 10
    @sprites["storagetext"].viewport    = @viewport
    @sprites["storagetext"].baseColor   = Color.new(248, 248, 248)
    @sprites["storagetext"].shadowColor = Color.black
    @sprites["storagetext"].windowskin  = nil
    @sprites["helpwindow"] = Window_UnformattedTextPokemon.new(starthelptext)
    @sprites["helpwindow"].viewport = @viewport
    @sprites["helpwindow"].visible  = true
    pbBottomLeftLines(@sprites["helpwindow"], 1)
    pbSetHelpText(starthelptext)
    # Add party Pokémon sprites
    Settings::MAX_PARTY_SIZE.times do |i|
      next if i > 0 && pbPlayerIsEevee? # ~Swdfm
      if @party[i]
        @sprites["pokemon#{i}"] = PokemonPartyPanel.new(@party[i], i, @viewport)
        if pbPlayerIsEevee? # ~Swdfm (4 lines)
          @sprites["pokemon#{i}"].x = Graphics.width / 4
          @sprites["pokemon#{i}"].y = 96
        end
      else
        @sprites["pokemon#{i}"] = PokemonPartyBlankPanel.new(@party[i], i, @viewport)
      end
      @sprites["pokemon#{i}"].text = annotations[i] if annotations
    end
    if @multiselect
      @sprites["pokemon#{Settings::MAX_PARTY_SIZE}"] = PokemonPartyConfirmSprite.new(@viewport)
      @sprites["pokemon#{Settings::MAX_PARTY_SIZE + 1}"] = PokemonPartyCancelSprite2.new(@viewport)
    else
      @sprites["pokemon#{Settings::MAX_PARTY_SIZE}"] = PokemonPartyCancelSprite.new(@viewport)
    end
    # Select first Pokémon
    @activecmd = 0
    @sprites["pokemon0"].selected = true
    pbFadeInAndShow(@sprites) { update }
  end
end
[/spoiler]
 

TheWolfLovers

Rookie
Member
Joined
Jan 6, 2025
Posts
4
Because you're new, I'll more or less give you a walkthrough here
Objectives
When player is an Eevee:
1) Disables trainer and throwing Pokeball animation
2) Moves current party to a safe place, and moves them back when done
3) Have only first panel show in party screen, and centre it

Method
Doing 2) first will likely be easier, as we need to tell the game when the player is an Eevee

Solution to 2)
Put this in a Plugin, or script above main
Code:
Expand Collapse Copy
PLAYER_EEVEE_TEAM = 400 # Another number if variable is already used up!
PLAYER_EEVEE_SELF = 401 # Another number if variable is already used up!

def pbBecomeEevee
  pbUnbecomeEevee unless pbPlayerIsEevee? # Stops potential crash!
  pbSet(PLAYER_IS_EEVEE, $player.party.clone)
  if pbGet(PLAYER_EEVEE_SELF).is_a?(Integer)
    # NOTE: Change this as and where needed!
    p = Pokemon.new(:EEVEE, 12)
    p.gender = $player.gender
    pbSet(PLAYER_EEVEE_SELF, p)
  end
  $player.party = [pbGet(PLAYER_EEVEE_SELF)].clone
end

def pbUnbecomeEevee
  return unless pbPlayerIsEevee? # Failsafe
  pbSet(PLAYER_EEVEE_SELF, $player.party.clone)
  $player.party = pbGet(PLAYER_EEVEE_TEAM).clone
  pbSet(PLAYER_IS_EEVEE, 0)
end

def pbPlayerIsEevee?
  return pbGet(PLAYER_EEVEE_TEAM).is_a?(Array)
end

I'll finish the rest later
Dude you are a bit legend thanks so much!
I'm gonna try it after school.
 

TheWolfLovers

Rookie
Member
Joined
Jan 6, 2025
Posts
4
Because you're new, I'll more or less give you a walkthrough here
Objectives
When player is an Eevee:
1) Disables trainer and throwing Pokeball animation
2) Moves current party to a safe place, and moves them back when done
3) Have only first panel show in party screen, and centre it

Method
Doing 2) first will likely be easier, as we need to tell the game when the player is an Eevee

Solution to 2)
Put this in a Plugin, or script above main
Code:
Expand Collapse Copy
PLAYER_EEVEE_TEAM = 400 # Another number if variable is already used up!
PLAYER_EEVEE_SELF = 401 # Another number if variable is already used up!

def pbBecomeEevee
  pbUnbecomeEevee unless pbPlayerIsEevee? # Stops potential crash!
  pbSet(PLAYER_IS_EEVEE, $player.party.clone)
  if pbGet(PLAYER_EEVEE_SELF).is_a?(Integer)
    # NOTE: Change this as and where needed!
    p = Pokemon.new(:EEVEE, 12)
    p.gender = $player.gender
    pbSet(PLAYER_EEVEE_SELF, p)
  end
  $player.party = [pbGet(PLAYER_EEVEE_SELF)].clone
end

def pbUnbecomeEevee
  return unless pbPlayerIsEevee? # Failsafe
  pbSet(PLAYER_EEVEE_SELF, $player.party.clone)
  $player.party = pbGet(PLAYER_EEVEE_TEAM).clone
  pbSet(PLAYER_IS_EEVEE, 0)
end

def pbPlayerIsEevee?
  return pbGet(PLAYER_EEVEE_TEAM).is_a?(Array)
end

I'll finish the rest later
I'm getting an uninitialised constant error.

Edit: I fixed it. but there are still other problems. Like how do I change the appearance of the player to be an eevee, and 3) doesnt work lol.
1) also doesnt work
 
Last edited:
Back
Top