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)
end
def cancelMoveRoute()
@move_route=nil
@move_route_forcing = false
end
def bush_depth
return @bush_depth || 0
end

View File

@@ -4,7 +4,7 @@ module GameData
attr_reader :id_number
attr_reader :real_name
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 :can_fish
attr_reader :can_dive
@@ -36,28 +36,29 @@ module GameData
end
def self.load; end
def self.save; end
def initialize(hash)
@id = hash[:id]
@id_number = hash[:id_number]
@real_name = hash[:id].to_s || "Unnamed"
@can_surf = hash[:can_surf] || false
@waterfall = hash[:waterfall] || false
@waterfall_crest = hash[:waterfall_crest] || false
@can_fish = hash[:can_fish] || false
@can_dive = hash[:can_dive] || false
@deep_bush = hash[:deep_bush] || false
@shows_grass_rustle = hash[:shows_grass_rustle] || false
@land_wild_encounters = hash[:land_wild_encounters] || false
@id = hash[:id]
@id_number = hash[:id_number]
@real_name = hash[:id].to_s || "Unnamed"
@can_surf = hash[:can_surf] || false
@waterfall = hash[:waterfall] || false
@waterfall_crest = hash[:waterfall_crest] || false
@can_fish = hash[:can_fish] || false
@can_dive = hash[:can_dive] || false
@deep_bush = hash[:deep_bush] || false
@shows_grass_rustle = hash[:shows_grass_rustle] || false
@land_wild_encounters = hash[:land_wild_encounters] || false
@double_wild_encounters = hash[:double_wild_encounters] || false
@battle_environment = hash[:battle_environment]
@ledge = hash[:ledge] || false
@ice = hash[:ice] || false
@bridge = hash[:bridge] || false
@shows_reflections = hash[:shows_reflections] || false
@must_walk = hash[:must_walk] || false
@ignore_passability = hash[:ignore_passability] || false
@battle_environment = hash[:battle_environment]
@ledge = hash[:ledge] || false
@ice = hash[:ice] || false
@bridge = hash[:bridge] || false
@shows_reflections = false #= hash[:shows_reflections] || false
@must_walk = hash[:must_walk] || false
@ignore_passability = hash[:ignore_passability] || false
end
def can_surf_freely
@@ -69,134 +70,134 @@ end
#===============================================================================
GameData::TerrainTag.register({
:id => :None,
:id_number => 0
})
:id => :None,
:id_number => 0
})
GameData::TerrainTag.register({
:id => :Ledge,
:id_number => 1,
:ledge => true
})
:id => :Ledge,
:id_number => 1,
:ledge => true
})
GameData::TerrainTag.register({
:id => :Grass,
:id_number => 2,
:shows_grass_rustle => true,
:land_wild_encounters => true,
:battle_environment => :Grass
})
:id => :Grass,
:id_number => 2,
:shows_grass_rustle => true,
:land_wild_encounters => true,
:battle_environment => :Grass
})
GameData::TerrainTag.register({
:id => :Sand,
:id_number => 3,
:battle_environment => :Sand
})
:id => :Sand,
:id_number => 3,
:battle_environment => :Sand
})
GameData::TerrainTag.register({
:id => :Rock,
:id_number => 15,
:battle_environment => :Rock
})
:id => :Rock,
:id_number => 15,
:battle_environment => :Rock
})
GameData::TerrainTag.register({
:id => :DeepWater,
:id_number => 5,
:can_surf => true,
:can_fish => true,
:can_dive => true,
:battle_environment => :MovingWater
})
:id => :DeepWater,
:id_number => 5,
:can_surf => true,
:can_fish => true,
:can_dive => true,
:battle_environment => :MovingWater
})
GameData::TerrainTag.register({
:id => :WaterCurrent,
:id_number => 6,
:can_surf => true,
:can_fish => true,
:battle_environment => :MovingWater
})
:id => :WaterCurrent,
:id_number => 6,
:can_surf => true,
:can_fish => true,
:battle_environment => :MovingWater
})
GameData::TerrainTag.register({
:id => :StillWater,
:id_number => 17,
:can_surf => true,
:can_fish => true,
:battle_environment => :StillWater
#:shows_reflections => true
})
:id => :StillWater,
:id_number => 17,
:can_surf => true,
:can_fish => true,
:battle_environment => :StillWater
#:shows_reflections => true
})
GameData::TerrainTag.register({
:id => :Water,
:id_number => 7,
:can_surf => true,
:can_fish => true,
:battle_environment => :MovingWater
})
:id => :Water,
:id_number => 7,
:can_surf => true,
:can_fish => true,
:battle_environment => :MovingWater
})
GameData::TerrainTag.register({
:id => :Waterfall,
:id_number => 8,
:can_surf => true,
:waterfall => true
})
:id => :Waterfall,
:id_number => 8,
:can_surf => true,
:waterfall => true
})
GameData::TerrainTag.register({
:id => :WaterfallCrest,
:id_number => 9,
:can_surf => true,
:can_fish => true,
:waterfall_crest => true
})
:id => :WaterfallCrest,
:id_number => 9,
:can_surf => true,
:can_fish => true,
:waterfall_crest => true
})
GameData::TerrainTag.register({
:id => :TallGrass,
:id_number => 10,
:deep_bush => true,
:land_wild_encounters => true,
:double_wild_encounters => true,
:battle_environment => :TallGrass,
:must_walk => true
})
:id => :TallGrass,
:id_number => 10,
:deep_bush => true,
:land_wild_encounters => true,
:double_wild_encounters => true,
:battle_environment => :TallGrass,
:must_walk => true
})
GameData::TerrainTag.register({
:id => :UnderwaterGrass,
:id_number => 11,
:land_wild_encounters => true
})
:id => :UnderwaterGrass,
:id_number => 11,
:land_wild_encounters => true
})
GameData::TerrainTag.register({
:id => :Ice,
:id_number => 12,
:battle_environment => :Ice,
:ice => true,
:must_walk => true
})
:id => :Ice,
:id_number => 12,
:battle_environment => :Ice,
:ice => true,
:must_walk => true
})
GameData::TerrainTag.register({
:id => :Neutral,
:id_number => 13,
:ignore_passability => true
})
:id => :Neutral,
:id_number => 13,
:ignore_passability => true
})
# 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.
GameData::TerrainTag.register({
:id => :SootGrass,
:id_number => 14,
:shows_grass_rustle => true,
:land_wild_encounters => true,
:battle_environment => :Grass
})
:id => :SootGrass,
:id_number => 14,
:shows_grass_rustle => true,
:land_wild_encounters => true,
:battle_environment => :Grass
})
GameData::TerrainTag.register({
:id => :Bridge,
:id_number => 4,
:bridge => true
})
:id => :Bridge,
:id_number => 4,
:bridge => true
})
GameData::TerrainTag.register({
:id => :Puddle,
:id_number => 16,
:battle_environment => :Puddle,
:shows_reflections => false
})
:id => :Puddle,
:id_number => 16,
:battle_environment => :Puddle,
: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
# number is for the opposing side.
def setBattleMode(mode)
default = $game_variables[242].is_a?(Array) ? $game_variables[242] : [1,1]
@sideSizes =
case mode
when "triple", "3v3" then [3, 3]
@@ -187,7 +188,7 @@ class PokeBattle_Battle
when "2v1" then [2, 1]
when "1v3" then [1, 3]
when "1v2" then [1, 2]
else [1, 1] # Single, 1v1 (default)
else default # Single, 1v1 (default)
end
end

View File

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

View File

@@ -120,7 +120,7 @@ end
def pbPrepareBattle(battle)
battleRules = $PokemonTemp.battleRules
# 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)
battle.canLose = battleRules["canLose"] if !battleRules["canLose"].nil?
# 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)
headPoke_number = getHeadID(pokemon.species, bodyPoke_number)
bodyPoke = GameData::Species.get(bodyPoke_number).species
headPoke = GameData::Species.get(headPoke_number).species

View File

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

View File

@@ -165,7 +165,8 @@ end
def getHeadID(species, bodyId)
head_dexNum = convertSpeciesSymbolToDexNumber(species)
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
def getAllNonLegendaryPokemon()
@@ -290,4 +291,14 @@ def pbBitmap(path)
bmp = Bitmap.new(1, 1)
end
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
})
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)
newspecies = getEvolvedSpecies(pokemon)
return false if newspecies == -1

View File

@@ -694,7 +694,7 @@ class PokemonFusionScene
$Trainer.pokedex.set_owned(newSpecies)
Kernel.pbMessageDisplay(@sprites["msgwindow"],
_INTL("{1}'s data was added to the Pokédex", newspeciesname))
#@scene.pbShowPokedex(@newspecies)
@scene.pbShowPokedex(@newspecies)
end
#first check if hidden ability
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,
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,
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,
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,
@@ -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
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,
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]
Pokemon = B92H61,32 #Politly,
Pokemon = B52H92,32 #meowly,
#########################
[CHANNELER,Morgan]
Pokemon = B92H140,34 #kabutly,
Pokemon = B20H92,34 #ratatly,
############F5############
#########################
[CHANNELER,Ruth]
Pokemon = B40H92,33 #Gastuf,
Pokemon = B93H96,33 #Gastuf,
#########################
[HAUNTEDGIRL_YOUNG,Regan]
Pokemon = B93H26,33 #Raiter,
Pokemon = B102H92,33 #exeggly,
#########################
[CHANNELER,Karina]
Pokemon = B92H73,32 #Tentatly,
Pokemon = B93H42,32 #haunbat,
#########################
[HAUNTEDGIRL,Carol Anne]
Pokemon = B28H93,34 #Hauntslash,
Pokemon = B42H93,34 #golter,
#########################
###### f6##############
[CHANNELER,Angelica]
Pokemon = GASTLY,32 #Pertly,
Pokemon = GASTLY,33 #Genkarp,
Pokemon = B13H94,33 #Gendle,
Pokemon = B200H92,33 #misdreatly,
#########################
[HAUNTEDGIRL_YOUNG,Jennifer]
Pokemon = B101H93,34 #Hauntode,
#########################
Pokemon = B94H36,31 #Hauntfable,
#######################1##
[CHANNELER,Emilia]
Pokemon = B128H93,34 #Hauntros,
Pokemon = B51H93,34 #Hauntrio,
#########################
[HAUNTEDGIRL,Samara]
[HAUNTEDGIRL,???]
Pokemon = B105H93,40 #Hauntwak,
############################
@@ -2086,8 +2086,8 @@ Pokemon = B109H88,37 #koffmer
Moves = SELFDESTRUCT,SLUDGEBOMB,DESTINYBOND,FLING
AbilityIndex = 0
Item = POISONBARB
Pokemon = B197H169,37 #umbfing,
Moves = POWERGEM,FAINTATTACK,TOXIC,SLUDGEBOMB
Pokemon = B42H113,35 #chanbat,
Moves = EGGBOMB,LIGHTSCREEN,TOXIC,POISONFANG
AbilityIndex = 0
Item = BLACKGLASSES
Pokemon = B119H110,39 # Weeking,
@@ -3613,7 +3613,7 @@ Pokemon = B137H81,36 #MAGNEGON
#######################
[TEAMROCKET_M,Donald]
Pokemon = SANDSLASH,34 #NIDOSLASH
Pokemon = RATICATE,34 #NIDOSLASH
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
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
- Linux and Mac support
- 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
- Savefiles are now located in the appdata folder (Windows)
- New debug options:
- Savefiles have been moved to the appdata folder (Windows)
## UI and menus ##
- New options in in-game menu:
- Default movement
- Text entry type
-
- New options in in-game menu:
- Fixes random memory crashes (unconfirmed, but I haven't encountered one so far)
- Battle type
- Menus and controls should be more responsive
- Added Instant text speed option
- Added visual indicator for selecting fusion order on the title screen
- Changed the battle UI's appearance
## 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
- Now possible to register multiple items at once
Other changes
‾‾‾‾‾
- Added Instant text speed option
- Adds several new moves from generations 5 to 7
- Added back double battles
- Added triple battles lounge in Knot Island
- Added Battle Factory
- Changed how levels are calculated when unfusing:
- Level when originally fused + experience obtained while fused
- Levels gained via Rare Candies are NOT taken into account
-NB: Pokemon that were fused in previous versions still use the old method
- Reduced DNA Splicers price to $300
- Resort Gorgeous now prioritizes Pokemon with custom sprites
- Added back double battles
- Added triple battles lounge in Knot Island
- Added Battle Factory
- Added visual indicator for selecting fusion order on the title screen
- Updated all movesets to gen 7
- Added 12 new TMs and 5 new Move tutors
- Removed the Mt. Silver requirement for making triple fusions
- Added an option to set the default battle type (single, double, triple) - Only available if beat the game at least once
## Maps ##
- Changed some tiles in Vermillion City
- 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
@@ -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
- Autosave (except in Pokemon centers)
- 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
- Quest log
- Hidden abilities routes
@@ -90,4 +111,10 @@ Removed features that probably won't be coming back
############ KNOWN ISSUES ##############
- 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
- 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
// (default: none)
//
"windowTitle": "Pokémon Infinite Fusion",
//"windowTitle": "Pokémon Infinite Fusion",
// Enforce a static frame rate