Code: Select all
[img]http://orig06.deviantart.net/e05b/f/2016/288/1/7/zlogo_by_saican-dal3fzq.png[/img]
----------------------------------------------------------------------------------------------------------------------- v 1.0
Relive by Firefreezer - the Z-Windows Demo theme
Spoiler: Old Videos-----------------------------------------------------------------------------------------------------------------------
- A Generic GUI API for (G)ZDoom!
- (Z)eta-Windows is a generic GUI API aimed at enabling unique implementations that are flexible and dynamic, specific to the needs of the user, fast, powerful, and simple to use. The entire Z-Windows API is written in C and compiled with GDCC in order to be interpreted by the ACS VM. Furthermore, the system requires a custom build of either engine flavor****.
While Z-Windows is capable of being a tool for the general (G)ZDoom community, independent developers looking for extensive interface design flexibility in custom environments without exhaustive production time spent in-code will benefit the most from the Z-Windows API.
Z-Windows gets its name not from Microsoft Windows, but from the X Window System (also ZDoom), which provides the basic GUI functionality for many UNIX-like operating systems. Just like X, Z-Windows provides just the basic GUI framework without mandating what the actual interface is supposed to look like. The term windows is both a GUI organizational concept and a programming concept the interpretations of which can vary dramatically. Z-Windows does deviate from X in that the functionality of Z-Windows is geared toward complete GUI management in a video game architecture and as such can mimic the appearance of an actual operating system but does not offer the wider functionality of one. Also, while GDCC is a full C compiler, functionality like reading and writing files is impossible as the ACS VM does not have that kind of access to the computer's operating system. - Completed Z-Windows GUI Features:
- Key-bound, mouse driven input
- Variable cursor speed and click sensitivity
- Multiple predefined fonts and support for custom fonts
- Multiple font sizes, colors and support for custom colors
- Multilingual build options*****
- Predefined, optional, "core" buttons
- Window movement and resizing
- Window priority-based layering
- Game-level signaling objects that grant access to specific windows
- Finite "popup" windows
- Better text wrapping*
- Support for various HUDMessage types, including translucency
- Check, radio, and custom single-interaction buttons**
- Work In Progress Z-Windows GUI Features:
- Window object linking for tab groups, scrollbars, radio/check buttons, and the text wrapping system*
- Planned Z-Windows GUI Features:
- Scrollbars
- Key-bound interface driving
- Inventory management module
- Application dock module, similar to Macintosh***
- Z-Windows API Features:
- API structure and syntax that's similar to the Win32 API
- OO C-Class implementation using a basic tabling system for direct memory access to objects
- Internal HUDMessage ID management for all objects
- Progress to v1.0 - 72%
- ▓▓▓▓▓▓▓░░░
- A Few Notes on Z-Windows
- * Better Text Wrapping: Z-Windows-handled text wrapping is almost complete! Text can be either hyphenated or not, wrapping can static or dynamic, and all elements can be connected to a text element who's wrapping changes will effect the vertical position of the connected element. The code is much closer to complete than before, but there's still some work to do.
- Update! Text wrapping is about 98% complete, pending some future tweaking. In either case, it's being moved to the Completed Z-Windows GUI Features category. The video below demonstrates the ability of Z-Windows text wrapping.
- Object linking to text objects is complete, other objects are on the priority list now.
- Note: The window that appears to be missing it's edges is actually not! This is a feature where the window is drawn using a single background image; meant for simpler or even static designs. (I call it Win8 mode)
- ** Radio, Check, and Custom Single-Interaction Buttons: Z-Windows differentiates between two different events, a click and a drag, the latter of which is more complicated and is the reason why these kinds of buttons were given a low priority. Interaction with radio, check, and any other button is now a matter of calling a boolean check function for that particular button and executing whatever you want if it passes. Right now this is all kind of messy, so future updates will probably include still easier manipulation of button objects.
- *** Application Dock Similar to Macintosh: A single Z-Windows implementation is designed to mimic several applications running at once, in this case it could be the player's inventory, their health bar, their ammo bar, and so on. So instead of having a "desktop" my goal for mimicking the opening, closing, and minimizing of applications is to create a dock system. This is likely the last of the features to go in because it will rely on the majority of the system functionality to work. I tend to think of this module as a further abstraction of the windowing concept.
- **** Custom Engine Build Requirement: Probably the most important update to date, after several very important optimizations to the internal Z-Windows system, it appears that the requirement of tweaking the ACS VM instruction count is likely no longer a requirement. To clarify, there has been no stress testing yet to determine if this is fact or blubbering, hopeful, fiction. However, after a few more things are done and other stuff cleaned up, stress testing will begin.
- * Better Text Wrapping: Z-Windows-handled text wrapping is almost complete! Text can be either hyphenated or not, wrapping can static or dynamic, and all elements can be connected to a text element who's wrapping changes will effect the vertical position of the connected element. The code is much closer to complete than before, but there's still some work to do.
- ***** Multilingual Support - Your Help is Greatly Appreciated!
- Z-Windows is not Unicode therefore multilingual support comes in the form of ASCII character sheets, which can be translated into the actual fonts used by the system. There are a few strings that are explicitly defined and Z-Windows offers translations of those strings, currently, to German, French, and Spanish via user controlled compiler directives in the headers of the source code. I will gladly add translations for more language support, but I request the community provide them so I'm not spending all of my time in Google Translate; on a side note, native speakers will hopefully give proper translations where Google may not. However, supporting languages like Chinese may be difficult at this time because of the word structure difference. An extreme long-shot goal is possibly to offer better language support via a lump like LANGUAGE. In it's current form, language selection is far too hardcoded.
Explicitly Defined Strings that Need Translated:- Close
- Minimize
- Move
- Resize
- Instance
- Priority
- This will be updated as more translations become available. Don't see your language? Post translations of the strings above, please! Corrections are also appreciated!- English
- French
- German
- Spanish
Spoiler: Translation Contributors-----------------------------------------------------------------------------------------------------------------------
- Licensing for Z-Windows
- Z-Windows is licensed under GPLv3 to allow for both freeware and commercial usage of Z-Windows.
-----------------------------------------------------------------------------------------------------------------------
- Z-Windows Updates are Mandatory - (DD/MM/YYYY)
- 14-10-2016 - initial post
- 22-10-2016 - Added key-bound driving to Planned Features, object signaling to In Progress Features, and removed multi-player support. Progress meter has been updated to 47% (8 of 17 features)
- 22-10-2016 - Object signaling has been implemented. Progress meter has been updated to 52.9%
- 11-11-2016 - OP update to include silent changelog
- 08-12-2016 - OP update to Custom Engine Build Requirement, this is looking more and more like it's going away!!!!
- 16-01-2017 - OP update to Better Text Wrapping feature information, getting close to done with it!
- 16-01-2017 - OP update to overall post, Better Text Wrapping is complete
- 23-02-2017 - OP update to overall post, buttons are done, HUDMessage handling is done, new demo movie, and progress is now 72%!
- 04-03-2017 - OP update to download list, Z-Windows Alpha is now available!
Spoiler: Silent Changelog-----------------------------------------------------------------------------------------------------------------------
- Do Not Make Illegal Copies of Z-Windows Files
- The Final Word on Z-Windows
- For me, Z-Windows began as an experiment that has grown into a means to an end. Ultimately Z-Windows is for Centre-01 and meant to be a replacement for its inferior predecessor, the R.A.I.D. That interface is a procedural mess with no interaction, or capability of, between its components and could never be multi-player compatible because of the excessive globalization of variables. Z-Windows is meant to address all of that and still support and expand the advanced interface capabilities of the R.A.I.D.
Finally, I'm also aware that it's been considered bad practice to spam HUDMessages to build GUIs for some time now. I'm not sure of the origin of that determination, but I'm also aware of the recent discovery by Nash regarding HUDMessages and VR headsets; the short of which is Z-Windows and Oculus are not going to play together nicely for the foreseeable future, if ever. This can't be helped and is an unfortunate limitation, but the project will go on.
- For me, Z-Windows began as an experiment that has grown into a means to an end. Ultimately Z-Windows is for Centre-01 and meant to be a replacement for its inferior predecessor, the R.A.I.D. That interface is a procedural mess with no interaction, or capability of, between its components and could never be multi-player compatible because of the excessive globalization of variables. Z-Windows is meant to address all of that and still support and expand the advanced interface capabilities of the R.A.I.D.
- Current Project Status 09.06.2017
- Work on Z-Windows has ceased as of the date of this update, I am no longer actively developing this or any projects for (G)Zdoom. The Z-Windows source will remain available to anyone interested, however I suggest you use ZScript for your gui needs now. You are welcome to do as you will with the Z-Windows alpha code, use it, make it a base for something else. I do request a credit if you use my code.
- Project Status Update 16.08.2017
- While I am not currently in active development of Z-Windows, the real-life situation that caused me to abandon the project has been dealt with and I have been playing around with (G)Zdoom development again, including poking about the Z-Windows source. To reiterate, this project is no longer to be considered abandoned and as I have time I will be dedicating it to getting a version 1.0 released.