Skip to content

Commit

Permalink
25.2.4
Browse files Browse the repository at this point in the history
[Engine]
* Engine now logs locals in stack traces and added 'lua_debuglocals' to toggle this off.
* Fix incorrect stack trace data when debugging alternate threads.
* Re-order 'lua_*' cvars.
* Fix abnormal program termination on monitor hardware changes.
* Rename cvar 'app_homedir' to 'ast_homedir' and 'app_basedir' to 'ast_basedir' (ast_=asset related cvars).
* Add 'ast_modbundle' to scan for archives from the directory pointed at 'ast_homedir' and make default to enabled in beta/debug and disabled in release..
* Resolve cases were forward-slashes were being stripped from the beginning of a pathname.
* Fix in-archive directory display issue with 'dir' console command.
* Upgrade Windows Clang compiler to 18.1.8.
* OpenALSoft upgraded to 1.24.1 and has had to be hacked a little with wasapi removed to stay compatible with Windows XP. MacOS version stays at 1.23.1 on MacOS due to run-time bugs with device enumeration.
* Minimum MacOS requirement is raised now 10.15. Since I don't do i386 binaries for Mac, it makes sense, besides the new OpenALSoft requires it anyway. Linux should continue to use the built in version.
* Compatible with 7-Zip 24.08, Sqlite 3.47.1, NCursors 6.5 (changes made to pixcon), LibJPEGTurbo 3.0.4, LibPNG 1.6.44 and OpenSSL 3.4.0 (changes made to build utility).
* Add 'Fbo.Resize' to resize the main frame buffer and dispatch a resize event.
* Fix 'File.ReadOneStr' returning the file name instead of the string read.
* Fix window resize issues and errors with terminal console.
* Fix sporadic and erroneous references to 'bot mode', it just means a terminal version of the console using NCurses.
* Break out texture atlas related code into a new module 'atlas.hpp'.
* Remove unneeded 'close()' after 'dup2()' since the latter already does the prior.
* Make setting up Lua environment not create empty API namespaces.
* Remove pointless 'SysBase' namespace.
* Fix some PMU module errors.
* Show 'locked' status in Texture and Font list console output.
* Fix some FStream init issues and optimise construction of FStreams.
* Rename reference to Url class protocol to it's proper name of Scheme.
* Store total API namespace members in API lookup table and don't register the namespace if there is zero.
* Optimise LuaLib macros for better readability.
* Keep /dev/random open instead of opening it every time.
* Update atlas code to eventually support different pixel types.
* Initialise atlas bitmap surfaces faster.
* Fix allocating more memory than needed when enlarging atlas bitmaps.
* Set image, atlas, font and texture class purpose flag at compile time.
* Merge instead of swapping image flags when running 'SwapImage()'.
* Disambiguate between Bitmap fonts and FreeType fonts.
* Gut the whole CFG handling system and use a new JSON handling one instead.
* Rename some functions to disambiguate minor differences in functionality.
* Update app manifest to JSON format.
* Update bitmap fonts manifests to JSON format.
* Add 'Texture.Manifest' API function to read texture data from a Json object.
* Add 'Texture.ImageUT' which is same as 'Texture.Create' but allows custom initialisation of tile set.
* Fix logging of gamepad names.
* Add ability to see gamepad raw data with 'input <n>'.
* Move all joystick related code to a new 'joystick.hpp' module and tidy up names and clean out redundant code.
* Increase supported buttons from GLFW_BUTTON_LAST+1 to 128 and protect from potential overflow.
* Increase supported axes from GLFW_AXIS_LAST+1 to 8 and protect from overflow.
* Show more information with 'input' console command.
* Fix 'Input.GetJoyButton()' returning raw button data and not translated data.
* Fix 'Fbo:GetMatrix()' not returning the proper width and height of the frame buffer object.
* Prevent warning about interlacing with png codec.
* Don't try to apply use of internal built-in post-processing image filters when the actual external image codec filters already converted them internally and log properly when they do.
* Alter compression parameters on archive building with PMU build program.
* Misc. minor optimisations name changes, optimisations, warning, error and comment fixes.

[Diggers]
* Don't set LOBBY music when looking at the book in-game.
* Pulsate selection rectangle in load/save screen.
* Fix script error trying to enter lobby with dead Diggers in-game.
* Don't need to bounds check when drawing context menu.
* Prevent context menu being displayed over the hud.
* Manually draw shadow instead of using tiles.
* Put side texture for intro in title bitmap so intro can load a little faster without having to load the whole level tileset.
* Optimise adding objects to another object's inventory.
* Objects can no longer take other objects that are busy.
* Completely stop objects that are picked up.
* Make sure destroyed devices' context menu is deselected on destruction.
* Optimise digger death logic.
* Fix odd use of semi-colons in data structions.
* Optimise in-game status screens rendering.
* Block the book from opening if a digger is going home or teleporting home.
* Swap out the score for 'death expenses' for 'exploration' which is 1 point for every fully unshrouded part of a zone uncovered which there is a theoretical maximum of a million points up for grabs. Existing save games are unaffected.
* Swap out the score for 'salary paid' for 'homicide duties' because violence is wrong and you lose 1000 points for every digger you kill, and gain 1000 points for every digger of yours you lose in the line of duty.
* Swap out the score for 'items value' for 'enemy kills'. An enemy kill is any moving spirit object that is not a digger.
* Add key binds to select last and next digger.
* Fix jump mechanic to align more closely with the original game, also meaning 3 block wide gaps are more challenging!
* Begin work to start supporting scaled higher resolution textures.
* Store font, texture and image metadata in 'assets.lua' so that they can easily be scaled.
* Implementing new cursor hotspot event system to replace the old non-efficient polling system.
* Adjust EXIT and OK, UP and DOWN cursor draw origins.
* Fix missing 'local's which made some vars global.
* Don't unset NOHOME flags for Diggers during leaving the lobby loading phase.
* Use 'GetActiveObject()' instead of passing the active object around the Lobby, Bank and Shop scenes.
* Try to keep functions and variables in the root namespace for optimum performance and readability.
* Fix bug when changing window size showing the texture out of bounds on the zone select screen.
* Map screen now requires holding mouse button to scroll and the horizontal scrolling zones are now relative to the window edges.
* Post-mortem screen horizontal scrolling zones are now relative to the window edges.
* Add keys to scroll map on zone select screen.
* Always show the zone title first when hovering over different zones on the selection map.
* Expand tip drawing function.
* Add difficultly level text to zone selection screen.
* Revamp game pause screen showing better instructions and easier to quit the game with mouse or controller.
* Implement converting joystick button presses to 'fake' mouse clicks and purge lots of obsolete code.
* Map joystick L1/2 and R1/2 to mouse scroll wheel functions.
* Scroll wheel will now cycle through inventory in-game.
* Improve error handler so the end-user can attempt to continue execution and not lose data. High chance in an engine input event handler, less so in any other event or engine main tick procedure.
* Add mouseover tips for the HUD in-game.
* Optimise handling and drawing of object context menus in-game.
* Add indicator for currently selected level in zone map like in race select screen.
* Sporadic renaming of functions, clean-ups and optimisations.

[Assets]
* Sprite tileset is now 8-bit and removed a few semi-transparent tiles.
* Update readme to fix a link and update used external lib versions.
* Update Diggers readme. Remove progress and only show outstanding issues now. Update minimum MacOS and fix Windows XP version required.
* Rebuild API docs to account for cvar changes.
* Raise minimum MacOS version to 10.15 Catalina on all applicable assets.
* Update API documentation.
* Replace CFG files with JSON formatted files.
* Update API reference documentation.
* Remove font manifests.
* Update API documentation.
* Optimise file textures since almost all of them can be saved as 8-bit paletted with alpha channel. This does not affect how the game looks in any way what so ever.
  • Loading branch information
Mhatxotic committed Feb 5, 2025
1 parent 3ca65cd commit 0254ef8
Show file tree
Hide file tree
Showing 174 changed files with 9,053 additions and 7,345 deletions.
2 changes: 1 addition & 1 deletion contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ Thank you for your interest in contributing to the [Mhatxotic Engine](https://gi
## Contributors…
* Your name here.

## Copyright © 2006-2024 Mhatxotic Design. All Rights Reserved.
## Copyright © 2006-2025 Mhatxotic Design. All Rights Reserved.
25 changes: 0 additions & 25 deletions diggers/app.cfg

This file was deleted.

32 changes: 32 additions & 0 deletions diggers/app.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"Version": 1,
"Constants": {
"app_author": "Mhatxotic Design",
"app_cflags": 6,
"app_copyright": "Copyright © Millennium Interactive, 1994. All Rights Reserved",
"app_description": "A remake of the classic Amiga/DOS game for MacOS, Windows and Linux",
"app_icon": "app/icon.png",
"app_longname": "Diggers",
"app_shortname": "Diggers",
"app_version": "R46",
"app_website": "github.com/Mhatxotic/Engine",
"ast_modbundle": true,
"con_font": "app/console.ttf",
"con_fontflags": 4,
"con_fontheight": 8,
"con_fontpadding": 1,
"con_fontlspacing": 1,
"con_fonttexsize": 256,
"con_fontwidth": 8,
"err_minram": 67108864,
"err_minvram": 8388608,
"lua_gcpause": 0,
"lua_script": "src/main.lua",
"lua_ticktimeout": 10,
"vid_orheight": 240,
"vid_orwidth": 320,
"vid_subpixround": 2,
"win_heightmin": 240,
"win_widthmin": 320
}
}
119 changes: 29 additions & 90 deletions diggers/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,41 +26,26 @@
## [Status](#status)
This Diggers fan remake was started in 2006 as a basic Win32 C application using DirectDraw, DirectSound and DirectMedia then rewritten from scratch in C++ from the ground up with a new fully customisable engine called *Mhatxotic Engine* to utilise open source, cross-platform technologies and conformed to ISO coding standards.

Diggers will always be a work-in-progress since it is difficult and incredibly time consuming to work on a game single-handedly and there are always issues with upstream code due to the balancing of modernisation and compatibility. However, the following information is the current estimated status of the game…

* *Engine:* `100%`
* _Windows:_ `100%`
* All functions accounted for.
* _MacOS:_ `100%`
* All functions accounted for.
* _Linux:_ `100%`
* Sometimes the full-screen/window toggle key might not work properly because of duplicated input keys. Hopefully will be fixed in Ubuntu 24.04 LTS.
* Skipping one rendered frame every few seconds only on Wayland, perhaps when only using a `59.97hz` NTSC display. Probably need to make animations based on time and not frames which could be extremely difficult.
* All other functions accounted for.
* *Graphics*: `100%`
* All other graphics accounted for.
* *Sound*: `100%`
* All music and sound accounted for.
* *Input*: `100%`
* Keyboard, mouse and controller accounted for but controller and keyboard inputs are suboptimal.
* *Levels*: `100%`
* All levels accounted for.
* *Gameplay*: `95%`
* Need proper ending movie with the stranger flying away in his pod.
* All other gameplay accounted for.
* *Localisation*: `25%`
* No French book, intro nor UI localisations yet.
* No German book, intro nor UI localisations yet.
* No Italian book, intro nor UI localisations yet.
* Only British translation so far.
Diggers is a completely playable game from start to finish but will always be a work-in-progress since it is difficult and incredibly time consuming to work on a game single-handedly and there are always issues with upstream code due to the balancing of modernisation and compatibility. However, the following information is the current estimated status of the game…

### MacOS engine outstanding issues…
* If the game quits uncleanly, you have to run the game with `app_clearmutex=1` to clear the mutex that controls only allowing one instance of the game.

### Linux engine outstanding issues…
* Sometimes the full-screen/window toggle key might not work properly because of duplicated input keys. Hopefully will be fixed in Ubuntu 24.04 LTS.
* Skipping one rendered frame every few seconds only on Wayland, perhaps when only using a `59.97hz` NTSC display. Probably need to make animations based on time and not frames which could be extremely difficult.

### Game outstanding issues…
* Need proper ending movie with the stranger flying away in his pod.
* No French, German or Italian book, intro nor UI localisations yet.

## [System Requirements](#system-requirements)
| | Minimum | Recommended | Note |
| --- | --- | --- | --- |
| **Processor** | Dual-Core 2GHz | Multi-Core 2GHz+ | Multithreaded! |
| **System** *(Windows)* | XP SP3 *(X86/X64)* | 7/8.X/1X+ *(X64)* | 32 and 64bit executable. |
| **System** *(Windows)* | XP *(SP3 X86/SP2 X64)* | 7/8.X/1X+ *(X64)* | 32 and 64bit executable. |
| **Memory** *(Windows)* | 16MB *(XP/X86)* | 128MB+ *(Win7/X64)* | Close estimate. |
| **System** *(MacOS)* | 10.7 *(Intel)* / 11 *(Arm)* | 13.0+ *(Arm)* | FAT Universal executable. |
| **System** *(MacOS)* | 10.15 *(Intel)* / 11 *(Arm)* | 11.0+ *(Arm)* | FAT Universal executable. |
| **Memory** *(MacOS)* | 256MB *(Intel)* | 512MB *(Arm)* | Close estimate. |
| **System** *(Linux)* | Ubuntu 23.10 *(X64)* | Ubuntu 23.04+ *(X64)* | See below for packages. |
| **Memory** *(Linux)* | 16MB | 128MB+ | Wild estimate. |
Expand Down Expand Up @@ -161,13 +146,23 @@ Press `F1` at any time in the game to access the setup screen, `F2` to configure
* **RESET**
- Resets all the settings to default and applys the default values.
* **BINDS**
- Show the configure binds screen.
- Show the keyboard binds configuration screen.
* **ABOUT**
- Show the acknowledgements.

## [Controls](#controls)
You can control the game with just a mouse which is novice difficulty like the Amiga computer and DOS version. Add use of the keyboard with the mouse makes the game quite easy to play. Playing with a controller is hard as it will basically emulate the mouse like the Amiga CD32 version of the game did.
You can control the game with just a mouse which is novice difficulty like the Amiga computer and DOS version. Adding use of the keyboard alongside the mouse makes the game quite easy to play. Playing with a controller is hard as it will basically emulate the mouse like the Amiga CD32 version of the game did.

### Basic controls
All scenes out of the game will usually allow `any button` to select any point of interest which will normally be accompanied by a tooltip in the bottom-right hand corner of the screen and the `mouse wheel`, `L1`, `L2`, `R1` or `R2 game controller buttons` to cycle quickly through multiple choices on some screens.

In-game, the `left mouse button` or `first game controller button` will select the point of interest under the cursor and the `right mouse button` or `second game controller button` will bring up a menu for the selected in-game object. Pressing the `START` button will pause and unpause the game.

Pressing the `SELECT BUTTON` to enter the setup screen at any time.

To see a complete keyboard shortcut listing, press the `F2` key at any time.

### Cursors
If you move the cursor and the cursor becomes anything but an arrow graphic, then than particular item on the screen is selectable, e.g.
* 4 small arrows pointing to the centre…
- Select/Perform action/Go here.
Expand All @@ -178,7 +173,7 @@ If you move the cursor and the cursor becomes anything but an arrow graphic, the
* Arrow cursor pointing up/down/left or right…
- Scroll.
* A ticking clock…
- Control is blocked.
- All control is blocked temporarily.

### In-game hud…
The hud is explained as follows from left to right…
Expand All @@ -205,68 +200,14 @@ The hud is explained as follows from left to right…
- Question: Shows statistics and prediction information about the current zone operations.
- Page: Displays the book.

### Aliases…
These aliases are for the explanations below. Note that keyboard defaults can
be seen by pressing the F2 key (by default) and will not be listed here.

| Alias | Meaning | Alias | Meaning |
| --- | --- | --- | --- |
| `MSE` | Refers to mouse | `JOY` | Refers to joystick |
| `LMB` | Left-Mouse Button | `RMB` | Right-Mouse Button |
| `MMB` | Middle-Mouse Button | `MWU` | Mouse Wheel up |
| `MWD` | Mouse Wheel Down | `MBx` | Mouse Button `x` |
| `JBx` | Joystick Button `x` | | |

### Playstation controller aliases…
| `JB0` | *Square* Button | `JB1` | *Cross* Button |
| `JB2` | *Circle* Button | `JB3` | *Triangle* Button |
| `JB4` | *L1* Button | `JB5` | *R1* Button |
| `JB6` | *L2* Button | `JB7` | *R2* Button |
| `JB8` | *Select* Button | `JB9` | *Start* Button |
| `JB10` | *L3* Button | `JB11` | *R3* Button |

### Anywhere in the game (not configurable)…
* `Alt`+`F4` on Windows or `Cmd`+`Q` on a Mac…
* `Alt`+`F4` on Windows and Linux or `Cmd`+`Q` on a Mac…
- Instant quit. Any game progress is lost but engine settings and ALREADY SAVED game progress will be written to disk in a `.udb` file.
* `Alt`+`Enter`
- Switch between borderless or exclusive full-Screen and decorated window mode which will persist through app restarts.
* `World`+`F` on a Mac…
- Switch between native full-screen and decorated window mode which may persist through app restarts using native functionality. Using the MacOS options disables the `Alt`+`Enter` logic and you have to exit native full-screen mode to be able to use that shortcut again.

### Anywhere in the game (but not during a fade transition…
* `JB8`
- Configure the game engine, video/audio settings, etc.
* `JOY` or `MSE` axes…
- Move cursor on screen.
* `JB1` or `LMB`
- Select control under mouse cursor.

### Intro or title credits…
* `LMB` or `JB1`
- Skip cut-scene/intro.

### In-Level…
* `START`
- Pause the game.
* `LMB` or `JB1`
- Action, Select or Cancel menu.
* `RMB` or `JB2`
- Open menu for selected digger.

### In-Level (paused)…
* `JB3`+`JB4` or `MB3`+`MB4`
- Forfeit the game only when paused (Game over).

### Map Post-Mortem
* `JB3`, `JB4`, `MB3` or `MB4`
- Cycle between objects.

### In-shop/Race select screen…
* `MWU`, `MWD`, `JB4` or `JB5`
- Scroll available options.
* `JB1` or `LMB`
- Select item under cursor.

## [Advanced](#advanced)
If for some reason you're an advanced-user or admin and need to fine tune how the game engine works, we have some command-line parameters that might be useful and you can overload as much as the operating system allows…

Expand All @@ -289,8 +230,6 @@ You can change cvars by opening up the console with the `GRAVE` key (key under `
- A. You can start the game with the `log_file=...` (filename) parameter to give a pretty detailed log of what the app is doing so you can send me that along with as much info as possible such as the `.log` `.crt` `.dbg` and `.udb` files that the app generates. Neither of these files will contain any personal information, only technical information to help me squash the problem.
* **Q. I've picked the wrong game-engine settings and the game crashed/won't start.**
- A. Try specifying the parameter `sql_defaults=1` command-line option to reset all the engine settings to default. If this doesn't work you'll have to delete the `.udb` file or set `sql_defaults=2` and start again from scratch thus losing all your Diggers saved game data. All that said though, the game shouldn't really crash though so please send me any logs/crash dumps you may have.
* **Q. Diggers crashed and then when I start Diggers on MacOS, nothing happens.**
- A. If Diggers terminates uncleanly, you need to run it again manually with the `app_clearmutex=1` parameter. Also restarting your Mac helps but this is way too overkill. This problem does not affect Windows or Linux versions.
* **Q. Why does the game run faster than the Amiga version?**
- A. A fixed polling frequency of 60hz is used for the game logic and I originally enjoyed playing this game on a 486 DX2/66 with the original MS-DOS version that ran at refresh frequency of 70hz (in 320x200 mode X) which is quite speedy compared to the slow gameplay of the Amiga version and I always preferred the fast logic of the MS-DOS version.
* **Q. Can I speed run or T.A.S. this game?**
Expand Down Expand Up @@ -351,4 +290,4 @@ See [this document](/contributing.md) for details on contributing to this projec
## [License](#license)
Please read [this document](/license.md) for the license and disclaimer for use of this software.

## Copyright © 2006-2024 Mhatxotic Design. All Rights Reserved.
## Copyright © 2006-2025 Mhatxotic Design. All Rights Reserved.
Loading

0 comments on commit 0254ef8

Please sign in to comment.