Releases: kromenak/gengine
v0.0.9
Happy late New Year! GEngine v0.0.9 is here!
This release enables progression up to Day 3, 2AM (two additional timeblocks). This required implementing a lot of the Sidney computer interface - it's now possible to make IDs and progress far into the map analysis puzzle.
This release also adds Linux support! Only Ubuntu has been tested thus far, and performance is pretty poor. Please let me know how it goes - I hope to continue to improve this in future releases.
See below for a more detailed changelog. And keep in mind: if you'd like to test certain locations or timeblocks, it's possible to use the SetTime or SetLocation commands from the in-game console (~ key) to "warp" to different timeblocks or locations.
Engine
- Added support for Linux.
- Sheep Compilers are now local/temporary objects rather than global/reused objects. One major benefit is that Sheep code can now be compiled on multiple threads at the same time.
- Assets were refactored to separate creation of the instance from loading of the data. This enables some interesting use cases, such as creating/returning an asset before it has been fully loaded on a background thread.
- Moved all OpenGL calls behind a "Graphics API" (GAPI) interface. This is an early step towards enabling support for other rendering backends.
- Shadow textures are implemented. Static shadows below certain objects will now render correctly.
- Billboard textures are implemented. Flat 2D textures that are meant to simulate volumetric objects (such as trees) will now rotate to to face the camera.
- The in-game console now supports copying/pasting the text input area with Ctrl+C and Ctrl+V.
- The game's FPS is now calculated and output to the window title bar in debug mode.
- Scene loading and unloading was moved to a global SceneManager class.
- Added UI anchor/pivot presets, which cuts down on the boilerplate required to configure UIs.
- Video files triggered from Sheepscript are now skippable and do not crash the game.
- A very basic IMGUI hierarchy tool has been added. It's mostly a proof of concept at this point, but the idea would be to enable visualizing the scene hierachy and allow modifying properties at runtime to improve iteration speed and debugging capabilities.
- Converted chunks of code to use the standard C++ atomic types (e.g. uint32_t, uint8_t, etc). This'll be the approach moving forward.
- Enabled a lot more warnings by default, and resolved a fair amount of them too.
- Added clang-tidy support, fixed a number of highlighted issues.
Game
- Day 2, 2PM & 5PM are now completable.
- Implemented the Sidney "Make ID" screen.
- The Sidney "Analyze Image" screen is implemented in a basic state, to enable analyzing parchment files required for game progression.
- The Sidney "Analyze Map" screen is mostly implemented! This allows you to progress pretty far in the Le Serpent Rouge puzzle.
- A custom "inventory closeup" view for the Le Serpent Rouge documents was added. This allows you to click on each stanza separately, and either darkens or highlights stanzas based on your progress.
Bug Fixes
- Updated how topic counts are tracked and incremented. This now more closely matches the original game, and was required to resolve a soft lock near the end of Day 2, 2PM.
- Fixed several bugs that made the Devil's Armchair segment incompletable.
- Fixed the last line of the in-game console sometimes overlapping the horizontal rule.
- Fixed an LZO decompression bug that broke Mac release builds for v0.0.8.
- Added logic to have Gabe/Grace park the motorcycle inside the Chateau de Serras parking lot when the front gate is opened.
- Improved resiliency of INI parsing, which was necessary to avoid a crash when loading Devil's Armchair.
- Improved resiliency of font file parsing, which fixes a crash when loading certain font files containing typos.
- Fixed a bug where entering the map screen after you had previously followed someone would soft lock the game.
Known Issues
- The game may crash if you play it from the beginning all the way to Day 2, 12PM. I suspect this is a memory issue, but need to investigate more. It also highlights how it'd sure be nice to have a way to save your game!
- Characters sometimes walk too close to walls or obstacles, clipping into them. And in general walk paths chosen are sometimes questionable.
- Positions/headings of characters are sometimes incorrect during cutscenes, especially if Action Skip is used.
- Raycasts are sometimes inaccurate, with the game thinking you clicked on something you didn't.
- Reading LSR in inventory closeup doesn't play the correct number of lines. LSR passages also don't show all the correct verb icons yet.
- Sidney's Analyze UI is still quite rough and WIP - you'll see a lot of issues, such as unformatted text or message popups that are too big.
- Completing steps of Le Serpent Rouge on Sidney does not yet trigger score increases in most cases.
v0.0.8
GEngine v0.0.8 is here!
This release enables progression up to Day 2, 2PM. Work has also gone into improving stability, adding missing functionality, and fixing bugs.
Keep in mind: if you'd like to test certain locations or timeblocks, it's possible to use the SetTime or SetLocation commands from the in-game console (~ key) to "warp" to different timeblocks or locations.
Engine
- Support for the GK3 demo has been added! GEngine can now detect when the demo data file is present and run the demo instead of the full game - see the updated README for details.
- Asset manager now tracks scopes of assets (global vs. per-scene) and unloads assets when they are no longer needed. This greatly reduces memory pressure as you play the game.
- Inventory manager now lazy-loads inventory item images, which speeds up initial launch time by several seconds.
- Added support for "Scene Functions", which are scene-specific custom code. This is used by the Laser puzzle in Montreaux's library.
- Adjusted how quickly 3D sound volumes decrease when moving away from the audio source.
- Added missing Camera Sheep API functions: CameraBoundaryBlockModel, CameraBoundaryUnblockModel, ClearForcedCameraCuts, GetCameraClipFront, SetCameraClipFront, GetCameraClipBack, SetCameraClipBack.
- Mesh color data is now parsed and used for rendering models. In particular, this fixes some issues with Lady Howard's scarf/hat/shoes not displaying correctly.
- Added new visualizations in construction mode: regions, triggers, and walker paths.
- Updated FMOD. The primary benefit is support for audio output source changing on-the-fly. For example, adding/removing headphones or changing audio output from the taskbar will now work correctly.
- Added looping audio support at the FMOD level. Previously, anyone wanting looping audio would have to play the sound again when the previous instance finished.
- Music audio data is now streamed from the hard drive, which improves performance when loading music files.
Game
- Day 2, 12PM timeblock can now be completed.
- GK3 demo is now supported. If "Gk3demo.brn" is present in the data directory, the game will launch in demo mode.
- The "Cinematic Cameras" preference can now be toggled from the option bar. This allows you to play the game with most cinematic cameras disabled. This option is saved between sessions.
- Character animation and walk logic has been overhauled, resulting in more accurate and less janky animation behavior overall.
- Added "Finished Screen" along with FinishedScreen Sheep API function. This can currently be seen at the end of the demo.
- Implemented missing "Mood" and "Expression" animation nodes. Animations that change character facial expressions are now functional.
- Implemented missing "near model" approach, which is used to move characters near models. Fixes some bugs, such as Gabe/Grace not walking to R25 door before entering.
- Camera field-of-view settings are now applied when changing camera angles. This improves the focus of the camera during certain cutscenes, and more closely matches the original game's behavior.
- Implemented "glide" style cameras during cutscenes.
- Implemented soundtrack "follow" mode, which enables a 3D sound to follow a 3D model as it moves through the scene. Used by Buthane's van SFX, for example.
- Game timers now pause when the scene is paused (when in inventory, for example).
Bug Fixes
- Audited dynamic memory allocations; discovered and fixed several memory leaks.
- Fixed an oversight in audio code causing music to play too loudly.
- Fixed status overlay not appearing if you earned points, but skipped the action using the ESC key.
- Fixed incorrect footstep/footscuff sounds in some cases. Also fixed footsteps playing too loudly based on distance from the camera.
- Fixed characters sinking into the floor in some locations (such as Chateau de Blanchfort) due to an oversight when calculating floor heights.
- Fixed issues where start or end of timeblock movies would not display correctly in some cases, such as when doing action skips.
- Fixed captions sometimes not wrapping text correctly.
- Improved performance of scene raycasts by changing how BSP is checked.
- Fixed sounds with lower volumes playing their first frames at full volumes.
- Improved resiliency of INI and animation data parsing. Fixes several crashes/bugs due to data file typos, missing fields, or inconsistent formatting.
- Fixed "walk to see" approach using the wrong position if the 3D model is offset from the origin of the local coordinate system.
- Fixed a bug where Jean's "walk around the lobby" logic would restart prematurely.
- Fixed an infrequent crash when loading shaders during game launch.
- Console commands now execute at the "global" Sheep layer, which fixes crashes if the console command causes a layer to be popped from the layer stack.
- Fixed actions being logged to the console twice in some cases.
Known Issues
- Characters sometimes walk too close to walls or obstacles, clipping into them. And in general walk paths chosen are sometimes questionable.
- Positions/headings of characters are sometimes incorrect during cutscenes.
- Raycasts are occasionally inaccurate, with the game thinking you clicked on something you didn't. Raycasting code for BSP needs to be updated to fix this.
- Day 2, 2PM can't be completed yet due to a crash when entering The Devil's Armchair.
- While testing this build for upload, I encountered some performance issues that seemed related to the optimization level of the build. As a result, the Windows build has optimizations turned off temporarily. I will investigate this more closely for the next release.
v0.0.7
GEngine v0.0.7 is here!
This release primarily focuses on enabling further advancement into the game. Additionally, various support systems have been worked on to various levels of completeness.
It is now possible to complete up to Day 2, 10AM timeblock. However, a new problem has arisen: you can now play the game long enough to run out of memory! Up to this point, I haven't focused at all on unloading assets once they're no longer used; that'll have to be a focus of an upcoming release.
Keep in mind: if you'd like to test certain locations or timeblocks, it's possible to use the SetTime or SetLocation commands in the in-game console to "warp" to different timeblocks or locations.
Engine
- Added IMGUI integration to help with implementing developer tools/UI.
- Press Tab to show "Construct" mode. Currently allows visualizing camera bounds, walker boundaries, and scene AABBs.
- SheepScript decompiler now properly writes out labels and gotos. The decompiler should now be fully functional.
- Added "debug flag" system from the original game. This is used to enable/disable certain debug and development tools.
- Added support for writing out RGBA Textures to BMP image files (only RGB was supported previously).
- Added ability to write out Audio data as WAV files.
- UI widgets now add themselves to canvases in their transform hierarchies (reduces boilerplate code when building UIs).
- Window management code has been separated from the Renderer (early step towards supporting other rendering APIs).
Game
- Day 1, 6PM can now be completed.
- Day 2, 7AM can now be completed.
- Day 2, 10AM can now be completed.
- Inspect/Uninspect buttons on the Action Bar are now functional.
- "Camera Glide" is implemented. This is used when you Inspect/Uninspect, as well as via the Sheep API for various cutscenes. This can be enabled/disabled via the options menu, and the preference is saved between runs of the game.
- Basic Sidney "Search" screen is implemented. Terms can be searched (which is required to complete Day 2, 7AM), but articles do not yet render.
- Basic Sidney "Email" screen exists.
- Sidney "Add Data" option is functional.
- Basic Sidney "Files" popup is implemented.
- Implemented different walk sound effects based on shoe type and walk surface.
- Added "animation parenting," which is occasionally used to have characters hold objects during animations.
- Implemented "SetWalkAnims" Sheep API function, which are used during maid sequence.
- Implemented GameTimer Sheep API functions (allow setting a timer and executing an Action when the timer expires).
- Added support for allowing/disallowing cancelling and dismissing the Action Bar (used during handshake segment).
- Added support for "ClearRegion" Sheep API function, which is used to get characters to move out of the paths of certain objects.
- Added support for blocking certain sections of the walk boundaries. Stops characters from walking through dynamic objects, for example.
- Added custom logic to disallow traveling to Larry's Place during Day 1, 6PM (to match original game).
Bug Fixes
- Fixed bug that stopped Day 1, 6PM from being completable. A cutscene would previously not complete. This was fixed by updating how SheepScript callbacks work when scene changes occur.
- Fixed captions sometimes using incorrect colors for the person who is speaking.
- Fixed captions sometimes disappearing too quickly.
- Fixed crash if Debug::DrawScreenRect is called before a Camera is assigned to the Renderer.
- Fixed issue with multi-line Fonts errantly detecting glyphs at ends of lines that didn't exist.
- Fixed issue with some Fonts not displaying correctly because alpha channels weren't being properly applied.
- Fixed bug that stopped textures from loading/displaying correctly if they had dots in their names.
- Fixed certain inventory items not having valid verbs (which made it impossible to "use" them).
- Fixed incorrect raycasting logic causing some scene objects to be unclickable.
- Fixed bug where objects meant to be stationary would move slightly during animations due to incorrect interpolation logic.
- Fixed bug where inactive/hidden objects would have their animations desynchronized when they were activated/unhidden.
- Fixed bug where 3D SFX would sometimes play at the wrong position, which made it seem like they were not playing at all.
- Fixed logic errantly detecting a location change due to case difference (e.g. locations "R25" and "r25" were not considered equal).
- Fixed bug where "init anims" would errantly change the state of unrelated models, rather than just initializing the specific model.
- Fixed bug where spamming walk actions would cause the walk animation to glitch out a bit or double up footstep sounds.
- Fixed crash when loading Chateau de Serras during Day 2, 12PM due to a SIF typo that wasn't accounted for by the parsing code.
Known Issues
- Various animations still act glitchy or weird. Walk animations are sometimes quite erratic. Not ideal, but makes for some funny situations.
- Captions sometimes do no wrap correctly, resulting in them going off-screen.
- It finally happened: you can play the game long enough for it to run out of memory! This happens because assets are loaded on demand, but never currently removed from memory. The original game appears to use some sort of reference counting scheme, which is probably the route I'll go too.
v0.0.6
GEngine v0.0.6 has been released!
This release is primarily focused on fixing bugs and implementing functionality that is required to proceed further into the game. It is now possible to complete the first four timeblocks.
Engine
- Split Sheep API into separate .h/.cpp files based on category. This is primarily an internal organization change (it's nice to not edit one giant thousand-line file), but it does also prove out how the base SheepScript API system could be extended for other games or purposes by adding more APIs outside the core library.
- Scene loading is now more resilient to missing assets. It is now possible to load scenes that have few or no assets available (this would crash previously).
- Scene loading now provides a callback for when the scene is loaded.
- UI buttons can now play sound effects when hovered.
- Various systems were updated to use case-insensitive maps/sets where possible. This is less error-prone to capitalization discrepancies, and also a bit more efficient.
- Initial game load time was decreased by reducing amount of file reading/seeking being done. Some data (like compressed asset size) is now only read when the asset itself is needed at runtime.
- Executing SheepScripts can now be associated with tags that control the lifetime of the script's execution. A concrete use of this is to stop executing SheepScripts when changing a scene.
- Blocked/waiting SheepScripts now use a "NotifyLink" system, which resolves a problem: if a blocked SheepScript is stopped prematurely, how do you stop the wait callback from executing? This seems to be how this problem was solved in the original game.
- Fixed some syntax issues with decompiled SheepScript.
- Added single pixel buffer between lines of the in-game console. Makes it easier to read.
- AABBs can now be visualized at runtime by pressing F5.
Game
- The Driving Screen is now implemented! It is possible to use this screen to travel to new locations on the motorcycle. You can also follow NPCs in some cases.
- The Caption/Subtitle overlay is now implemented. This can be toggled on in the options, and the preference will be saved between runs of the game.
- "Action Skip" (pressing ESC to skip a cutscene or dialogue) is now a lot faster. Also fixed some edge cases that could cause Action Skip to soft crash the game.
- Overhauled how Actions from NVC files are evaluated for display at runtime. This causes the action/topic bars to behave much more closely to how they did in the original game. This fixes a bunch of interaction issues.
- Calculations for character height/feet positioning has been updated. The new logic seems to work a lot better, and fixes a bunch of issues where characters would sink into the ground in strange ways.
- "Walk To See" behavior is less buggy. Characters will actually stop walking when an object comes into clear view of their line-of-sight, and headings when approaching such objects look more natural.
- Changed how Character Configs & Face Configs are loaded. This fixes some issues with faces not animating in some cases (Lady Howard, for example).
- If an inventory item is added while the inventory is visible, the screen now refreshes to show the new item right away.
- The last added inventory item now automatically becomes the "active" inventory item for the character.
- Draw orders of various UIs have been modified to more closely match the original game.
- Location of the player's motorcycle is now tracked/updated internally. Fixes issues where the motorcycle was missing in the scene in some cases.
- Players can now proceed up to (Day 1, 6PM) before encountering an unavoidable showstopper.
Bug Fixes
- Fixed some animation bugs. For example, Gabriel can now actually walk up the steps to the museum in Rennes-le-Chateau.
- Fixed a bug where "move" animations were not properly flagged as such, resulting in some weird behavior.
- Fixed a bug where generating a Heading from a Quaternion would not always give the correct result.
- Some GK3 INI files actually have typos in them. Associated parsing code has been tweaked to still work despite this problem.
- Fixed a bug where a disabled button would still cause the cursor highlight to change.
- Fixed a bug where very large meshes with more than 64 submeshes would cause the game to crash. The code making this assumption (related to submesh visibility) will now assume any mesh beyond this limit is always visible.
- Fixed a bug where the game would crash if the console's scrollback buffer got larger than 1000 lines.
- Fixed a bug where inventory items with no associated Actions (such as the Spray Bottle) would cause an index out-of-bounds crash.
- Fixed a bug where scene interaction raycasts would sometimes report the wrong object.
- Fixed a bug where absolute positions in init-anims were not being applied.
Known Issues
- Decompiled SheepScript does not properly insert labels and gotos yet. I think this is the last thing to do before SheepScripts can be fully decompiled.
- Animations continue to be problematic. A lot of them work correctly, but you'll still see plenty of scenarios where animations are glitchy or weird.
v0.0.5
GEngine v0.0.5 is here! It's been a few months; here's what's been happening:
Engine
- Added Renderer support for enumerating video drivers, displays, and display modes reported by SDL. This info is used to determine supported resolutions in windowed and fullscreen modes.
- Actors and Components are no longer ticked/updated if they are not active/enabled.
- Added "Centered" vertical alignment, but it only works for single lines of text at the moment.
- Added "Dropdown" UI widget.
- Refactored some collision code and implemented continuous collision check logic for Sphere/Triangle collisions.
Game
- The game's resolution can now be modified using the in-game settings UI.
- Preferences for monitor, window position, game resolution, and fullscreen vs windowed are all saved between runs of the game.
- Game camera collision detection is now implemented, so you don't go outside the level bounds anymore. There are still improvements to be made here, but it seems to mostly work. Note that you can disable camera collision using the
DisableCameraBoundaries()
console command. - Spacebar will now reset the game camera's pitch and height, as it does in the original game.
- It is possible to complete the first two timeblocks in the game. However, you can't progress past the cat-hair/mustache puzzle in the third timeblock.
Bug Fixes
- Fixed bug where releasing mouse buttons after using camera mouse controls could errantly cause the option bar to appear.
- Noun/verb counts are now properly tracked for Gabriel vs. Grace.
- Fixed some bugs in SheepScript decompiling. Extracting SheepScript assets will now decompile them beforehand, allowing you to retrieve human-readable versions of all the game's SheepScript logic.
- Fixed non-player characters performing "warp" behavior. This should only occur with the player character.
- Action bar is now sorted alphabetically (as it is in the original game), and instances of duplicate Inspect/Uninspect buttons have been resolved.
- Game camera movement speed when using mouse controls now more closely matches the original game.
- Fixed issue where inventory-inspect UI would close itself automatically when used for non-inventory purposes (like the panels in the Museum).
Known Issues
- Animations are still jank. Animating objects sometimes warp to wrong positions, get stuck in floor, etc. This is the most obvious problem.
- Character walking works, but as with the last version, it's still janky as well.
v0.0.4
GEngine v0.0.4 is available!
This release is a bit smaller than usual and mostly focuses on bug fixes and minor improvements.
Engine
- Reverted a font glyph change that annoyingly caused underscores and some other glyphs to not display correctly. This change was originally made so that the Score/Day/Time on the option bar would display correctly. This has been modified to instead use a "mask" on the labels, which works a lot better.
Game
- Implemented soundtrack start/stop animation nodes. This allows music changes during cutscenes, such as when Gabe looks at the "San Greal" book at the bookstore).
- Added support for multiple camera collision models in a scene. This fixes, for example, no collision being present on most geometry outside the hotel.
- Using ESC to skip a cutscene/action will now stop any SFX/VO that was started as part of that cutscene/action.
Bug Fixes
- Fixed pressing ESC to skip an action freezing the game. This seems to be an infinite loop issue in the animation system when deltaTime is too large. I lowered the skip deltaTime to fix this, but it also means that skipping now takes too long; needs more work!
- Fixed a parsing error that autoscript if-statements to not be executed correctly.
- Fixed "walk to" autoscript nodes errantly canceling the currently playing autoscript (since walking typically stops the current autoscript/fidget). This fixes, most critically, the chicken's idle behavior outside the hotel.
- Model position is now used when determining ambient light color for a model. This is required because actor positions often do not equal model positions in this game!
- Fixed face rendering issue. Was mostly visible on Buthane's face outside the hotel.
- Fixed 3D audio not positioned correctly right after loading a scene, causing it to play really loud right for a single frame.
- Fixed some dialogue topics appearing more frequently than expected.
Known Issues
- Animations continue to be jank. Characters will sometimes warp to unsual positions/rotations or disappear entirely for a bit. It's definitely on the list to fix!
- Walking is not too bad, but characters will sometimes walk to the wrong spot or act oddly. This is closely related to animation jank as well.
- Lighting is currently much darker than in the original game. This is because I still need to implement some additional lighting logic.
- If you complete all task for the first timeblock, the game does not move to the next timeblock; this is something to be implemented soon.
v0.0.3
GEngine v0.0.3 is now available!
This release focuses primarily on implementing a few menu screens, a few graphics options, and trying to get the first timeblock playable. Here are noteworthy changes:
Engine
- Gameplay preferences are now saved to the disk between plays. As a proof of concept, some options (like volume settings) are now written to a
Prefs.ini
file.- Located at
Users\<NAME>\AppData\Roaming\Sierra On-Line\Gabriel Knight 3
on Windows - Located at
/Users/<NAME>/Library/Application Support/Sierra On-Line/Gabriel Knight 3
on Mac
- Located at
- Added slider UI component, implemented volume sliders on the option bar. You can also now drag around the option bar itself.
- Various UIs now draw in the correct order (e.g. in-game console appears above all other UIs).
- Implemented mipmap and trilinear filtering support.
- Added some WIP custom containers. In particular, I wanted a Queue container that used a contiguous circular array rather than a linked list. It works (currently used by the pathfinding system), but I think there are still improvements to be made.
Game
- Sierra movie now plays when starting the game. The game intro movie will play the first time the game is launched.
- Added title screen.
- Added timeblock screen, which appears when you press the "Play" button on the title screen.
- Added camera collision, so now you can't just move through walls. This still needs a lot of work - you can currently still move through walls if you are moving too quickly, and collision doesn't work in some scenes yet.
- Greatly improved pathfinding performance and behavior. This was a somewhat huge problem in the past release, as entering a large scene (like right outside the hotel) would cause the game to freeze while paths were calculated.
- The museum gallery scene is now accessible after fixing a circular dependency bug when loading assets.
- Several animation improvements. Characters should less frequently warp to different spots or suddenly start playing different animations or appear in the wrong locations. There are definitely still bugs here though - just check out Jean in the Lobby scene for some examples :P.
- Soundtrack system now uses correct stop and fade-out behavior when switching scenes.
- Added support for scene triggers. When Gabe enters a trigger area, it may cause some action to occur. This is used, for example, when you approach the front desk in the Lobby at the start of the game.
- Implemented "TalkTo" keyword in action files, which causes the conversation/topic bar to appear in some instances where it was missing previously.
- Active inventory item now appears in the option bar.
- Implemented the scoring system. Scoring keywords and values are stored in
Assets/Scores.txt
. The in-game status overlay and option bar both show the correct score as you play.
Bug Fixes
- Fixed UI buttons being clickable despite interact flag being false.
- Fixed some scenes (such as outside the museum) displaying as night despite the time being 10am.
- Fixed a bug where Directory::Exists would return false on Windows, even if the directory DID exist.
- Inventory screen layout now works with any screen resolution.
Known Issues
- Animations can still be quite janky. You may sometimes see animations starting in the wrong spots, characters warping around or rotating suddenly, or wrong animations suddenly starting to play. This is getting better, but it's a very error-prone system.
- 3D audio may play too loudly for the first few frames you are in a scene.
- Lighting is currently much darker than in the original game. This is because I still need to implement some additional lighting logic.
v0.0.2
Happy holidays!
It's been about a year since v0.0.1, so I thought I'd make a new release.
GEngine v0.0.2 is still a ways away from being feature complete and ready to play, but a lot has gone in over the past year. Here are some highlights:
- The entire audio system for playing 2D and 3D sounds of different types (Ambient, Music, SFX, VO) has been implemented.
- Video playback system (including Sheep API) are implemented.
- Inventory screen is implemented.
- Options bar (which appears when you right-click during gameplay) is partially implemented.
- Character animation and walking systems are implemented. This stuff was extremely complicated and error-prone! There are still plenty of bugs, I am sure.
- Dialogue systems mostly work, though again, there are still plenty of bugs.
- GAS and Fidget systems (used for character behaviors/animations when idle, talking, and listening) is mostly implemented.
- Alt+Enter toggles fullscreen mode.
- Basic versions of "skip walk" and "skip action" (when pressing ESC) are implemented.
- Ambient and diffuse character lighting are implemented.
- BSP light maps based on time of day are implemented.
- In-game console (~ key) is more fully-featured and closely matches the original game.
- Cursor animations, context changes, and loading behavior are implemented.
- In a move that is sure to divide audiences, some multi-threaded is introduced to keep the game responsive during load times.
- Added GK3.ini, which can be used to specify engine launch settings. Right now, it only supports specifying a custom path to load assets from.