Schiffbruch icon indicating copy to clipboard operation
Schiffbruch copied to clipboard

Load texture positions from JSON instead of having it hard coded

Open FSMaxB opened this issue 7 years ago • 20 comments

I'm interested what would be required to port this game to Linux (e.g. via SDL).

Are the windows specific parts isolated properly or is it just one mess of spaghetti code?

FSMaxB avatar Jun 16 '17 22:06 FSMaxB

Also there are some files that look like they are used for C++ code generation. That's probably an issue as well.

FSMaxB avatar Jun 16 '17 22:06 FSMaxB

In its current state it's still a huge mess of spaghetti code. DirectDraw and DirectInput are sprinkled everywhere. And many types used are Windows related.

Once I'm done refactoring the mess, it should be fully based on SFML and as such work cross-platform .

eXpl0it3r avatar Jun 16 '17 23:06 eXpl0it3r

Are you currently working on that?

And do you have simple work items, that I could help with?

FSMaxB avatar Jun 16 '17 23:06 FSMaxB

Not exactly. I'd like to pick up again.

Everything is interleaved so there's really no way to cut things down into smaller piece, plus to make it work, you pretty much after to use Visual Studio and Windows.

eXpl0it3r avatar Jun 17 '17 10:06 eXpl0it3r

I have a Windows 10 VM with VS 2017 Community and (since I didn't manage to compile Schiffbruch with that) also VS 2015 Community. I didn't try to compile it with VS 2015 yet.

FSMaxB avatar Jun 17 '17 10:06 FSMaxB

VS 2017 works fine (just compiled it), you just have to update the project solution and update the SFML libs.

I've once started to extract the whole initialization of all the different images, so they wouldn't be hard coded but loaded from a JSON file at start up. But since it's hundreds of different variables, I gave up at oen point.

If you want to, you could try and extract all the information, here's what I got so far. The init.txt contains all the other variables that I haven't yet added to the JSON structure: variables.zip

eXpl0it3r avatar Jun 17 '17 11:06 eXpl0it3r

Do I understand you correctly that you want the Bmp, Wav etc. arrays in JSON form?

(your JSON example is not valid JSON btw.)

FSMaxB avatar Jun 17 '17 12:06 FSMaxB

The easiest way to do that would probably be to execute the code and write C++ code that prints this information as JSON from memory.

FSMaxB avatar Jun 17 '17 12:06 FSMaxB

Yes, that's the idea. Currently the initialization code alone is multiple hundred lines of code, making things quite messy, being able to cut those hard coded out into its own config JSON file, already makes the whole code base lighter.

Running the code to dump it, might be a good idea. Is this something you'd like to look into?

eXpl0it3r avatar Jun 17 '17 14:06 eXpl0it3r

Yes, I can do that.

What JSON library do you intend to use in the end? If you have decided already I can use that and maybe even write the code to load the JSON back in.

Otherwise I would just export it using cJSON since I'm the maintainer of that library so I'm familiar with it.

FSMaxB avatar Jun 17 '17 14:06 FSMaxB

I quite like https://github.com/nlohmann/json and I'd rather stick to a C++ library than C.

eXpl0it3r avatar Jun 17 '17 14:06 eXpl0it3r

I meant to use cJSON just for exporting, if there was no JSON library decided upon for later importing the JSON.

How do you handle dependencies? For now I would just copy paste the source code or install the package on my Linux system or something like that.

FSMaxB avatar Jun 17 '17 14:06 FSMaxB

nlohmann's JSON lib is a header-only lib, so you can just add the header to the source and include it.

For you export program you can easily just use cJSON you're familiar with it.

eXpl0it3r avatar Jun 17 '17 15:06 eXpl0it3r

There's just a slight problem with JSON: Some values are calculated, even dependent on the screen resolution. I don't know how this can be represented using JSON (other than parsing strings and evaluating the result).

FSMaxB avatar Jun 17 '17 18:06 FSMaxB

Well dependencies between different entities isn't really an issue. That was mostly done to "simplify" the calculation, but we could just save the complete values to JSON.

Which values depend on the screen resolution? If you mean the Guy's position and the camera, then that's no a problem. Those don't need to be saved to the JSON file, but can be set at the start of the game.

eXpl0it3r avatar Jun 17 '17 19:06 eXpl0it3r

Looks like mostly text output and the credits.

FSMaxB avatar Jun 17 '17 19:06 FSMaxB

I'll just ignore that then.

FSMaxB avatar Jun 17 '17 19:06 FSMaxB

I will probably finish it some time this week.

FSMaxB avatar Jun 18 '17 18:06 FSMaxB

Good to hear! 😊

eXpl0it3r avatar Jun 18 '17 20:06 eXpl0it3r

This takes longer than anticipated, especially because some unexpected tasks with higher priority came up.

My current plan:

  • [x] Make pairs of to_json, from_json for every struct
  • [ ] Use these to generate JSON
  • [ ] Hook up loading from JSON

FSMaxB avatar Jul 04 '17 06:07 FSMaxB