You are currently viewing Update 1.21: Block Bonanza

Update 1.21: Block Bonanza

Hello all,

This update marks a new era in GunColony, as for the first time, we have applied the new Place engine in a GunColony gameplay feature. Enjoy an improved block destruction system with higher server performance and custom stats for all blocks in the server, powered by Place. Expect many more Place-powered features in the coming year!

In addition, we have added some new content in categories that are different from typical updates. This update brings a new set of block textures that builders can use in map creation, as well as a whopping 9 new updated models for existing weapons! Finally, there is a new Mine-Spades GroundWar scenario playlist, which serves as a showcase for the new block destruction system.

Amusingly, this update is also the first time where GunColony’s update number (1.21) is higher than the current version number of Minecraft. There should be no more confusing GunColony update numbers with Minecraft ones from now on!

NEW BLOCK TEXTURES

This update adds a new set of block textures which can be used by builders. Thanks to Mohorowe for creating these textures!

Note: the new changes include changing some blocks into a “missing textures” texture as they are reserved for future custom blocks. You may see these textures in-game for a considerable number of maps. Please make sure to report these appearances on Discord so that we can fix them out as soon as possible!

NEW WEAPON MODELS

Many weapons in GunColony have received a remodel! Many of these remodels were completed by the community quite a while ago but have now finally been added to the game.

List of weapons with new models:

  • RBB-451
  • UMP-45
  • SIG 550
  • Origin-12
  • HK69A1 Grenade Launcher
  • Colt SAA
  • Walther P38 (scenario weapon)
  • ASh-12.7 (including unsuppressed variant)
  • SC2010

RESOURCE PACK CHANGES

Aside from the weapon remodels and new textures, this update also makes other important changes to the resource pack.

  • The internal format of the GunColony resource pack has been updated.
    • Previously, the 3 model files for each weapon (hipfire, ADS, and parent model) were placed in different folders
    • Now, they have been moved into the same folder to be easier to maintain
  • The M1903 in Scenario Mode has received improved GUI model rotations and should now be consistent with other weapons
  • Some other models are also added to the resource pack, but are not reflected in-game yet

PLAYLIST CHANGES

  • Replaced Normandy King of the Hill Scenario with TDM Scenario

THE PLACE WORLD SYSTEM

The Place engine has taken an immense amount of effort to develop, but starting today it is finally capable of supporting real gameplay features in GunColony. Specifically, this update finally adds the Place world system, which was first drafted in 2022 but now fleshed out permanently in the Place engine, with many forward-looking features such as multi-threading and tickless support. If you are interested in the details, you can scroll down for the devlog at the bottom of this post.

From now on, we will aim to write new features in the Place engine whenever possible, which will ensure that our code will work both on GunColony as well as the future planned standalone game.

Unfortunately, developing the Place world system required well over 10,000 lines of code and caused a significant delay in the release of this update, all for a fairly minor improvement to visible gameplay. However, we believe that our efforts will soon bear fruit in increasingly more visible server improvements in the future, as we continue to work towards the goal of completely rewriting and reimagining GunColony in the Place engine by its 10th anniversary in 2025.

NEW BLOCK STATS SYSTEM

We have written a new version of our block damage and breaking system from scratch, fully powered by the Place engine.

  • The new system is built with future-proofing in mind by supporting potential future non-minigame game modes as well
    • It is possible to disable unbalanced interactions outside of minigame modes
      • For example: Concrete -> Iron Bars, and Magma Block -> Lava are two interactions that will be disabled outside of minigames
    • There are also several additional features included for future use
      • Ability for blocks to leave behind other blocks when broken normally (not just from damage)
      • Ability for blocks to retain their normal drops even if leaving behind another block
      • Ability to customize what happens when a block is broken normally (not just from non-melee damage)
    • All block values are now stored in a “Block Stats” configuration file, rather than hardcoded
      • This makes use of the Place config system which we have been steadily improving for the last few months
        • This config system is general-purpose: it will be applied to other game object categories such as entities and weapons in the future
      • Because block stats are now stored in a config file rather than code, we may be able to make it publicly available in the future
    • All block breaking and transformation is done from the Place engine
      • This means that the same code, unmodified, will work in our future standalone game

BLOCK STATS CHANGES

  • Reduced the toughness (piercing resistance) of iron doors and iron trapdoors by half
    • They now have a toughness value of 7 (or 0.875 considering their width of 1/8 blocks), allowing most weapons to deal damage through them
  • Daylight Detectors now count as sheet metal material rather than wood material
  • Some “stone” material blocks such as droppers and dispensers have had their HP slightly increased from 250 to 300
    • This does not include any blocks that turn into other blocks when broken
  • Farmland now has slightly less health than dirt, matching grass paths
  • The HP of hoppers was reduced from 1,400 to 800, as the previous value was deemed too high
  • Ancient Debris and Lodestone will no longer drop iron ingots when destroyed by guns or explosives (they previously used the same material as iron blocks)
  • Nether Wart Block now gained its intended behavior of dropping nether wart when broken
  • Added block stats of Sea Pickle as a small plant
  • Stone buttons and pressure plates are now treated as Fixture rather than Stone, meaning that they now have less HP than before
  • Brown mushroom blocks now properly have the same custom stats as red mushroom blocks (being very easy to break)
  • Cauldrons containing fluids now properly have the same stats as regular cauldrons

NEW BLOCK STATS

We have now added new block stats to numerous blocks that were missing detailed stats prior to this update. Like before, all stats (such as health, armor, and toughness) are fully custom-made for GunColony.

Previously, we had custom-made stats for only some blocks in Minecraft 1.13-1.17, and relied on defaults for others. We have also added stats for a few blocks prior to 1.13 that we have missed before.

After this update, we now have custom stats for all blocks that appear in Minecraft 1.17.1 (including blocks that were “experimental” in that version). Our new system will also make it easier to add block stats for blocks in newer Minecraft versions.

  • Coal ore
  • Jukeboxes
  • Kelp Block & kelp plant
  • Blue Ice
  • Fletching tables
  • Repeating command block & chain command block (will act as bedrock)
  • Deepslate & all deepslate variants (with conversions between variants)
    • Deepslate has very high HP and is hard to break
  • Tinted glass
    • Will now act as a bulletproof glass and stop most bullets
  • Copper ore
  • All deepslate ores
  • Copper blocks & all variants
  • Raw iron/gold/copper blocks
  • Netherrack
  • Polished basalt
  • Ladder
  • Redstone Wall Torch
  • Sea Lantern
  • End Gateway Block (now impossible to shoot through, just like portals)
  • End Rod
  • Light blocks (now treated as air)
  • Carrot crops
  • Skeleton and wither skeleton skulls
  • Jigsaw blocks (treated as bedrock)
  • Respawn anchors (treated as obsidian)
  • Gilded blackstone
  • Candles & candle cakes
  • Lightning Rods
  • All dripstone blocks
  • All amethyst blocks
  • Tuff
  • Calcite
  • Sculk sensors
  • Powder Snow
  • Azalea
  • Dripleaf
  • Rooted dirt
  • Moss blocks
  • Smooth basalt
  • Hanging roots

LIMITED TIME GAMEMODE

Given that this update once again mainly improves the experience in Mine-Spades (through the new block breaking system), we have decided to keep the Mine-Spades limited time gamemode for one more update and spice it up with new mutators!

  • Normal Mine-Spades is now available on expanded maps (previously this was also set to Overpowered by mistake)
  • Replaced Overpowered scenario with the GroundWar mutator
  • Added mh_large_1 to the expanded map pool
  • Removed Duga from the expanded map pool for normal Mine-Spades
    • Added Duga MineSpades Wallhack scenario + GroundWar + Aviation + Hardcore Damage playlist. The modern transparent battlefield can be quite unforgiving at times and you may want to dig in when spotted to avoid enemy fire support. Any resemblence to current events may or may not be purely coincidental

NEW DISCORD REDIRECT LINK

There is now a new redirect link straight to our Discord server! Access it here:

https://guncolony.com/discord

OTHER CHANGES

  • A new version of the server’s banner has been uploaded to select server list sites
  • Added “easter egg” at spawn, you probably can guess where it is

BUG FIXES

  • Fixed a very long-standing bug where Block Toughness (piercing resistance) values for explosions still used the very old values circa. 2016-19 rather than the relatively newer values circa. 2020-23, meaning that all blocks newer than Minecraft 1.12 had incorrect toughness values in explosion calculations
  • Fixed a probably very-long standing bug where Bedrock had a toughness value of 0, which meant that bullets could infinitely pierce through bedrock blocks

DEVELOPMENT PROGRESS UPDATE

Over the last month, we have made progress in developing the core of the Place world system and threading model. Our main innovations are a new approach to multi-threading, a “tickless” system for gameplay responsiveness unprecedented in the FPS genre, as well as major progress in our Minecraft cross-play support.

Multithreading

There have been many attempts at multi-threading in Minecraft-compatible servers in the past, such as Folia and Minestom. These projects tend to aim for multiple threads per world, as their goal is to create a single large Minecraft SMP. However, in doing so, they introduce limitations to accessing global state, reduce CPU efficiency through synchronization overhead, increase developer mental load due to the risk of concurrency bugs, and give up the convenience of a simple API such as Bukkit.

As GunColony is a minigame server, we are mainly concerned with multi-threading in the context of enabling multiple smaller worlds at minimal overhead, rather than a single large one. Thus, Place adopts a thread-per-world model by default, meaning that Place gameplay code is single-threaded. This makes the game engine very easy to develop on, efficient in CPU performance, and friendly to future scripting systems, while multiple worlds such as minigame lobbies can still run concurrently to each other.

We have also devised a way to split a world into smaller sub-worlds during each tick, which would allow most world simulation tasks to be multi-threaded even for a single world, while preserving performance and safety of existing single-threaded logic. This is not implemented right now, as we do not need that level of performance for our current minigames.

Multi-instancing

The Place server will also support multi-instancing. While we anticipate that all Place servers running in Bukkit-compatible mode will only have a single instance, fundamentally Place is designed to support multiple instances on a single server process. They are completely separated from each other in terms of worlds and in-game logic, with the only exception that players can switch between server instances on the same server process without reconnecting. This may become useful to separate player-managed instances in the standalone game in the future.

Tickless system

With GunColony, we have years of experience developing asynchronous Minecraft plugins that run independently of the Minecraft thread, allowing actions such as shooting to occur near-instantly when receiving player input. We are now leveraging this expertise to build a full tickless simulation system in the Place engine, allowing any gameplay action to be executed independently of the main server tick loop.

Our tickless system consists of a second “minor” tick loop separate from the main one, which loops at a rate of ~1000 Hz and thus achieves response times of around 1 ms. Importantly, this system can call gameplay code directly on the main world simulation thread, unlike the async functionality currently implemented in GunColony. This means that we can now perform any gameplay calculation during tickless code, such as projectiles, damage and kills.

The implications of our tickless system is unprecedented in the FPS shooter scene. When you fire your weapon in future versions of GunColony or the standalone game, you will receive a response of eliminating your enemy within 1 ms plus ping, and this is not just a client prediction – the enemy has actually been hit and died on the server!

This response time is between 7-32 ms faster than most other modern FPS game titles, and superior to architectures such as sub-tick used in Counter-Strike 2, which still wait until the next major server tick to produce a response. In addition, all of this is possible while running our main server tick loop at a rate of just 20 Hz, which leads to lower CPU usage, cheaper hosting costs, and perfect Minecraft compatibility.

Bukkit-backed worlds in Place

As discussed before, the Place engine is capable of running as a Bukkit plugin, which allows us to use the Place engine in the existing GunColony server to allow gradual migration of code and new features, as well as support Minecraft-to-standalone crossplay upon the standalone game’s release.

We have now implemented a Bukkit-compatible world system in the Place engine. All blocks and entities from Bukkit worlds are now visible to the Place engine, while the Place engine can currently modify blocks in Bukkit as well as teleport entities.

Importantly, the APIs of the Place world system will be shared between Bukkit and standalone worlds. This means that the same gameplay code, such as guns, boss skills, and gamemodes, will work both in a Minecraft server environment as well as a fully standalone Place server.

In addition, using an advanced method, we have also managed to let Bukkit-backed Place worlds use the Bukkit API safely while ticking, while still capable of multithreading relative to each other. These worlds will also fully support our tickless system.

Conclusion

The Place world system’s earliest designs date even before the engine’s inception, with the original idea being to add an additional abstraction layer to map custom item types (such as guns) to Minecraft ones, while handling all required baggage like data translation and resource packs automatically and under the hood.

Under this lens, the Minecraft side of Place can be seen as the extension of such an abstraction layer to the full featureset of the Minecraft game, such that the end developer can perform everything possible in the Bukkit API without ever touching it, and effortlessly work with custom content as if it is native to the game.

But the Place world system is now on track to be far more than its original plans. With its support for multithreading and tickless worlds, we now have a truly unique technology in our hands that can let us develop experiences with unmatched responsiveness and performance from any voxel game that came before it.

Our intention in the future is to further refine this world system as well as begin the gradual migration of GunColony features into it, in order to realize our grand goal of developing a single game capable of functioning both as a Minecraft server and a standalone game title.

Leave a Reply