Welcome to the editor guide here I will give you some tips for creating your own settings.
I will first cover the standard edit page and how you can adjust settings there.
Afterwards I will give you hints for how to write settings directly in the JSON format, which allows for some advanced mechanics including copying mechanics from other days.
Edit Mode
In the editor you will see the board with its relative mine probabilities at the top.
You can click tiles to add or remove them from the shape and you can select the mine probability you want to set in the table below.
Note that this view only supports a specific selection of probabilities.
How to set more nuanced probabilities will be explained later.
Though those don't have specific textures in the view.
Difference to 2023: Epsilon tiles now act as a true epsilon, previously the corresponded to a probability of 1/254, now they will only be considered for mine generation after all other tiles have already been considered.
When you want to change the board size you have to select how the board is upscaled or downscaled to the new size.
Afterwards click "Apply" to set the new size.
When selecting the number of mines you want make sure that it is compatible with the board.
There should be sufficient tiles capable of generating mines, so that no matter what tile the player starts on all mines can generate on tiles with at least moderate probabilities.
Difference to 2023: The game no longer uses rejection sampling for mine generation and can tell when it becomes unable to generate further mines.
These cases will display a warning.
For a good setting this warning showing up should be very rare at worst, ideally impossible.
Keep in mind that a large exclusion zone can cause situations where all spaces have been excluded for further rotation mines. So even if the number of tiles is larger than the number of mines the generator may still fail.
Selecting the topology will define how the edges of your board are connected.
Note that when using a Real Projective Plane the corners of the board may work improperly I would recommend leaving out a 2 by 2 section in each corner.
The Neighborhood option lets you specify in what range mines are counted and what the exclusion zone looks like.
A gray circle around the eye indicates that the eye tile would count a mine on that tile as usual.
The three small circles indicate that a mine is always counted as a triple mine and the two purple arrows will count any mine as a rotation mine.
The exlusion zone does not specify any type, it only specifies positions around a rotation mine where no further rotation mines can generate.
The exclusion zone should be symmetric, assymetric exlusion zones may be violated when the generator places a rotation mine in a place, that makes an already generated rotation mine invalid.
In the animal section you can select which of the five animals you want to include in the game.
Yes Five! Despite only the dog and rat making an appearance, the sheep and horse have been brought to this version too.
The camel was an experimental/joke feature that I added to the 2023 advent calendar in secret and later commented on it in the Discord server.
The camel acts similar to the horse but moves 3 tiles in one direction and one to the side.
This doesn't make for very good gameplay though.
In 2023 you can get the camel through editing the JSON, here there is a fifth checkbox.
Unlike 2018 where the sheep's presence automatically disabled chording, since 2023 this is a separate option and you can toggle it independently.
Finally you can give a title to the setting you've made as well as attach you name and write up your own description for people playing it.
JSON Mode
Now to the more advanced JSON editor.
Here you only get a textbox with the JSON representation of your setting. Everything you did before is automatically translated into this format.
Please note a view things about this:
All indentation is visual, when a setting is uploaded it will be uploaded without it and switching between modes will reset the indentation.
We are stuck with all the pedantic rules of JSON. So no trailing commas in arrays and all dictionary keys will need quotation marks. As much as much as I would like to allow these. I am not writing my own JSON parser for this and I will not use an eval() instead.
If your setting cannot be deserialized the editor will prevent you from leaving the JSON view. So make sure to only use this mode if you know how to write valid JSON.
Finally it is possible to create corrupted settings which are not playable and will cause an error. So make sure you define the JSON in a reasonable structure and that your setting is actually playable. It is recommended to check the browser console to see if there are any errors. If you can play your setting without seeing any errors pop up your setting should be good.
So why would you choose this editor over the normal one. There are a few things you can do here that you couldn't do before:
Do you want a better editor for the board.
Well now you can use any image editor of your choice.
Simply download This Python Script for converting an image to a board.
Attached are some example images, red correspond to there not being a tile on that pixel while a grayscale value corresponds to a tile with a corresponding relative mine probability.
A perfectly black tile will never generate a mine while a white tile has a maximum relative mine probability.
A typical board will have mostly white tiles with some adjusted mine probabilities where appropriate.
You can then run the python script providing the image as the first argument and it will generate the corresponding Base64 code.
Keep in mind to also adjust the width and height of the board as the Base64 code does not include this information.
Bonus tip: You can use the code P8 to fill up an arbitrary size board with tiles of a maximum relative mine probability (in case you don't need anything more detailed).
The neighborhood is defined by listing each relative position in which a mine is counted.
With each position you can also provide a third argument.
If you use a string you can specify the type in which a mine is counted [0, -1, "3"] indicates that the mine above will always be treated like a triple mine even if it is a rotation mine.
You may even use a dictionary to map the true type of the mine to how it is counted.
[1,0,{"3":"33","R":"R"}] refers to the tile one to the right.
Here a triple mine would be counted as two triple mines, while a rotation mine would be counted like usual.
Though be careful that you don't create settings where a chain reaction from an empty tile can set off a mine.
If some tiles don't count one of the types, you need to define autoDig as only the tiles that are always counted.
Would you like to experiment with some more unique mechanics from one of the days.
Like the symmetric mine generation from Minesveeper 70 or do you want to accumulate the mine count like during Minesveeper 74.
This time you can do so, through specifying that you want to copy a mechanic from another day.
Any value in the JSON can be replaced with a string like "copyFrom:70" in which case the corresponding value in the JSON would be copied from that days settings.
This way you can "steal" mechanics from other days.
A Minesveeper 70 replica could be made by including "placeFunction":"copyFrom:70" and "entityEvents":"copyFrom:70" in the JSON.
Warning: Some of these mechanics you can copy do however make certain assumptions about the board or types of mines.
Using these mechanics under wrong conditions may break the game in various ways.
Making a Day 74.5 replica where the counting edges don't have a mine probability of zero can result in you instantly loosing the game as those tiles are automatically opened.
Are you tired of having to copy paste the same thing over and over again.
Let's say you have made an object that counts triple mines normally, and rotation mines as two triple mines so you write something like {"3":"3","R":"33"} though now you have to apply this to every tile in the neighborhood.
You can instead define a constant.
Simply define the key constants directly in the settings as an object, eg: "constants" : {"myval" : {"3":"3","R":"33"}}.
In here you can define any key/value pair.
Every time the key is used as a string value in the rest of the settings, it will instead be replaced with the value you have set in the constants.
In the neighborhood for mines you may for example now write: [[-1,-1,"myval"],[-1,0,"myval"],[-1,1,"myval"],[0,-1,"myval"],[0,1,"myval"],[1,-1,"myval"],[1,0,"myval"],[1,1,"myval"]]
When defining the "shape", there are some additional options which can be defined besides "shape" and "exclusion".
dogEffect defines what positions relative to the dog are turned to grayscale tiles
autoDig adds an additional restriction on which tiles will be automatically opened when an empty tile is encountered. This can be usefull when you have made small and large mine behaviours that can lead to chain reactions loosing the game otherwise
For both of these only the positions matter, a third parameter will be ignored.
Variants in JSON
Yes, variants can be used in custom settings, so you can in fact make your own setting have multiple variants.
This is mainly intended to package similar games into one, like with Minesveeper 69s different exclusion zones, this is generally not super convenient for packaging two completely different settings like Minesveeper 74 did.
So how you do it?
Define the variants key and set it to an array of at least two objects.
Each of these objects defines one variant.
Within a variant you can start be setting the following keys:
var-title specifies the title of this variant in the variant display.
var-img specifies the link to the variant image relative to https://heptaveegesimal.com/ so "var-img" : "2025/69-nice/desc/Restriction_Large.png" will set the image to a preview of the large exclusion zone.
var-fraction (optional) specifies a fraction that gets appended to the day number (e.g. "var-fraction" : ".5")
Any further keys defined within the variant object can be used to overwrite the corresponding keys in the base object.
This lets you give the variant a different title or description and make the changes in which it different from the base variant.
If you define a key as an object where the base variant has the same key set to an object, you will not replace the entire object but can overwrite specific keys within the object.
Here are some exclusion zone previews I have uploaded to the site in case they may benefit you when making variants:
You can pick any image on this website so you can do something like "var-img" : "2018/advent-calendar/Zen_Cactus.png" or even "var-img" : "periodle/icons/Badge-Gold.png".
However I will not promise that all images on this website will keep their path indefinitely, so for more obscure choices they may break in the future.
Why not allow external images?
For safety reasons (as I cannot make any guarantees for external content) I will not be allowing the automatic embedding of external content, until I eventually make a proper system that lets the user choice if such content should be embedded.
I want to have a system like this for better descriptions at some point in the future, but as of now this is not the case. Why not just allow [specific image hosting service]?
No!
This would first off introduce a single point of failure for all external images as I cannot guarantee if their service stays up, keeps files indefinitely, doesn't get sold an turned into a scam.
And while it is totally possible for them to outlive heptaveegesimal.com, if this site goes down that also removes the need for the images to be available.
Many such sites also allow for uploading content that I do want to allow within custom settings, if it isn't at least locked behind the user specifically enabling embedding of all external images.
When you open the play menu with a setting you just made you will need to start a game to verify that your setting is in fact able to generate.
After that you will see an Upload button, here you will need to agree to the Rules and Data Policy make sure that you read and understand those.
Once you have successfully uploaded your setting, you will get a link with which you can share it.
I got it now take me back to the advent calendar: Click Here!