Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Question: .mkv for RMXP? Is it Possible? If So, how?

I have been using this script without editing any of it for a while now.  And I came across a movie that is in .mkv format and I was wondering if anyone could make it so that this script would play .mkv formatted videos.

I know that the easiest way would have to be converting the video into .avi or .wmv format, but I have problem with conversion and the converter I am using since whenever I convert the file, it tends to skip and the video and audio don't match (the video is delayed), so I thought of using the original .mkv file and thus, the problem is that I don't know if it is possible with the script.

Another thing is that, is it possible to have a codec go with the game so that when the game installs, the codec would also be installed and it would allow the user's default player to be able to play .mkv files?

Can anyone provide support for this?  I really am in need of this and any help is greatly appreciated.

Below is the script I use when playing .wmv and .avi scripts in RMXP:
Code:
class Scene_Movie
##Copy this into a new section of your game. 
##To play a file, move the avi file into a "movies" subdirectory (yourgame\data, 
##yourgame\graphics, yourgame\movies). 
##Then call "Scene_Movie.new(filename)" where filename is your movies actual filename
## (minus the .avi).         exp Scene_Movie.new("???")
## If you want to play multiple movies in a row 
##(for example before the game starts, maybe a "developed by", "produced by", "intro movie"
## set or something... Go to the "main" section of code and find the line "$scene = Scene_Title.new". 
##Just after that line add:
##CODE
##Scene_Movie.new("dev_by")
##Scene_Movie.new("pro_by")
##Scene_Movie.new("intro")
##$scene = Scene_Movie.new("intro",8,false)assuming the filename of the intro movie is "intro.avi" and it's 8 seconds long.
##class Scene_Movie
 def initialize(movie)
   @readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l'
   @movie_name = Dir.getwd()+"\\Movies\\"+movie+".avi"
   main
 end
 
 def main

   game_name = "\0" * 256
   @readini.call('Game','Title','',game_name,255,".\\Game.ini")
   game_name.delete!("\0")
   @wnd = Win32API.new('user32','FindWindowEx','%w(l,l,p,p)','L')
   @temp = @wnd.call(0,0,nil,game_name).to_s
   movie = Win32API.new('winmm','mciSendString','%w(p,p,l,l)','V')
   movie.call("open \""+@movie_name+"\" alias FILE style 1073741824 parent " + @temp.to_s,0,0,0)
   @message = Win32API.new('user32','SendMessage','%w(l,l,l,l)','V')
   
   @detector = Win32API.new('user32','GetSystemMetrics','%w(l)','L')
   @width = @detector.call(0)
   if @width == 640
     fullscreen
     Graphics.update
     sleep(1)
     Graphics.update
     sleep(1)
     Graphics.update
     sleep(1)
   end
   
   status = " " * 255
   movie.call("play FILE",0,0,0)
   loop do
    sleep(0.1)
    @message.call(@temp.to_i,11,0,0)
    Graphics.update
    @message.call(@temp.to_i,11,1,0)
    Input.update
    movie.call("status FILE mode",status,255,0)
    true_status = status.unpack("aaaa")
    if true_status.to_s != "play"
      break
    end
    if Input.trigger?(Input::B)
      Input.update
      break
    end
   end
   movie.call("close FILE",0,0,0)
   bail
 end
 
 def bail
   if @width == 640
     fullscreen
   end
  end
end

def fullscreen()
 
 $full.call(18,0,0,0)
 $full.call(13,0,0,0)
 $full.call(18,0,2,0)
 $full.call(13,0,2,0)
end
$full = Win32API.new('user32','keybd_event','%w(l,l,l,l)','')
 

e

Sponsor

This script relies on the C:\system32\winmm.dll, which supports .avi and .wmv files, native windows video formats. I don't think it can natively run .mkv files; you'd probably need a .dll which does, and behaves in much the same way as the winmm.dll so as to minimize the number of script edits.

Honestly, I don't really know how it works; my understanding was that MKV files were more like containers, with different types of video/audio encoding mashed together, so that you might get AAC audio with MPEG3 video.

I suggest looking around in their forums for a DLL which would do the same.
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top