Jump to content
jenergy

Jzintv ImGui

Recommended Posts

Hi all,
here in attachment a working demo of a jzintv GUI that I made using Dear ImGui. You can launch it by jzintvImGui.exe
Its default style is a little "developer oriented", but I don't exclude that it's possible to turn it to a more "final user" style oriented.

 

There's a configuration file called jzintvGui.ini, where you can configure some parameters (for example: roms folder) and some roms settings (crc32, game name, screenshot file name, description)
I filled it with a couple of configurations, you can have fun to fill it with all missing data 🙂
For the moment, this file is used in read-only mode, so you have to manual edit the file (and restart all) in order to change settings.

There's a default not-yet-configurable folder, "Assets", which contains all the image files. There's a subfolder "Boxes", because I'm thinking to manage multiple kind of images (boxes, screenshots etc..), but it's just an idea.

 

Bios files must be (for the moment..) in the same folder of roms. If they're present, they are recognized from the gui.

 

Actually, gui is a separate process than jzintv, that means that you need to have also jzintv.exe in the same folder of the gui (it is already in the package, the SDL2 with fix version posted by joe in the "jzintv Christman update" thread) but actually you can provide the one you want.
I'm working to merge sources, in order to have a single all-in-one executable file, so it can be easily ported to other platform. 
This would have the disadvantage that it needs to be recompiled every time a new version of jzintv is out.

 

I leaved the Dear Imgui demo window to be shown on demand, so you can see a lot of the potential of the product, and maybe you can suggest some widgets/functionalities that can be useful for this frontend.

For the moment, command line parameters are configured statically in the ini file (see "General" section in property file), but next step is to find a strategy to implement and configure them.
I'm thinking at the classical approach, "General options", which are shared by all games, and "Custom options", where you can override global option for every single game.
I'm thinking about 4 main Sections, Audio, Video, Controls and Misc., and some meta data type assignable to every option.
Example for parameters resolution (-z) ( in ini file):

[Parameters_Video]
option_1_name=Resolution
option_1_param=z
option_1_type=integer

 

option_2_name=...
...

 

[Parameters_Audio]
option_1_name=Intellivoice
option_1_param=v
option_1_type=boolean

...

 

This can be easy for 'standard' parameters, not for complex ones (example: the ones you have to provide external files). What do you think about it?

 

I've read somewhere that there's the load/save functionality for games with ecs, and not for the 'normal' ones. Is that true? In this case, that would be nice to make that part of code to 'cooperate' with gui, so you can resume a saved game from the gui.
I have to understand the part of code to 'catch'. Any suggestions Joe? 🙂

 

As already mentioned, suggestions are welcome 🙂


I hope you can enjoy with it.

 

P.S. I called it temporarily jzinvImGui, but I can obviously change the name.

jzintvImGui.zip

Edited by jenergy
Typos
  • Like 1

Share this post


Link to post
Share on other sites

I don't think jzintv has any save game support unless it was implemented in the original cartridge.  For example jzintv emulates the ecs cassette interface, so basic csav/clod should work and maybe world series baseball save game and save rosters should work.  It also emulates the save game feature of homebrew jlp cartridges.

Share this post


Link to post
Share on other sites

So you used Dear ImGui.  I started working on a frontend myself in my own Development Environment, and I came across Dear ImGui while shopping around for something to develop in.  I was also thinking of Zenity, which simply adds GUI elements to be used within BASH scripts, but Termux didn't have a package readily available.  So I went with GTK+.  The good news is that it should be portable when it's ready.

Share this post


Link to post
Share on other sites
19 minutes ago, Zendocon said:

So you used Dear ImGui.  I started working on a frontend myself in my own Development Environment, and I came across Dear ImGui while shopping around for something to develop in.  I was also thinking of Zenity, which simply adds GUI elements to be used within BASH scripts, but Termux didn't have a package readily available.  So I went with GTK+.  The good news is that it should be portable when it's ready.

Hi,

I spent years without watching news on atariage, then I've seen in the "jzintv christmas update" thread that some people said that there were not yet an updated interface, so I decided to play with some c++ code and to write it 🙂 

Maybe I was wrong, I've seen now that you wrote something about it, but I didn't understand that you were talking about a gui. There's no reason to double efforts, while maybe it's better eventually to share them.

What I (personally) need is something that can work also on the nintendo switch and android, with minimum changes between versions, and minimum cross compiling issues.  Do you know if your interface is portable on thoose platforms?

If yes, maybe I can stop my work, and waiting for your ports. 🙂

If not, maybe I can go on with my work, but just with the only perspective to find the best trade-off for make it work on these platforms.

Edited by jenergy
Typos

Share this post


Link to post
Share on other sites

Since my whole Portable Intellivision Development Environment runs within Termux and XServer XSDL in Android, I'm pretty confident that my GUI will work natively in Android when it's ready.  As for other platforms like the Nintendo Switch, I've never developed there, but I'm pretty confident that GTK+ will keep the cross-platform issues to a minimum.  Stay tuned.

Share this post


Link to post
Share on other sites
1 hour ago, Zendocon said:

Since my whole Portable Intellivision Development Environment runs within Termux and XServer XSDL in Android, I'm pretty confident that my GUI will work natively in Android when it's ready.  As for other platforms like the Nintendo Switch, I've never developed there, but I'm pretty confident that GTK+ will keep the cross-platform issues to a minimum.  Stay tuned.

Uhm..ok, I think I'm gonna turn my efforts to try to make my demo GUI (as it is now) work on that two platforms, to be ready in the case there will be difficulties porting yours . As you said, no difficults shouldn't appear, so when you'll have a definitive answer about that ports of your GUI, please let me know. I'm curious to see your work, it seems awesome.

  • Like 1

Share this post


Link to post
Share on other sites

I don't know whether you've seen the document for my actual environment.  I try to document everything I'm doing, so anybody should be able to follow along.  I built it two years ago because I had been bogged down for a long time, not having the free time to finish a couple games, and so I wanted to put everything onto an Android tablet and just use the cracks in my schedule to do more development.

 

I'm very happy with the result, and I was able to follow my own documentation and set up the whole environment onto a new phone and tablet a couple months ago with hardly any issues.  Once I've got this GUI built, I'll probably post it on my github account, and include the steps to install that onto this environment as well.

Share this post


Link to post
Share on other sites
10 minutes ago, Zendocon said:

I don't know whether you've seen the document for my actual environment.

Guilty, not. But now yes. Just discovered your "Midnight Blue International". Huge and impressive work, congratulations!

I'll keep waiting for the evolution of your work

 

 

  • Like 1

Share this post


Link to post
Share on other sites
6 hours ago, jenergy said:

I've read somewhere that there's the load/save functionality for games with ecs, and not for the 'normal' ones. Is that true? In this case, that would be nice to make that part of code to 'cooperate' with gui, so you can resume a saved game from the gui.

I have to understand the part of code to 'catch'. Any suggestions Joe? 🙂

Actually, I had trouble getting those params for jzintv to work with my launch scripts, so I just stuck with the defaults.  The params are "--ecs-tape=path" and "--ecs-printer=path".

 

The Jetsons' Ways With Words automatically writes to "ecs_tape.ecs", if you create your own word list.  I know World Series Major League Baseball also supports saving to tape, along with Melody Blaster and probably Mind Strike as well.

 

As for the BASIC stuff, including Mr. BASIC Meets Bits & Bytes, you save to a 4-character file using the CSAV instruction, ex "CSAV ABC1", and then you get a file called "ecs_tape_ABC1.ecs".

 

Right now, I'm just planning my GUI to be a graphical extension of my launch script for commercial games with minimal options, such as between NTSC and PAL, or to add the Intellivoice and/or ECS.  Later, I might use the same logic jzintv uses to fetch the title for commercial games or fetch the metadata for indie games, and know what to enable by default.  If I build graphical controls for every single option jzintv uses, I'll probably bury the uncommon ones into an "Advanced" menu.

Edited by Zendocon
Other ECS games write to tape as well without filenames. The Jetsons just does it automatically without asking.

Share this post


Link to post
Share on other sites
9 hours ago, mr_me said:

I don't think jzintv has any save game support unless it was implemented in the original cartridge.  For example jzintv emulates the ecs cassette interface, so basic csav/clod should work and maybe world series baseball save game and save rosters should work.  It also emulates the save game feature of homebrew jlp cartridges.

 

3 hours ago, Zendocon said:

Actually, I had trouble getting those params for jzintv to work with my launch scripts, so I just stuck with the defaults.  The params are "--ecs-tape=path" and "--ecs-printer=path".

 

The Jetsons' Ways With Words automatically writes to "ecs_tape.ecs", if you create your own word list.  I know World Series Major League Baseball also supports saving to tape, along with Melody Blaster and probably Mind Strike as well.

 

As for the BASIC stuff, including Mr. BASIC Meets Bits & Bytes, you save to a 4-character file using the CSAV instruction, ex "CSAV ABC1", and then you get a file called "ecs_tape_ABC1.ecs".

 

That's clear now, my knowledge on ECS features is strictly basic.

 

3 hours ago, Zendocon said:

Right now, I'm just planning my GUI to be a graphical extension of my launch script for commercial games with minimal options, such as between NTSC and PAL, or to add the Intellivoice and/or ECS.  Later, I might use the same logic jzintv uses to fetch the title for commercial games or fetch the metadata for indie games, and know what to enable by default.  If I build graphical controls for every single option jzintv uses, I'll probably bury the uncommon ones into an "Advanced" menu.

So your GUI will be a separate process than jzintv, and you will replicate this logic?

Share this post


Link to post
Share on other sites
7 minutes ago, jenergy said:

So your GUI will be a separate process than jzintv, and you will replicate this logic?

That's the plan.  I just want a launcher that displays a list of ROM files and draws the associated box images if they are available, and passes a string back to the shell and executes that.

 

Right now, my launch script requires the ROM file as an argument, and then displays a menu within the terminal, allowing for any combination of: Intellivoice or not, ECS or not, and PAL or not.  It works, but having a GUI launcher would make my environment that much more appealing.

Share this post


Link to post
Share on other sites
21 hours ago, mr_me said:

I don't think jzintv has any save game support unless it was implemented in the original cartridge.  For example jzintv emulates the ecs cassette interface, so basic csav/clod should work and maybe world series baseball save game and save rosters should work.  It also emulates the save game feature of homebrew jlp cartridges.

 

There was, for a few versions, the ability to save/reload the emulator state.  It was broken, so I've disabled it again.  The feature was an outside contribution.  At some point, I need to rewrite it and get it working again.

  • Like 2

Share this post


Link to post
Share on other sites

Just for fun, and to have something working on the Switch too, I finished to develop a stable version, which I'd like to share with community.


It now works on:
- Windows
- Nintendo Switch
- Linux

 

I'm starting work to port it on android devices too.

 

In the package, I will include sources and binaries, but before I post it..


@intvnut It's an all-in-one package, which includes jzIntv too. In other words, you don't need to have the external jzIntv executable, because latest sources are compiled with it. I've choosen this approach in order to make easy the port.

Is this a problem? I mean, does this break any copyright rules of jzIntv?

Edited by jenergy
Bad english :-)
  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

Hi, I was just wondering if there are any specific OS requirements for this GUI? I tested it on my Windows 10 machine and it seems to work fine. I put it on my laptop which is still Windows XP, and it won't launch. I get the generic old Windows Crash Error. Just wondering if there may be some other software I may need to get it to launch on XP?

Share this post


Link to post
Share on other sites

It works on my desktop running Windows XP. So I assume I need to add either an updated version of Visual C++ or .NET Framework to my laptop.

  • Like 1

Share this post


Link to post
Share on other sites

Good to know!
I changed and improved a lot of things, now it works on Windows (10 and winXp 🙂 ), Linux, Nintendo Switch and I'm tuning something on Android..I hope to have the stable version before the end of January

 

  • Like 1

Share this post


Link to post
Share on other sites

It became very nice for me. I'm adding virtual joystick on android, then after some general tests I'll share it (for interested people 🙂 )

image.thumb.png.6e5f3c3d043568abf338c5b2ef5abc99.png

image.thumb.png.9b4945e8121583045858077e5869e7fc.png

 


 

image.thumb.png.c4d514983ee23be8d4166082b3553472.png

 

Android screenshots:

 

Landscape

image.thumb.png.9e05ca5727cff2f1af59b6695a093b2f.png

 

Portrait:
image.thumb.png.1efdaaa01ea30b170faad66f3f2abcc7.png

 

 

 

Edited by jenergy
  • Like 2

Share this post


Link to post
Share on other sites
Posted (edited)

- Added on-screen keys:

 

 

image.thumb.png.4bad1f9f7fc11e887bfdecee575ef0d5.png

 

- Added on-screen global and custom configuration management for keys and screen, you can now choose to move, hide, change transparency as you wish, and save your configuration:

 

image.thumb.png.dc96780cfce583c170d5ab6f515af990.png

 

This is useful in Android

 

I planned about 20 hours of develop left, then I'll release it here for curiouses 🙂

Edited by jenergy
Typos
  • Like 1

Share this post


Link to post
Share on other sites

Looks good.  I'd like a simple toggle that puts the disc on the right, buttons on the left.

Share this post


Link to post
Share on other sites

In the shown context, configuration is thought on single intellivision button, not for the whole block.

I quickly can add another configuration button to x-flip single button, so you can easily flip any of them, and when you're done you can save configuration as default for all the games. That will take 20 seconds once-in-a-life, because after saving you'll always have your new configuration.

Or you need a continuous flip management of the controls?

 

I can also think to add a 'global' option (in the main interface window), that is when it's enabled, all the controls in the game will be x-flipped automatically (with forced normalization when needed, in order to be always visible on the screen).

 

Otherwise, of course a 'x flip all buttons' button can be added there, but I need to think where to put it, in order to not introduce mental mess 🙂

 

Share this post


Link to post
Share on other sites
Posted (edited)

If the keypad is made of twelve individual buttons I wouldn't want to mirror them.  Just create a second set of default button/disc locations.

Edited by mr_me

Share this post


Link to post
Share on other sites

image.png.a954cedb2d8cb3007829731bb5a973e8.png

 

🙂 When you start app for the first time, you'll have a popup allowing you to choose the desired layout. And you'll be able to change it later too.

Share this post


Link to post
Share on other sites

Ok, too many developments to implement came in my mind, so it's better to release now a stable version, because I'm gonna refactor a lot of stuff and who knows when another stable release will come 🙂

Here the 2.0 version, only for desktop Windows and Linux

For Linux, you have to install libsdl2-image-dev, which should automatically include libsdl2-dev ('sudo apt-get --assume-yes install libsdl2-image-dev')

 

There's a 'resource' folder in the package, keep it in the same folder of executables (jzIntvImGui for Linux, jzIntvImGui.exe for Windows)

By default, application looks for roms in 'Roms' folder of 'Resources'. If you want change that path, edit 'roms_folder' property in ini file (you will see it after first launch). This is needed until I will implement an "Option window", to avoid manual edit of ini file.

 

In the list of games:

- Green games are the games configured in ini files that have been found in roms folder (by crc32)

- Red games are the games configured in ini files that have NOT been found in roms folder (by crc32)

- Yellow games are the games NOT configured in ini files, but found in roms folder. There's a button "Add to config" to basically add it in the ini file. This will be improved with the "Option window", where you will be able to configure all the stuff you need.

 

Put bioses in the same folder of roms.

 

By default I configured in ini file two jzIntv commands for all the games:

custom_command_1 = -z3
custom_command_2 = --enable-mouse  (---> used for simulating jzIntv controls in desktop, when "show_controls" option is enabled)

 

And a keyboard hack file:

keyboard_hack_file = hackfile.cfg

 

And a palette file:

palette_file = intycolors.cfg

 

They're included in resource folder.

 

You can change these, or you can override them in the single game section (see Lock'n' chase 8k (0x1603E3F8) section for an example)

If you wan't to disable a custom_command, a hackfile or a palette for a single game, set it with "NONE" in the game section.

Example: 

custom_command_1 = NONE

 

All this stuff will become easier when the "Options window" will be implemented, in order to avoid manual edit in ini file.

 

 Next develops:

 

- "Info Window" will become "Options window", where you'll be able to easily change settings, with an embedded check for compatible options. Actually you have to manually change ini files, be careful :-) If you want to see on-screen controls in action, enable "show_controls" in the ini file (you will see it after first launch). For the on-screen configuration, enable property "show_configuration_controls".

Don't enable mobile mode on destkop...I warned you 🙂

 

- Add double layout of controls, as @mr_me suggested

 

- Manage little fixes and glitches on android. Scrollbar has some problems, audio is choppy, I have to find a way to manage audio samples correctly.

 

- Add external jzIntv management, so you will be able to launch this interface with a newer version of jzIntv, without wait a recompilation (only for desktop).

By using the external jzIntv you will loose some features (like on-screen controls) that I added by changing original jzIntv code.

 

- Create a good readme file, with also development support informations, since I will release sources too.

 

- Bugfix 🙂

 

Feel free to increment database of games and screenshots/boxes 🙂

 

 

Hope you will enjoy it.

jzIntvImgui2.0.zip

Share this post


Link to post
Share on other sites

For interested people.. several improvements this time! 

I rewritten/refactorized a lot of code, now there's no more need to manual edit config file

 

image.thumb.png.7ee919fcf6c4d295a3b9b510243f301e.png

 

Added configuration window to customize interface and to config standard and custom commands

image.thumb.png.bb54e54ab8d17f9ff11d9e96dd84b19d.png

 

You can also override options for single game, to have a complete jzIntv experience

image.thumb.png.eb6258526555b6a514dd43b7eb7f194d.png

 

And a LOT of bug fixed.

 

And I added a surprising loading animation.. 🙂

 

Linux users must also include gtk dependency (apt-get install libgtk-3-dev) in order to have the file/folder chooser dialog working

 

Time to fix android last stuff...

 

 

jzIntvImgui2.1.zip

  • Like 2
  • Thanks 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...