release beta 1

This commit is contained in:
infinitefusion
2021-09-04 13:23:05 -04:00
parent 0672b5823e
commit 82681f4611
55 changed files with 1312 additions and 39949 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -192,6 +192,11 @@ class Game_Character
return self.map.terrain_tag(@x, @y) return self.map.terrain_tag(@x, @y)
end end
def cancelMoveRoute()
@move_route=nil
@move_route_forcing = false
end
def bush_depth def bush_depth
return @bush_depth || 0 return @bush_depth || 0
end end

View File

@@ -4,7 +4,7 @@ module GameData
attr_reader :id_number attr_reader :id_number
attr_reader :real_name attr_reader :real_name
attr_reader :can_surf attr_reader :can_surf
attr_reader :waterfall # The main part only, not the crest attr_reader :waterfall # The main part only, not the crest
attr_reader :waterfall_crest attr_reader :waterfall_crest
attr_reader :can_fish attr_reader :can_fish
attr_reader :can_dive attr_reader :can_dive
@@ -36,28 +36,29 @@ module GameData
end end
def self.load; end def self.load; end
def self.save; end def self.save; end
def initialize(hash) def initialize(hash)
@id = hash[:id] @id = hash[:id]
@id_number = hash[:id_number] @id_number = hash[:id_number]
@real_name = hash[:id].to_s || "Unnamed" @real_name = hash[:id].to_s || "Unnamed"
@can_surf = hash[:can_surf] || false @can_surf = hash[:can_surf] || false
@waterfall = hash[:waterfall] || false @waterfall = hash[:waterfall] || false
@waterfall_crest = hash[:waterfall_crest] || false @waterfall_crest = hash[:waterfall_crest] || false
@can_fish = hash[:can_fish] || false @can_fish = hash[:can_fish] || false
@can_dive = hash[:can_dive] || false @can_dive = hash[:can_dive] || false
@deep_bush = hash[:deep_bush] || false @deep_bush = hash[:deep_bush] || false
@shows_grass_rustle = hash[:shows_grass_rustle] || false @shows_grass_rustle = hash[:shows_grass_rustle] || false
@land_wild_encounters = hash[:land_wild_encounters] || false @land_wild_encounters = hash[:land_wild_encounters] || false
@double_wild_encounters = hash[:double_wild_encounters] || false @double_wild_encounters = hash[:double_wild_encounters] || false
@battle_environment = hash[:battle_environment] @battle_environment = hash[:battle_environment]
@ledge = hash[:ledge] || false @ledge = hash[:ledge] || false
@ice = hash[:ice] || false @ice = hash[:ice] || false
@bridge = hash[:bridge] || false @bridge = hash[:bridge] || false
@shows_reflections = hash[:shows_reflections] || false @shows_reflections = false #= hash[:shows_reflections] || false
@must_walk = hash[:must_walk] || false @must_walk = hash[:must_walk] || false
@ignore_passability = hash[:ignore_passability] || false @ignore_passability = hash[:ignore_passability] || false
end end
def can_surf_freely def can_surf_freely
@@ -69,134 +70,134 @@ end
#=============================================================================== #===============================================================================
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :None, :id => :None,
:id_number => 0 :id_number => 0
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Ledge, :id => :Ledge,
:id_number => 1, :id_number => 1,
:ledge => true :ledge => true
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Grass, :id => :Grass,
:id_number => 2, :id_number => 2,
:shows_grass_rustle => true, :shows_grass_rustle => true,
:land_wild_encounters => true, :land_wild_encounters => true,
:battle_environment => :Grass :battle_environment => :Grass
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Sand, :id => :Sand,
:id_number => 3, :id_number => 3,
:battle_environment => :Sand :battle_environment => :Sand
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Rock, :id => :Rock,
:id_number => 15, :id_number => 15,
:battle_environment => :Rock :battle_environment => :Rock
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :DeepWater, :id => :DeepWater,
:id_number => 5, :id_number => 5,
:can_surf => true, :can_surf => true,
:can_fish => true, :can_fish => true,
:can_dive => true, :can_dive => true,
:battle_environment => :MovingWater :battle_environment => :MovingWater
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :WaterCurrent, :id => :WaterCurrent,
:id_number => 6, :id_number => 6,
:can_surf => true, :can_surf => true,
:can_fish => true, :can_fish => true,
:battle_environment => :MovingWater :battle_environment => :MovingWater
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :StillWater, :id => :StillWater,
:id_number => 17, :id_number => 17,
:can_surf => true, :can_surf => true,
:can_fish => true, :can_fish => true,
:battle_environment => :StillWater :battle_environment => :StillWater
#:shows_reflections => true #:shows_reflections => true
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Water, :id => :Water,
:id_number => 7, :id_number => 7,
:can_surf => true, :can_surf => true,
:can_fish => true, :can_fish => true,
:battle_environment => :MovingWater :battle_environment => :MovingWater
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Waterfall, :id => :Waterfall,
:id_number => 8, :id_number => 8,
:can_surf => true, :can_surf => true,
:waterfall => true :waterfall => true
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :WaterfallCrest, :id => :WaterfallCrest,
:id_number => 9, :id_number => 9,
:can_surf => true, :can_surf => true,
:can_fish => true, :can_fish => true,
:waterfall_crest => true :waterfall_crest => true
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :TallGrass, :id => :TallGrass,
:id_number => 10, :id_number => 10,
:deep_bush => true, :deep_bush => true,
:land_wild_encounters => true, :land_wild_encounters => true,
:double_wild_encounters => true, :double_wild_encounters => true,
:battle_environment => :TallGrass, :battle_environment => :TallGrass,
:must_walk => true :must_walk => true
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :UnderwaterGrass, :id => :UnderwaterGrass,
:id_number => 11, :id_number => 11,
:land_wild_encounters => true :land_wild_encounters => true
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Ice, :id => :Ice,
:id_number => 12, :id_number => 12,
:battle_environment => :Ice, :battle_environment => :Ice,
:ice => true, :ice => true,
:must_walk => true :must_walk => true
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Neutral, :id => :Neutral,
:id_number => 13, :id_number => 13,
:ignore_passability => true :ignore_passability => true
}) })
# NOTE: This is referenced by ID in an Events.onStepTakenFieldMovement proc that # NOTE: This is referenced by ID in an Events.onStepTakenFieldMovement proc that
# adds soot to the Soot Sack if the player walks over one of these tiles. # adds soot to the Soot Sack if the player walks over one of these tiles.
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :SootGrass, :id => :SootGrass,
:id_number => 14, :id_number => 14,
:shows_grass_rustle => true, :shows_grass_rustle => true,
:land_wild_encounters => true, :land_wild_encounters => true,
:battle_environment => :Grass :battle_environment => :Grass
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Bridge, :id => :Bridge,
:id_number => 4, :id_number => 4,
:bridge => true :bridge => true
}) })
GameData::TerrainTag.register({ GameData::TerrainTag.register({
:id => :Puddle, :id => :Puddle,
:id_number => 16, :id_number => 16,
:battle_environment => :Puddle, :battle_environment => :Puddle,
:shows_reflections => false :shows_reflections => false
}) })

View File

@@ -177,6 +177,7 @@ class PokeBattle_Battle
# For "1v2" names, the first number is for the player's side and the second # For "1v2" names, the first number is for the player's side and the second
# number is for the opposing side. # number is for the opposing side.
def setBattleMode(mode) def setBattleMode(mode)
default = $game_variables[242].is_a?(Array) ? $game_variables[242] : [1,1]
@sideSizes = @sideSizes =
case mode case mode
when "triple", "3v3" then [3, 3] when "triple", "3v3" then [3, 3]
@@ -187,7 +188,7 @@ class PokeBattle_Battle
when "2v1" then [2, 1] when "2v1" then [2, 1]
when "1v3" then [1, 3] when "1v3" then [1, 3]
when "1v2" then [1, 2] when "1v2" then [1, 2]
else [1, 1] # Single, 1v1 (default) else default # Single, 1v1 (default)
end end
end end

View File

@@ -136,7 +136,9 @@ class PokeBattle_Scene
playerBase = "Graphics/Battlebacks/playerbase/"+baseFilename playerBase = "Graphics/Battlebacks/playerbase/"+baseFilename
enemyBase = "Graphics/Battlebacks/enemybase/"+baseFilename enemyBase = "Graphics/Battlebacks/enemybase/"+baseFilename
messageBG = "Graphics/Battlebacks/"+messageFilename+"_message" messageBG = "Graphics/Battlebacks/"+messageFilename+"_message"
if !pbResolveBitmap(messageBG)
messageBG = "Graphics/Battlebacks/default_message"
end
# Apply graphics # Apply graphics
bg = pbAddSprite("battle_bg",0,0,battleBG,@viewport) bg = pbAddSprite("battle_bg",0,0,battleBG,@viewport)
bg.z = 0 bg.z = 0

View File

@@ -120,7 +120,7 @@ end
def pbPrepareBattle(battle) def pbPrepareBattle(battle)
battleRules = $PokemonTemp.battleRules battleRules = $PokemonTemp.battleRules
# The size of the battle, i.e. how many Pokémon on each side (default: "single") # The size of the battle, i.e. how many Pokémon on each side (default: "single")
battle.setBattleMode(battleRules["size"]) if !battleRules["size"].nil? battle.setBattleMode(battleRules["size"]) if !battleRules["size"].nil? || $game_switches[NEW_GAME_PLUS]
# Whether the game won't black out even if the player loses (default: false) # Whether the game won't black out even if the player loses (default: false)
battle.canLose = battleRules["canLose"] if !battleRules["canLose"].nil? battle.canLose = battleRules["canLose"] if !battleRules["canLose"].nil?
# Whether the player can choose to run from the battle (default: true) # Whether the player can choose to run from the battle (default: true)

View File

@@ -168,6 +168,7 @@ class PokemonIconSprite < SpriteWrapper
bodyPoke_number = getBodyID(pokemon.species) bodyPoke_number = getBodyID(pokemon.species)
headPoke_number = getHeadID(pokemon.species, bodyPoke_number) headPoke_number = getHeadID(pokemon.species, bodyPoke_number)
bodyPoke = GameData::Species.get(bodyPoke_number).species bodyPoke = GameData::Species.get(bodyPoke_number).species
headPoke = GameData::Species.get(headPoke_number).species headPoke = GameData::Species.get(headPoke_number).species

View File

@@ -15,17 +15,17 @@ class PokemonSystem
attr_accessor :textinput attr_accessor :textinput
def initialize def initialize
@textspeed = 1 # Text speed (0=slow, 1=normal, 2=fast) @textspeed = 1 # Text speed (0=slow, 1=normal, 2=fast)
@battlescene = 0 # Battle effects (animations) (0=on, 1=off) @battlescene = 0 # Battle effects (animations) (0=on, 1=off)
@battlestyle = 0 # Battle style (0=switch, 1=set) @battlestyle = 0 # Battle style (0=switch, 1=set)
@frame = 0 # Default window frame (see also Settings::MENU_WINDOWSKINS) @frame = 0 # Default window frame (see also Settings::MENU_WINDOWSKINS)
@textskin = 0 # Speech frame @textskin = 0 # Speech frame
@screensize = (Settings::SCREEN_SCALE * 2).floor - 1 # 0=half size, 1=full size, 2=full-and-a-half size, 3=double size @screensize = (Settings::SCREEN_SCALE * 2).floor - 1 # 0=half size, 1=full size, 2=full-and-a-half size, 3=double size
@language = 0 # Language (see also Settings::LANGUAGES in script PokemonSystem) @language = 0 # Language (see also Settings::LANGUAGES in script PokemonSystem)
@runstyle = 0 # Default movement speed (0=walk, 1=run) @runstyle = 0 # Default movement speed (0=walk, 1=run)
@bgmvolume = 100 # Volume of background music and ME @bgmvolume = 100 # Volume of background music and ME
@sevolume = 100 # Volume of sound effects @sevolume = 100 # Volume of sound effects
@textinput = 1 # Text input mode (0=cursor, 1=keyboard) @textinput = 1 # Text input mode (0=cursor, 1=keyboard)
end end
end end
@@ -50,22 +50,22 @@ class EnumOption
attr_reader :values attr_reader :values
attr_reader :name attr_reader :name
def initialize(name,options,getProc,setProc) def initialize(name, options, getProc, setProc)
@name = name @name = name
@values = options @values = options
@getProc = getProc @getProc = getProc
@setProc = setProc @setProc = setProc
end end
def next(current) def next(current)
index = current+1 index = current + 1
index = @values.length-1 if index>@values.length-1 index = @values.length - 1 if index > @values.length - 1
return index return index
end end
def prev(current) def prev(current)
index = current-1 index = current - 1
index = 0 if index<0 index = 0 if index < 0
return index return index
end end
end end
@@ -78,22 +78,22 @@ class EnumOption2
attr_reader :values attr_reader :values
attr_reader :name attr_reader :name
def initialize(name,options,getProc,setProc) def initialize(name, options, getProc, setProc)
@name = name @name = name
@values = options @values = options
@getProc = getProc @getProc = getProc
@setProc = setProc @setProc = setProc
end end
def next(current) def next(current)
index = current+1 index = current + 1
index = @values.length-1 if index>@values.length-1 index = @values.length - 1 if index > @values.length - 1
return index return index
end end
def prev(current) def prev(current)
index = current-1 index = current - 1
index = 0 if index<0 index = 0 if index < 0
return index return index
end end
end end
@@ -107,26 +107,26 @@ class NumberOption
attr_reader :optstart attr_reader :optstart
attr_reader :optend attr_reader :optend
def initialize(name,optstart,optend,getProc,setProc) def initialize(name, optstart, optend, getProc, setProc)
@name = name @name = name
@optstart = optstart @optstart = optstart
@optend = optend @optend = optend
@getProc = getProc @getProc = getProc
@setProc = setProc @setProc = setProc
end end
def next(current) def next(current)
index = current+@optstart index = current + @optstart
index += 1 index += 1
index = @optstart if index>@optend index = @optstart if index > @optend
return index-@optstart return index - @optstart
end end
def prev(current) def prev(current)
index = current+@optstart index = current + @optstart
index -= 1 index -= 1
index = @optend if index<@optstart index = @optend if index < @optstart
return index-@optstart return index - @optstart
end end
end end
@@ -139,27 +139,27 @@ class SliderOption
attr_reader :optstart attr_reader :optstart
attr_reader :optend attr_reader :optend
def initialize(name,optstart,optend,optinterval,getProc,setProc) def initialize(name, optstart, optend, optinterval, getProc, setProc)
@name = name @name = name
@optstart = optstart @optstart = optstart
@optend = optend @optend = optend
@optinterval = optinterval @optinterval = optinterval
@getProc = getProc @getProc = getProc
@setProc = setProc @setProc = setProc
end end
def next(current) def next(current)
index = current+@optstart index = current + @optstart
index += @optinterval index += @optinterval
index = @optend if index>@optend index = @optend if index > @optend
return index-@optstart return index - @optstart
end end
def prev(current) def prev(current)
index = current+@optstart index = current + @optstart
index -= @optinterval index -= @optinterval
index = @optstart if index<@optstart index = @optstart if index < @optstart
return index-@optstart return index - @optstart
end end
end end
@@ -169,92 +169,92 @@ end
class Window_PokemonOption < Window_DrawableCommand class Window_PokemonOption < Window_DrawableCommand
attr_reader :mustUpdateOptions attr_reader :mustUpdateOptions
def initialize(options,x,y,width,height) def initialize(options, x, y, width, height)
@options = options @options = options
@nameBaseColor = Color.new(24*8,15*8,0) @nameBaseColor = Color.new(24 * 8, 15 * 8, 0)
@nameShadowColor = Color.new(31*8,22*8,10*8) @nameShadowColor = Color.new(31 * 8, 22 * 8, 10 * 8)
@selBaseColor = Color.new(31*8,6*8,3*8) @selBaseColor = Color.new(31 * 8, 6 * 8, 3 * 8)
@selShadowColor = Color.new(31*8,17*8,16*8) @selShadowColor = Color.new(31 * 8, 17 * 8, 16 * 8)
@optvalues = [] @optvalues = []
@mustUpdateOptions = false @mustUpdateOptions = false
for i in 0...@options.length for i in 0...@options.length
@optvalues[i] = 0 @optvalues[i] = 0
end end
super(x,y,width,height) super(x, y, width, height)
end end
def [](i) def [](i)
return @optvalues[i] return @optvalues[i]
end end
def []=(i,value) def []=(i, value)
@optvalues[i] = value @optvalues[i] = value
refresh refresh
end end
def setValueNoRefresh(i,value) def setValueNoRefresh(i, value)
@optvalues[i] = value @optvalues[i] = value
end end
def itemCount def itemCount
return @options.length+1 return @options.length + 1
end end
def drawItem(index,_count,rect) def drawItem(index, _count, rect)
rect = drawCursor(index,rect) rect = drawCursor(index, rect)
optionname = (index==@options.length) ? _INTL("Cancel") : @options[index].name optionname = (index == @options.length) ? _INTL("Cancel") : @options[index].name
optionwidth = rect.width*9/20 optionwidth = rect.width * 9 / 20
pbDrawShadowText(self.contents,rect.x,rect.y,optionwidth,rect.height,optionname, pbDrawShadowText(self.contents, rect.x, rect.y, optionwidth, rect.height, optionname,
@nameBaseColor,@nameShadowColor) @nameBaseColor, @nameShadowColor)
return if index==@options.length return if index == @options.length
if @options[index].is_a?(EnumOption) if @options[index].is_a?(EnumOption)
if @options[index].values.length>1 if @options[index].values.length > 1
totalwidth = 0 totalwidth = 0
for value in @options[index].values for value in @options[index].values
totalwidth += self.contents.text_size(value).width totalwidth += self.contents.text_size(value).width
end end
spacing = (optionwidth-totalwidth)/(@options[index].values.length-1) spacing = (optionwidth - totalwidth) / (@options[index].values.length - 1)
spacing = 0 if spacing<0 spacing = 0 if spacing < 0
xpos = optionwidth+rect.x xpos = optionwidth + rect.x
ivalue = 0 ivalue = 0
for value in @options[index].values for value in @options[index].values
pbDrawShadowText(self.contents,xpos,rect.y,optionwidth,rect.height,value, pbDrawShadowText(self.contents, xpos, rect.y, optionwidth, rect.height, value,
(ivalue==self[index]) ? @selBaseColor : self.baseColor, (ivalue == self[index]) ? @selBaseColor : self.baseColor,
(ivalue==self[index]) ? @selShadowColor : self.shadowColor (ivalue == self[index]) ? @selShadowColor : self.shadowColor
) )
xpos += self.contents.text_size(value).width xpos += self.contents.text_size(value).width
xpos += spacing xpos += spacing
ivalue += 1 ivalue += 1
end end
else else
pbDrawShadowText(self.contents,rect.x+optionwidth,rect.y,optionwidth,rect.height, pbDrawShadowText(self.contents, rect.x + optionwidth, rect.y, optionwidth, rect.height,
optionname,self.baseColor,self.shadowColor) optionname, self.baseColor, self.shadowColor)
end end
elsif @options[index].is_a?(NumberOption) elsif @options[index].is_a?(NumberOption)
value = _INTL("Type {1}/{2}",@options[index].optstart+self[index], value = _INTL("Type {1}/{2}", @options[index].optstart + self[index],
@options[index].optend-@options[index].optstart+1) @options[index].optend - @options[index].optstart + 1)
xpos = optionwidth+rect.x xpos = optionwidth + rect.x
pbDrawShadowText(self.contents,xpos,rect.y,optionwidth,rect.height,value, pbDrawShadowText(self.contents, xpos, rect.y, optionwidth, rect.height, value,
@selBaseColor,@selShadowColor) @selBaseColor, @selShadowColor)
elsif @options[index].is_a?(SliderOption) elsif @options[index].is_a?(SliderOption)
value = sprintf(" %d",@options[index].optend) value = sprintf(" %d", @options[index].optend)
sliderlength = optionwidth-self.contents.text_size(value).width sliderlength = optionwidth - self.contents.text_size(value).width
xpos = optionwidth+rect.x xpos = optionwidth + rect.x
self.contents.fill_rect(xpos,rect.y-2+rect.height/2, self.contents.fill_rect(xpos, rect.y - 2 + rect.height / 2,
optionwidth-self.contents.text_size(value).width,4,self.baseColor) optionwidth - self.contents.text_size(value).width, 4, self.baseColor)
self.contents.fill_rect( self.contents.fill_rect(
xpos+(sliderlength-8)*(@options[index].optstart+self[index])/@options[index].optend, xpos + (sliderlength - 8) * (@options[index].optstart + self[index]) / @options[index].optend,
rect.y-8+rect.height/2, rect.y - 8 + rect.height / 2,
8,16,@selBaseColor) 8, 16, @selBaseColor)
value = sprintf("%d",@options[index].optstart+self[index]) value = sprintf("%d", @options[index].optstart + self[index])
xpos += optionwidth-self.contents.text_size(value).width xpos += optionwidth - self.contents.text_size(value).width
pbDrawShadowText(self.contents,xpos,rect.y,optionwidth,rect.height,value, pbDrawShadowText(self.contents, xpos, rect.y, optionwidth, rect.height, value,
@selBaseColor,@selShadowColor) @selBaseColor, @selShadowColor)
else else
value = @options[index].values[self[index]] value = @options[index].values[self[index]]
xpos = optionwidth+rect.x xpos = optionwidth + rect.x
pbDrawShadowText(self.contents,xpos,rect.y,optionwidth,rect.height,value, pbDrawShadowText(self.contents, xpos, rect.y, optionwidth, rect.height, value,
@selBaseColor,@selShadowColor) @selBaseColor, @selShadowColor)
end end
end end
@@ -262,8 +262,8 @@ class Window_PokemonOption < Window_DrawableCommand
oldindex = self.index oldindex = self.index
@mustUpdateOptions = false @mustUpdateOptions = false
super super
dorefresh = (self.index!=oldindex) dorefresh = (self.index != oldindex)
if self.active && self.index<@options.length if self.active && self.index < @options.length
if Input.repeat?(Input::LEFT) if Input.repeat?(Input::LEFT)
self[self.index] = @options[self.index].prev(self[self.index]) self[self.index] = @options[self.index].prev(self[self.index])
dorefresh = true dorefresh = true
@@ -286,104 +286,125 @@ class PokemonOption_Scene
pbUpdateSpriteHash(@sprites) pbUpdateSpriteHash(@sprites)
end end
def pbStartScene(inloadscreen=false) def pbStartScene(inloadscreen = false)
@sprites = {} @sprites = {}
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height) @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@viewport.z = 99999 @viewport.z = 99999
@sprites["title"] = Window_UnformattedTextPokemon.newWithSize( @sprites["title"] = Window_UnformattedTextPokemon.newWithSize(
_INTL("Options"),0,0,Graphics.width,64,@viewport) _INTL("Options"), 0, 0, Graphics.width, 64, @viewport)
@sprites["textbox"] = pbCreateMessageWindow @sprites["textbox"] = pbCreateMessageWindow
@sprites["textbox"].text = _INTL("Speech frame {1}.",1+$PokemonSystem.textskin) @sprites["textbox"].text = _INTL("Speech frame {1}.", 1 + $PokemonSystem.textskin)
@sprites["textbox"].letterbyletter = false @sprites["textbox"].letterbyletter = false
pbSetSystemFont(@sprites["textbox"].contents) pbSetSystemFont(@sprites["textbox"].contents)
# These are the different options in the game. To add an option, define a # These are the different options in the game. To add an option, define a
# setter and a getter for that option. To delete an option, comment it out # setter and a getter for that option. To delete an option, comment it out
# or delete it. The game's options may be placed in any order. # or delete it. The game's options may be placed in any order.
@PokemonOptions = [ @PokemonOptions = [
SliderOption.new(_INTL("Music Volume"),0,100,5, SliderOption.new(_INTL("Music Volume"), 0, 100, 5,
proc { $PokemonSystem.bgmvolume }, proc { $PokemonSystem.bgmvolume },
proc { |value| proc { |value|
if $PokemonSystem.bgmvolume!=value if $PokemonSystem.bgmvolume != value
$PokemonSystem.bgmvolume = value $PokemonSystem.bgmvolume = value
if $game_system.playing_bgm!=nil && !inloadscreen if $game_system.playing_bgm != nil && !inloadscreen
playingBGM = $game_system.getPlayingBGM playingBGM = $game_system.getPlayingBGM
$game_system.bgm_pause $game_system.bgm_pause
$game_system.bgm_resume(playingBGM) $game_system.bgm_resume(playingBGM)
end end
end end
} }
), ),
SliderOption.new(_INTL("SE Volume"),0,100,5, SliderOption.new(_INTL("SE Volume"), 0, 100, 5,
proc { $PokemonSystem.sevolume }, proc { $PokemonSystem.sevolume },
proc { |value| proc { |value|
if $PokemonSystem.sevolume!=value if $PokemonSystem.sevolume != value
$PokemonSystem.sevolume = value $PokemonSystem.sevolume = value
if $game_system.playing_bgs!=nil if $game_system.playing_bgs != nil
$game_system.playing_bgs.volume = value $game_system.playing_bgs.volume = value
playingBGS = $game_system.getPlayingBGS playingBGS = $game_system.getPlayingBGS
$game_system.bgs_pause $game_system.bgs_pause
$game_system.bgs_resume(playingBGS) $game_system.bgs_resume(playingBGS)
end end
pbPlayCursorSE pbPlayCursorSE
end end
} }
), ),
EnumOption.new(_INTL("Text Speed"),[_INTL("Normal"),_INTL("Fast"),_INTL("Instant")], EnumOption.new(_INTL("Text Speed"), [_INTL("Normal"), _INTL("Fast"), _INTL("Instant")],
proc { $PokemonSystem.textspeed }, proc { $PokemonSystem.textspeed },
proc { |value| proc { |value|
$PokemonSystem.textspeed = value $PokemonSystem.textspeed = value
MessageConfig.pbSetTextSpeed(MessageConfig.pbSettingToTextSpeed(value)) MessageConfig.pbSetTextSpeed(MessageConfig.pbSettingToTextSpeed(value))
} }
), ),
EnumOption.new(_INTL("Battle Effects"),[_INTL("On"),_INTL("Off")], EnumOption.new(_INTL("Battle Effects"), [_INTL("On"), _INTL("Off")],
proc { $PokemonSystem.battlescene }, proc { $PokemonSystem.battlescene },
proc { |value| $PokemonSystem.battlescene = value } proc { |value| $PokemonSystem.battlescene = value }
), ),
EnumOption.new(_INTL("Battle Style"),[_INTL("Switch"),_INTL("Set")], EnumOption.new(_INTL("Battle Style"), [_INTL("Switch"), _INTL("Set")],
proc { $PokemonSystem.battlestyle }, proc { $PokemonSystem.battlestyle },
proc { |value| $PokemonSystem.battlestyle = value } proc { |value| $PokemonSystem.battlestyle = value }
), ),
EnumOption.new(_INTL("Default Movement"),[_INTL("Walking"),_INTL("Running")], EnumOption.new(_INTL("Default Movement"), [_INTL("Walking"), _INTL("Running")],
proc { $PokemonSystem.runstyle }, proc { $PokemonSystem.runstyle },
proc { |value| $PokemonSystem.runstyle = value } proc { |value| $PokemonSystem.runstyle = value }
), ),
NumberOption.new(_INTL("Speech Frame"),1,Settings::SPEECH_WINDOWSKINS.length, NumberOption.new(_INTL("Speech Frame"), 1, Settings::SPEECH_WINDOWSKINS.length,
proc { $PokemonSystem.textskin }, proc { $PokemonSystem.textskin },
proc { |value| proc { |value|
$PokemonSystem.textskin = value $PokemonSystem.textskin = value
MessageConfig.pbSetSpeechFrame("Graphics/Windowskins/" + Settings::SPEECH_WINDOWSKINS[value]) MessageConfig.pbSetSpeechFrame("Graphics/Windowskins/" + Settings::SPEECH_WINDOWSKINS[value])
} }
), ),
# NumberOption.new(_INTL("Menu Frame"),1,Settings::MENU_WINDOWSKINS.length, # NumberOption.new(_INTL("Menu Frame"),1,Settings::MENU_WINDOWSKINS.length,
# proc { $PokemonSystem.frame }, # proc { $PokemonSystem.frame },
# proc { |value| # proc { |value|
# $PokemonSystem.frame = value # $PokemonSystem.frame = value
# MessageConfig.pbSetSystemFrame("Graphics/Windowskins/" + Settings::MENU_WINDOWSKINS[value]) # MessageConfig.pbSetSystemFrame("Graphics/Windowskins/" + Settings::MENU_WINDOWSKINS[value])
# } # }
# ), # ),
EnumOption.new(_INTL("Text Entry"),[_INTL("Cursor"),_INTL("Keyboard")], EnumOption.new(_INTL("Text Entry"), [_INTL("Cursor"), _INTL("Keyboard")],
proc { $PokemonSystem.textinput }, proc { $PokemonSystem.textinput },
proc { |value| $PokemonSystem.textinput = value } proc { |value| $PokemonSystem.textinput = value }
), ),
EnumOption.new(_INTL("Screen Size"),[_INTL("S"),_INTL("M"),_INTL("L"),_INTL("XL"),_INTL("Full")], EnumOption.new(_INTL("Screen Size"), [_INTL("S"), _INTL("M"), _INTL("L"), _INTL("XL"), _INTL("Full")],
proc { [$PokemonSystem.screensize, 4].min }, proc { [$PokemonSystem.screensize, 4].min },
proc { |value| proc { |value|
if $PokemonSystem.screensize != value if $PokemonSystem.screensize != value
$PokemonSystem.screensize = value $PokemonSystem.screensize = value
pbSetResizeFactor($PokemonSystem.screensize) pbSetResizeFactor($PokemonSystem.screensize)
end end
} }
) )
] ]
if $game_switches && $game_switches[NEW_GAME_PLUS] #beat the league
@PokemonOptions <<
EnumOption.new(_INTL("Battle type"), [_INTL("Single"), _INTL("Double"), _INTL("Triple")],
proc { $PokemonSystem.textspeed },
proc { |value|
if value == 0
$game_variables[DEFAULT_BATTLE_TYPE] = [1, 1]
elsif value == 1
$game_variables[DEFAULT_BATTLE_TYPE] = [2, 2]
elsif value == 2
$game_variables[DEFAULT_BATTLE_TYPE] = [3, 3]
else
$game_variables[DEFAULT_BATTLE_TYPE] = [1, 1]
end
$PokemonSystem.textspeed = value
MessageConfig.pbSetTextSpeed(MessageConfig.pbSettingToTextSpeed(value))
}
)
end
@PokemonOptions = pbAddOnOptions(@PokemonOptions) @PokemonOptions = pbAddOnOptions(@PokemonOptions)
@sprites["option"] = Window_PokemonOption.new(@PokemonOptions,0, @sprites["option"] = Window_PokemonOption.new(@PokemonOptions, 0,
@sprites["title"].height,Graphics.width, @sprites["title"].height, Graphics.width,
Graphics.height-@sprites["title"].height-@sprites["textbox"].height) Graphics.height - @sprites["title"].height - @sprites["textbox"].height)
@sprites["option"].viewport = @viewport @sprites["option"].viewport = @viewport
@sprites["option"].visible = true @sprites["option"].visible = true
# Get the values of each option # Get the values of each option
for i in 0...@PokemonOptions.length for i in 0...@PokemonOptions.length
@sprites["option"].setValueNoRefresh(i,(@PokemonOptions[i].get || 0)) @sprites["option"].setValueNoRefresh(i, (@PokemonOptions[i].get || 0))
end end
@sprites["option"].refresh @sprites["option"].refresh
pbDeactivateWindows(@sprites) pbDeactivateWindows(@sprites)
@@ -395,9 +416,9 @@ class PokemonOption_Scene
end end
def pbOptions def pbOptions
oldSystemSkin = $PokemonSystem.frame # Menu oldSystemSkin = $PokemonSystem.frame # Menu
oldTextSkin = $PokemonSystem.textskin # Speech oldTextSkin = $PokemonSystem.textskin # Speech
pbActivateWindow(@sprites,"option") { pbActivateWindow(@sprites, "option") {
loop do loop do
Graphics.update Graphics.update
Input.update Input.update
@@ -407,12 +428,12 @@ class PokemonOption_Scene
for i in 0...@PokemonOptions.length for i in 0...@PokemonOptions.length
@PokemonOptions[i].set(@sprites["option"][i]) @PokemonOptions[i].set(@sprites["option"][i])
end end
if $PokemonSystem.textskin!=oldTextSkin if $PokemonSystem.textskin != oldTextSkin
@sprites["textbox"].setSkin(MessageConfig.pbGetSpeechFrame()) @sprites["textbox"].setSkin(MessageConfig.pbGetSpeechFrame())
@sprites["textbox"].text = _INTL("Speech frame {1}.",1+$PokemonSystem.textskin) @sprites["textbox"].text = _INTL("Speech frame {1}.", 1 + $PokemonSystem.textskin)
oldTextSkin = $PokemonSystem.textskin oldTextSkin = $PokemonSystem.textskin
end end
if $PokemonSystem.frame!=oldSystemSkin if $PokemonSystem.frame != oldSystemSkin
@sprites["title"].setSkin(MessageConfig.pbGetSystemFrame()) @sprites["title"].setSkin(MessageConfig.pbGetSystemFrame())
@sprites["option"].setSkin(MessageConfig.pbGetSystemFrame()) @sprites["option"].setSkin(MessageConfig.pbGetSystemFrame())
oldSystemSkin = $PokemonSystem.frame oldSystemSkin = $PokemonSystem.frame
@@ -421,7 +442,7 @@ class PokemonOption_Scene
if Input.trigger?(Input::BACK) if Input.trigger?(Input::BACK)
break break
elsif Input.trigger?(Input::USE) elsif Input.trigger?(Input::USE)
break if @sprites["option"].index==@PokemonOptions.length break if @sprites["option"].index == @PokemonOptions.length
end end
end end
} }
@@ -449,7 +470,7 @@ class PokemonOptionScreen
@scene = scene @scene = scene
end end
def pbStartScreen(inloadscreen=false) def pbStartScreen(inloadscreen = false)
@scene.pbStartScene(inloadscreen) @scene.pbStartScene(inloadscreen)
@scene.pbOptions @scene.pbOptions
@scene.pbEndScene @scene.pbEndScene

View File

@@ -0,0 +1,8 @@
#Switches
NEW_GAME_PLUS = 972
#Variables
DEFAULT_BATTLE_TYPE = 242

View File

@@ -0,0 +1,2 @@
class ControlConfig
end

View File

@@ -94,17 +94,21 @@ class BetterRegionMap
# end # end
@window["player"] = Sprite.new(@mapoverlayvp) @window["player"] = Sprite.new(@mapoverlayvp)
if @show_player if @show_player
player = nil if map_metadata
player = GameData::MapMetadata.get($game_map.map_id).town_map_position #pbGetMetadata($game_map.map_id, MetadataMapPosition) if $game_map player = map_metadata.town_map_position
if player && player[0] == @region if player && player[0] == @region
$PokemonGlobal.regionMapSel[0] = player[1] $PokemonGlobal.regionMapSel[0] = player[1]
$PokemonGlobal.regionMapSel[1] = player[2] $PokemonGlobal.regionMapSel[1] = player[2]
gender = $Trainer.gender.to_digits(3) gender = $Trainer.gender.to_digits(3)
@window["player"].bmp("Graphics/Pictures/mapPlayer#{gender}") @window["player"].bmp("Graphics/Pictures/mapPlayer#{gender}")
@window["player"].x = TileWidth * player[1] + (TileWidth / 2.0) @window["player"].x = TileWidth * player[1] + (TileWidth / 2.0)
@window["player"].y = TileHeight * player[2] + (TileHeight / 2.0) @window["player"].y = TileHeight * player[2] + (TileHeight / 2.0)
@window["player"].center_origins @window["player"].center_origins
end
else
end end
end end
@window["areahighlight"] = BitmapSprite.new(@window["map"].bitmap.width,@window["map"].bitmap.height,@mapoverlayvp) @window["areahighlight"] = BitmapSprite.new(@window["map"].bitmap.width,@window["map"].bitmap.height,@mapoverlayvp)
@window["areahighlight"].y = -8 @window["areahighlight"].y = -8

View File

@@ -165,7 +165,8 @@ end
def getHeadID(species, bodyId) def getHeadID(species, bodyId)
head_dexNum = convertSpeciesSymbolToDexNumber(species) head_dexNum = convertSpeciesSymbolToDexNumber(species)
body_dexNum = convertSpeciesSymbolToDexNumber(bodyId) body_dexNum = convertSpeciesSymbolToDexNumber(bodyId)
return (head_dexNum - (body_dexNum * NB_POKEMON)).round calculated_number = (head_dexNum - (body_dexNum * NB_POKEMON)).round
return calculated_number == 0 ? 420 : calculated_number
end end
def getAllNonLegendaryPokemon() def getAllNonLegendaryPokemon()
@@ -291,3 +292,13 @@ def pbBitmap(path)
end end
return bmp return bmp
end end
def Kernel.setRocketPassword(variableNum)
abilityIndex = rand(233)
speciesIndex =rand(PBSpecies.maxValue-1)
word1 = PBSpecies.getName(speciesIndex)
word2 = GameData::Ability.get(abilityIndex).name
password = _INTL("{1}'s {2}",word1,word2)
pbSet(variableNum,password)
end

View File

@@ -378,6 +378,31 @@ ItemHandlers::UseOnPokemon.add(:MISTSTONE, proc { |item, pokemon, scene|
end end
}) })
ItemHandlers::UseFromBag.add(:DEBUGGER,proc{|item|
Kernel.pbMessage(_INTL("[{1}]The debugger should ONLY be used if you are stuck somewhere because of a glitch.",Settings::GAME_VERSION_NUMBER))
if Kernel.pbConfirmMessageSerious(_INTL("Innapropriate use of this item can lead to unwanted effects and make the game unplayable. Do you want to continue?"))
$game_player.cancelMoveRoute()
Kernel.pbStartOver(false)
Kernel.pbMessage(_INTL("Please report the glitch on the Pokecommunity thread, on the game's subreddit or in the game's Discord channel."))
end
})
ItemHandlers::UseFromBag.add(:MAGICBOOTS,proc{|item|
if $DEBUG
if Kernel.pbConfirmMessageSerious(_INTL("Take off the Magic Boots?"))
$DEBUG = false
end
else
if Kernel.pbConfirmMessageSerious(_INTL("Put on the Magic Boots?"))
Kernel.pbMessage(_INTL("Debug mode is now active."))
$game_switches[842] = true #got debug mode (for compatibility)
$DEBUG = true
end
end
next 1
})
def pbForceEvo(pokemon) def pbForceEvo(pokemon)
newspecies = getEvolvedSpecies(pokemon) newspecies = getEvolvedSpecies(pokemon)
return false if newspecies == -1 return false if newspecies == -1

View File

@@ -694,7 +694,7 @@ class PokemonFusionScene
$Trainer.pokedex.set_owned(newSpecies) $Trainer.pokedex.set_owned(newSpecies)
Kernel.pbMessageDisplay(@sprites["msgwindow"], Kernel.pbMessageDisplay(@sprites["msgwindow"],
_INTL("{1}'s data was added to the Pokédex", newspeciesname)) _INTL("{1}'s data was added to the Pokédex", newspeciesname))
#@scene.pbShowPokedex(@newspecies) @scene.pbShowPokedex(@newspecies)
end end
#first check if hidden ability #first check if hidden ability
hiddenAbility1 = @pokemon1.ability == @pokemon1.getAbilityList[0][-1] hiddenAbility1 = @pokemon1.ability == @pokemon1.getAbilityList[0][-1]

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -522,7 +522,7 @@
515,DEVONSCOPE,Quest Journal,Quest Journals,8,0,A journal that logs all of the quests that you have in progress,2,0,6, 515,DEVONSCOPE,Quest Journal,Quest Journals,8,0,A journal that logs all of the quests that you have in progress,2,0,6,
516,SQUIRTBOTTLE,Squirtbottle,Squirtbottles,8,0,A bottle used for watering plants.,0,0,6, 516,SQUIRTBOTTLE,Squirtbottle,Squirtbottles,8,0,A bottle used for watering plants.,0,0,6,
517,SPRAYDUCK,Mareanie Doll,Mareanie Dolls,8,0,A doll shaped like the Alolan Pokémon Mareanie. It can be used to scare away Corsola.,0,0,6, 517,SPRAYDUCK,Mareanie Doll,Mareanie Dolls,8,0,A doll shaped like the Alolan Pokémon Mareanie. It can be used to scare away Corsola.,0,0,6,
518,WAILMERPAIL,Spring Boots,Spring Boots,8,0,Boots mounted with a spring. They can be used to jump over small gaps.,0,0,6, 518,WAILMERPAIL,Golbat Boots,Golbat Boots,8,0,Boots mounted with a spring. They can be used to jump over small gaps.,0,0,6,
519,GRACIDEA,Spaceship Part,Spaceship Parts,8,0,"Debris from a mysterious alien spaceship.",5,0,6, 519,GRACIDEA,Spaceship Part,Spaceship Parts,8,0,"Debris from a mysterious alien spaceship.",5,0,6,
520,AURORATICKET,Navel Ticket,Navel Tickets,8,0,A ticket required to board a ship to a faraway island. It glows beautifully.,0,0,6, 520,AURORATICKET,Navel Ticket,Navel Tickets,8,0,A ticket required to board a ship to a faraway island. It glows beautifully.,0,0,6,
521,OLDSEAMAP,Old Sea Map,Old Sea Maps,8,0,A faded sea chart that shows the way to a certain island.,0,0,6, 521,OLDSEAMAP,Old Sea Map,Old Sea Maps,8,0,A faded sea chart that shows the way to a certain island.,0,0,6,
@@ -651,5 +651,16 @@
643,JETPACK,Jetpack,Jetpacks,8,0,"A water propelled device that allows you to climb up waterfalls without the use of a Pokémon ",2,0,6 643,JETPACK,Jetpack,Jetpacks,8,0,"A water propelled device that allows you to climb up waterfalls without the use of a Pokémon ",2,0,6
644,INFINITEREVERSERS,Infinite Reversers,Infinite Reversers,8,0,"Inverts a fusion. Can be reused as many times as you like.",5,0,6, 644,INFINITEREVERSERS,Infinite Reversers,Infinite Reversers,8,0,"Inverts a fusion. Can be reused as many times as you like.",5,0,6,
645,INFINITESPLICERS2,Infinite Splicers,Infinite Splicers,8,0,"An improved version of the Infinite Splicers. Can be reused as many times as you like.",5,0,6, 645,INFINITESPLICERS2,Infinite Splicers,Infinite Splicers,8,0,"An improved version of the Infinite Splicers. Can be reused as many times as you like.",5,0,6,
646,TM109,TM109,TM109s,4,30000,"The user swings its body around violently to inflict damage on everything in its vicinity.",3,0,0,BRUTALSWING
647,TM110,TM110,TM110s,4,30000,"This move reduces damage from attacks for five turns. This can be used only in a hailstorm.",3,0,0,AURORAVEIL
648,TM111,TM111,TM111s,4,30000,"The user damages opposing Pokémon by emitting a powerful flash.",3,0,0,DAZZLINGGLEAM
649,TM112,TM112,TM112s,4,30000,"The user focuses its mind before launching a punch. It will fail if the user is hit before it is used.",3,0,0,FOCUSPUNCH
650,TM113,TM113,TM113s,4,30000,"The target is infested and unable to flee for four to five turns.",3,0,0,INFESTATION
651,TM114,TM114,TM114s,4,30000,"The user drains the target's blood. The user's HP is restored by half the damage taken by the target.",3,0,0,LEECHLIFE
652,TM115,TM115,TM115s,4,30000,"Striking opponents repeatedly makes the user's fists harder, raising the user's Attack stat.",3,0,0,POWERUPPUNCH
653,TM116,TM116,TM116s,4,30000,"The user strikes the target with a quick jolt of electricity. This attack cannot be evaded.",3,0,0,SHOCKWAVE
654,TM117,TM117,TM117s,4,30000,"The user stabs the target with a sharp horn. This attack never misses.",3,0,0,SMARTSTRIKE
655,TM118,TM118,TM118s,4,30000,"The target is hit with wings of steel. It may also raise the user's Defense stat.",3,0,0,STEELWING
656,TM119,TM119,TM119s,4,30000,"The user attacks driven by frustration. Power increases if the user's previous move failed.",3,0,0,STOMPINGTANTRUM
657,TM120,TM120,TM120s,4,30000,"The user attacks the target's throat. The target cannot use sound-based moves for two turns.",3,0,0,THROATCHOP

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -52,46 +52,46 @@ Pokemon = B64H92,32 #Gasbra,
######################### #########################
[CHANNELER,Carrietta] [CHANNELER,Carrietta]
Pokemon = B92H61,32 #Politly, Pokemon = B52H92,32 #meowly,
######################### #########################
[CHANNELER,Morgan] [CHANNELER,Morgan]
Pokemon = B92H140,34 #kabutly, Pokemon = B20H92,34 #ratatly,
############F5############ ############F5############
######################### #########################
[CHANNELER,Ruth] [CHANNELER,Ruth]
Pokemon = B40H92,33 #Gastuf, Pokemon = B93H96,33 #Gastuf,
######################### #########################
[HAUNTEDGIRL_YOUNG,Regan] [HAUNTEDGIRL_YOUNG,Regan]
Pokemon = B93H26,33 #Raiter, Pokemon = B102H92,33 #exeggly,
######################### #########################
[CHANNELER,Karina] [CHANNELER,Karina]
Pokemon = B92H73,32 #Tentatly, Pokemon = B93H42,32 #haunbat,
######################### #########################
[HAUNTEDGIRL,Carol Anne] [HAUNTEDGIRL,Carol Anne]
Pokemon = B28H93,34 #Hauntslash, Pokemon = B42H93,34 #golter,
######################### #########################
###### f6############## ###### f6##############
[CHANNELER,Angelica] [CHANNELER,Angelica]
Pokemon = GASTLY,32 #Pertly, Pokemon = GASTLY,32 #Pertly,
Pokemon = GASTLY,33 #Genkarp, Pokemon = GASTLY,33 #Genkarp,
Pokemon = B13H94,33 #Gendle, Pokemon = B200H92,33 #misdreatly,
######################### #########################
[HAUNTEDGIRL_YOUNG,Jennifer] [HAUNTEDGIRL_YOUNG,Jennifer]
Pokemon = B101H93,34 #Hauntode, Pokemon = B94H36,31 #Hauntfable,
######################### #######################1##
[CHANNELER,Emilia] [CHANNELER,Emilia]
Pokemon = B128H93,34 #Hauntros, Pokemon = B51H93,34 #Hauntrio,
######################### #########################
[HAUNTEDGIRL,Samara] [HAUNTEDGIRL,???]
Pokemon = B105H93,40 #Hauntwak, Pokemon = B105H93,40 #Hauntwak,
############################ ############################
@@ -2086,8 +2086,8 @@ Pokemon = B109H88,37 #koffmer
Moves = SELFDESTRUCT,SLUDGEBOMB,DESTINYBOND,FLING Moves = SELFDESTRUCT,SLUDGEBOMB,DESTINYBOND,FLING
AbilityIndex = 0 AbilityIndex = 0
Item = POISONBARB Item = POISONBARB
Pokemon = B197H169,37 #umbfing, Pokemon = B42H113,35 #chanbat,
Moves = POWERGEM,FAINTATTACK,TOXIC,SLUDGEBOMB Moves = EGGBOMB,LIGHTSCREEN,TOXIC,POISONFANG
AbilityIndex = 0 AbilityIndex = 0
Item = BLACKGLASSES Item = BLACKGLASSES
Pokemon = B119H110,39 # Weeking, Pokemon = B119H110,39 # Weeking,
@@ -3613,7 +3613,7 @@ Pokemon = B137H81,36 #MAGNEGON
####################### #######################
[TEAMROCKET_M,Donald] [TEAMROCKET_M,Donald]
Pokemon = SANDSLASH,34 #NIDOSLASH Pokemon = RATICATE,34 #NIDOSLASH
Pokemon = B34H27,34 #SANDKING Pokemon = B34H27,34 #SANDKING
###################### ######################
##### #####

View File

@@ -1,41 +0,0 @@
# Pokémon Essentials
Based on Essentials v19.
You can build your fangame on top of a fork of this repository. Doing so will let you update your fangame with improvements made to this repo as soon as they are made.
## Usage
1. Fork this repo.
2. Get a copy of Essentials v19 (a download link cannot be provided here).
3. Clone your forked repo into the Essentials v19 folder, replacing the existing files with the ones from the repo.
From here, you can edit this project to turn it into your fangame/develop mods. When this repo is updated, you can pull the changes to update your fork and get the updates into your fangame/modding environment.
## Scripts
The scripts no longer live in the Scripts.rxdata file. They have been extracted into separate files and placed in the Data/Scripts/ folder (and subfolders within). This makes it easier to work with other people and keep track of changes.
The scripts are loaded into the game alphanumerically, starting from the top folder (Data/Scripts/) and going depth-first. That is, all scripts in a given folder are loaded, and then each of its subfolder is checked in turn (again in alphanumerical order) for files/folders to load/check.
### Extracting and reintegrating scripts
This repo contains two script files in the main folder:
* scripts_extract.rb - Run this to extract all scripts from Scripts.rxdata into individual .rb files (any existing individual .rb files are deleted).
* Scripts.rxdata is backed up to ScriptsBackup.rxdata, and is then replaced with a version that reads the individual .rb files and does nothing else.
* scripts_combine.rb - Run this to reintegrate all the individual .rb files back into Scripts.rxdata.
* The individual .rb files are left where they are, but they no longer do anything.
You will need Ruby installed to run these scripts. The intention is to replace these with something more user-friendly.
## Files not in the repo
The .gitignore file lists the files that will not be included in this repo. These are:
* The Audio/, Graphics/ and Plugins/ folders and everything in them.
* Everything in the Data/ folder, except for:
* The Data/Scripts/ folder and everything in there.
* Scripts.rxdata (a special version that just loads the individual script files).
* A few files in the main project folder (two of the Game.xxx files, and the RGSS dll file).
* Temporary files.

View File

@@ -15,45 +15,66 @@ New features added by upgrading to Pokemon essentials 19 / MKXP
MKXP: https://github.com/Ancurio/mkxp MKXP: https://github.com/Ancurio/mkxp
Full Essentials changelog: https://essentialsdocs.fandom.com/wiki/Change_log Full Essentials changelog: https://essentialsdocs.fandom.com/wiki/Change_log
## Technical ### ## Technical###
- MKXP player is now used to run the game instead of RGSS player
- Fullscreen & resizable screen - Fullscreen & resizable screen
- Linux and Mac support
- Performance improvements - Performance improvements
- Native controller support - Built-in controls binding (F1)
-- Includes native controller support
- The game now continues running when it's in the background - The game now continues running when it's in the background
- Savefiles are now located in the appdata folder (Windows) - Savefiles have been moved to the appdata folder (Windows)
- New debug options:
## UI and menus ##
- New options in in-game menu:
- Default movement - Default movement
- Text entry type - Text entry type
- - Battle type
- New options in in-game menu: - Menus and controls should be more responsive
- Fixes random memory crashes (unconfirmed, but I haven't encountered one so far) - Added Instant text speed option
- Added visual indicator for selecting fusion order on the title screen
- Changed the battle UI's appearance
## Gameplay ## ## Gameplay ##
- Fixes several moves and abilities which were previously broken (Crafty Shield, Fairy Lock, Purify,
Gale Wings, Moxie, Innards Out, Magician, Pickpocket, Protean, Disguise)
- Fixes double battles
- Exp. gain when catching Pokémon - Exp. gain when catching Pokémon
- Now possible to register multiple items at once - Now possible to register multiple items at once
- Adds several new moves from generations 5 to 7
- Added back double battles
- Added triple battles lounge in Knot Island
Other changes - Added Battle Factory
‾‾‾‾‾
- Added Instant text speed option
- Changed how levels are calculated when unfusing: - Changed how levels are calculated when unfusing:
- Level when originally fused + experience obtained while fused - Level when originally fused + experience obtained while fused
- Levels gained via Rare Candies are NOT taken into account - Levels gained via Rare Candies are NOT taken into account
-NB: Pokemon that were fused in previous versions still use the old method -NB: Pokemon that were fused in previous versions still use the old method
- Reduced DNA Splicers price to $300 - Updated all movesets to gen 7
- Resort Gorgeous now prioritizes Pokemon with custom sprites - Added 12 new TMs and 5 new Move tutors
- Added back double battles - Removed the Mt. Silver requirement for making triple fusions
- Added triple battles lounge in Knot Island - Added an option to set the default battle type (single, double, triple) - Only available if beat the game at least once
- Added Battle Factory
- Added visual indicator for selecting fusion order on the title screen
## Maps ##
- Changed some tiles in Vermillion City - Changed some tiles in Vermillion City
- Added Dive section to Kindle Road - Added Dive section to Kindle Road
- Made Giovanni boss battle in Saffron 2vs1
## Tweaks / Balance ##
- Reduced DNA Splicers price to $300
- Tweaked Sprout Tower to make it a bit easier
- Moon Stones, Sun Stones, Dawn Stones, Dusk Stones and Shiny Stones are now sold at the Goldenrod Dept. Store instead of Celadon
- Changed some trainer teams in Lavender tower
## Miscellaneous ##
- Resort Gorgeous now prioritizes Pokemon with custom sprites
- Renamed Spring boots to Golbat Boots
- New debug options
- Item stack limit increased to 999
#################
# Bug fixes #
#################
- Fixed random memory crashes (unconfirmed, but I haven't encountered one so far)
- Fixed random crash when catching Pokémon
- Fixed several moves and abilities which were previously broken (Crafty Shield, Fairy Lock, Purify, Gale Wings, Moxie, Innards Out, Magician, Pickpocket, Protean, Disguise)
- Fixed double battles
################# #################
Removed Features Removed Features
@@ -67,7 +88,7 @@ Removed features that will be coming back eventually
- Wild fusions //TODO: pas oublier de init exp_gained_since_fused=0 && exp_when_fused = self.exp - Wild fusions //TODO: pas oublier de init exp_gained_since_fused=0 && exp_when_fused = self.exp
- Autosave (except in Pokemon centers) - Autosave (except in Pokemon centers)
- Fusing from PC - Fusing from PC
- Nicknaming from the party screen - Nicknaming from the party screen - Added temporary name rater in Vermillion City's Pokemon center
- Modern Mode compatibility - Modern Mode compatibility
- Quest log - Quest log
- Hidden abilities routes - Hidden abilities routes
@@ -90,4 +111,10 @@ Removed features that probably won't be coming back
############ KNOWN ISSUES ############## ############ KNOWN ISSUES ##############
- Some areas might have abnormal lag (please tell me in the discord if you find one that's unreasonably laggy) - Some areas might have abnormal lag (please tell me in the discord if you find one that's unreasonably laggy)
- Some side-stairs might act strange - Some side-stairs might act strange
- The Pokedex is currently all sorts of messed up
- Long loading time when starting up the game
- Some of the music and sound effects might not load correctly
- Some Pokémon appear higher than they should in battles on the player's side
- Significant stutter in the overworld when playing the game on an AMD CPU
- Several custom items have not yet been reimplemented
- Some battle backgrounds might be missing

View File

@@ -90,7 +90,7 @@
// Override the game window title // Override the game window title
// (default: none) // (default: none)
// //
"windowTitle": "Pokémon Infinite Fusion", //"windowTitle": "Pokémon Infinite Fusion",
// Enforce a static frame rate // Enforce a static frame rate