This will be a short post. I am planning to greatly reduce the frequency of my blog posts on account of the content. This means, unless I think the post has some merit or use to other people, I will not be posting here. It will also mean the frequency of status updates or even any .plan files will be very low.
On this note of status. I have been experimenting with 3D in Godot and come to understand it is capable, though I can't judge just how capable yet, as I have done no benchmarking. I have studied a bit about how to use Blender, and how to use Trenchbroom, and how to use Qodot. As a result, I may work on producing some form of quake-like game or experiment.
I have also begun my studies for the third and probably final year at University to get a degree, which means the dedicated time for my projects will likely go down.
I am probably going to write a bit about my workflow for Godot 3D games since it seems unusual. Certainly non-standard. As for the website, the archival project is still in the works. I have created the main page for it, but I have yet to gather the individual content for the archive.
Hi. I'm pausing development on my game Quiver for some time. There's a possibility I will return to it to continue working on it. The reasoning behind why I am pausing my work on this is because I want to study, learn and work about some other "stuff". I will list what this "stuff" is now.
Using C with the SDL2 Library to make basic 2D game engines.
Using C with OpenGL3 to make basic 3D game engines.
Using Qodot, Trenchbroom and Godot to make 3D games.
Ctag, an ncurses music tagger
University studies beginning soon
This is a fair quantity and variety of "stuff". A person may ask why I am taking an interest to C when it comes to games development. The reasoning is that it is exceptionally portable, and avoids the pitfalls I feel with Java's Object Orientated Programming. I may adapt to use C++ instead of C at some point but we will see if I do. It is unlikely the first 2 points will manifest into anything I can show in a short period of time. This will also give me a significant appreciation for game engine development, as opposed to game development. The 3rd I may or may not have something to show on that as well, it ultimately depends on how reasonable Godot is as a 3D game engine.
It's unlikely I'll say when I return to work on Quiver, but if I choose not to, I will write a post-mortem and likely release the source code and assets for it on GitHub.
Go here to see what it's all about. I will recommend people participate in this, not to spam open source repositories, but because there's no system in place for checking if you just make a new github repository and make 4 valid but lame pull requests. It's literally a free shirt.
It's interesting that free shirts is an incentive that people will use to spam public FOSS repositories. I have my suspicions on what it should be considered. I would consider it(alongside Google Summer of Code) a mildly effective distributed denial of service attack. Distributed in many people making low quality pull requests. Denial of service by preventing quality pull requests being seen, discussed and merged. It may also deny service to the use of issues. For Free Open Source Software hosted over Github, this is not good. For hacker culture it sets a concerningly low bar, especially as hacker culture is commonly intrinsically motivated as opposed to extrinsically motivated by rewards. I will not be surprised if some genuine pull request gets marked as spam and invalid simply due to this spike.
Talking more on why this is interesting. By a search, we can see in a single day, over a thousand related issues have been made. I am expecting that some of these developers are unaware of where and why this surge in traffic has been experienced. The HTML Standard is subject to these troubles as well as the website for phpMyAdmin.
Now for the real meat and potatoes of this. This event proves that any corporation with the capital can initiate such an event and likely get away with it. In the case of digitalocean it is not strongly targeted towards any particular repository except those who willingly participate with a "digitalocean" issue tag. For political, or financial purposes, a company or corporation could very well target a specific set of repositories denying them service, at least over Github. How useful is this? Consider that one could target an essential service or nearly essential service that powers a lot of websites such as openssl. Although a fork exists call libressl, if this was timed appropiately, the backlash and fallout would not be insignificant. While I do not think it is the specific interests of any companies to behave in such a manner, I pose the example to demonstrate how it could be used as an attack on a particular repository.
So now I will present the solutions and fixes that remain available. Firstly I shall acknowledge that Digital Ocean are aware this is a problem, but their solution is akin to shrugging off the problem(as we have established, this is a denial of service problem).
The first solution is one for an organisation such as Github, as Digital Ocean are reliant on their API. Simply deny them use of the API. This will by extension deny them the measures required to validate and invalidate whether a person is owed a reward, and would be a major problem for them to solve. The issue with this, is that it sets a dangerous precedent as such behaviour is not(to my knowledge) covered within the Github terms of service.
The other option is to move away from Github and towards a different way of hosting git repositories. Either by owning and hosting a git server, or by using one of the many community made git services such as Gitlab. This is also not thoroughly effective, as Github is widely used as opposed to its alternatives. Such a change is similar to why the Linux kernel sees few new developers as the discussions take place within mailing lists.
It is NOT a fix to email and complain about this to Digital Ocean. They have already expressed and established the extent to which they will go. Perhaps emailing Github may render a change, although it's unlikely.
If you were considering making a low quality pull request, I would suggest you just make a public repository and cheat the 4 pull requests as their systems for checking and verifying and their bar for quality seems low.
At the very least, it must be said. From my perspective this has been the best joke I've seen in the last week. Some people were even making Pull requests on the 30th of September over this. This does prove however that Git in general is vulnerable to denial of service by poor or low quality pull requests. Further reading can be done at this blog post.
Quiver version 0.3 is out! This update features the following:
Some slight polish to Mines modules
Overhauled enemy AI
Now there is 5 levels that are relatively balanced with their loot and enemy content
Complete removal of throwing and other poor design choices
The above changes are now featured in the current binaries of the game, and the web version. Go play it! In addition, I am now looking for feedback on the current status of this game. If you feel you have something to say about it, let me know!
As for optimisation, it runs on a Thinkpad T420 acceptably. The plan log mentions GLES2 consideration, and this is why. On a T420, a laptop that is GPU-absent, the framerate is around 50FPS which is acceptable but not to my standard of good. For most modern desktop, especially those which are featured with GPUs and even the newer Intel Graphics. It used to run much much worse on account of excessive Light2D usage and unoptimised use of baked lighting.
I do not intend to return to the multi-layering system I developed partly in the last post.
As for future developments. What remains for me to implement is mostly a matter of content, which is not something I am strongly good at(I actually find it boring). This is the primary reason all the levels still use Mines Modules. To address this, each week I will create at minimum 5 modules for a new area. I could probably do it all in 4 days if I made a strong effort to get all the modules done, but we shall see if I push that hard to that effect.
Full plan log
* System for handling full auto guns in place
* Fully automatic rifle added
* Explodead now explode if you get near them(Like creepers from Minecraft huh)
* Rundead now leap at you instead
* Turrets have been added
* Modified various zombie sprites to be obvious which was it's facing
* Set the item and enemy generation to guesswork values
* Extended the game to 5 levels(Each level still needs to be given a custom look though)
* Added death statistics for singleplayer
+ AI rotation has been fixed. Now randomised on spawn.
+ Fixed some broken item pickups in deathmatch
+ Fixed a bug with bullets treating game as networked when it isn't
+ Fixed issue with inventory info sizing and scaling incorrectly at different resolutions
Maybe change the particle system to be CPU-based instead of GPU-based for wider support(GLES2 vs GLES3)
I have expanded the "Linux, Programs and Tools" information with greatly expanded detail, including my specific hardware. Also if any readers have a request for any of my config files, let me know. I can provide them. I do not provide them by default as it would incur a maintenance cost, and because config files are subjective by nature.
With regards to Quiver, I am still working on it, and have made significant changes but you will see them later this week.
To achieve this I create a Node2D and give it a Sprite child with the sprite I want to use. I then give the Node2D a Polygon2D and create this polygon which will be where the fog of war is casted from. It is recommended to cover the whole sprite, as we will use an offset to give it the motion we see. We then add this Node2D to a group called walls. We attach a script to it with the following text.
var vecsCurr = $Polygon2D.polygon
var vecs = 
for vec in vecsCurr:
vecs.append(global_position + vec.rotated(global_rotation))
What this script does, is define a function called getPool() which we can call to get an array of the global positions of the vectors with their rotation properly accounted for. We save this scene as Wall.tscn
We create a new scene called LightCaster.tscn which will be where the light is cast from, and attach a script with the following text.
var vectorObjects = 
const offset = 10
for vectorObject in vectorObjects:
var importantVectors = 
for vector in vectorObject:
var offsetVector = (vector - get_global_mouse_position()).normalized()* offset
importantVectors.append(vector + offsetVector)
var important = Geometry.convex_hull_2d(PoolVector2Array(importantVectors))
var walls = get_tree().get_nodes_in_group("walls")
for wall in walls:
The function _draw() is called whenever update() is called, and in this draw function we handle the drawing of the Fog Of War as this is an additive method. By additive method, I mean that we draw the shadows on top of everything. The function _process(delta) can be replaced in your code, as what is key is that you call update() somewhere. You will notice towards the top we have an empty array named vectorObjects. What we do with this is in the _ready() function that is called when the node enters the tree, we get all the vectorArrays of all the walls. For your game, this may cause an issue with memory if you have too many walls, so you could create a timer to get all the relevant arrays of vectors within however many units of your central point.
We shall now discuss the _draw() function, repeated below.
const offset = 10
for vectorObject in vectorObjects:
var importantVectors = 
for vector in vectorObject:
var offsetVector = (vector - get_global_mouse_position()).normalized()* offset
importantVectors.append(vector + offsetVector)
var important = Geometry.convex_hull_2d(PoolVector2Array(importantVectors))
What this does is loop over vectorObject in vectorObjects. Remember that vectorObject is just an array of Vectors. We then create a new empty array which will store all vectors we use for drawing the coloured polygon on top of everything. We then loop over every vector in vectorObject and add the vector that has been offset slightly, and the vector that has been extrapolated far out of the screen. We use get_global_mouse_position() as our central point here, but any Vector2 will work just as well. Normalization is where we take a vector and change it to have a scalar value of 1 but an unchanged angle. As a result, it effectively gives us the direction which we can multiply by. We next use a function Godot provides called convex_hull_2d. Explaining the convex hull algorithm is outside of the scope of this text, but effectively what it does is get the minimum points required to draw a line from point to point to capture all points within. With this, we then draw a black coloured polygon with the points returned from this function.
That's how you achieve a fluid fog of war effect without relying on Light2D or anything else.
I didn't accomplish as much programming work within the Godot game this week which is unfortunate but C'est la vie. Below is this weeks .plan file, and a gif of an effect I accomplished. I am also going to begin putting some time into learning the C programming language beyond a beginner's level. This is mainly because it is an extremely portable language, an extremely terse language and it has direct utility for me on a Linux System for directly modifying my system and writing utilities. It also give me a good basis for learning C++ which the backend of Godot uses and may help me in the Industry if I choose to go that way.
Amount of work I got done on the game was low this week because I spent some of the week doing some trite stuff.
* Modified UI to show HP and AMMO for current gun at bottom
* Modified inventory to only allow 1 of each weapon. Extra weapons just picks up the ammo
* Completely removed the throwing feature. It added nothing to the game
* Made acquired weapons light up in inventory
* Made Title Screen flame effect inspired by DOOM PSX
* Completely removed the dropping feature. It added nothing to the game
* Completely removed the moving of items in the inventory. Instead we now have weapons in specific slots
+ Adjusted Line of sight offset to be much better and to not have gaps
+ Teleporter render layer is now correct
+ Lore terminal without existing file won't crash
+ Lore terminal checks if file exists before trying it
Singleplayer Death Statistics
Binaries have not been provided for this week's update. They will be provided next week along with some bigger changes.
For context I will list some practices and habits I was doing about 1 to 2 years ago.
Excessive Gaming alone. In the region of 4+ hours a day.
Rarely read books. A rate of less than 2 book per year.
Excessive use of social media. In particular, Twitter, Reddit, YouTube and Discord, but to a much lesser degree Facebook.
An extreme lack of exercise. This manifested as atrophied muscles.
A fair lack of hygiene.
Extremely poor sleep
Lack of water
Now I will elaborate on each point. The first point is on gaming. I still play games, but rarely play competitive games with the intention of winning or getting good at them anymore. This competitive nature manifested in CS:GO a competitive First Person Shooter. This isn't to knock or disrespect games, but this is to knock and direspect my own use of them. I will point that gaming alone isn't necessarily bad, but when the action in the game is dull, tedious and boring it renders the leisure value of Games to go down the toilet. I simply acted on this by avoiding gaming during weekdays except in the evenings.
On the point of books, the reasoning for a poor rate of reading was not down time, nor to disliking books. In fact, it was reading Sun Tzu's Art of War that invigorated a new love for books those same few years ago. This was more or less a symptom of the first and third points. A lack of Social Media and not gaming as much leads naturally to taking up other leisure activities. I simply acted on this by letting myself read books to take a break from any work I was doing.
An excessive use of social media. I would say about 4 to 5 hours per day was spent on social media, much to my detriment as social media is an extremely passive activity, especially as I was a 'lurker'. I find it hard to regret starting to use Social media, as Social Media employs many tricks of the mind and psychology to keep people hooked in. It's also completely unreasonable to claim any superiority from not using social media, as that is a claim of the ascetics who find a perverse joy in avoiding simple pleasures. To avoid social media for its own sake is as I'll set the claim, a poor basis. To avoid it for the basis of focus and concentration is a good basis. What is made worse is the varying utility of social medias, but the utility of many social medias is increasingly reduced with each you use. As a result, I completely cut all except Discord and YouTube which I reduced their usage by only having worthwhile YouTube subscriptions in an RSS feed and only using Discord on weekends. As a result, I feel pretty much no more problems due to Social Media.
An extreme lack of exercise manifesting as atrophied muscles. This was a simple problem to fix. Just exercise once every other day. I calibrate my 100% maximum number of reps for all the workout exercises I perform, then do 80% of that maximum every other day. The goal isn't exceptional fitness, just not to become atrophied. There was also the mental benefits that are still limited, but useful.
A fair lack of hygiene on account of showers and dishes. I would often leave rubbish and dishes to pile up to a single day which I would clean them all up. Showers were also an afterthought occuring once or twice a week. I changed this accordingly. Dishes never pile up, rubbish once it fills the bin is properly disposed of. Showers are aligned to occur after each workout listed in the exercise section above. I also sometimes take showers on the off days if I want.
Extremely poor sleep. The excessive use of social media(on phone) ruined attempts to sleep in bed. Additionally, I would often stay up incredibly late to my detriment. Just by the removal sources of these disruptions, my sleep has improved massively. I still have the occasional bout where I have to reset my sleep schedule as my sleep is such that each day I tended to sleep about 20 minutes later than the day prior. Which adds up eventually.
I would drink very little water. Nowadays I actually drink water.
As for whether I think people should do something similar, yes. I do think they should improve their state. The very least reason being to improve their mental discipline, which is a characteristic that has been eroded with the technological revolution.
What remains for me to fix and improve is exercise to achieve significant fitness which can probably be done by adjusting the workout to be every day, but exercising a different set of muscles each day, with a break day at some point in the week. Diet remains a significant problem for me. I am aiming to adjust accordingly and remove soda and energy drinks by replacing them with caffeine tablets and water. As far as food goes, I will need to educate myself on that much more, I am well aware that I unintentionally engage in intermittent fasting just on account of forgetting to eat during any given day.
Firstly, the name of the game has changed from Hellaglitch to Quiver. I elaborate later on why.
Quiver version 0.2 is out, featuring a railgun, shotgun, networked multiplayer deathmatching, and a deathmatch map, among other numerous improvements, including sound effects. Below is a video demonstrating the game as it stands.
The name of the game has changed from Hellaglitch to Quiver as it is a shorter name, a more memorable name, a more fitting name, and as for name collisions with other media, only collides with an obscure DOS game that is a DOOM(1993) clone to my knowledge.
Next week I intend to begin work on my worst aspect of any game development, namely "marketing". Of this, I intend to set up an itch.io page, work on small development log videos demonstrating and explaining different effects to have educational value, and set up a mail list. As for game content, next week I will work on adding the 4th weapon, the Rifle, adjust the zombies to leap at the player, and time-willing, create a new AI capable of shooting at the player. The latter shouldn't be too difficult as a result of my data-oriented programming method.
This week's plan file is listed below.
Sometimes you have a week where you try to solve a complex design and implementation problem, and you realise exactly why the current standards for this is what they are. Namely the design problem of a seamless multi-floor top-down level. The current approach I see used a lot is to split it up into multiple levels which isn't seamless, but solves a lot of problems, and allows level developers not to work within the constraints of the world(this brings issues for networking, hence why I don't use it). Another solution is teleportation, which would in theory work, but would be very jarring and probably liable to be buggy. I suspect this is just a core problem of top-down games. Games such as Hyper Light Drifter and Hotline Miami solve this exactly in the ways I just listed. As for implementation issues which are more technical, one has to consider collisions, lighting and rendering on all layers- and since this will feature multiplayer deathmatch, how to consider, but also the graphical "pop-in" from handling multiple layers. I suppose an explanation of my solution may be in order.
All notable entities which will change layers have a layer variable. When they collide with a height trigger, that layer changes to what the height trigger is set to. The game will render and handle player collisions for all things on the current player's layer, the layer above and the layer below. This range of 3 instead of 1 is to prevent things getting stuck inside of each other when passing through a height trigger. You would also need to consider any baked lights that have to bake their lights prior to gameplay, as well as how players interact with items and enemies, as well as spawning mechanics for layers. In short, it's possible but my cost-benefit analysis of this problem suggests it is not a problem worth working on. It is effectively a feature creep at this point. This level design space is also sufficiently well explored within 3D games.
I have left my solution within my code in case I choose to explore this problem at a later date.
* Proper addition of a layering system with heights and render layers. Means we can add triggers to change layers and render only relevant layers
* Layering system created with proper adjustment for the light baking. It recalculates all lights when layer changes
* Layering trigger. Can now switch floors
* Instead of lots of sprites, now just render a repeat texture in a polygon. Texture alignment is still important here though
* Redid the main menu. No longer looks terrible
* Added volume slider
* Added proper sound effect system for sounds that are created in the world on the fly
* Extended volume slider to also handle music and sound effects
* Main menu title graphic
* Added shotgun and shotgun ammo
* Created deathmatch map
* Added sound effects for railgun, pistol, shotgun when firing
+ Now only use 1 Light2D ever. Should probably use the profiler to see how costly this is, since I'm aware Light2Ds in Godot bring with them a performance cost.
+ Massive optimization of all walls. No longer constantly calculating distance to player
+ Lighting animation effect fixed. Light animations are now possible without lag
+ Lighting no longer recalcuates all lights when layer changes. Instead it generates and saves its baked light and only renders when allowed.
+ Fixed bakedlights using occluders
+ Discovered a massively easier and more efficient method for handling floors by repeating textures within a 2D polygon. Massive reduction in nodes, still compatible with using sprites
+ Clear inventory on death multiplayer
Lore Terminal without an existing file will crash.
Singleplayer Death Statistics
Refactor all code to align with my code style standard
Teleporter render layer inocrrect
Fri, 11 Sep 2020 10:27:16 +0100
Social media is garbage(but you already knew that already)
Social Media is Garbage(but you already knew that already)
There really isn't much to say. I have for a long time now, deactivated my Facebook account, Twitter Account and deleted my Reddit Account. I still have a LinkedIn account I should get around to deleting sometime. The only Social Medias I use is Discord as its functionality as a Chat Application is quite good and useful, though I have made a video covering why it is pretty awful(I have found a good client to use for this. Cordless). I also use YouTube but only in the most restricted sense, I just use its RSS feeds and Newsboat for the channels I care for. Regardless, I feel the need to bring up the reasons for why not to use Social Media. It's an industry where the commodity is your attention and data, and it's sold to the highest bidder(advertisers). They employ a great deal of psychological tricks to keep you hooked in to consuming useless impossible to apply and amateurish content. You also have very limited control over what you see. Quite simply in one phrase.
Social Media is not freedom respecting.
Leave it and you'll gain the benefits of a non-user who doesn't compulsively check Social Media. Focus for projects and tasks that matter to you. Boredom to motivate you to consume meaningful, useful or engaging media. A greater appreciation for social contact and discussions with real people. The "Boomer" takes on Social Media aren't wrong, they are just not brainwashed and zucced. A point on privacy should be noted, as none of these respect your privacy, however a lot of people prefer convenience over privacy, and are all too willing to give up freedoms and rights in exchange for legalese outlawing actions made by people who inadvertently offend them(and invoke their rights of freedom). A person who claims no freedoms, and submits; they all deserve to have it taken from it.
Just remind yourself, Social Media isn't freedom respecting, and aim to get out of those terrible places. Save your self-pity over wasted time, for other users. They'll need it. Imageboards and forums service as a better alternative to social media, as they are freedom-respecting and generally privacy-respecting.
Major improvements across the board. No binaries this week. I will make a binary for next week. Next week will see more features added.
* Multiplayer deathmatch. Players have properly synced positions and rotations
* Mutliplayer deathmatch weapon firing is properly done.
* Items have interact indicator
* Lore Terminals have interact indicator
* Lighting can now have animation effects, so changing light size and RGBA colour. Strobe effect put in
* Death system for singleplayer has been added
* Multiplayer lobby created
* Deathmatch synchronised start has been created.
* Deathmatch scoring and kill messages
* Deathmatch death and respawn system set up
* Deathmatch game timer
* Deathmatch scoreboard, and death information set up
* Deathmatch end of game timer, that goes back to the lobby for more games
* Spawnpoint for guaranteed items. Can be set to respawn after a time, or not respawn at all
* Added railgun with railgun ammo and glow effects
+ Map system has been fixed. The background was preventing it before
+ Tutorial Teleporter fixed
+ Multiplayer disconnection has been fixed
+ Map system ported for deathmatch. Player spawns set up
+ LOS System ported for multiplayer deathmatches
+ Player drop system ported
+ Player throw system ported
+ Fixed Baked Lighting ignoring walls after hitting an interactable object
+ Deathmatch no longer has terminal screen at start
+ Many yielded idle frames have been removed and replaced with signals
+ Explosive barrels now explode nearby other explosive barrels
+ Deathmatch input in pause screen fixed
+ Fixed deathmatch double damage bug
+ Fixed issue with lobby being unable to joing after game ends
+ Major crash involving the Line of sight and Light Occluders fixed. This is MAJOR because this was a crash which provided no error logs or report
Lore Terminal without an existing file will crash.
Singleplayer Death Statistics
Lighting animation effects cause lag. Look into it. Suspect it's because of a lot of draw calls. Suspect it'll be fixed if square wave used to minimise draw calls
Refactor all code to align with my code style standard
For sound effects, consider making unique ONHIT and ONKILL soundeffect by making it bassier.
I've been working on a game in the Godot engine called Helleglitch. Check out the page I made about it here.
Below lists this week's .plan file regarding the game.
RisingThumb .plan file for week ending 28/07/2020
This week has been satisfactory. I have practically quadrupled if not quintupled my work output, by adhering to a simple plan of avoiding social media and social interactions during the weekdays. This isn't much of a surprise to me considering social media drains time. I might ultimately suffer for taking this approach, but I think ultimately it's the correct approach as I current see very few benefits from social media. It's a worse form of media compared to classical text, playing games, videos or just movies. The details ultimately aren't important here. Prior to this point in the game's development the game saw only an elementary loot and AI system, a single AI and a level generation system and a buggy lighting system. I still need to produce a lot more game assets however, which will not be very enjoyable task. The design of a .plan file is * for implemented features, + for fixed bugs, and no prefix for bugs that have been noted.
* Items can now be thrown. They bounce. Their velocities and damages are derived from stack size
* Telepathic Mapping stim has been added
* Loot Tables and loot generation has been properly introduced. Uses predetermined in data loot tables for that level
* AI Dictionary has been added. Many AI can be used. Each using a source scene to determine the AI script
* AI Tables and AI generation has been properly introduced. Uses predetermined in data AI tables for the level.
* Explosives have been added. Explosive barrels and Explosive Zombies are in now. Explosive weapons? Stims exploding on throw?
* Particle system properly added. Particles are now independant of their creator, so multiple can be used
* Crude Glitch shader used. Acts as a fake screen shake, so 2 birds with one stone
* Made rundead and explodead textures
* Zombie main body textures have been implemented
* Lore text system implemented. Needs triggers though
* Lore system trigger implemented. Used currently in Tutorial. Should be extended for random lore texts depending on floor?
* Tutorial has been added(With the tutorial texts)
* CPU-Based Line of Sight Shadow casting for relevant walls within 200 units has been added
* Light2D has been mostly removed with the exception of the player's light. Replaced with baking the lights. Done because Light2D is horribly inefficient. Ends up with ~50-60FPS on a browser. I blame Light2D.
+ Fixed issues with explosives not using the proper values
+ Slight efficiency optimisation with main body textures. Preloaded prior to use
+ Reload can be spammed.
+ LOS shadow should
+ Left click in Terminals triggering an item use
+ Tutorial Teleporter needs to be fixed
Items, Lore terminals need indicator that they can be interacted with.
Lore Terminal without an existing file will crash.
Baked Lighting has some issues with large sizes.
In a short span of time, collosal quantities of data and information has been lost. This extends to everything. Great civilizations, our past way of life, and the way of life of our ancestors. The cultural and symbolic icons. A great deal of this information and data has been lost. In recent history, even as recent as 40 years ago, a huge amount of data has been lost. Software on Floppy Disks, as the hardware is not designed to last so long. Discussions over platforms such as Usenet, BBS Boards and Forums. Even many old social media platforms have gone extinct. It would be a shame to lose such a great quantity and great quality of this information and data, but even the task of archival carries a cost of storage. The storage medium, and the gathering of this data. I believe it is the responsibility of each person to at least attempt to archive something, or to contribute to other archives. Without this attempt for archival... Future historians, scholars, or even just interested and fascinated individuals will be disappointed by our lack of effort in any form of archiival.
With this said, I am setting out to find and archive as much relevant and important information with regards to the UNKNOWN [?] Clan. I have already begun this project in a smaller manner, but this blog post will discuss the technology, software and plan for all this archival.
It is worth taking a moment first to evaluate the technology. The vast majority of data and information relevant to the UNKOWN [?] Clan takes the form of binary data, and this binary data can take the form of text information, text information on Forums or Reddit, or even on older platforms such as Raidcall, Skype and Discord. As such it is important to establish a set of 4 conditions that will be used to evaluate if some data or information is worthwhile preserving in this archive.
Relatively public information. Elaborating on this, I refer to information that can be gathered within its different forms by a member of the UNKNOWN [?] Clan.
Non-confidential information(or information scrubbed of confidential detail). This is to protect all involved parties, as well as to respect the privacy of the Clan.
Originating, or relating to the UNKNOWN [?] Clan. This would simply be about deeming the origin and relation of any information in this archive.
Deemed to hold merit. This is a necessity due to time and storage constraints, and so that certain information can prioritised for archival.
Elaborating on this, I will take a moment to discuss the future-proofing of this technology. I will use APIs where relevant, and I will attempt to use data forms that will likely be around for a great period of time. Of this form is plain HTML files, plain Media files, and so on. I will avoid using any Database software, and a lot of the data will be formatted and archived using some Shell Scripts, primarily in POSIX-Compliant Shell, but possibly some in Bash. I will also provide the raw data and information files zipped for people to download and make personal backups of. The greatest vulnerability in all this is its centralisation on this server, and to tackle that, a lot of the data will be mirrored with my physical machine. This should render this archive future-proof(save for abandonment of File Standards, or loss of software to read the Files), and destruction-resistant(save for nobody making personal backups and damage to the main server and my main machine.)
Arguably the biggest issue overall will be one of permission, respect of intellectual property and copyright, as well as giving credit and acknowledging the copyright of the individuals involved.
Current Priority for Archival
Chronology, events, important members and information relating to pre-2012 UNKNOWN [?] Clan. THIS IS THE HIGHEST PRIORITY AS THERE IS A SMALL NUMBER OF PEOPLE WITH RECORDS OF THESE EVENTS. Firsthand accounts of events and information, files, and ANY media related to this is of very high importance, as not many records exist for this time period.
The Empire News. Mostly complete, needs .zip to be made of all individual news.
List and archive of notable texts with regards to the UNKNOWN [?] Clan. This will include the various training manuals, as well as books and notable essays.
List of The Empire Images of the Year hopefully with firsthand accounts from the image source, and context.
If time allows, reformat the training manuals books and notable essays into 2 alternatives. Plaintext, and LaTeX.
If storage allows, a catalog of distinct and notable Videos relating to the UNKNOWN [?] Clan.
How you can help
Send me any files and medias relating to any major or minor events.
If you have a firsthand account of a notable event, feel free to send me it.
Download and hold onto any .zip files relating to this, to protect the archive from destruction.
If you want to support my efforts, feel free to donate. The main home, or the about me page of this website will feature this information. Your support goes directly into improving the hardware of the server.
I have remade components of this website and improved how I handle a lot of things on it. Lets talk about them.
Firstly, you'll have noticed I now I have drop down menus as my headers that take you to relevant pages. I have chosen to do this, as it achieves a good balance of simplicity and minimalism, limits what media will be rendered for the end-user to make sure it's not a bloated obese page, and to achieve the accessibility of most information of content easily found and within only 2 clicks of links.
A planned increase in information where relevant for particular pages, and a plan for some new pages. I am considering pages for recommended reading and viewing, with some elaboration on WHY it is recommended. I also plan on adding a page for other websites worthy of note. These would be friends because I'm biased to support them, and people I found to create and include content of a highly educational nature.
Gopher seems to me a very viable and very capable protocol for serving information over the internet. There's still a lot of very good reasons to use HTTP and HTTPS over Gopher, however I'd like to recommend anyone who knows about Gopher to check it out. No trackers, no ads, nothing of that sort. It's just plaintext that can be browsed, and ways to include files. It reminds me a bit of BBS boards with how ASCII-dependant it is. I'd like to think it also supports Unicode(UTF-8) however I have not tried or looked into it.
If you're using gopher, check out my Gopherhole! It's effectively a mirror of my main website page. "gopher://risingthumb.xyz"
Those interested in browsing gopherspace, and you're using chrome(or similar browser), try using the Burrow addon. The reason you have to use an addon is because most modern web browsers no longer support the Gopher Protocol. For the optimal experience, I recommend using a terminal and using the "lynx" browser. I don't believe w3m works, but I may be wrong.
For those interested in setting up a Gopherhole, it's easier than setting up a website! It effectively just serves plaintext and files. Information can be found here. Literally anyone on a Linux or Unix system can set up and run a gopherhole, even off of their own PC. I imagine you might be able to make it work on a Windows System. Especially with all the "Windows Subsystem for Linux" stuff, but I am not educated on that.
Go forward! Make a gopherhole! Browse the Gopherspace! Reject terrible standards!
I believe every pessimist is responsible for asking a question along the lines of:
Why did you do that?
Why bother with that?
Why? It seems so useless.
Why bother when X situation?
These questions can also come in a similar form of "what's the point of..." but sometimes that can be a case of seeking genuine understanding. Now to elaborate on this...
The pessimist's why I believe stems partly from Apathy granted by the collapse of their value structures(usually due to some event or nihilism). Now nihilism alone isn't a bad concept. In fact, in some ways it's an empowering concept but it's a hurdle to almost every man, once they consider the question of why they should bother living. If they are unable to answer it, and their value systems collapse, they have to either construct their own new value system to replace this, or they will likely try to fill this void with some other content. Content by means of consumerism typically- which is in its very nature an entirely insatiable beast if granted its wishes. It's worth noting not all consumerism is bad, but for the sake of nullifying how they have no reason or values to sustain their life it is inherently a void to distract them from developing a new value structure to continue with life.
Building on this, I would like to propose one such event which can bring this. The Duning-Kruger effect- when a person is learning a new subject they will often reach a peak of confidence if left unchecked. If left unchecked, they will be given a stark and crushing realisation in the Valley of Despair that can make them reconsider why they bothered with it. And naturally this question can lead into a person's insecurities and sap their joy of a subject. Or bring them to reconsider the subject to learn. Lets take a look at this ourselves shall we?
What do you see in there friend? A discussion of topics, a sharing of ideals and opinions. One man shows off his recent creative endeavours in programming, another with a whiskey in hand and bags beneath his eyes.
Elaborate on this, what is it they are talking about? One of them is talking in excitement on the language he has learnt, the tools and the trade. He seems rejuvinated by this presentation- given meaning by how his work has improved his life- in a small way but a non-significant way. His will-to-power bringing him to make a creative effort in his work; Yes, and the other pray-tell friend how does he respond?
His eyes seem glazen and uninterested, a thousand yard stare broken only by the dehydrating blinks of those dry bagged eyes. Enervated, he stops the young lad and asks him a question of monotone importance. "What's the point of this? I could just buy someone else's?"- what more than the flagellation of that poor sod's espirit; crumpled- What's the point do I hear that right? The pessimistic why? The driving nail of broken values compensated with material. A compensation for a debt of energy and will. No more! No more! I can't bear to see such a horrific sight spun by the looms of pessimism!
But what am I talking of here, The pessimistic why! Why do I bother to write this very piece to talk about this? Because of my values. Because I choose in the face of no belief to adopt and construct a set of values sufficient and rejuvinating; a set that I follow through day by day in the construction of a fairer and improved ego. Not that empty glass of self-asserted woes and pities by those pessimists!
Enough? Enough! I hope at this curve you see the pit of despair and zealous consumerism that a pessimistic why causes- on your own and your comrades; a systematic eradication of those lively values that gave you a will! Go out and construct something, and in the question of "Why?", an answer remains: To accomplish the full spectacle of my values. VALUES! Beyond comprehension of a Nihilist- espeically one that has yoten them out their broken glass.
A week ago I said I would do some videos. I... haven't. In the meanwhile, I have been using Godot. I have now decided that each week I will release a build of Bermuda Glitch. You can find the first version here
In other news, I have also made a 4chan client for browsing threads and posts without images. You can find that here
If you haven't subscribed to my YouTube channel, I recommend going and doing that, since I will be doing a few videos next week.
My exams have finished. All of them were 24 hour Open Book exams so by their nature they were quite easy to do. Regardless, this isn't much of a post anyway. So I will bring this post back around to a few topics.
Firstly, I have set up my Dotfiles to use git and GNU Stow for easy deployment across my Desktop and Thinkpad. This isn't such a big deal, however I have some personal data stored in that git repo, that I am considering seperating it out into a few repositories. One for DWM/DWMBlocks/DMenu/ST source code, One for my shell scripts, and a few for more general applications I that don't contain personal information.
Secondly, I have also opted to use sftp for no particular reason over rsync for putting files on website's file directory. As of current, I leave this password protected, however I think I will probably change this soon enough.
Thirdly, I am considering completely removing the GitRepos stuff on this website, as it adds another element to consider when using this Site with projects. This is just because I have don't have a satisfactory setup for handling my projects. What is satisfactory you ask? Something that has a low maintenance cost and a low project-setup cost, and easy for an end user to use. What I had currently set up did not satisfy either property to me.
Also, I want it to be mirrored across Gitlab, Github and a personal Git site. The only reason for this is to make it usable regardless of preferred git platform.
In regards to game development, I have done nothing there, but this will change next week, as I will have very little to occupy my time other than reading a bit, Terraria and more system modification.
Finally, in regards to video uploads, I haven't found anything I wanted to talk about so I haven't talked about anything. I will probably do a few new videos. I have in mind the following topics:
University and why it's a waste for the common person(Targetted at Americans, with EU as a subtarget)
Godot non-tile based module-based random dungeon generation.
A video targetting the attitudes of a lot of people in Tech(masterhackers, tooSmartTooLearn, AppleCultists, WindowsNormies, LinuxEvangelists)
A short series on Websites, Web hosts, Domains and setting up a simple static blog with shell script.
A brief video on Tmux as a power tool.
A final video talking about MineZ and why it died.
If any of these videos would be of PARTICULAR INTEREST TO YOU, let me know. I would rather make videos that interest the common person. Email me or just DM me if you have my contacts.
This post requires an introduction, and as such I hope to do it well here. UTC or better known as The UNKNOWN [?] Trading Company, is a group of players that originate from Counter Strike(1.6 I believe) that moved on to play Minecraft and then eventually in 2012 settled on a Minecraft Server called MineZ. MineZ is basically DayZ if it was ported to Minecraft and wasn't as buggy as DayZ. In concept it is a very cool idea, and it generally works better for the casual player. The UNKNOWN [?] Trading Company, as the name suggests set out to do Trade Runs in the south. In doing so, they developed tactics and a unique culture and community unlike anything else on the server at the time, a lot of this spearheaded by the Directoire(Directors) of the clan. How I came to be involved with them was in the Summer of 2016. I stuck around for a good four years and I enjoyed a lot of my time with the UTC. Nowadays, I'm no longer in their discord out of choice(on account of it being a major distraction for me), but I am still very active on the UTC Subreddit.
The project in question here is a full archive of all News Articles. When I was new to UTC and still sometimes to this day, I like to look at the older News Articles as you can gain some insights into the formation of the clan. It also wasn't impossible either. In 2018 I had attempted something similar though my efforts were cut short by the lack of a proper website to host the contents, and my lack of knowledge of external APIs to gather the Subreddit data for these news articles.
On my main page under the extra information, you will find a direct link to the full archive. In this list you will find both an archive link to the markdown text converted to HTML, as well as a full URL link to the original reddit post. The motivation for this being that subreddits can get taken down or quarantined(and given the sometimes dicey nature of content on the subreddit, this isn't at all impossible), though I will say it is unlikely given it has only some 200 Subscribers.
You can find this full script yourself if you wish to generate this yourself. It is uncommented, but only 15 lines long so you should be able to understand it. The link to this code is here. As the observant Shell Scripter will note, it is indeed a POSIX compliant Shell Script, which means it can be run in other Shells besides Bash. The observant Shell Scripter will also note 3 depedencies. wget, which if you don't have just stop reading this and evaluate your life decisions, jq, which is a JSON parser that can be used in the Shell, and Markdown. Markdown just converts text in markdown format to its corresponding HTML format. It's very useful for this specific case of archiving every single News Article and retaining the formatting used- though it's doesn't cover the Reddit Markdown Specification which contains slightly more features than the regular Markdown Specification. An example of this can be found in the first issue, with the tiny text. My solution was... it was too minor to be worth any time, and barely affects readability of the news anyway.
As for jq... One major performance improvement in this script remains. I could use Streams instead of parsing the whole file which would be much more efficient and effective. The reason this wasn't done is because the documentation for parsing JSON with streams is difficult to read and understand for jq, however as the file size of the JSON is very small, it only takes about 20 seconds for the parsing in the script, and variable time for the wget operation. If you have a better solution, feel free to send me the source code of your better shell script to my email firstname.lastname@example.org. Also feel free to send me suggestions there too.
This is just to show that a static website can be used as a full archival system for a regular clan newspaper posted on the subreddit. One might ask "Hey, does that really count as you need to be there to actually run the code?". To affirm this, just set up a cronjob to once a week or so update the archive.
The most likely way this script will break, is if the API I am doing wget requests to breaks. If that happens, the saving grace is that the parsing will almost definitely fail and the script will just not run
So if you own a site(or even a github.io site), I highly recommend experimenting with using Shell Scripts for managing that site, and using either FTP or GIT to update it. There's plenty of ways to automate execution of Shell Scripts, git and ftp. For a personal site like this, it's more than enough to handle all changing aspects like this.
I've properly set up neomutt so I can actually send and receive email now. That's a small thing. On another note, I've been learning a little bit of TMUX(Terminal Multiplexer), and now I have modified my setup so cmus is detatched and running in the background. I have also combined DMenu, and a script using Tmux to bring up a menu of taskwarrior(3 Panels effectively, 1 for burndown daily chart, 1 for most urgent tasks and 1 for interaction using taskwarrior).
I might make a video on taskwarrior if I find it to be very useful. We will see if I get substantial use out of it.
I have gotten around to moving my main system over to Linux. I am running Arch Linux, with default config files provided by Luke's LARBS project. I have modified a fair amount of the configs provided in the mean time, moving from its default music player to cmus.
I have also gotten Aseprite, Godot, Steam and Discord setup as well. With regards to both Discord and Steam, they don't play the nicest with DWM but they play well enough. I will need to make adjustments to a few batch scripts I was using previously to batch export source aseprite files, however that should be a quick fix.
I have also set up a proper game design document for the project I have chosen to title The Bermuda Theory, primarily based on its location. I will probably talk more about its development later on, especially with respect to its level generation, as Godot's Scene system makes procedural generation by means of chunks or modules particularly easy and incredibly powerful due to the tree-based nature of it.
I made a quick video showcasing Aseprite's exporting capabilities and talking about how I batch export a lot of .aseprite files. I mainly use this so I can touch up sprites then just run it so I don't have to open each file manually to export it. As such, probably useful to game developers, particularly in connecting the programmer and artist sides of the development coin better(So a programmer doesn't have to reimport files, and an artist doesn't need a developer to update pictures).
Git has a command called git log. With it, you can get Hash, date, author, tag and commit message data, and probably more. I wrote a short bash script to take my git log and write it to a changelog.md as well as commiting it with the changes made prior. You can find this under my github profile under the name "CommitChangelogs"
The website has a new look. I have also gone ahead and updated a lot of the materials there too. Have a look around if you want. Basically anything that I thought was objectively garbage or quite useless I removed from the site. I might make an extra HTML file for extra information, since there's quite a bit of information I want to port over from the old site.
I also have a new email server set up on my VPS. Send me mail!
Also about the old blog posts, I will have a look through them and see if there's any worth transcribing over to this blog. If there's none, I will leave them buried, since most of them were not worthwhile to me, and likely to anyone.
As for the game I'm making, I've completed the overall Level Generation algorithm. Now I need to make some items, get dead-ends sorted out, get an adapting AI sorted and then I'll just need some UI for Inventory. I plan to have like 4-5 items for this minimal build just to see what it's like.
I might make posts on Reddit about this game continuing from minimal build onwards, and I will also likely discuss Design issues. I am building on top of the basis given by Teleglitch, and want to expand on it, but also solve its Design Issues. There were a selection I observed in Teleglitch: How it didn't respect player's time, How the difficulty curve was insane, How it was inaccessable in a lot of ways, and How the time to death is very quick. The tutorial it provides I find to be lacking especially in regards to very important information such as the value of armour against bullets.