Tool QSP QSP Save Editor

89898hh

Well-Known Member
Sep 4, 2017
1,481
1,077
Hi stupid question. How do i "burn saves"? i tried to put a previous save into a new version of MBF but they dont work im not sure what else to do
 

Missmiles

Active Member
Aug 12, 2018
625
400
Excuse me, but how do I actually use the editor?

There's no a single file marked 'Application' that I know to use.

I'll admit that I'm completely new to QSP games and I need help.
 
  • Like
Reactions: krkarr

Pararock

Member
Aug 17, 2016
316
371
First, in most case I think CheatEngine is a simpler way to cheat in QSP games.

You open QSPSaveEditor.exe, you might have to either shows extension or pick the one that have Application as type. In the UI, you need to open the .qsp game first and then open the .sav. Finnaly, search for the value, edit and save your changes.
 

saviliana

Member
Aug 30, 2017
130
66
Is this going to update to open the new qgen version of qsp? I found that any save file that was created by qsp 1.8/qgen5.7 or later could not be open by this editor.
 

Pararock

Member
Aug 17, 2016
316
371
Is this going to update to open the new qgen version of qsp? I found that any save file that was created by qsp 1.8/qgen5.7 or later could not be open by this editor.
Hey, sorry for the late response got any example? Most of the time when it doesn't work, it's because of the crc check. And a link to the software, there's so much stuffs on QSP it's hard to keep track.
 

thedude2866

Member
Apr 24, 2017
112
119
Only just found this simply because it was shown as recently changed on the main forum, not needing any help but I noticed that it was made in WPF so kudos. (y)
 

Pararock

Member
Aug 17, 2016
316
371
Only just found this simply because it was shown as recently changed on the main forum, not needing any help but I noticed that it was made in WPF so kudos. (y)
I actualy have a fork working on net core 3.1 and wpf I could push. INotifyProperty change notification is not working, never really bothered to look into it, I think it's because of a difference in mvvm light. The rest seems working. With net core 5, it could probably be made cross platform too.


Anyway,

Not for that I am posting. I have an alpha version for UWP(yeah, I know) on the work using for some time now and I'm ready to post a little about it. This is mostly a fun project for me to learn CppWinrt.

Here a preview from an old build:

It feature a location editorviewer based on monaco. The editor behind VSCode. I didn't bother create a style yet.
1597286217043.png

It have a variable editor, only support editor number for now:
1597286307970.png

And a mainview, including error message because everything is broken:
1597286341554.png

Anyway, here the branch and the release DO NOT EDIT ANY SAVE YOU WANT TO KEEP. This will crash on you.
I would like to thanks Lokplart, his frequent questions on the engine motivated me to continue on this.
 
  • Like
Reactions: effninefivehuman

thedude2866

Member
Apr 24, 2017
112
119
For NotifyProperty I have this little class which helps out quite a bit.
Code:
public abstract class NotifyPropertyChanged : INotifyPropertyChanged
{
    #region Events
    public event PropertyChangedEventHandler PropertyChanged;
    #endregion

    #region Methods
    protected void NotifyProperty([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    #endregion
}
It lets me things like
Code:
private string _Name { get; set; }
public string Name { get { return _Name;}
    set { if (value != _Name) {_Name = value; NotifyProperty();}
}
And then it will automatically figure out which property is changed because of the
Code:
[CallerMemberName]
and funnily enough I just posted a thread where I said that I'll be making a new game engine in .Net Core, speaking of you mentioned .Net Core 5, so far I've only heard of .Net Core 3.1, what changes are they making?
 

Pararock

Member
Aug 17, 2016
316
371
I mispoke, it's net 5. They are merging .net core and .net framework into a single version that should be cross platform even for UI.

If you need stuffs that is windows only, like WPF, you import a nuget that is platform specific. That already work on .net core 3.1. With 5, I hope we also get cross platform ui library to help. Which seems to be the case with Win UI 3.0.
 

thedude2866

Member
Apr 24, 2017
112
119
Oh wow, I didn't think they would be making cross platform UI so soon, from what I hear its an extreme pain to make them for linux.
 

Pararock

Member
Aug 17, 2016
316
371
I've been playing with Monarch to create a language syntax definition for the editor. Here the result so far.
1597470992771.png
Notice how it can have sub style and correctly deal with HTML. Comparison with 4.0.0 1597471063994.png

If you guys want to play around. Here the definition I have so far.
Code:
// Create your own language definition here
// You can safely look at other samples without losing modifications.
// Modifications are not saved on browser refresh/close though -- copy often!
return {
  // Set defaultToken to invalid to see what you do not tokenize yet
  // defaultToken: 'invalid',
  ignoreCase: true,

  keywords: [
    'ACT', 'ONGSAVE', 'DEBUG', 'ONNEWLOC', 'AND', 'OR', 'LOC', 'OBJ',
    'NO', 'MIN', 'MAX', 'RAND', 'IIF', 'RGB', 'LEN', 'ISNUM',
    'LCASE', 'UCASE', 'INPUT', 'STR', 'VAL', 'ARRSIZE', 'ISPLAY',
    'DESC', 'TRIM', 'GETOBJ', 'STRCOMP', 'STRFIND', 'STRPOS',
    'MID', 'ARRPOS', 'ARRCOMP', 'INSTR', 'REPLACE', 'FUNC',
    'DYNEVAL', 'RND', 'COUNTOBJ', 'MSECSCOUNT', 'QSPVER', 'USER_TEXT',
    'USRTXT', 'CURLOC', 'SELOBJ', 'SELACT', 'MAINTXT', 'STATTXT', 'CURACTS',
    'ELSE', 'TO', 'STEP', 'ELSEIF', 'END', 'LOCAL', 'SET', 'LET', 'IF',
    'FOR', 'ADDOBJ', 'CLA', 'CLOSE', 'CLS', 'CMDCLEAR', 'CMDCLR', 'COPYARR',
    'DELACT', 'DELOBJ', 'DYNAMIC', 'EXEC', 'EXIT', 'FREELIB', 'KILLQST', 'GOSUB',
    'GS', 'GOTO', 'GT', 'ADDQST', 'INCLIB', 'JUMP', 'KILLALL', 'KILLOBJ',
    'KILLVAR', 'MENU', 'CLEAR', 'CLR','NL','PL','P','MSG','OPENGAME','OPENQST',
    'PLAY','REFINT', 'SAVEGAME', 'SETTIMER', 'SHOWACTS', 'SHOWINPUT', 'SHOWOBJS',
    'SHOWSTAT', 'UNSELECT', 'UNSEL', 'VIEW', 'WAIT', 'XGOTO', 'XGT'
  ],

  typeKeywords: [
    '$'
  ],

  operators: [
    '=', '>', '<', '!', '~', '?', ':', '==', '<=', '>=', '!=',
    '&&', '||', '++', '--', '+', '-', '*', '/', '&', '|', '^', '%',
    '<<', '>>', '>>>', '+=', '-=', '*=', '/=', '&=', '|=', '^=',
    '%=', '<<=', '>>=', '>>>='
  ],

  // we include these common regular expressions
  symbols:  /[=><!~?:&|+\-*\/\^%]+/,

  // C# style strings
  escapes: /\\(?:[abfnrtv\\"]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,

  // The main tokenizer for our languages
  tokenizer: {
    root: [
      // identifiers and keywords
      [/[a-z_$][\w$]*/, { cases: { '@typeKeywords': 'keyword',
                                   '@keywords': 'keyword',
                                   '@default': 'identifier' } }],
      [/[A-Z][\w\$]*/, 'type.identifier' ],  // to show class names nicely

      // whitespace
      { include: '@whitespace' },

      // delimiters and operators
      [/[{}()\[\]]/, '@brackets'],
      [/[<>](?!@symbols)/, '@brackets'],
      [/@symbols/, { cases: { '@operators': 'operator',
                              '@default'  : '' } } ],

      // numbers
      [/\d+/, 'number'],

      // delimiter: after number because of .\d floats
      [/[;,.]/, 'delimiter'],

      // strings
      [/'/,  { token: 'string.quote', bracket: '@open', next: '@html_block', nextEmbedded: 'text/css'} ],
      [/"/,  { token: 'string.doublequote', bracket: '@open', next: '@stringdouble' } ],

    ],

    html_block: [
      [/[^']+/,  ''],
      [/'/,        { token: 'string.quote', bracket: '@close', next: '@pop', nextEmbedded: '@pop'  } ]
    ],

    stringdouble: [
      [/[^\\"]+/,  'string'],
      [/@escapes/, 'string.escape'],
      [/\\./,      'string.escape.invalid'],
      [/"/,        { token: 'string.quote', bracket: '@close', next: '@pop' } ]
    ],

    whitespace: [
      [/[ \t\r\n]+/, 'white'],
      [/\/\*/,       'comment', '@comment' ],
      [/!.*$/,    'comment'],
    ],
  },
};
There's still plenty of junk from the c# demo. The editor :
 
  • Like
Reactions: effninefivehuman

Kirintheanalover

New Member
Mar 3, 2020
3
0
i just can't get it to work, but i found a way to get what i need in jack o nine any way, i just wanted to edit the base amount of daily energy
 

Pararock

Member
Aug 17, 2016
316
371
i just can't get it to work, but i found a way to get what i need in jack o nine any way, i just wanted to edit the base amount of daily energy
Jack o nine should works, do you have any error?

I might revisit the old version once preview 4 or later is released and make it crossplatform.
 

Kirintheanalover

New Member
Mar 3, 2020
3
0
yeah i do get an error, incorrect arguments count, i tried the newer 0.2 alpha and i got another different error but at least i can close it, the older one stops responding after the error
 

Pararock

Member
Aug 17, 2016
316
371
OK, yeah I might have a guess for the error.

Jack O Nine have a different format for the music command than other QSP engine, the param error might be because it's seeing the music command. Try to mute your game in jack o nine(not using the engine UI) and save, just to see if it changes anything.

I'll keep a note on this.
 

Deen__

Newbie
Nov 2, 2019
21
13
can't edit about it becuase there is no .qsp file but it's run in qsp any help how to open it
 
  • Like
Reactions: jxd

Noiremka

Newbie
Feb 8, 2018
74
38
The programm just closes when trying to load the save from jack-o-nine. Turned off the music to let the program to work at first.