Re: MaiDenSnow Eve
Well, the error is kind of interesting.
First, I unpacked the game to look at how it actually determines whether you're allowed to play or not, and I ran across this code:
And the dev actually hid this little check in the animations file:
which expands to this
It actually does quite a number of checks to prevent cheating, including
1. Crash if rvproj file exists (error 6)
2. Crash if RGSS3A file does not exist (error 4)
3. Crash If the filesize of the RGSS3A archive is not exactly 106006925 (error 2)
4. Crash if the modified time of the RGSS3A archive is not within 10 seconds of the expected modified date (in this case, Jun 29, 2017 between 14:36 and 14:46 (error 3)
One solution here is to change your time to Japan time (UTC+9), and then you should be able to play the game. That's probably the easiest approach.
Problem is you'll have to keep your time like that, which may or may not be annoying.
Another solution is to change the modified time of the RGSS3A archive itself, but if you want to mod the game or just want to unpack it for whatever reason, that's not going to work.
The other solution is to get rid of the DRM check, but I couldn't figure out how to get the game running after taking out the checks as the game just exits. Might have to look more into what the checks are actually doing.
Note that there is no hentai in these games.
I'm trying to play MaiDensnow Online, Ramble Rabbit's previous work. But it has the same DRM as MSE. I get error 3 when I attempt to run it. I get error 4 if I extract the data/graphics from the .rgssa3. I even set my system region for the date format and set the date of my system to the year month day the DRM was looking for, downloaded the archive, extracted it with 7zip, extracted it using windows 7's build in file extractor, ran the packed self extractor, extracted without the packed self extractor as well. I still received error codes 3 or 4. I also put an exception to the folder the files are stored in with antivirus.
Does anyone have any suggestions?
Well, the error is kind of interesting.
First, I unpacked the game to look at how it actually determines whether you're allowed to play or not, and I ran across this code:
Code:
def graphics_update(index)
ndat = load_data(sprintf("Data/Animations.rvdata2"))
str = ndat[index].instance_variable_get(:@name).instance_variable_get(:@ax)
#unless String === str
unless Array === str
msgbox_p :graphics_update_error, 1, index if $gupdate_error
exit#:graphics_update_error, 1, index
end
str.each_with_index{|s, lindex|
begin
eval(s, binding, "(extend:#{index}:#{lindex})")
#start_notice("(extend:#{index}:#{lindex})")
rescue => err
msgbox_p :graphics_update_error, 2, index, lindex, err.message, *err.backtrace.to_sec if $gupdate_error
exit#:graphics_update_error, 2, index
end
}
end
And the dev actually hid this little check in the animations file:
Code:
"\n# -*- coding: utf-8 -*-\n#msgbox File.expand_path(\".\"\nvvv = 20170610#120923#\n#ye = 2013\n#mo = 6\n#da = 29\nif vvv != $SYS_DATE\n p :SYS_DATE if $TEST\n exit\nend\n#if Time.now.year > ye || (Time.now.year >= ye && (Time.now.mon > mo || (Time.now.mon == mo && Time.now.mday > da)))\n#msgbox '0H'+'P'+'よ'+'り'+'最'+'新'+'版'+'を'+'ダ'+'ウ'+'ン'+'ロ'+'ー'+'ド'+'し'+'て'+'く'+'だ'+'さ'+'い'\n#exit\n#end\nif !eng?\n texts = ['H'+'P'+'よ'+'り'+'最'+'新'+'版'+'を'+'ダ'+'ウ'+'ン'+'ロ'+'ー'+'ド'+'し'+'て'+'く'+'だ'+'さ'+'い', 'も' + 'し' + 'く' + 'は' + '、' + 'e' + 'x' + 'e' + 'の' + '自' + '己' + '解' + '凍' + '機' + '能' + 'で' + 'フ' + 'ァ' + 'イ' + 'ル' + 'を' + '展' + '開' + 'し' + 'て' + 'く' + 'だ' + 'さ' + 'い' + '。']\nelsif gt_maiden_snow?\n texts = [\"Download recent-version from DLSite.com,\",\" or extract it with self-extractor again.\", \"Please.\"]\nelse\n texts = [\"Download recent-version from MaidenSnow Online,\",\" or extract it with self-extractor again.\", \"Please.\"]\nend\nif FileTest.exist?(\"Game.rgss3a\")\n\ts = FileTest.size(\"Game.rgss3a\")\n #\n\tif (s - 106006925).abs > 0\n\t\t#\n\t\tmsgbox_p 0, *texts\n\t\texit\n\tend\n unless gt_maiden_snow? && !gt_trial?\n t = 0#Time.now\n File.open(\"Game.rgss3a\", \"r\") {|f|\n t = f.mtime\n t += 60 * 60 if t.dst?\n t = t.utc\n }\n y = 2017\n m = 6\n d = 29\n h = 14\n n = 36\n\n #\n #\n if t.year != y || t.mon != m || t.mday != d || (t.hour < h || t.hour == h && t.min < n - 1)\n msgbox_p 2, *texts\n exit\n end\n \n r = 2017\n o = 6\n a = 29\n u = 14\n i = 46\n if t.year > r || t.mon > o || t.mday != a || (t.hour > u || t.hour == u && t.min > i)\n msgbox_p 3, *texts\n exit\n end\n end\nelse\n msgbox_p 4, *texts\n exit\nend\nif FileTest.exist?(\"Game.rvproj\") || FileTest.exist?(\"Game.rvproj2\")\n msgbox_p 5, *texts\n\texit\nend\n$TEST = false\nif $DEBUG || $-d || $TEST || $TESTER\n\tmsgbox 6, *texts\n\texit\nend\nexit if $TESTER\nif defined? untrace_var\n undef untrace_var\n unless $TESTER\n #\n vv = Proc.new {exit if $TESTER}\n trace_var( :$TESTER , vv )\n end\n vv = Proc.new {exit if $DEBUG}\n trace_var( :$DEBUG , vv )\n \n $SYS_DATE = vvv\n vv = Proc.new {exit if $SYS_DATE != vvv}\n trace_var( :$SYS_DATE , vv )\n\n vv = Proc.new {exit if $-d}\n trace_var( :$-d , vv )\n vv = Proc.new {exit if $TEST}\n trace_var( :$TEST , vv )\n proc = nil\n #\nend\nif $DEBUG || $-d || $TEST || $TESTER\n\tmsgbox 7, *texts\n\texit\nend\n"
which expands to this
Code:
"
# -*- coding: utf-8 -*-
msgbox File.expand_path("."
vvv = 20170610#120923#
#ye = 2013
#mo = 6
#da = 29
if vvv != $SYS_DATE
p :SYS_DATE if $TEST
exit
end
#if Time.now.year > ye || (Time.now.year >= ye && (Time.now.mon > mo || (Time.now.mon == mo && Time.now.mday > da)))
#msgbox '0H'+'P'+'よ'+'り'+'最'+'新'+'版'+'を'+'ダ'+'ウ'+'ン'+'ロ'+'ー'+'ド'+'し'+'て'+'く'+'だ'+'さ'+'い'
#exit
#end
if !eng?
texts = ['H'+'P'+'よ'+'り'+'最'+'新'+'版'+'を'+'ダ'+'ウ'+'ン'+'ロ'+'ー'+'ド'+'し'+'て'+'く'+'だ'+'さ'+'い', 'も' + 'し' + 'く' + 'は' + '、' + 'e' + 'x' + 'e' + 'の' + '自' + '己' + '解' + '凍' + '機' + '能' + 'で' + 'フ' + 'ァ' + 'イ' + 'ル' + 'を' + '展' + '開' + 'し' + 'て' + 'く' + 'だ' + 'さ' + 'い' + '。']
elsif gt_maiden_snow?
texts = ["Download recent-version from DLSite.com,"," or extract it with self-extractor again.", "Please."]
else
texts = ["Download recent-version from MaidenSnow Online,"," or extract it with self-extractor again.", "Please."]
end
if FileTest.exist?("Game.rgss3a")
\ts = FileTest.size("Game.rgss3a")
#
\tif (s - 106006925).abs > 0
\t\t#
\t\tmsgbox_p 0, *texts
\t\texit
\tend
unless gt_maiden_snow? && !gt_trial?
t = 0#Time.now
File.open("Game.rgss3a", "r") {|f|
t = f.mtime
t += 60 * 60 if t.dst?
t = t.utc
}
y = 2017
m = 6
d = 29
h = 14
n = 36
#
#
if t.year != y || t.mon != m || t.mday != d || (t.hour < h || t.hour == h && t.min < n - 1)
msgbox_p 2, *texts
exit
end
r = 2017
o = 6
a = 29
u = 14
i = 46
if t.year > r || t.mon > o || t.mday != a || (t.hour > u || t.hour == u && t.min > i)
msgbox_p 3, *texts
exit
end
end
else
msgbox_p 4, *texts
exit
end
if FileTest.exist?("Game.rvproj") || FileTest.exist?("Game.rvproj2")
msgbox_p 5, *texts
\texit
end
$TEST = false
if $DEBUG || $-d || $TEST || $TESTER
\tmsgbox 6, *texts
\texit
end
exit if $TESTER
if defined? untrace_var
undef untrace_var
unless $TESTER
#
vv = Proc.new {exit if $TESTER}
trace_var( :$TESTER , vv )
end
vv = Proc.new {exit if $DEBUG}
trace_var( :$DEBUG , vv )
$SYS_DATE = vvv
vv = Proc.new {exit if $SYS_DATE != vvv}
trace_var( :$SYS_DATE , vv )
vv = Proc.new {exit if $-d}
trace_var( :$-d , vv )
vv = Proc.new {exit if $TEST}
trace_var( :$TEST , vv )
proc = nil
#
end
if $DEBUG || $-d || $TEST || $TESTER
\tmsgbox 7, *texts
\texit
end
"
It actually does quite a number of checks to prevent cheating, including
1. Crash if rvproj file exists (error 6)
2. Crash if RGSS3A file does not exist (error 4)
3. Crash If the filesize of the RGSS3A archive is not exactly 106006925 (error 2)
4. Crash if the modified time of the RGSS3A archive is not within 10 seconds of the expected modified date (in this case, Jun 29, 2017 between 14:36 and 14:46 (error 3)
One solution here is to change your time to Japan time (UTC+9), and then you should be able to play the game. That's probably the easiest approach.
Problem is you'll have to keep your time like that, which may or may not be annoying.
Another solution is to change the modified time of the RGSS3A archive itself, but if you want to mod the game or just want to unpack it for whatever reason, that's not going to work.
The other solution is to get rid of the DRM check, but I couldn't figure out how to get the game running after taking out the checks as the game just exits. Might have to look more into what the checks are actually doing.
Note that there is no hentai in these games.
Last edited: