I've fixed my save file using the save someone posted before. Here's what was happening:
In the very end of my save file, there are these lines:
Spoiler (click to show/hide):
<swfLoader xmlType="object"><tempSwf xmlType="array" /><permSwf xmlType="array">
<0
target="str_MOOD_MC.image
waitForEnd="bol_false"
depth="num_1"
name="str_campLight"
linkage="str_swf\light.swf"
type="str_swf" xmlType="object">
<data
_yscale="str_200"
_xscale="str_200"
sprite="str_[this._name]" xmlType="object" />
</0></permSwf></swfLoader></data>
However, in this other guy's save, it looked like this:
Spoiler (click to show/hide):
<swfLoader xmlType="object"><tempSwf xmlType="array" /><permSwf xmlType="array">
<1
target="str_HUD"
waitForEnd="bol_false"
depth="num_9"
name="str_yesNo"
linkage="str_swf\choice.swf"
type="str_swf" xmlType="object">
<data
no="str_no"
yes="str_yes"
target="str_reply" xmlType="object" />
</1>
<0
target="str_MOOD_MC.image"
waitForEnd="bol_false"
depth="num_1"
name="str_campLight"
linkage="str_swf\light.swf"
type="str_swf" xmlType="object">
<data
_yscale="str_200"
_xscale="str_200"
sprite="str_[this._name]" xmlType="object" />
</0>
</permSwf></swfLoader></data>
I've edited it a bit to make it easier to read (you can still use this code, it still works), but yeah, those lines were missing. Adding them back resolved the problem.
The most confusing thing about all of this is that he complained about having the same problem as me, which is getting stuck inside the Cerulean Gym in front of the ticket dude. I've tested his save as well and it didn't get stuck there. Oh well, hopefully this helps any other poor soul who gets the same problem.