Okay, lets start. First add the RMFLASH script to your project:
First, create a folder called "Flash" on the "Graphics" folders.
CODE
#==============================================================================#
# Version 0.3.1 #
# RPG Maker XP Flash Player #
# #
# Author: 灼眼的夏娜 Updated by: Dark_Wolf_Warrior/Dahrkael and #
# Playhome #
# #
# How to Use: #
# Graphics.freeze #
# 1. Go to Main Script and add ----> $flash = Play.new #
# $scene = Scene_Title.new #
# #
# 2. Copy the .dll and the .ocx to the game folder #
# #
# 3. Make a folder called "Flash" in the folder "Graphics" -> Graphics/Flash/ #
# #
# 4. To play a flash file use: #
# $flash.play("file.swf", button) #
# #
# button can be 0 or 1, if 1 you can skip the flash using "Enter" #
# #
# #
# #
# Interactive flashes requires RGSS knownledge to make they work #
# #
# Original Keyb module by HoundNinja #
# #
#==============================================================================#
class String
CP_ACP = 0
CP_UTF8 = 65001
def u2s
m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i")
w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i")
len = m2w.call(CP_UTF8, 0, self, -1, nil, 0)
buf = "�" * (len*2)
m2w.call(CP_UTF8, 0, self, -1, buf, buf.size/2)
len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
ret = "�" * len
w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil)
return ret
end
def s2u
m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i")
w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i")
len = m2w.call(CP_ACP, 0, self, -1, nil, 0);
buf = "�" * (len*2)
m2w.call(CP_ACP, 0, self, -1, buf, buf.size/2);
len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil);
ret = "�" * len
w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil);
return ret
end
def s2u!
self[0, length] = s2u
end
def u2s!
self[0, length] = u2s
end
end
class Bitmap
RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
def address
buffer, ad = "xxxx", object_id * 2 + 16
RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 8
RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 16
RtlMoveMemory_pi.call(buffer, ad, 4); return buffer.unpack("L")[0]
end
end
class RMFlash
API_NEW = Win32API.new("RMFlash", "_new", "piil", "l")
API_UPDATE = Win32API.new("RMFlash", "_update", "l", "v")
API_FREE = Win32API.new("RMFlash", "_free", "l", "v")
API_PLAYING = Win32API.new("RMFlash", "_is_playing", "l", "i")
API_PAUSE = Win32API.new("RMFlash", "_pause", "l", "v")
API_RESUME = Win32API.new("RMFlash", "_resume", "l", "v")
API_BACK = Win32API.new("RMFlash", "_back", "l", "v")
API_REWIND = Win32API.new("RMFlash", "_rewind", "l", "v")
API_FORWARD = Win32API.new("RMFlash", "_forward", "l", "v")
API_CURFRAME = Win32API.new("RMFlash", "_cur_frame", "l", "i")
API_TOTALFRAME = Win32API.new("RMFlash", "_total_frames", "l", "i")
API_GOTOFRAME = Win32API.new("RMFlash", "_goto_frame", "li", "v")
API_GETLOOP = Win32API.new("RMFlash", "_get_loop", "l", "i")
API_SETLOOP = Win32API.new("RMFlash", "_set_loop", "li", "v")
API_CLEARALL = Win32API.new("RMFlash", "_clear_all", "v", "v")
API_VALID = Win32API.new("RMFlash", "_valid", "l", "i")
API_SENDMSG = Win32API.new("RMFlash", "_send_message", "liii", "l")
CUR_PATH = Dir.pwd
def self.get_version
end
def self.clear_all
API_CLEARALL.call
end
def self.load(name, width, height, v = nil)
new("#{CUR_PATH}/Graphics/Flash/#{name}".u2s, width, height, v)
end
attr_reader :valid
def initialize(flash_name, flash_width, flash_height, viewport = nil)
@sprite = Sprite.new(viewport)
@sprite.bitmap = Bitmap.new(flash_width, flash_height)
@value = API_NEW.call(flash_name, flash_width, flash_height, @sprite.bitmap.address)
@loop = API_GETLOOP.call(@value) > 0
@valid = API_VALID.call(@value) > 0
end
def viewport
@sprite.viewport
end
def update
API_UPDATE.call(@value)
end
def dispose
API_FREE.call(@sprite.bitmap.address)
end
def playing?
API_PLAYING.call(@value) > 0
end
def pause
API_PAUSE.call(@value)
end
def resume
API_RESUME.call(@value)
end
def back
API_BACK.call(@value)
end
def rewind
API_REWIND.call(@value)
end
def forward
API_FORWARD.call(@value)
end
def current_frame
API_CURFRAME.call(@value)
end
def total_frames
API_TOTALFRAME.call(@value)
end
def goto_frame(goal_frame)
API_GOTOFRAME.call(@value, goal_frame)
end
def x
@sprite.x
end
def x=(v)
@sprite.x = v
end
def y
@sprite.y
end
def y=(v)
@sprite.y = v
end
def z
@sprite.z
end
def z=(v)
@sprite.z = v
end
def width
@sprite.bitmap.width
end
def height
@sprite.bitmap.height
end
def loop?
@loop
end
def loop=(v)
if @loop != v
@loop = v
API_SETLOOP.call(@value, v)
end
end
def msg_to_flash(msg, wParam, lParam)
return API_SENDMSG.call(@value, msg, wParam, lParam)
end
# 例
WM_MOUSEMOVE = 0x0200
def make_long(a, b)
return (a & 0xffff ) | (b & 0xffff) << 16
end
def on_mouse_move(x, y)
return msg_to_flash(WM_MOUSEMOVE, 0, make_long(x, y))
end
end
module Kernel
alias origin_exit exit unless method_defined? :exit
def exit(*args)
RMFlash.clear_all
origin_exit(*args)
end
end
module Keyb
$keys = {}
$keys["Enter"] = 0x0D
GetKeyState = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
module_function
def trigger(rkey)
GetKeyState.call(rkey) & 0x01 == 1
end
end
class Play
def play(filename, button)
fondo = Sprite.new
fondo.bitmap = Bitmap.new(640, 480)
fondo.bitmap.fill_rect(0, 0, 640, 480, Color.new(0,0,0,255))
fls = RMFlash.load(filename, 640, 480)
fls.loop = 1
fls.z = 9999
@button = button
@fr = Graphics.frame_rate
Graphics.frame_rate = 40
while true
Graphics.update
#Input.update
fls.update
break if @button == 1 and Keyb.trigger($keys["Enter"])
break if !fls.playing?
end
fls.pause
fls.z = -2
fls.dispose
Graphics.frame_rate = @fr
fondo.dispose
end
end[code]
Then, modify You main, add this line ( [b]$flash = Play.new[/b] ) above [b]( $scene = Scene_Title.new)[/b]
Now your main should look like:
[code] # Transition preparation
# Prepare for transition
Graphics.freeze
# Make scene object (title screen)
$flash = Play.new
$scene = Scene_Title.new
# Version 0.3.1 #
# RPG Maker XP Flash Player #
# #
# Author: 灼眼的夏娜 Updated by: Dark_Wolf_Warrior/Dahrkael and #
# Playhome #
# #
# How to Use: #
# Graphics.freeze #
# 1. Go to Main Script and add ----> $flash = Play.new #
# $scene = Scene_Title.new #
# #
# 2. Copy the .dll and the .ocx to the game folder #
# #
# 3. Make a folder called "Flash" in the folder "Graphics" -> Graphics/Flash/ #
# #
# 4. To play a flash file use: #
# $flash.play("file.swf", button) #
# #
# button can be 0 or 1, if 1 you can skip the flash using "Enter" #
# #
# #
# #
# Interactive flashes requires RGSS knownledge to make they work #
# #
# Original Keyb module by HoundNinja #
# #
#==============================================================================#
class String
CP_ACP = 0
CP_UTF8 = 65001
def u2s
m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i")
w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i")
len = m2w.call(CP_UTF8, 0, self, -1, nil, 0)
buf = "�" * (len*2)
m2w.call(CP_UTF8, 0, self, -1, buf, buf.size/2)
len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
ret = "�" * len
w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil)
return ret
end
def s2u
m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i")
w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i")
len = m2w.call(CP_ACP, 0, self, -1, nil, 0);
buf = "�" * (len*2)
m2w.call(CP_ACP, 0, self, -1, buf, buf.size/2);
len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil);
ret = "�" * len
w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil);
return ret
end
def s2u!
self[0, length] = s2u
end
def u2s!
self[0, length] = u2s
end
end
class Bitmap
RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
def address
buffer, ad = "xxxx", object_id * 2 + 16
RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 8
RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 16
RtlMoveMemory_pi.call(buffer, ad, 4); return buffer.unpack("L")[0]
end
end
class RMFlash
API_NEW = Win32API.new("RMFlash", "_new", "piil", "l")
API_UPDATE = Win32API.new("RMFlash", "_update", "l", "v")
API_FREE = Win32API.new("RMFlash", "_free", "l", "v")
API_PLAYING = Win32API.new("RMFlash", "_is_playing", "l", "i")
API_PAUSE = Win32API.new("RMFlash", "_pause", "l", "v")
API_RESUME = Win32API.new("RMFlash", "_resume", "l", "v")
API_BACK = Win32API.new("RMFlash", "_back", "l", "v")
API_REWIND = Win32API.new("RMFlash", "_rewind", "l", "v")
API_FORWARD = Win32API.new("RMFlash", "_forward", "l", "v")
API_CURFRAME = Win32API.new("RMFlash", "_cur_frame", "l", "i")
API_TOTALFRAME = Win32API.new("RMFlash", "_total_frames", "l", "i")
API_GOTOFRAME = Win32API.new("RMFlash", "_goto_frame", "li", "v")
API_GETLOOP = Win32API.new("RMFlash", "_get_loop", "l", "i")
API_SETLOOP = Win32API.new("RMFlash", "_set_loop", "li", "v")
API_CLEARALL = Win32API.new("RMFlash", "_clear_all", "v", "v")
API_VALID = Win32API.new("RMFlash", "_valid", "l", "i")
API_SENDMSG = Win32API.new("RMFlash", "_send_message", "liii", "l")
CUR_PATH = Dir.pwd
def self.get_version
end
def self.clear_all
API_CLEARALL.call
end
def self.load(name, width, height, v = nil)
new("#{CUR_PATH}/Graphics/Flash/#{name}".u2s, width, height, v)
end
attr_reader :valid
def initialize(flash_name, flash_width, flash_height, viewport = nil)
@sprite = Sprite.new(viewport)
@sprite.bitmap = Bitmap.new(flash_width, flash_height)
@value = API_NEW.call(flash_name, flash_width, flash_height, @sprite.bitmap.address)
@loop = API_GETLOOP.call(@value) > 0
@valid = API_VALID.call(@value) > 0
end
def viewport
@sprite.viewport
end
def update
API_UPDATE.call(@value)
end
def dispose
API_FREE.call(@sprite.bitmap.address)
end
def playing?
API_PLAYING.call(@value) > 0
end
def pause
API_PAUSE.call(@value)
end
def resume
API_RESUME.call(@value)
end
def back
API_BACK.call(@value)
end
def rewind
API_REWIND.call(@value)
end
def forward
API_FORWARD.call(@value)
end
def current_frame
API_CURFRAME.call(@value)
end
def total_frames
API_TOTALFRAME.call(@value)
end
def goto_frame(goal_frame)
API_GOTOFRAME.call(@value, goal_frame)
end
def x
@sprite.x
end
def x=(v)
@sprite.x = v
end
def y
@sprite.y
end
def y=(v)
@sprite.y = v
end
def z
@sprite.z
end
def z=(v)
@sprite.z = v
end
def width
@sprite.bitmap.width
end
def height
@sprite.bitmap.height
end
def loop?
@loop
end
def loop=(v)
if @loop != v
@loop = v
API_SETLOOP.call(@value, v)
end
end
def msg_to_flash(msg, wParam, lParam)
return API_SENDMSG.call(@value, msg, wParam, lParam)
end
# 例
WM_MOUSEMOVE = 0x0200
def make_long(a, b)
return (a & 0xffff ) | (b & 0xffff) << 16
end
def on_mouse_move(x, y)
return msg_to_flash(WM_MOUSEMOVE, 0, make_long(x, y))
end
end
module Kernel
alias origin_exit exit unless method_defined? :exit
def exit(*args)
RMFlash.clear_all
origin_exit(*args)
end
end
module Keyb
$keys = {}
$keys["Enter"] = 0x0D
GetKeyState = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
module_function
def trigger(rkey)
GetKeyState.call(rkey) & 0x01 == 1
end
end
class Play
def play(filename, button)
fondo = Sprite.new
fondo.bitmap = Bitmap.new(640, 480)
fondo.bitmap.fill_rect(0, 0, 640, 480, Color.new(0,0,0,255))
fls = RMFlash.load(filename, 640, 480)
fls.loop = 1
fls.z = 9999
@button = button
@fr = Graphics.frame_rate
Graphics.frame_rate = 40
while true
Graphics.update
#Input.update
fls.update
break if @button == 1 and Keyb.trigger($keys["Enter"])
break if !fls.playing?
end
fls.pause
fls.z = -2
fls.dispose
Graphics.frame_rate = @fr
fondo.dispose
end
end[code]
Then, modify You main, add this line ( [b]$flash = Play.new[/b] ) above [b]( $scene = Scene_Title.new)[/b]
Now your main should look like:
[code] # Transition preparation
# Prepare for transition
Graphics.freeze
# Make scene object (title screen)
$flash = Play.new
$scene = Scene_Title.new
Ok, now, the funny part.
Video as background on the tittle screen:
Okay, go to your Scene_Title and add the blackened line on the def main
CODE
#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
# This class performs title screen processing.
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
[b] @flash_file = "1.swf"[/b][/hide]
Change [b]"1.swf"[/b] with the name of your swf.
And add the Next lines after The "Makes Command Windows":
[code]# Flash background
@fondo = RMFlash.load(@flash_file, 640, 480)
@fondo.z = @sprite.z - 1
#@fondo.loop = 1
@fr = Graphics.frame_rate
Graphics.frame_rate = 60
# ** Scene_Title
#------------------------------------------------------------------------------
# This class performs title screen processing.
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
[b] @flash_file = "1.swf"[/b][/hide]
Change [b]"1.swf"[/b] with the name of your swf.
And add the Next lines after The "Makes Command Windows":
[code]# Flash background
@fondo = RMFlash.load(@flash_file, 640, 480)
@fondo.z = @sprite.z - 1
#@fondo.loop = 1
@fr = Graphics.frame_rate
Graphics.frame_rate = 60
Then, go to the update method and add:
CODE
# Update game screen
Graphics.update
# Update input information
Input.update
#Flash update
[b]@fondo.update[/b]
# Frame update
update
Graphics.update
# Update input information
Input.update
#Flash update
[b]@fondo.update[/b]
# Frame update
update
Finally, add on the dispose method:
CODE
# Prepare for transition
Graphics.freeze
# Dispose of command window
@command_window.dispose
# Dispose of title graphic
@sprite.bitmap.dispose
@sprite.dispose
[b]@fondo.pause
@fondo.z = -2
@fondo.dispose
# Normal frame rate
Graphics.frame_rate = @fr[/b]
end
Graphics.freeze
# Dispose of command window
@command_window.dispose
# Dispose of title graphic
@sprite.bitmap.dispose
@sprite.dispose
[b]@fondo.pause
@fondo.z = -2
@fondo.dispose
# Normal frame rate
Graphics.frame_rate = @fr[/b]
end
Result:
Do you like it ;D??? well, this is jsut the ebginning ;D
Video as background on Battle:
This is almost the same thing, but you have to modify some others thing.
First, i use Enu Tankentai Xp, so i will explain how to implement it on that system. It should be the same for other CBS.
For tankentai:
I will post the entire "Sideview 2" script to show it. [Posting Pastebin, the script was screwing the formatting]
http://pastebin.com/MyBXLv4Y
If you see, i added a a (Flash Bbacks (lol)) to help you xP.
#=======================================================================
#=====================Flash Bbacks (lol)================================
#=======================================================================
# Use a different variable Value for differents flashs
# Lights Effects Can be done aswell, just use images
@archivo_flash = $game_map.map_id
@asdf = RMFlash.load(@archivo_flash, 640, 480)
#@asdf.loop = 1
@variable_del_fondo = Sprite.new
@variable_del_fondo.bitmap = Bitmap.new("Graphics/Pictures/#{$game_map.map_id}")
@variable_del_fondo.z = 400
This is how it works:
As you can see, @archivo_flash remembers the Map id and @asdf plays the flash file. @asdf is gonna load a File on the "Flash" folder with the the number of the map as name (Without extension), so, if you want to put a Flash battleback on the map number 34, you have to put a flash file with the name "34" (without extension)
Result:
looks goods no ;D
Extra: Light effects on battle scene
#=======================================================================
#=====================Flash Bbacks (lol)================================
#=======================================================================
# Use a different variable Value for differents flashs
# Lights Effects Can be done aswell, just use images
@archivo_flash = $game_map.map_id
@asdf = RMFlash.load(@archivo_flash, 640, 480)
#@asdf.loop = 1
@variable_del_fondo = Sprite.new
@variable_del_fondo.bitmap = Bitmap.new("Graphics/Pictures/#{$game_map.map_id}")
@variable_del_fondo.z = 400
@variable_del_fondo is going to load an image file from the "Pictures" with the same name as the map id (without the extension)
Result:

Okay, this is all for now, in part 2 i will explain how to put videos on your menus ^^
Cya