-
Notifications
You must be signed in to change notification settings - Fork 3
CHANGE LOG
Quick navigation:
- 1.0 - First "usable" version
- 1.1 - TileLinks and ordering
- 1.2 - Horizontal ordering
- 1.3 - Batch rendering
- 1.4 - Launch parameters
- 1.5 - Game Modes, STR, and overrides
- 1.6 - BMG Rewrite
- 1.6.1 - Wiki and docs
- 1.7 - Optimizations
- 1.8 - Multiple platforms
- 1.8.1 - Repo and huge preset update
- 1.8.2 - Progress Bar Bug fixes
- 1.9 - The Breaking update
- 1.9.1 - AutoCropping
- 1.9.2 - AssetSwitcher and Render passes
- 1.9.3 - Randomizations and Map Metadata
- 1.9.4 - AMG!Blocks and Programmable backgrounds
- 2.x - New start
First "usable" version.
It shares some similarities with the newest versions of BMG 1.x, but is rather slow and messy.
The only things it was able to do was:
- Color the background using the chequerboard pattern.
- Draw normal tiles.
It wasn't the best performing version as tile pre-loading did not exist, so BMG 1.0 loaded tiles as it needed them and then proceeded to drop them. It was also not very memory efficient, but since it did not support batch rendering, it was not much of a problem.
This version introduced the tile's ability to connect with its similar neighbors.
The changes were:
- Added "TileLinks" (Tiles interact with each other).
- Added "TilePriorities" (Tiles now can be drawn later on top of other tiles so they're not cut off).
- Fixed some tile assets, which have their documents scaled incorrectly or had their outline drawn on top of themselves and not behind.
- Added missing water tiles.
The TileLinks
system, all be it rewritten, is still a really powerful and substantial change for BMG as it is still used and keeps getting more tiles that use it. One of the updates that had a dramatic impact on how the maps look on BMG because the same tile can take on different shapes automatically.
TilePriorities
was the previous way to call TileOrder
and worked in a similar way as it does with versions up to BMG 1.9.1.
Even though this was made public, it was still missing a few features, such as game mode tiles. But those would be coming soon.
This version did not have its own commit, it was packaged along with v1.3.
BMG 1.2 brought changes such as:
- Added optional console text output
- Renamed "Tile Priorities" to "Tile Order"
- Separated and made "Horizontal Tile Order" and "Tile Order"
And also modified the BRAWL STARS preset a bit:
- Added player spawn locations
- Added showdown biome (index: 5)
The reason to split the two orderings was because of how tiles are rendered in BMG.
The renderer goes from left to right, top to bottom, and tiles that are wider than 1 tile will often draw on top of the ones on the left. This can ruin a design, but I also did not want those tiles to be drawn on top of everything, so I added a new way to only order the tile relative to the horizontal line.
Think of each line as a group and in the group each tile can have a Z-axis of how high it is, but it will never be higher than the line below.
A simple, yet amazing change to BMG. Batch rendering.
It wasn't the most difficult mission to switch from using an object to an array of objects in the code, but it changed how would one use BMG in general as now you can instead of running it multiple times, you can run it once with every map you would need.
However, since I was using memory in such a poor way, BMG could sometimes go up to 12 GB of RAM usage.
QoL: Launch parameters and better console.
The console on the previous versions was a bit messy, so this was the update that cleaned them up, but I also took the chance to do something extra...
I gave BMG the ability to read launch parameters, so you don't always have to use the options.json
file in the same exact location, or you don't even need to use an OPTIONS file at all (if you for whatever reason wanted that, it's really not recommended).
Though there were no actual changes to how BMG renders, that stayed the same.
Finalized rendering: game modes, STR, and overrides.
Version 1.5 changes:
- Added Gamemodes (a special parameter to add more tiles that were not specified in the tilemap at specific places before or after drawing tiles from the tilemap).
- Added Special Tile Rules (STR for short. You can change tile's type if they appear the Nth time).
- Fixed bug with Ordering and Horizontal Ordering which would skip tiles if their order value was not equal to 1.
- Added Biome Override Settings (Allows to modify specific tiles of the biome only for that map).
Maps finally looked right, they had everything they needed to display everything important for the map, such as game mode tiles.
Special Tile Rules (or STR) was my excuse for one rendering difference between BMG and Brawl Stars, the 2 vaults on Heist had different offsets. I did not know why that was the case, but I decided to make a new tile type for the different offset vault and coded in the option to change the tile type if it occurred N times.
Biome Override was also a needed feature as some maps actually did not truly follow their own environment settings. Where a biome has green grass, it suddenly turns yellow on a map.
The rewrite of BMG. Cleaning up all the junk I wrote.
(These past few updates kept getting released frequently, eh?)
With over 700 changed lines in Program.cs
alone it was a pretty big rewrite.
This was the update where instead of a bunch of repeated lines of console writes and draws, I switched to using my own created logger (which I for odd some reason decided to name "Voice.Speak
") and a Tile Drawer class.
Besides the rewrite I also:
- Fixed a typo that would skip Ordered tiles when their values aren't equal to 1.
- Made Special Tile Rules be able to be Ordered.
Snowy and fixed tiles.
This version did not really have any big code changes, just fixing up graphical mistakes in my vector files and adding a new biome: Snowy.
This was also where I wrote the first version of the OPTIONS.JSON documentation wiki page and updated the Readme.md to link to the wiki.
Optimizations and Siege.
Changes:
- Optimized speed and memory usage.
- Added new game mode: Siege.
- Fixed bugs with specialTileRules settings where the top vault wouldn't be offset by half a tile.
- Updated the example build's options.json to include new 1.7 features + fixed a game mode name issue where the name didn't match any saved game mode names in presets.json.
The main optimization was to instead of loading every tile BMG needs on the spot to load every single asset ahead of time. This sped up BMG by A LOT, which was super pleasant and satisfying to see.
The memory optimization was in the form of correctly disposing of created Bitmap objects after the map has been drawn.
Those 2 changes turned an exponentially increasing RAM program into a program that loads once and does not use any more memory.
Multiple platform support!
This was not an easy update to work with. In order to make this possible, I had to switch to .NET Core 2.2, but the SVG library had many bugs with working in the version.
This is the link to me reporting this issue and trying to figure out what was happening with the build:
SVG Repository issue: Svg on opening loads nothing in .NET Core 2.2
After a lot of failed attempts, I almost decided to drop this version, but after a break, I updated everything and sure enough everything almost worked.
One issue I had was with transparency, if I set the object transparency, then it would render that object as in its 1px scale and then would be scaled up to the size I wanted. So shadows and spawns looked really blurry.
But the transparency in color did not have this issue, so I just ran a script to convert everything. Had a few broken assets with fully black shadows, but it was pretty quick to fix as I did not need to go through every single asset.
A lot of biomes, game modes, and a refreshed repository design.
1.8.1 did not really have any massive changes, just a bunch of Brawl Stars additions, such as the Mortis' Mortuary, Darryl's Ship... up to the Snowtel.
The change that really made me update the version number was an update on the Readme, Copying.
One change in code was a bug fix:
- CNTFilter (checkNeighboringTile) can work with ReplaceTiles.
This was also the update where I finally merged the net-core-version
branch into the master
one as from all my testing, it looked like everything worked on Linux, macOS, and Windows.
Starr park and misc. updates.
This update did not really have anything of importance.
The BRAWL STARS preset changes were the following:
- Scrapyard biome
- Fixed Bounty Star color (now cyan)
- Starr Park biome
And there was one code update:
- Fixed progress bars that now display correctly.
The breaking update.
For a long time BMG treated indexes as if they started from 1, so every single place where there is a number in data, it would -1
it. I did not want that to stay as it kept confusing me while I worked on a new feature. So I decided to switch to 0 indexing.
This change made forced me to update a lot of the preset file, and inform BMG's users to update their Biome
, OverrideBiome
, and SpecialTileRules
settings in their OPTIONS.json files.
Besides that the other changes were:
- Selective rendering now supported!
- Required options.json format specifier.
- Better metrics (
maps drawn
) - Made some options in options.json optional (
console
,title
).
Selective rendering really helped me as previously I used to have multiple options.json files for testing if BMG still worked after my changes and what needed to be adjusted, but with this option, I can now keep the single file, but just omit few maps from rendering.
The format specifier is not truly used, but it is a way for me to help BMG recognize the format of the OPTIONS file as I, for the longest time, wanted to change it. The format is fine, but I just think that I can improve it a lot, make it more efficient and smaller.
The last 2 code changes were really QoL. BMG from this update started to display the number of maps it has exported instead of the number of maps that are in the OPTIONS.json file. And BMG no longer required console
and title
to be defined in the OPTIONS file as it would just use default settings.
There were also some BRAWL STARS preset changes:
- New biomes: Action Show, Waterpark.
- New game modes: Hold The Trophy, Volley Brawl, Trophy Thieves, Basket Brawl.
- Gem Grab game modes slightly re-written. (not a breaking change)
The new modes and environments are nothing really interesting to document.
The Gem Grab rewrite was just switching to using 1 function instead of 2. But you still used the game mode the same.
AutoCropping.
Sometimes a map is surrounded by tiles you do not want, like maybe it has a margin of SkipTiles
. This update allowed you to set the array of tiles that BMG will crop out of the map, not after it's drawn, but before it is drawn. So you would not see half tiles in places where it cropped, because the tiles that it cropped are just skipped completely.
This was also the update where the Logger was finally named the Logger and its "Speak" method was split into many logging methods.
Though this update was not a "Release" of the repository, it still had a distinct date and changeset.
AssetSwitchers and Rendering passes.
The AssetSwitchers idea came around when I noticed that my tool would render the poison clouds in 2 colors: Green and Pink. I was naturally curious why this was the case and asked a few people: they said it was a regional difference.
I wanted to make it possible to set up BMG to render the same map in multiple ways, just by avoiding certain assets, which is what AssetSwitchers does: on the last step, before drawing the tile, it just swaps the asset with any other existing one.
Rendering passes are a different story. For a long time, the only way to draw something below and before everything was to use a game mode setting. But some tiles are not really meant to have any height, they're meant to be part of the ground, which was not possible with my current implementation of ordering.
So I made BMG do 2 passes: one by rendering everything with a negative order value, and the other by rendering everything that has a positive or 0 order value or doesn't have one at all.
Randomizations and Map Metadata.
This was a really interesting update, because I was adding tiles that Supercell doesn't show, I had to make my own bolt tile. But I thought it would be visually more interesting to look at the maps if the bolts had different angles - that's how I got the idea for randomizations.
The other feature was showing extra data on the maps that weren't part of the map - that's Map Metadata. It's basically extra "tiles" that can be added anywhere. One implementation of those is the spawn order of bolts by displaying numbers. Though it's not on GitHub due to a lot troubles finding the best design for the numbers.
AMG!Blocks and Programmable backgrounds.
This update was really complicated to make, but also extremely rewarding!
One of the project users asked if I could make the Volley Brawl background in BMG, my quick answer was: "not without code changes".
You see.. Backgrounds on BMG were static and hardcoded - they were always a chequerboard pattern with 2 color parameters. You couldn't do anything more complex than that. But then came the puzzling question of how could I even make backgrounds soft-coded.
I decided to make it possible to code in JSON files, may not look pretty or readable at all, but it would solve parsing and I could make a schema to help out coding in that language.
That's when AMG!Blocks were born, a JSON programming language for BMG. (It's AMG!Blocks
and not BMG!Blocks
on purpose. It can be confusing, but anything non-Brwal Stars is called "AMG")
It took a while, but I eventually, after a few days of coding, got it working, and quite well actually.
I finally acquired the freedom that was missing for backgrounds.
There are none yet, but I will make a wiki page documenting the AMG!Blocks.
The fresh start.
The first question you might have is "why?", and my answer is - expandability.
BMG was always a "Brawl Stars map generator" when for quite some time I wanted to switch to being a general Map Generator, however with how BMG works, that's just not possible. BMG uses SVG assets for drawing, but I want to support much more, like PNG, APNG, GIF, Lottie, and more.
This is why BMG 2.x is actually called AMG 2.x (Advanced Map Generator). Just for the sole reason of expanding to other games.
I also want to update the renderer to support animated rendering, but that also is an issue with my current code and how animations would be even treated. There's just so much to think about.
AMG 2.x is still just a concept, a prototype, currently, instead of just preloading assets, it uses a system called the "TileRegistry", which is similar to how BMG 1.x loads, but instead of storing images, it's more complex image relation data, like transforms.
AMG 2.x was teased a bit (Imgur MP4 reupload), but it was not really truly revealed.
Obviously, this page will only keep expanding, but for that to happen, time must pass...
See you in the next update.