Another version.
This one should resolve the FPS drop (seems to be the ODE plugin, the original game.exe uses a different one).
And a step by step guide of how to implement save/load:
1) Build your game
2) Create a image "contgame.tga" that says "Continue Game" or something like that, similar in style to the "New Game" and "Exit Game" that are shown in the game's start menu
3) Copy that image to the folder [yourgame]/Files/languagebank/english/gamecore/backdrops/basic
4) Go to the folder [yourgame]/Files/languagebank/english/gamebank/[yourgame]
5) open the file "titlepage.fpi" with a text editor. By default it'll look like this:
;AIScript from Wizard
;Header
desc = Title Page Wizard
;Script
:state=0:music=audiobankmusicgenerictitle.wav
:state=0:hudreset,hudx=50,hudy=10,hudimage=languagebankenglishgamecorebackdropsbasicgamemenu.tga,hudmake=display
:state=0:hudreset,hudx=50,hudy=50,hudimage=languagebankenglishgamecorebackdropsbasicnewgame.tga,hudtype=1,hudmake=button
:state=0:hudreset,hudx=50,hudy=60,hudimage=languagebankenglishgamecorebackdropsbasicexitgame.tga,hudtype=5,hudmake=button
:state=0:hudreset,hudx=50,hudy=50,hudimage=gamecorehudspointer.tga,hudmake=pointer
:state=0:state=2
:state=2:backdrop=gamecorebackdropsBasicbackground.jpg
:state=2,hudselectionmade=1:destroy
:state=2,hudselectionmade=2:loadgame,destroy
:state=2,hudselectionmade=5:quitgame,destroy
This file defines how the title menu looks like. Right after the line:
:state=0:hudreset,hudx=50,hudy=10,hudimage=languagebankenglishgamecorebackdropsbasicgamemenu.tga,hudmake=display
we add this line:
:state=0,fileexist=level.sav:hudreset,hudx=50,hudy=40,hudimage=languagebankenglishgamecorebackdropsbasiccontgame.tga,hudtype=2,hudmake=button
this checks if a level.sav file exists and if so adds a menu button (continue game).
Now change the line:
:state=2,hudselectionmade=2:loadgame,destroy
to:
:state=2,hudselectionmade=2:loadlevel=level.sav,destroy
So when the user clicks our new button the level will be loaded.
The complete file should look like this
;AIScript from Wizard
;Header
desc = Title Page Wizard
;Script
:state=0:music=audiobankmusicgenerictitle.wav
:state=0:hudreset,hudx=50,hudy=10,hudimage=languagebankenglishgamecorebackdropsbasicgamemenu.tga,hudmake=display
:state=0,fileexist=level.sav:hudreset,hudx=50,hudy=40,hudimage=languagebankenglishgamecorebackdropsbasiccontgame.tga,hudtype=2,hudmake=button
:state=0:hudreset,hudx=50,hudy=50,hudimage=languagebankenglishgamecorebackdropsbasicnewgame.tga,hudtype=1,hudmake=button
:state=0:hudreset,hudx=50,hudy=60,hudimage=languagebankenglishgamecorebackdropsbasicexitgame.tga,hudtype=5,hudmake=button
:state=0:hudreset,hudx=50,hudy=50,hudimage=gamecorehudspointer.tga,hudmake=pointer
:state=0:state=2
:state=2:backdrop=gamecorebackdropsBasicbackground.jpg
:state=2,hudselectionmade=1:destroy
:state=2,hudselectionmade=2:loadlevel=level.sav,destroy
:state=2,hudselectionmade=5:quitgame,destroy
Save this file
6) in the same folder open the file setuplevel.fpi. It'll look like this:
;AIScript from Wizard
;Header
desc = Setup Wizard
; Setup Level Stats
:state=0:sky=skybankww2Gas
:state=0:music=audiobankmusicgenericmain.wav,musicvolume=50,soundscale=25
:state=0:fog=0,fogred=0,foggreen=0,fogblue=0
:state=0:ambience=25,ambiencered=255,ambiencegreen=255,ambienceblue=255
:state=0:hudreset,hudx=50,hudy=50,hudsizex=1024,hudsizey=768,hudimage=gamecorehudsfader.tga,hudhide=1,hudtype=3,hudmake=internal
:state=0:hudreset,hudx=50,hudy=50,hudred=128,hudgreen=0,hudblue=0,hudsizex=1024,hudsizey=768,hudimage=gamecorehudseyehud.tga,hudhide=1,hudtype=2,hudmake=internal
:state=0:hudreset,hudx=50,hudy=50,hudred=128,hudgreen=128,hudblue=128,hudsizex=1024,hudsizey=768,hudimage=gamecorehudszoom.tga,hudhide=1,hudtype=4,hudmake=internal
:state=0:hudreset,hudx=5,hudy=5,hudimage=languagebankenglishgamecorehudslives.tga,hudmake=display
:state=0:hudreset,hudx=4,hudy=8,hudsizex=16,hudsizey=16,hudimage=gamecorehudsnumeric1.tga,hudtype=1,hudmake=numeric
:state=0:hudreset,hudx=15,hudy=5,hudimage=languagebankenglishgamecorehudshealth.tga,hudmake=display
:state=0:hudreset,hudx=14,hudy=8,hudsizex=16,hudsizey=16,hudimage=gamecorehudsnumeric1.tga,hudtype=2,hudmake=numeric
:state=0:hudreset,hudx=85,hudy=8,hudimage=gamecorehudsammo.tga,hudtype=3,hudmake=status
:state=0:hudreset,hudx=88,hudy=12,hudsizex=16,hudsizey=16,hudimage=gamecorehudsnumeric1.tga,hudtype=3,hudmake=numeric
; Setup Game Menu
:state=0:hudreset,hudx=50,hudy=10,hudimage=languagebankenglishgamecorebackdropsbasicgamemenu.tga,hudname=gamemenutitle,hudhide=1,hudmake=display
:state=0:hudreset,hudx=50,hudy=50,hudimage=languagebankenglishgamecorebackdropsbasicexitgame.tga,hudtype=3,hudname=quitgame,hudhide=1,hudmake=button
:state=0:hudreset,hudx=50,hudy=60,hudimage=languagebankenglishgamecorebackdropsbasicreturntogame.tga,hudtype=4,hudname=returngame,hudhide=1,hudmake=button
:state=0:hudreset,hudx=50,hudy=50,hudimage=gamecorehudspointer.tga,hudname=pointer,hudhide=1,hudmake=pointer
:state=0:state=1
; Main Game
:state=1,escapekeypressed=1:pausegame,state=2
; Game Menu
:state=2,escapekeypressed=0:state=3
:state=3:hudshow=gamemenutitle,hudshow=quitgame,hudshow=returngame,hudshow=pointer,state=4
:state=4,hudselectionmade=3:continuegame,destroy
:state=4,hudselectionmade=4:state=6
:state=4,escapekeypressed=1:state=5
:state=5,escapekeypressed=0:state=6
:state=6:hudunshow=gamemenutitle,hudunshow=quitgame,hudunshow=returngame,hudunshow=pointer,resumegame,state=1
This script is responsible for the global level settings. Now if the level starts and is higher than 1 we want our game to save the level, so that the player can start from this level.
After the line
; Setup Level Stats
we insert
:state=0:setvar1=level
:state=0,var1greater=1:storelevel=level.sav
sow we have
;AIScript from Wizard
;Header
desc = Setup Wizard
; Setup Level Stats
:state=0:setvar1=level
:state=0,var1greater=1:storelevel=level.sav
:state=0:sky=skybankww2Gas
:state=0:music=audiobankmusicgenericmain.wav,musicvolume=50,soundscale=25
:state=0:fog=0,fogred=0,foggreen=0,fogblue=0
:state=0:ambience=25,ambiencered=255,ambiencegreen=255,ambienceblue=255
:state=0:hudreset,hudx=50,hudy=50,hudsizex=1024,hudsizey=768,hudimage=gamecorehudsfader.tga,hudhide=1,hudtype=3,hudmake=internal
:state=0:hudreset,hudx=50,hudy=50,hudred=128,hudgreen=0,hudblue=0,hudsizex=1024,hudsizey=768,hudimage=gamecorehudseyehud.tga,hudhide=1,hudtype=2,hudmake=internal
:state=0:hudreset,hudx=50,hudy=50,hudred=128,hudgreen=128,hudblue=128,hudsizex=1024,hudsizey=768,hudimage=gamecorehudszoom.tga,hudhide=1,hudtype=4,hudmake=internal
:state=0:hudreset,hudx=5,hudy=5,hudimage=languagebankenglishgamecorehudslives.tga,hudmake=display
:state=0:hudreset,hudx=4,hudy=8,hudsizex=16,hudsizey=16,hudimage=gamecorehudsnumeric1.tga,hudtype=1,hudmake=numeric
:state=0:hudreset,hudx=15,hudy=5,hudimage=languagebankenglishgamecorehudshealth.tga,hudmake=display
:state=0:hudreset,hudx=14,hudy=8,hudsizex=16,hudsizey=16,hudimage=gamecorehudsnumeric1.tga,hudtype=2,hudmake=numeric
:state=0:hudreset,hudx=85,hudy=8,hudimage=gamecorehudsammo.tga,hudtype=3,hudmake=status
:state=0:hudreset,hudx=88,hudy=12,hudsizex=16,hudsizey=16,hudimage=gamecorehudsnumeric1.tga,hudtype=3,hudmake=numeric
; Setup Game Menu
:state=0:hudreset,hudx=50,hudy=10,hudimage=languagebankenglishgamecorebackdropsbasicgamemenu.tga,hudname=gamemenutitle,hudhide=1,hudmake=display
:state=0:hudreset,hudx=50,hudy=50,hudimage=languagebankenglishgamecorebackdropsbasicexitgame.tga,hudtype=3,hudname=quitgame,hudhide=1,hudmake=button
:state=0:hudreset,hudx=50,hudy=60,hudimage=languagebankenglishgamecorebackdropsbasicreturntogame.tga,hudtype=4,hudname=returngame,hudhide=1,hudmake=button
:state=0:hudreset,hudx=50,hudy=50,hudimage=gamecorehudspointer.tga,hudname=pointer,hudhide=1,hudmake=pointer
:state=0:state=1
; Main Game
:state=1,escapekeypressed=1:pausegame,state=2
; Game Menu
:state=2,escapekeypressed=0:state=3
:state=3:hudshow=gamemenutitle,hudshow=quitgame,hudshow=returngame,hudshow=pointer,state=4
:state=4,hudselectionmade=3:continuegame,destroy
:state=4,hudselectionmade=4:state=6
:state=4,escapekeypressed=1:state=5
:state=5,escapekeypressed=0:state=6
:state=6:hudunshow=gamemenutitle,hudunshow=quitgame,hudunshow=returngame,hudunshow=pointer,resumegame,state=1
Save this file.
Now (provided you use this mod) the player can always start from the last level he/she entered before he/she died or quit.