Reading files in RPG Maker

● ARCHIVED · READ-ONLY
Started by Tsukihime 12 posts View original ↗
  1. File I/O is an important topic when it comes to RPG Maker. Everything that you work with is stored in external files and are loaded by the engine at run-time, whether they are database files, graphics, audio, or your own custom text files. Regardless of your experience with Ruby, there are a couple things in RM that you should know about when you’re working with files.

    Loading a File

    If you perform a search for tutorials on how to open a file in Ruby, you will come across code snippets like this (taken from RubyMonk):

    mode = "r+"file = File.open("friend-list.txt", mode)puts file.inspectputs file.readfile.closeWhich is a pretty normal way to open a file and read the contents of the file.  So let’s say you had a CSV file that you use for storing tabular data called “custom_data.csv” stored in the project’s Data folder.


    Following the example, you would write some code for opening the file and reading it:

    file = File.open("Data/custom_data.csv", "r")puts file.readfile.closeAnd then you test it in your project, and it works fine: you’ll see the contents of your file in your console as a string.

    Success feels good.

    Subtle TroublesNow you finish your script, did whatever testing you thought was necessary, and now you’re ready to go. So you release it, and someone adds it to their own project. But then they come back to you and tell you the game crashed after they added your script. You ask for a screenshot of the error, and they tell you this



    Couldn’t find the file? As an experienced debugger, you ask some preliminary questions in case this was simply a case of user error.

    • Do you have the file in your Data folder? Maybe they put it somewhere else
    • Did you name it correctly? Maybe they made a typo
    • Did you change the script to read a different file? It’s possible.
    • Does it work in a new project? Maybe it’s a script compatibility issue!
    They will tell you they did everything correctly. You check your dev project again to make sure everything works. And it does. File’s in the right place, works in a new project.And then they say something particularly curious:

    I encrypted my project

    Read the rest at Hime Works
  2. That was awesome. I've been trying to determine how to load custom files inside the archive for a while now. :)
  3. Oh nice for sharing this.
  4. Some helpful error checking in Ruby:

    If you call File.exists?("Data/custom_data.csv"), it will return false if the file does not exist. 

    So you can do intelligent handling, such as assume defaults, rather than crash, or at least put out a more meaningful error.
  5. Does that work if the file is inside an encrypted archive?
  6. Engr. Adiktuzmiko said:
    Does that work if the file is inside an encrypted archive?
    No, it doesn't.
  7. I've never used am encrypted archive but I think if the script can read the file so can that method.

    Technically it says it executes a stat call to check if the file exists.
  8. whitesphere said:
    I've never used am encrypted archive but I think if the script can read the file so can that method.


    Technically it says it executes a stat call to check if the file exists.
    "The script" - which one? The one that I used? Or the default load_data method?
  9. I was referring to wherever the call was used.  I found the information on the File call from a website with Ruby calls described in detail.
  10. whitesphere said:
    I was referring to wherever the call was used.  I found the information on the File call from a website with Ruby calls described in detail.
    I'm still confused.


    Can you clarify what you meant by

    if the script can read the file so can that method.
    I'm not sure what "the script" refers to, and am assuming "that method" refers to `File.exist?(path)`


    Basically, File and Dir won't work with the encrypted archive so if anyone's relying on them to be able to read files from the archive their script does not support encrypted games.
  11. I was not aware of that, because I've never worked with encrypted archives.
  12. A lot of people are not aware of that, for probably the same reason.


    Which is why whenever someone runs into a "file not found" error related to a custom script I usually ask them to just do a search for File in their scripts and it usually is one of the problems.