AGS Config - Yet Another Winsetup

Started by eri0o, Mon 20/01/2020 03:59:56

Previous topic - Next topic

eri0o

Hey, I decided to give a shot at trying to build another Winsetup alternative.


Spoiler
[close]

The code is written in C++ and it's available on GitHub github.com/ericoporto/agsconfig.

Binaries are provided on the releases page here, under assets, for Windows, MacOS and Linux. I have successfully run the Linux binary, but I have not yet tested the other binaries provided by the Continuous Integration system but they may work.

Remember that you will need to set permissions for MacOS and Linux after download (chmod +x agsconfig).

Instructions

Place agsconfig executable at the same location of your game entry-point (mygame) or binary (mygame.exe). On MacOS, place it at the side of the AGS Engine binary.

Create on the same directory a text file named .config, and add the following content to it:

Code: ini
[game]
executable = mygame


On MacOS, set the value of the executable to the binary of the AGS Engine and certify the AGS Engine is finding your game on execution. If you are using on Windows your executable should be mygame.exe.

Better instructions will be written over time on the README in the GitHub page. Oh the above GUI should be compatible with any gamepad too.

Note: The intent of this tool is to be shipped by the game developer along with their game when releasing in a non-windows platform. It can also be shipped with the Windows build if there's intent on customizing it and provide good consistency accross OSes. The source code should be fairly readable.

Development

If you wish to develop with agsconfig, all the logic is in a library in a directory called core and you can use just it if you wish to implement your own interface. The entirety of the interface with comments is the 400 lines of code agsconfig.cpp file. There's no ui code in the core.

lorenzo

Nice! The Windows version works fine.
Spoiler
[close]

eri0o

Hey Lorenzo, I want to add some more options that currently exists in Winsetup when I have time to. If you have anything that needs adding to it, just give a shout.

PS gamepads I think currently only works if it's loaded through Steam. It also have keyboard navigation.

lorenzo

Quote from: eri0o on Mon 20/01/2020 22:09:43
If you have anything that needs adding to it, just give a shout.
Thank you! I'll let you know if I think of something.

Quote from: eri0o on Mon 20/01/2020 22:09:43
PS gamepads I think currently only works if it's loaded through Steam. It also have keyboard navigation.
I tried with the keyboard and with a gamepad and they both work!

eri0o

#4
Basically no changes since last time, but I  updated the theme a bit, and added new photos. The fonts should look crispy now in all OSes (they were blurry last time). The window also has a code to try to get a good size.

On the code itself, I created an interface to separate the GUI from the logic, so if someone wants to plug this on a different GUI, it should be very easy now.

Monsieur OUXX

#5
Perfect

Can you explain the difference with Winsetup? It looks stricly identical.

A big plus to the basic Winsetup would be this :
- A large, clear, minialistic UI (with icons and tabs or whatnot) in the style of modern websites.
- A preview of what the selected graphic options would look like.
- A short explanation text appearing each time you hover or click on an option.

EDIT: Is the novelty here that winsetup.exe was not available on Linux and Mac`?
 

eri0o

Winsetup runs on AGS Engine directly, so it has information on what resolutions exactly are possible for your game and some more. The agsconfig implementation uses the new command line --tell feature from AGS 3.5.0, which gives you information on the configuration of ags for the game it's running.

The goal was to provide a tool with equal features of Winsetup but working on Linux and MacOS. Some features are still missing though: translation selection and resolutions.

Quote from: Monsieur OUXX on Tue 11/02/2020 14:34:17
A big plus to the basic Winsetup would be this :
- A large, clear, minialistic UI (with icons and tabs or whatnot) in the style of modern websites.
- A preview of what the selected graphic options would look like.
- A short explanation text appearing each time you hover or click on an option.

Can you elaborate on which options you think requires additional explanation through tooltips?

About the large and clear minimalistic ui, I lack the design capabilities to design it, but if someone can come up with such design, I can implement.

About the preview, I don't understand how it would work. You mean running the game in a small window? Or showing static images that represent the options applied in a fictional game? The first I don't know how to do and the second I lack drawing abilities.

I also found an old request in the forums to hide options from the ui, I imagine the goal is preventing a player to enable unsupported features or playing a game in a different way than intended by the game developer.

Monsieur OUXX

Quote from: eri0o on Tue 11/02/2020 15:55:41
Can you elaborate on which options you think requires additional explanation through tooltips?
Well stuff like the vertical sync or DirectX. Only a handful of people know what that's about. I can only imagine their anguish, trying to decide what to click.

Quote from: eri0o on Tue 11/02/2020 15:55:41
About the large and clear minimalistic ui, I lack the design capabilities to design it, but if someone can come up with such design, I can implement.
For example imagine several tabs : One for graphics, one for sound...
Quote from: eri0o on Tue 11/02/2020 15:55:41
About the preview, I don't understand how it would work.
Like you said, just a static image showing you how the game would stretch, or be surrounded by a black box, stuff like that.


Quote from: eri0o on Tue 11/02/2020 15:55:41
I also found an old request in the forums to hide options from the ui
Yes, the most obscure options should be hidden.
 

arj0n

Checked agsconfig 0.1.0. for Windows. Nice work.

One strange thing: Driver only shows Software as option... (I'm running Windows64 bit)

Also some small things I noticed:

  • All dropdown box values are some kind of short name instead of the same full naming used via Winsetup.
  • missing the Native game resolution label: "Native game resolution: 320 x 240 x 32" for example
  • Driver only shows Software as option.
    Winsetup shows these options for Driver: Direct3D 9; OpenGL; Software renderer
  • Fullscreen scale also contains the values 1; 2; 3.
    Winsetup shows these options for Fullscreen scale: Max round multiplier; Fill whole screen; Stretch, preserving aspect ratio
  • Windowed scale also has different number value options (1, 2, 3).
    Winsetup shows these options for Windowed scale: None (original game size); Max round multiplier; Fill whole screen; preserving aspect ratio; 2x; 3x; 4x; 5x (selectbox)
  • Assuming the option "Filter" is the same as "scaling method" in Winsetup, "Filter options are different or has simply different names:
    AGSConfig: Filter: none; stdscale
    Winsetup: Scaling method: Nearest-neighbour; Linear interpolation
  • Missing: The Game language part is missing.
  • Missing: "Use 85 Hz display (CRT Monitors only)" option.
    (belongs to the group tickboxes: vertical sync; Render sprites...;Match Device Ratio)
  • If no speech pack present, do disable the "Use speech pack" tickbox.
  • Missing tickbox "Auto lock to window" in Mouse section.
  • When starting up agsconfig, have all panes initially collapsed, or all but Graphics options expanded.
  • And as said already: please group the more obscure settings and hide them initially. (as done via Winsetup, see below:)
Spoiler


[close]

eri0o

Quote from: arj0n on Tue 11/02/2020 19:56:44
Checked agsconfig 0.1.0. for Windows. Nice work.

One strange thing: Driver only shows Software as option... (I'm running Windows64 bit)

This is weird... Did you follow the instructions above? The drivers list comes from querying AGS itself. I will summarize only for Windows.

Place agsconfig executable at the same location of your game binary (mygame.exe).
Create on the same directory a text file named .config, and add the following content to it:

Code: ini
[game]
executable = mygame.exe


---

Quote from: arj0n on Tue 11/02/2020 19:56:44

  • All dropdown box values are some kind of short name instead of the same full naming used via Winsetup.

Yes, my guide when implementing was the acsetup.cfg file specs directly, so I didn't noticed until you mentioned now!

Quote from: arj0n on Tue 11/02/2020 19:56:44

  • missing the Native game resolution label: "Native game resolution: 320 x 240 x 32" for example

I have this internally already, so it will be easy to implement. So I did! The CI should have built and pushed the releases by the time you are reading this.

Quote from: arj0n on Tue 11/02/2020 19:56:44

  • Driver only shows Software as option.
    Winsetup shows these options for Driver: Direct3D 9; OpenGL; Software renderer
  • Fullscreen scale also contains the values 1; 2; 3.
    Winsetup shows these options for Fullscreen scale: Max round multiplier; Fill whole screen; Stretch, preserving aspect ratio
  • Windowed scale also has different number value options (1, 2, 3).
    Winsetup shows these options for Windowed scale: None (original game size); Max round multiplier; Fill whole screen; preserving aspect ratio; 2x; 3x; 4x; 5x (selectbox)

I need to figure a way to alias and map the values that are written in the INI and the ones to be presented. I will figure something. The ini possible values are like below (Parenthesis are the mentioned values):

  • any integer number - positive number means upscale multiplier, negative number means downscale divisor; (2x; 3x; 4x; 5x)
  • max_round - deduce maximal integer multiplier that fits in current desktop/device size; (Max round multiplier)
  • stretch - stretch to current desktop/device size; (Fill whole screen)
  • proportional - similar to stretch, but keep game's aspect ratio. (preserving aspect ratio)

Quote from: arj0n on Tue 11/02/2020 19:56:44

  • Assuming the option "Filter" is the same as "scaling method" in Winsetup, "Filter options are different or has simply different names:
    AGSConfig: Filter: none; stdscale
    Winsetup: Scaling method: Nearest-neighbour; Linear interpolation
  • Missing: The Game language part is missing.
  • Missing: "Use 85 Hz display (CRT Monitors only)" option.
    (belongs to the group tickboxes: vertical sync; Render sprites...;Match Device Ratio)
  • If no speech pack present, do disable the "Use speech pack" tickbox.
  • Missing tickbox "Auto lock to window" in Mouse section.
  • When starting up agsconfig, have all panes initially collapsed, or all but Graphics options expanded.
  • And as said already: please group the more obscure settings and hide them initially. (as done via Winsetup, see below:)
Spoiler


[close]

These will take a bit to figure out! Need to sleep first.

Crimson Wizard

Following winsetup UI 1:1 may not be the best idea, there were numerous critisism to its control layout in the past.

eri0o

#11
I think I found a thread that has some information regarding Winsetup changes:

https://www.adventuregamestudio.co.uk/forums/index.php?topic=53604.0

Some stuff here are sensible, like adding a graphic to identify the game it's attached too.

Other maybe relevant thread:

https://www.adventuregamestudio.co.uk/forums/index.php?topic=48097.9

Monsieur OUXX

#12
I think I finally managed to identify the biggest issue with winsetup.exe and just letting people choose their resolution from a list.

It should instead be presented like this wizard:
(the red part is the critical novelty)





(X) I want to run the game in full screen

(  ) I want to run the game in a window




What is the thing you dislike the most?

(  ) I don't like black borders around the game
       I want the game to be displayed on the entirety of my screen, even if it makes it slightly blurry

(X) I don't like bluriness
       I want the game to be as sharp as possible, even if it means small black borders around the game





We have calculated that the ideal enlargement factor for your game is 3x. Do you agree with this?

(X) Yes, please run the game as big as possible
       This will apply the 3x scaling factor

( ) No, please stay moderate
       This will apply the 2x scaling factor. The game will use about 1/4 of your screen.

( ) No, I don't want any enlargement at all.
       This will apply the 1x scaling factor. Your game might appear very small on a screen with a high resolution.

All the settings should be calculated from those three questions. Also, obviously not all three questions need to be asked depending on the answers to the previous questions. For example if the player chose "windowed" you don't ask about letterbox.

Please note : asking for letterbox/no letterbox is not new. What's new is asking to the player what they dislike the most, and letting them understand that they can't have both.
 

Crimson Wizard

Yes, the winsetup is presenting technical options, while many contemporary players don't seem to understand their meaning, so explaining in more simple language is better.

Even better is showing what the game frame will look like in final window with pictures (how the frame is stretched).

(If I were making a new config from scratch, I'd probably split all technical stuff to a separate hidden panel, and have all technical terms there)

SMF spam blocked by CleanTalk