Merge branch 'mkxp-z' into dev

This commit is contained in:
Maruno17
2020-11-20 20:43:27 +00:00
51 changed files with 490 additions and 288 deletions

View File

@@ -0,0 +1,23 @@
$MKXP = !!defined?(System)
def mkxp?
return $MKXP
end
def pbSetWindowText(string)
if mkxp?
System.set_window_title(string || System.game_title)
else
Win32API.SetWindowText(string || "RGSS Player")
end
end
class Bitmap
if mkxp?
alias mkxp_draw_text draw_text
def draw_text(x, y, width, height, text, align = 0)
height = text_size(text).height
mkxp_draw_text(x, y, width, height, text, align)
end
end
end

View File

@@ -16,9 +16,26 @@ if true # Disables using Alt+Enter to go fullscreen
regHotKey.call(0, 1, 1, 0x0D)
end
def pbSetResizeFactor(factor=1,norecalc=false)
factor = [0.5,1.0,2.0,-1][factor] if !norecalc
(factor<0) ? pbConfigureFullScreen : pbConfigureWindowedScreen(factor)
if mkxp?
# This kinda puts most of SpriteResizer out of business
def pbSetResizeFactor(factor)
if !$ResizeInitialized
Graphics.resize_screen(SCREEN_WIDTH, SCREEN_HEIGHT)
$ResizeInitialized = true
end
if factor < 0 || factor == 3
Graphics.fullscreen = true if !Graphics.fullscreen
else
Graphics.fullscreen = false if Graphics.fullscreen
Graphics.scale = factor
Graphics.center
end
end
else
def pbSetResizeFactor(factor=1,norecalc=false)
factor = [0.5,1.0,2.0,-1][factor] if !norecalc
(factor<0) ? pbConfigureFullScreen : pbConfigureWindowedScreen(factor)
end
end
def pbSetResizeFactor2(factor,force=false)
@@ -172,33 +189,37 @@ module Graphics
end
end
class << self
begin
x = @@haveresizescreen
rescue NameError # If exception is caught, the class
if !method_defined?(:oldresizescreen) # variable wasn't defined yet
begin
alias oldresizescreen resize_screen
@@haveresizescreen = true
rescue
if mkxp?
@@haveresizescreen = true
else
class << self
begin
x = @@haveresizescreen
rescue NameError # If exception is caught, the class
if !method_defined?(:oldresizescreen) # variable wasn't defined yet
begin
alias oldresizescreen resize_screen
@@haveresizescreen = true
rescue
@@haveresizescreen = false
end
else
@@haveresizescreen = false
end
else
@@haveresizescreen = false
end
def haveresizescreen
@@haveresizescreen
end
end
def haveresizescreen
@@haveresizescreen
def self.resize_screen(w,h)
@@width = w
@@height = h
pbSetResizeFactor($ResizeFactor,true)
end
end
def self.resize_screen(w,h)
@@width = w
@@height = h
pbSetResizeFactor($ResizeFactor,true)
end
@@deletefailed = false
def self.snap_to_bitmap(resize=true)

View File

@@ -23,13 +23,8 @@ class Game_System
attr_accessor :bgm_position
def initialize
if $RPGVX
@map_interpreter = Game_Interpreter.new(0,true)
@battle_interpreter = Game_Interpreter.new(0,false)
else
@map_interpreter = Interpreter.new(0,true)
@battle_interpreter = Interpreter.new(0,false)
end
@map_interpreter = Interpreter.new(0, true)
@battle_interpreter = Interpreter.new(0, false)
@timer = 0
@timer_working = false
@save_disabled = false

View File

@@ -31,8 +31,8 @@ class Game_Map
TILE_WIDTH = 32
TILE_HEIGHT = 32
X_SUBPIXELS = ($RPGVX) ? 8 : 4
Y_SUBPIXELS = ($RPGVX) ? 8 : 4
X_SUBPIXELS = 4
Y_SUBPIXELS = 4
REAL_RES_X = TILE_WIDTH * X_SUBPIXELS
REAL_RES_Y = TILE_HEIGHT * Y_SUBPIXELS
@@ -44,7 +44,7 @@ class Game_Map
def setup(map_id)
@map_id = map_id
@map = load_data(sprintf("Data/Map%03d.%s",map_id,($RPGVX) ? "rvdata" : "rxdata"))
@map = load_data(sprintf("Data/Map%03d.rxdata",map_id))
tileset = $data_tilesets[@map.tileset_id]
updateTileset
@fog_ox = 0

View File

@@ -76,7 +76,7 @@ class Spriteset_Map
def update
return if @tilemap.disposed?
if $RPGVX || $PokemonSystem.tilemap==0
if $PokemonSystem.tilemap==0
if self.map==$game_map
pbDayNightTint(@@viewport3)
else

View File

@@ -266,16 +266,16 @@ class Interpreter
when 402; return command_402 # When [**]
when 403; return command_403 # When Cancel
when 103; return command_103 # Input Number
when 104; return command_104 # Change Text Options [not in VX]
when 105; return command_105 # Button Input Processing [not in VX]
when 106; return command_106 # Wait [in VX: 230]
when 104; return command_104 # Change Text Options
when 105; return command_105 # Button Input Processing
when 106; return command_106 # Wait
when 111; return command_111 # Conditional Branch
when 411; return command_411 # Else
when 112; return command_112 # Loop
when 413; return command_413 # Repeat Above
when 113; return command_113 # Break Loop
when 115; return command_115 # Exit Event Processing
when 116; return command_116 # Erase Event [in VX: 214]
when 116; return command_116 # Erase Event
when 117; return command_117 # Call Common Event
when 118; return command_118 # Label
when 119; return command_119 # Jump to Label
@@ -288,7 +288,7 @@ class Interpreter
when 127; return command_127 # Change Weapons
when 128; return command_128 # Change Armor
when 129; return command_129 # Change Party Member
when 131; return command_131 # Change Windowskin [not in VX]
when 131; return command_131 # Change Windowskin
when 132; return command_132 # Change Battle BGM
when 133; return command_133 # Change Battle End ME
when 134; return command_134 # Change Save Access
@@ -298,14 +298,14 @@ class Interpreter
when 202; return command_202 # Set Event Location
when 203; return command_203 # Scroll Map
when 204; return command_204 # Change Map Settings
when 205; return command_205 # Change Fog Color Tone [in VX: Set Move Route]
when 206; return command_206 # Change Fog Opacity [in VX: Get on/off Vehicle]
when 207; return command_207 # Show Animation [in VX: 212]
when 208; return command_208 # Change Transparent Flag [in VX: 211]
when 209; return command_209 # Set Move Route [in VX: 205]
when 205; return command_205 # Change Fog Color Tone
when 206; return command_206 # Change Fog Opacity
when 207; return command_207 # Show Animation
when 208; return command_208 # Change Transparent Flag
when 209; return command_209 # Set Move Route
when 210; return command_210 # Wait for Move's Completion
when 221; return command_221 # Prepare for Transition [Not in VX, now called Fadeout Screen]
when 222; return command_222 # Execute Transition [Not in VX, now called Fadein Screen]
when 221; return command_221 # Prepare for Transition
when 222; return command_222 # Execute Transition
when 223; return command_223 # Change Screen Color Tone
when 224; return command_224 # Screen Flash
when 225; return command_225 # Screen Shake
@@ -319,8 +319,8 @@ class Interpreter
when 242; return command_242 # Fade Out BGM
when 245; return command_245 # Play BGS
when 246; return command_246 # Fade Out BGS
when 247; return command_247 # Memorize BGM/BGS [not in VX]
when 248; return command_248 # Restore BGM/BGS [not in VX]
when 247; return command_247 # Memorize BGM/BGS
when 248; return command_248 # Restore BGM/BGS
when 249; return command_249 # Play ME
when 250; return command_250 # Play SE
when 251; return command_251 # Stop SE

View File

@@ -56,7 +56,7 @@ def pbSetTextMessages
neednewline=false
end
if list.code == 101
lastitem+="#{list.parameters[0]}" if !$RPGVX
lastitem+="#{list.parameters[0]}"
neednewline=true
elsif list.code == 102
for k in 0...list.parameters[0].length
@@ -107,7 +107,7 @@ def pbSetTextMessages
t = Time.now.to_i
Graphics.update
end
filename=sprintf("Data/Map%03d.%s",id,$RPGVX ? "rvdata" : "rxdata")
filename=sprintf("Data/Map%03d.rxdata",id)
next if !pbRgssExists?(filename)
map = load_data(filename)
items=[]
@@ -132,7 +132,7 @@ def pbSetTextMessages
neednewline=false
end
if list.code == 101
lastitem+="#{list.parameters[0]}" if !$RPGVX
lastitem+="#{list.parameters[0]}"
neednewline=true
elsif list.code == 102
for k in 0...list.parameters[0].length

View File

@@ -387,11 +387,11 @@ def pbSetSystemFont(bitmap)
fontname = MessageConfig.pbGetSystemFontName
bitmap.font.name = fontname
if fontname == "Pokemon FireLeaf" || fontname == "Power Red and Green"
bitmap.font.size = 29
bitmap.font.size = mkxp? ? 27 : 29
elsif fontname == "Pokemon Emerald Small" || fontname == "Power Green Small"
bitmap.font.size = 25
bitmap.font.size = mkxp? ? 29 : 25
else
bitmap.font.size = 31
bitmap.font.size = mkxp? ? 29 : 31
end
end
@@ -404,7 +404,7 @@ end
# Sets a bitmap's font to the system narrow font.
def pbSetNarrowFont(bitmap)
bitmap.font.name = pbNarrowFontName
bitmap.font.size = 31
bitmap.font.size = mkxp? ? 29 : 31
end
#===============================================================================

View File

@@ -71,7 +71,7 @@ class Window_UnformattedTextPokemon < SpriteWindow_Base
def resizeHeightToFit(text,width=-1) # width is current window width
dims=resizeToFitInternal(text,width)
self.width=width<0 ? Graphics.width : width
self.height=dims[1]+self.borderY
self.height = dims[1] + self.borderY - (mkxp? ? 4 : 0)
refresh
end
@@ -1227,7 +1227,7 @@ class Window_CommandPokemon < Window_DrawableCommand
def drawItem(index,_count,rect)
pbSetSystemFont(self.contents) if @starting
rect=drawCursor(index,rect)
pbDrawShadowText(self.contents,rect.x,rect.y,rect.width,rect.height,
pbDrawShadowText(self.contents,rect.x,rect.y + (mkxp? ? 6 : 0),rect.width,rect.height,
@commands[index],self.baseColor,self.shadowColor)
end
end
@@ -1331,7 +1331,7 @@ class Window_AdvancedCommandPokemon < Window_DrawableCommand
dims=[]
getAutoDims(commands,dims,width)
self.width=dims[0]
self.height=dims[1]
self.height=dims[1] - (mkxp? ? 6 : 0)
end
def itemCount
@@ -1343,7 +1343,7 @@ class Window_AdvancedCommandPokemon < Window_DrawableCommand
rect=drawCursor(index,rect)
if toUnformattedText(@commands[index]).gsub(/\n/,"")==@commands[index]
# Use faster alternative for unformatted text without line breaks
pbDrawShadowText(self.contents,rect.x,rect.y,rect.width,rect.height,
pbDrawShadowText(self.contents,rect.x,rect.y + (mkxp? ? 6 : 0),rect.width,rect.height,
@commands[index],self.baseColor,self.shadowColor)
else
chars=getFormattedText(

View File

@@ -168,6 +168,7 @@ end
def getFormattedTextFast(bitmap,xDst,yDst,widthDst,heightDst,text,lineheight,
newlineBreaks=true,explicitBreaksOnly=false)
yDst += 4 if mkxp?
x=y=0
characters=[]
textchunks=[]
@@ -421,6 +422,7 @@ _drawFormattedChars_ function.
def getFormattedText(bitmap,xDst,yDst,widthDst,heightDst,text,lineheight=32,
newlineBreaks=true,explicitBreaksOnly=false,
collapseAlignments=false)
yDst += 4 if mkxp?
dummybitmap=nil
if !bitmap || bitmap.disposed? # allows function to be called with nil bitmap
dummybitmap=Bitmap.new(1,1)
@@ -888,8 +890,7 @@ end
#===============================================================================
def getLineBrokenChunks(bitmap,value,width,dims,plain=false)
x=0
y=0
textheight=0
y=mkxp? ? 4: 0
ret=[]
if dims
dims[0]=0
@@ -905,9 +906,7 @@ def getLineBrokenChunks(bitmap,value,width,dims,plain=false)
ccheck=c
if ccheck=="\n"
x=0
# y+=(textheight==0) ? bitmap.text_size("X").height : textheight
y+=(textheight==0) ? bitmap.text_size("X").height+1 : textheight
textheight=0
y+=32
next
end
if ccheck[/</] && !plain
@@ -927,14 +926,10 @@ def getLineBrokenChunks(bitmap,value,width,dims,plain=false)
minTextSize=bitmap.text_size(word.gsub(/\s*/,""))
if x>0 && x+minTextSize.width>width
x=0
y+=32 # (textheight==0) ? bitmap.text_size("X").height : textheight
# y+=(textheight==0) ? bitmap.text_size("X").height+1 : textheight
textheight=0
y+=32
end
end
textheight=32 # [textheight,textSize.height].max
# textheight=[textheight,textSize.height+1].max
ret.push([word,x,y,textwidth,textheight,color])
ret.push([word,x,y,textwidth,32,color])
x+=textwidth
dims[0]=x if dims && dims[0]<x
end
@@ -943,7 +938,7 @@ def getLineBrokenChunks(bitmap,value,width,dims,plain=false)
end
end
end
dims[1]=y+textheight if dims
dims[1]=y+32 if dims
return ret
end
@@ -1112,8 +1107,9 @@ end
def pbDrawShadowText(bitmap,x,y,width,height,string,baseColor,shadowColor=nil,align=0)
return if !bitmap || !string
width=(width<0) ? bitmap.text_size(string).width+4 : width
height=(height<0) ? bitmap.text_size(string).height+4 : height
width=(width<0) ? bitmap.text_size(string).width+1 : width
height=(height<0) ? bitmap.text_size(string).height+1 : height
y += -2 if mkxp?
if shadowColor && shadowColor.alpha>0
bitmap.font.color=shadowColor
bitmap.draw_text(x+2,y,width,height,string,align)
@@ -1161,7 +1157,7 @@ def pbDrawTextPositions(bitmap,textpos)
for i in textpos
textsize = bitmap.text_size(i[0])
x = i[1]
y = i[2]
y = i[2] + (mkxp? ? 6 : 0)
if i[3]==true || i[3]==1 # right align
x -= textsize.width
elsif i[3]==2 # centered

View File

@@ -382,126 +382,6 @@ end
class Game_Interpreter # Used by RMVX
include InterpreterMixin
eval(InterpreterMixin::CustomEventCommands)
@@immediateDisplayAfterWait=false
@buttonInput=false
def pbParams
return @params
end
def command_105
return false if @buttonInput
@buttonInput=true
pbButtonInputProcessing(@list[@index].parameters[0])
@buttonInput=false
@index+=1
return true
end
def command_101
if $game_temp.message_window_showing
return false
end
$game_message=Game_Message.new if !$game_message
message=""
commands=nil
numInputVar=nil
numInputDigitsMax=nil
text=""
facename=@list[@index].parameters[0]
faceindex=@list[@index].parameters[1]
if facename && facename!=""
text+="\\ff[#{facename},#{faceindex}]"
end
if $game_message
$game_message.background=@list[@index].parameters[2]
end
$game_system.message_position=@list[@index].parameters[3]
message+=text
messageend=""
loop do
nextIndex=pbNextIndex(@index)
code=@list[nextIndex].code
if code == 401
text=@list[nextIndex].parameters[0]
text+=" " if text!="" && text[text.length-1,1]!=" "
message+=text
@index=nextIndex
else
if code == 102
commands=@list[nextIndex].parameters
@index=nextIndex
elsif code == 106 && @@immediateDisplayAfterWait
params=@list[nextIndex].parameters
if params[0]<=10
nextcode=@list[nextIndex+1].code
if nextcode==101||nextcode==102||nextcode==103
@index=nextIndex
else
break
end
else
break
end
elsif code == 103
numInputVar=@list[nextIndex].parameters[0]
numInputDigitsMax=@list[nextIndex].parameters[1]
@index=nextIndex
elsif code == 101
messageend="\1"
end
break
end
end
message=_MAPINTL($game_map.map_id,message)
@message_waiting=true
if commands
cmdlist=[]
for cmd in commands[0]
cmdlist.push(_MAPINTL($game_map.map_id,cmd))
end
command=pbMessage(message+messageend,cmdlist,commands[1])
@branch[@list[@index].indent] = command
elsif numInputVar
params=ChooseNumberParams.new
params.setMaxDigits(numInputDigitsMax)
params.setDefaultValue($game_variables[numInputVar])
$game_variables[numInputVar]=pbMessageChooseNumber(message+messageend,params)
$game_map.need_refresh = true if $game_map
else
pbMessage(message+messageend)
end
@message_waiting=false
return true
end
def command_102
@message_waiting=true
command=pbShowCommands(nil,@list[@index].parameters[0],@list[@index].parameters[1])
@message_waiting=false
@branch[@list[@index].indent] = command
Input.update # Must call Input.update again to avoid extra triggers
return true
end
def command_103
varnumber=@list[@index].parameters[0]
@message_waiting=true
params=ChooseNumberParams.new
params.setMaxDigits(@list[@index].parameters[1])
params.setDefaultValue($game_variables[varnumber])
$game_variables[varnumber]=pbChooseNumber(nil,params)
$game_map.need_refresh = true if $game_map
@message_waiting=false
return true
end
end
class Interpreter # Used by RMXP
include InterpreterMixin
eval(InterpreterMixin::CustomEventCommands)

View File

@@ -49,16 +49,16 @@ class Window_CharacterEntry < Window_DrawableCommand
def drawItem(index,_count,rect)
rect=drawCursor(index,rect)
if index==@charset.length # -1
pbDrawShadowText(self.contents,rect.x,rect.y,rect.width,rect.height,"[ ]",
pbDrawShadowText(self.contents,rect.x,rect.y + (mkxp? ? 6 : 0),rect.width,rect.height,"[ ]",
self.baseColor,self.shadowColor)
elsif index==@charset.length+1 # -2
pbDrawShadowText(self.contents,rect.x,rect.y,rect.width,rect.height,@othercharset,
pbDrawShadowText(self.contents,rect.x,rect.y + (mkxp? ? 6 : 0),rect.width,rect.height,@othercharset,
self.baseColor,self.shadowColor)
elsif index==@charset.length+2 # -3
pbDrawShadowText(self.contents,rect.x,rect.y,rect.width,rect.height,_INTL("OK"),
pbDrawShadowText(self.contents,rect.x,rect.y + (mkxp? ? 6 : 0),rect.width,rect.height,_INTL("OK"),
self.baseColor,self.shadowColor)
else
pbDrawShadowText(self.contents,rect.x,rect.y,rect.width,rect.height,@charset[index],
pbDrawShadowText(self.contents,rect.x,rect.y + (mkxp? ? 6 : 0),rect.width,rect.height,@charset[index],
self.baseColor,self.shadowColor)
end
end
@@ -1533,28 +1533,6 @@ end
class Game_Interpreter
def command_303
if $Trainer
$Trainer.name=pbEnterPlayerName(_INTL("Your name?"),1,@params[1],$Trainer.name)
return true
end
if $game_actors && $data_actors && $data_actors[@params[0]] != nil
# Set battle abort flag
pbFadeOutIn {
sscene=PokemonEntryScene.new
sscreen=PokemonEntry.new(sscene)
$game_actors[@params[0]].name=sscreen.pbStartScreen(
_INTL("Enter {1}'s name.",$game_actors[@params[0]].name),
1,@params[1],$game_actors[@params[0]].name)
}
end
return true
end
end
#===============================================================================
#
#===============================================================================

View File

@@ -411,7 +411,7 @@ end
Events.onMapChanging += proc { |_sender,e|
newMapID = e[0]
if newMapID>0
mapinfos = ($RPGVX) ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
mapinfos = load_data("Data/MapInfos.rxdata")
oldWeather = GameData::MapMetadata.get($game_map.map_id).weather
if $game_map.name!=mapinfos[newMapID].name
$game_screen.weather(0,0,0) if oldWeather
@@ -431,7 +431,7 @@ Events.onMapChange += proc { |_sender,e|
$PokemonEncounters.setup($game_map.map_id) if $PokemonEncounters
$PokemonGlobal.visitedMaps[$game_map.map_id] = true
if oldid!=0 && oldid!=$game_map.map_id
mapinfos = ($RPGVX) ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
mapinfos = load_data("Data/MapInfos.rxdata")
weather = GameData::MapMetadata.get($game_map.map_id).weather
if $game_map.name!=mapinfos[oldid].name
$game_screen.weather(weather[0],8,20) if weather && rand(100)<weather[1]
@@ -485,7 +485,7 @@ Events.onMapSceneChange += proc { |_sender,e|
nosignpost = true if NO_SIGNPOSTS[2*i+1]==$PokemonGlobal.mapTrail[1] && NO_SIGNPOSTS[2*i]==$game_map.map_id
break if nosignpost
end
mapinfos = $RPGVX ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
mapinfos = load_data("Data/MapInfos.rxdata")
oldmapname = mapinfos[$PokemonGlobal.mapTrail[1]].name
nosignpost = true if $game_map.name==oldmapname
end

View File

@@ -625,11 +625,7 @@ end
# Blacking out animation
#===============================================================================
def pbRxdataExists?(file)
if $RPGVX
return pbRgssExists?(file+".rvdata")
else
return pbRgssExists?(file+".rxdata")
end
return pbRgssExists?(file+".rxdata")
end
def pbStartOver(gameover=false)

View File

@@ -99,7 +99,7 @@ end
Events.onMapChange += proc { |_sender,e|
oldMapID = e[0]
# Get and compare map names
mapInfos = $RPGVX ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
mapInfos = load_data("Data/MapInfos.rxdata")
next if mapInfos && oldMapID>0 && mapInfos[oldMapID] &&
mapInfos[oldMapID].name && $game_map.name==mapInfos[oldMapID].name
# Make roaming Pokémon roam

View File

@@ -17,9 +17,9 @@ class Window_DexesList < Window_CommandPokemon
def drawItem(index,count,rect)
super(index,count,rect)
if index>=0 && index<@commands2.length
pbDrawShadowText(self.contents,rect.x+254,rect.y,64,rect.height,
pbDrawShadowText(self.contents,rect.x+254,rect.y + (mkxp? ? 6 : 0),64,rect.height,
sprintf("%d",@commands2[index][0]),self.baseColor,self.shadowColor,1)
pbDrawShadowText(self.contents,rect.x+350,rect.y,64,rect.height,
pbDrawShadowText(self.contents,rect.x+350,rect.y + (mkxp? ? 6 : 0),64,rect.height,
sprintf("%d",@commands2[index][1]),self.baseColor,self.shadowColor,1)
allseen = (@commands2[index][0]>=@commands2[index][2])
allown = (@commands2[index][1]>=@commands2[index][2])

View File

@@ -45,7 +45,7 @@ class Window_Pokedex < Window_DrawableCommand
else
text = sprintf("%03d ----------",indexNumber)
end
pbDrawShadowText(self.contents,rect.x+36,rect.y+6,rect.width,rect.height,
pbDrawShadowText(self.contents,rect.x+36,rect.y+6 + (mkxp? ? 6 : 0),rect.width,rect.height,
text,self.baseColor,self.shadowColor)
end

View File

@@ -122,7 +122,8 @@ class Window_CommandPokemonColor < Window_CommandPokemon
base = Color.new(0,80,160)
shadow = Color.new(128,192,240)
end
pbDrawShadowText(self.contents,rect.x,rect.y,rect.width,rect.height,@commands[index],base,shadow)
pbDrawShadowText(self.contents,rect.x,rect.y + (mkxp? ? 6 : 0),rect.width,rect.height,
@commands[index],base,shadow)
end
end
@@ -398,7 +399,7 @@ class PokemonPartyPanel < SpriteWrapper
"Graphics/Pictures/Party/overlay_lv",20,70,0,0,22,14]])
pbSetSmallFont(@overlaysprite.bitmap)
pbDrawTextPositions(@overlaysprite.bitmap,[
[@pokemon.level.to_s,42,62,0,basecolor,shadowcolor]
[@pokemon.level.to_s,42,63,0,basecolor,shadowcolor]
])
end
# Draw annotation text

View File

@@ -259,8 +259,7 @@ class PokemonLoadScreen
savefile = RTP.getSaveFileName("Game.rxdata")
FontInstaller.install
data_system = pbLoadRxData("Data/System")
mapfile = ($RPGVX) ? sprintf("Data/Map%03d.rvdata",data_system.start_map_id) :
sprintf("Data/Map%03d.rxdata",data_system.start_map_id)
mapfile = sprintf("Data/Map%03d.rxdata",data_system.start_map_id)
if data_system.start_map_id==0 || !pbRgssExists?(mapfile)
pbMessage(_INTL("No starting position was set in the map editor.\1"))
pbMessage(_INTL("The game cannot continue."))

View File

@@ -331,7 +331,8 @@ class Window_PokemonOption < Window_DrawableCommand
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,
text_y = rect.y + (mkxp? ? 6 : 0)
pbDrawShadowText(self.contents,rect.x,text_y,optionwidth,rect.height,optionname,
@nameBaseColor,@nameShadowColor)
return if index==@options.length
if @options[index].is_a?(EnumOption)
@@ -345,7 +346,7 @@ class Window_PokemonOption < Window_DrawableCommand
xpos = optionwidth+rect.x
ivalue = 0
for value in @options[index].values
pbDrawShadowText(self.contents,xpos,rect.y,optionwidth,rect.height,value,
pbDrawShadowText(self.contents,xpos,text_y,optionwidth,rect.height,value,
(ivalue==self[index]) ? @selBaseColor : self.baseColor,
(ivalue==self[index]) ? @selShadowColor : self.shadowColor
)
@@ -354,14 +355,14 @@ class Window_PokemonOption < Window_DrawableCommand
ivalue += 1
end
else
pbDrawShadowText(self.contents,rect.x+optionwidth,rect.y,optionwidth,rect.height,
pbDrawShadowText(self.contents,rect.x+optionwidth,text_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,
pbDrawShadowText(self.contents,xpos,text_y,optionwidth,rect.height,value,
@selBaseColor,@selShadowColor)
elsif @options[index].is_a?(SliderOption)
value = sprintf(" %d",@options[index].optend)
@@ -375,12 +376,12 @@ class Window_PokemonOption < Window_DrawableCommand
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,
pbDrawShadowText(self.contents,xpos,text_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,
pbDrawShadowText(self.contents,xpos,text_y,optionwidth,rect.height,value,
@selBaseColor,@selShadowColor)
end
end

View File

@@ -413,7 +413,8 @@ class PokemonBoxSprite < SpriteWrapper
pbSetSystemFont(@contents)
widthval = @contents.text_size(boxname).width
xval = 162-(widthval/2)
pbDrawShadowText(@contents,xval,8,widthval,32,boxname,Color.new(248,248,248),Color.new(40,48,48))
pbDrawShadowText(@contents,xval,8 + (mkxp? ? 6 : 0),widthval,32,
boxname,Color.new(248,248,248),Color.new(40,48,48))
@refreshBox = false
end
yval = self.y+30
@@ -536,7 +537,7 @@ class PokemonBoxPartySprite < SpriteWrapper
def refresh
@contents.blt(0,0,@boxbitmap.bitmap,Rect.new(0,0,172,352))
pbDrawTextPositions(self.bitmap,[
[_INTL("Back"),86,242,2,Color.new(248,248,248),Color.new(80,80,80),1]
[_INTL("Back"),86,242 - (mkxp? ? 2 : 0),2,Color.new(248,248,248),Color.new(80,80,80),1]
])
xvalues = [18,90,18,90,18,90]
@@ -1384,8 +1385,8 @@ class PokemonStorageScene
buttonbase = Color.new(248,248,248)
buttonshadow = Color.new(80,80,80)
pbDrawTextPositions(overlay,[
[_INTL("Party: {1}",(@storage.party.length rescue 0)),270,328,2,buttonbase,buttonshadow,1],
[_INTL("Exit"),446,328,2,buttonbase,buttonshadow,1],
[_INTL("Party: {1}",(@storage.party.length rescue 0)),270,328 - (mkxp? ? 2 : 0),2,buttonbase,buttonshadow,1],
[_INTL("Exit"),446,328 - (mkxp? ? 2 : 0),2,buttonbase,buttonshadow,1],
])
pokemon = nil
if @screen.pbHeldPokemon

View File

@@ -85,7 +85,7 @@ end
#===============================================================================
# Abstraction layer for RPG Maker XP/VX
# Abstraction layer for RPG Maker XP
# Won't be used if $PokemonBag exists
#===============================================================================
class RpgxpMartAdapter
@@ -884,33 +884,3 @@ class Interpreter
setPrice(item,-1,sellprice)
end
end
class Game_Interpreter
def getItem(p)
if p[0]==0; return $data_items[p[1]]
elsif p[0]==1; return $data_weapons[p[1]]
elsif p[0]==2; return $data_armors[p[1]]
end
return nil
end
def command_302
shop_goods = [getItem(@params)]
# Loop
loop do
# Advance index
@index += 1
# If next event command has shop on second line or after
if @list[@index].code == 605
# Add goods list to new item
shop_goods.push(getItem(@list[@index].parameters))
else
# End
pbPokemonMart(shop_goods.compact,nil,@params[2])
return true
end
end
end
end

View File

@@ -9,11 +9,7 @@ def pbSafeLoad(file)
end
def pbLoadRxData(file) # :nodoc:
if $RPGVX
return load_data(file+".rvdata")
else
return load_data(file+".rxdata")
end
return load_data(file+".rxdata")
end
def pbChooseLanguage
@@ -102,7 +98,11 @@ def pbScreenCapture
filestart = sprintf("%s.%03d",filestart,(t.to_f-t.to_i)*1000) # milliseconds
capturefile = RTP.getSaveFileName(sprintf("%s.png",filestart))
if capturefile && safeExists?("rubyscreen.dll")
Graphics.snap_to_bitmap(false).saveToPng(capturefile)
if mkxp?
Graphics.screenshot(capturefile)
else
Graphics.snap_to_bitmap(false).saveToPng(capturefile)
end
pbSEPlay("Pkmn exp full") if FileTest.audio_exist?("Audio/SE/Pkmn exp full")
end
end

View File

@@ -105,9 +105,10 @@ class SpriteWindow_DebugVariables < Window_DrawableCommand
idWidth = totalWidth*15/100
nameWidth = totalWidth*65/100
statusWidth = totalWidth*20/100
self.shadowtext(rect.x,rect.y,idWidth,rect.height,id_text)
self.shadowtext(rect.x+idWidth,rect.y,nameWidth,rect.height,name,0,(codeswitch) ? 1 : 0)
self.shadowtext(rect.x+idWidth+nameWidth,rect.y,statusWidth,rect.height,status,1,colors)
text_y = rect.y + (mkxp? ? 6 : 0)
self.shadowtext(rect.x,text_y,idWidth,rect.height,id_text)
self.shadowtext(rect.x+idWidth,text_y,nameWidth,rect.height,name,0,(codeswitch) ? 1 : 0)
self.shadowtext(rect.x+idWidth+nameWidth,text_y,statusWidth,rect.height,status,1,colors)
end
end
@@ -416,7 +417,7 @@ class SpriteWindow_DebugRoamers < Window_DrawableCommand
# roaming
curmap = $PokemonGlobal.roamPosition[index]
if curmap
mapinfos = ($RPGVX) ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
mapinfos = load_data("Data/MapInfos.rxdata")
status = "[ROAMING][#{curmap}: #{mapinfos[curmap].name}]"
else
status = "[ROAMING][map not set]"
@@ -426,8 +427,9 @@ class SpriteWindow_DebugRoamers < Window_DrawableCommand
else
status = "[NOT ROAMING][Switch #{pkmn[2]} is off]"
end
self.shadowtext(name,rect.x,rect.y,nameWidth,rect.height)
self.shadowtext(status,rect.x+nameWidth,rect.y,statusWidth,rect.height,1,statuscolor)
text_y = rect.y + (mkxp? ? 6 : 0)
self.shadowtext(name,rect.x,text_y,nameWidth,rect.height)
self.shadowtext(status,rect.x+nameWidth,text_y,statusWidth,rect.height,1,statuscolor)
end
end
end

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Fonts/power clear bold.ttf Normal file

Binary file not shown.

BIN
Fonts/power clear.ttf Normal file

Binary file not shown.

Binary file not shown.

BIN
Fonts/power green small.ttf Normal file

Binary file not shown.

BIN
Fonts/power green.ttf Normal file

Binary file not shown.

Binary file not shown.

BIN
fluidsynth.dll Normal file

Binary file not shown.

BIN
mkxp-z-x86_64.AppImage Normal file

Binary file not shown.

BIN
mkxp-z.app.zip Normal file

Binary file not shown.

BIN
mkxp-z.exe Normal file

Binary file not shown.

339
mkxp.json Normal file
View File

@@ -0,0 +1,339 @@
{
// Lines starting with '//' are comments.
//
// About filesystem paths specified in this config:
// The "gameFolder" path is resolved either relative
// to the directory containing the mkxp executable
// (the default behavior), or relative to the current
// working directory (when compiled with
// -DWORKDIR_CURRENT). All other paths are resolved
// relative to gameFolder and ignoring both RTPs and
// encrypted archives.
// Specify the RGSS version to run under.
// Possible values are 0, 1, 2, 3. If set to 0,
// mkxp will try to guess the required version
// based on the game files found in gameFolder.
// If this fails, the version defaults to 1.
// (default: 0)
//
// "rgssVersion": 1,
// Request an OpenGL 4.1 context. This
// introduces these minimum requirements
// for GPUs:
//
// + NVIDIA 400 Series+
// + AMD Radeon HD 5000+
// + Intel HD Graphics 4000+
//
// If disabled, OpenGL 3.3 is used instead.
// (default: disabled)
//
// "openGL4": false,
// Create a debug context and log
// OpenGL debug information to the console
// (default: disabled)
//
// "debugMode": false,
// Continuously print average FPS to console.
// This setting does not affect the window title
// FPS display toggled via F2
// (default: disabled)
//
// "printFPS": false,
// Game window is resizable
// (default: enabled)
//
// "winResizable": true,
// Start game in fullscreen (this can
// always be toggled with Alt-Enter at runtime)
// (default: disabled)
//
// "fullscreen": false,
// Preserve game screen aspect ratio,
// as opposed to stretch-to-fill
// (default: enabled)
//
// "fixedAspectRatio": true,
// Apply linear interpolation when game screen
// is upscaled
// (default: disabled)
//
// "smoothScaling": false,
// Sync screen redraws to the monitor refresh rate
// (default: disabled)
//
// "vsync": false,
// Specify the window width on startup. If set to 0,
// it will default to the default resolution width
// specific to the RGSS version (640 in RGSS1, 544
// in RGSS2 or higher).
// (default: 0)
//
// "defScreenW": 640,
// Specify the window height on startup. If set to 0,
// it will default to the default resolution height
// specific to the RGSS version (480 in RGSS1, 416
// in RGSS2 or higher).
// (default: 0)
//
// "defScreenH": 480,
// Override the game window title
// (default: none)
//
// "windowTitle": "Custom Title",
// Enforce a static frame rate
// This option may be force-disabled at build time.
// (0 = disabled)
//
// "fixedFramerate": 0,
// Skip (don't draw) frames when behind.
// Can be changed at runtime, but this is the
// default value when the game starts.
// (default: disabled)
//
// "frameSkip": false,
// Use a fixed framerate that is approx. equal to the
// native screen refresh rate. This is different from
// "fixedFramerate" because the actual frame rate is
// reported back to the game, ensuring correct timers.
// If the screen refresh rate cannot be determined,
// this option is force-disabled.
// This option may be force-disabled at build time.
// (default: disabled)
//
// "syncToRefreshrate": false,
// Don't use alpha blending when rendering text
// (default: disabled)
//
// "solidFonts": false,
// Work around buggy graphics drivers which don't
// properly synchronize texture access, most
// apparent when text doesn't show up or the map
// tileset doesn't render at all
// (default: disabled)
//
// "subImageFix": false,
// Enable framebuffer blitting if the driver is
// capable of it. Some drivers carry buggy
// implementations of this functionality, so
// disabling it can be used as a workaround
// (default: enabled)
//
// "enableBlitting": true,
// Limit the maximum size (width, height) of
// most textures mkxp will create (exceptions are
// rendering backbuffers and similar).
// If set to 0, the hardware maximum is used.
// This is useful for recording traces that can
// be played back on machines with lower specs.
// (default: 0)
//
// "maxTextureSize": 0,
// Set the base path of the game to '/path/to/game'
// (default: executable directory)
//
// "gameFolder": "/path/to/game",
// Use either right or left Alt + Enter to toggle
// fullscreen
// (default: disabled)
//
// "anyAltToggleFS": false,
// Enable F12 game reset
// (default: enabled)
//
// "enableReset": true,
// Allow symlinks for game assets to be followed
// (default: disabled)
//
// "allowSymlinks": false,
// Organisation / company and application / game
// name to build the directory path where mkxp
// will store game specific data (eg. key bindings).
// If not specified, mkxp will save to a common
// directory shared by all games. Note that these
// are TWO individual config entries, and both need
// to be defined for this to take effect.
// (default: none)
//
// "dataPathOrg": "mycompany",
// "dataPathApp": "mygame",
// Set the game window icon to 'path/to/icon.png'
// (default: none)
//
// "iconPath": "/path/to/icon.png",
// Instead of playing an RPG Maker game,
// execute a single plain text script instead
// (default: none)
//
// "customScript": "/path/to/script.rb",
// Define raw scripts to be executed before the
// actual Scripts.rxdata execution starts
// This option may be force-disabled at build time.
// (default: none)
//
// "preloadScript": ["my_win32_wrapper.rb",
// "ruby18_fixes.rb"],
// Index all accesible assets via their lower case path
// (emulates windows case insensitivity)
// (default: enabled)
//
// "pathCache": true,
// In some versions of Essentials, overworld code
// requests the player's sprite texture from disk
// at least once every frame. The damage this
// causes is less perceptible in RPG Maker XP,
// but MKXP's RGSSAD code is much slower and will
// cause games to lag. Hard.
//
// I have no interest in fixing it, because:
//
// (A) I don't see any point in such frail encryption, and
// (B) One can easily replicate load_data entirely in Ruby
// (https://gist.github.com/inori-z/0800dbdc213b9936e0e81f64c9a98c4c)
//
// If you insist on using archives, you can use a
// version of Essentials that isn't broken,
// otherwise come up with your own solution
// (there are many), or leave your Graphics files
// loose and disable this option.
// (default: false)
//
// "compressedGraphics": false,
// Add 'rtp1', 'rtp2.zip' and 'game.rgssad' to the
// asset search path (multiple allowed)
// (default: none)
//
// "RTP": ["/path/to/rtp1",
// "/path/to/rtp2.zip",
// "/path/to/game.rgssad"],
// Use the script's name as filename in warnings and error messages
// (default: enabled)
//
// "useScriptNames": true,
// Font substitutions allow drop-in replacements of fonts
// to be used without changing the RGSS scripts,
// eg. providing 'Open Sans' when the game thinkgs it's
// using 'Arial'. Font family to be substituted and
// replacement family are separated by one sole '>'.
// Be careful not to include any spaces.
// This is not connected to the built-in font, which is
// always used when a non-existing font family is
// requested by RGSS.
// (default: none)
//
// "fontSub": ["Arial>Open Sans",
// "Times New Roman>Liberation Serif"]
// Because mkxp is usually distributed as a stand alone
// build, no predefined load paths are initialized
// ($:, $LOAD_PATH) in the MRI backend. With this option,
// they can be specified manually (eg. when using a system
// libruby.so). It is however recommended to statically
// link all required gems into libruby.so.
// (default: none)
//
// "rubyLoadpath": ["/usr/lib64/ruby/",
// "/usr/local/share/ruby/site_ruby"],
// SoundFont to use for midi playback (via fluidsynth)
// (default: none)
//
"midiSoundFont": "soundfont.sf2",
// Activate "chorus" effect for midi playback
//
// "midiChorus": false,
// Activate "reverb" effect for midi playback
//
// "midiReverb": false,
// Number of OpenAL sources to allocate for SE playback.
// If there are a lot of sounds playing at the same time
// and audibly cutting each other off, try increasing
// this number. Maximum: 64.
//
// "SESourceCount": 6
// The Windows game executable name minus ".exe". By default
// this is "Game", but some developers manually rename it.
// mkxp needs this name because both the .ini (game
// configuration) and .rgssad (encrypted data archive) must
// carry the same name minus their extension, and we cannot
// guess the executable's name.
// You could just as well rename them both to "Game.ini" and
// "Game.rgssad", but specifying the executable name here
// is a tiny bit less intrusive.
//
// "execName": "Game"
}

BIN
soundfont.sf2 Normal file

Binary file not shown.