Pycraft progress report
Tags: programming, python, opensource, gamedev
Published: 2022-02-20 12:47:05

This is transferred roughly weekly from my Twitter profile (here: https://twitter.com/PycraftDev) to here on Dev! This is for the week 18/01/2022 - 24/01/2022.

* You can find the latest release of Pycraft (v0.9.3) here: https://github.com/PycraftDeveloper/Pycraft

* You can find the latest developer preview of Pycraft (v0.9.4-4) here: https://github.com/PycraftDeveloper/Pycraft/tree/Pycraft-v0.9.4-4

* You can find the latest feature preview for Pycraft (v0.9.5-0) here: https://github.com/PycraftDeveloper/Pycraft/tree/Pycraft-v0.9.5-0

* You can also find the latest documentation for Pycraft https://python-pycraft.readthedocs.io/en/latest/
_Although be aware there is a lot of changes occurring here._

## January the 18th - 2022

I've added in the tweaked start-up animation to Pycraft v0.9.4-3 as well as fixing more bugs and working on the documentation for Pycraft, the settings menu will be a focus of development in Pycraft v0.10 with later updates to Pycraft v0.9 being dedicated solely on the game engine, the plan is to be working on the story line for Pycraft in game when we reach the last dev release of Pycraft v0.9, and as for the latest version of Pycraft v0.9.4, well the release date of early February looks tight, I've had a lot of work lately and had to work late, but I'm using all the time that I can to make as much progress as possible, but early February looks to be achievable at present apologies on the uninteresting progress today, I'm trying to get through the documentation and installer as fast as I can to get into the more interesting aspects of the game.

## January the 19th - 2022

I've taken the start-up animation from Pycraft v0.9.5 which was engineered by a very good friend and developer @demirdogukan99 and added that into Pycraft v0.9.4-3. The transition animation between GUIs will stay in Pycraft v0.9.5 so we still have effects to work with for that update, in addition I've taken down the sound library for Pycraft because there are changes that need to be made here, that have unfortunately been delayed the past few days due to a lack of free time, but that's nearly complete now, and will be showcased tomorrow! In addition to this I've been working on the documentation and have yet to start on the rest of the installer, but have been formulating ideas and prototypes to aid me with that process as well as that there have been tweaks to the game in general and bug fixes. The next iteration of Pycraft v0.9.4 will be released with the completion of the "modify" section of the installer which is next, this will feature all the previous features and the changes and additions of the load screen and start-up animation!

## January the 20th - 2022

Today I've finished implementing the animation from @demirdogukan99 (there wasn't much to implement, it works flawlessly!) but in addition to this I've also brought the sound library back online on the GitHub repository after a lot of work and changes to the names and meta data for the files (they ALL needed re-up loading) as well as some spelling and grammar changes, but that's finished now, and I've also hit a new goal on the documentation, I've passed 60% complete, and that's the target I wanted to hit on the documentation before I continued work on the installer, so they will both be finished at a similar time, but I've made some changes to the installer so now it probably uses the (.json) file and doesn't ping googles server every time the project runs, that ends now, with the project only checking for updates once a day, as well as that I've reduced the time it takes to check if there is no Internet connection from 30 seconds to 3 (increasing load times dramatically) and so I've started work on removing PyOpenGL from the project entirely because it's difficult to install for both the end user and the installer, this will take a little bit of time but only the benchmark GUI needs changing, in addition to this there are some files used regularly in lots of the GUIs that we can load only once at the start, speeding up the process and reducing the number of read calls, (this can be adjusted dynamically by the program when they are loaded), but then when we transfer to and from the map and inventory we shouldn't delete the object for the game because they will need to be reloaded again so that something we can change to reduce the time it takes to transition between the GUIs, also I'll be implementing lazy rendering (we don't need to render objects that aren't on the screen) these changes are small and won't take me long to add!

## January the 21th - 2022

I've made lots of tweaks to some of the features already added to this version of Pycraft, but I've also been working on caching scenes we load in the 3D game engine, decreasing load times I've also spent a lot of time working on changing how the inventory and map GUIs load so they run in threads, that way we can keep the files for the game engine loaded and switch between the GUIs in game very quickly, we have tried to use a different method to avoid threading because its more complicated but that didn't work, so I've spent a large amount of time today attempting to get it to work, and have run across a strange bug, the inventory loads and the project behaves exactly as I would expect, except the GUI is not showing on screen, or appears to be in any way involving the GPU, but I have no errors to go off of and the program exits unexpectedly too (but that's likely because we are closing both at the same time which won't happen in the final implementation), so I'll have to spend a lot of time working on that and fixing it, starting from scratch to find the cause of the bug, other than that it has been a really successful day, and the fonts used in almost every GUI will be loaded only once at the start of the program, this won't take long to add and I'll do that tomorrow, in addition I've removed more calls to PyOpenGL, with the last section to do is the benchmark GUI which probably won't be done in the latest release of Pycraft, v0.9.4-3 simply with the overly complex nature of this.#

## January the 22th - 2022

I've been very busy today on Pycraft, I've removed ALL uses of PyOpenGL and replaced it with Moderngl, which means that Pycraft can be installed on all windows, apple, Linux devices without the need for the C++ build tools and additional files, this makes the project work much better with the installer, which I've also made progress on, the modify menu has now been nearly completed. And I've also completely redesigned the benchmark OpenGL section, so now it uses moderngl instead and it seems almost offensive to do this, but the benchmark can run at in excess of 2, 000 FPS on a raspberry pi, but I've had to cap it at 500 FPS to bring it in line with the other tests, but also the data for that is very sporadic, in testing the range of the values is roughly equal to

``Range = Maximum FPS / 2``

Also I've had to take a very slight average to fix this, but aside from that I've not had a chance to update the folks at dev, but plan to tomorrow, I'm very close to another dev release of Pycraft!

## January the 23th - 2022

Pycraft progress update time, today I've installed windows subsystem for Linux (or WSL) and done extensive tests on the latest version of Pycraft is python version 3.8, 3.9, 3.10 and the latest beta version of 3.11, although I'm waiting for modules that haven't been updated to support python 3.11 yet, although I don't think this will happen before is released! I've also been running bug fixes and lots of testing on both Linux and Windows and done lots more of the documentation, I'm very close to the next dev release of Pycraft (v0.9.4-3), there is a lot of changes in this update. I've also been linking the fancy graphics setting to some of the features of Pycraft and also running tests for joystick control for Pycraft, although that's early days at present! 

## January the 24th - 2022

Pycraft progress update time, today I've been working on adding joystick support into Pycraft, this was originally I thought pretty easy, running through pygame, but then I realised I switched to a different engine (Moderngl) from pygame so some features are different and moderngl does not yet have support for joysticks (and it's unclear if this will be added in the future) so I've done a bit of research to get a module that works, it looked unclear but I found a module called "Inputs" that we can use instead and this works very well, there is a small latency issue with the current implications, but it works very well and I'd be happy to release the project with this feature, although currently I've only implemented the camera movement, tomorrow I'll add in character movement and the rest of the needed buttons, although this control doesn't yet follow through to the 2D game engine, this will be added in a later version, but I don't want to delay the game engine work anymore than I have to! In addition to this, I've been running tests on the new OS I can run tests on, Linux, some features of Pycraft (notably the installer and some display functions like cantering a window) are OS dependant, and only on windows, but now I can test Linux, I can see how the program reacts in that OS and if there are work arounds for that feature! The installer will get an update in a later version to support Linux, I cannot currently test Apple devices so apologies there! Also there has been progress in the installer and documentation today, I'm very pleased to say I'm very close to a new dev release of Pycraft! Also I'm able to test different controller types for the joystick control, I made a device that takes a generic Xbox controller and then connected by USB can convert the controllers outputting signal in real time to a signal the device can understand, so I can connect Xbox controllers to PlayStation, and switch devices, or a PC (not OS dependant), so I can test a variety of situations to make sure the program is adaptive, this is another way to play the game so you can use either keyboard and mouse or controller, or any combination of the three, this can be further configured with the updates inventory system in a later version of Pycraft.


Thanks for reading folks!