Version 1.0 Release

UnreleasedThis page contains content that has not been released yet, as part of an unreleased/upcoming update. As a result, the content of this page may change, so what you see may not be added.
Version 1.0 Release (shortened to v1.0r) is the first version of MOAB Adventure to be available offline.

It also contains an enormous number of changes and additions.

## New Features

### Game Modes

v1.0r features 3 new game modes - Adventure, Boss Rush and Sandbox

Adventure mode is the gameplay seen up to now - linear progression through zones, each with 10 levels.

Boss Rush removes the gap between bosses, but increases Mine production to make up for the loss of box income, and gives you  10000 to start.

Sandbox is mainly for testing, and gives the player infinite health, Shards and Bloonstones but otherwise works the same as Adventure.

### Difficulty levels

4 difficulty levels exist in v1.0r - Easy, Normal, Hard and Impossible.

Each gives a multiplier for some game aspects to give the player a more challenging experience, or more casual, laid-back gameplay.

Multipliers are applied after any other buffs, such as the Speed+ mod or the Booster.

Difficulty Modifiers
(Does not affect Final Bosses)
 Normal
 Hard
 Impossible

### Custom Weapons

This definitely deserves its own page, but that will come later.

Custom Weapons can now be written using a special Custom Weapon Maker, or as a long string in the form (with square brackets, braces, semicolons and vertical line symbols!):

(Looking at that, it's probably a better idea to use the Custom Weapon Maker)

Most Custom Weapon-related things have ids starting with `CustomWeapons_` followed by what it is, capitalised. For example, the centre has id `CustomWeapons_Centre`. Most variables and messages follow this pattern too.

### Saving Rework

Saving can now occur in 2 ways: direct string input or through files with save slots.

This is selected through the floppy disk icon in the start area.

Saves now use ¦ instead of ; for a separator, and are encoded.

This means demo saves **will not work** in the full game.

Almost everything in a save is now a number.

#### Save slots

Save slots are a way of saving game data automatically, across instances i.e. you can access last week's MA game tomorrow by selecting the same slot, even if the game was closed in the meantime.

A custom save slot can also be defined - this has a name that can be anything at all, as long as you can remember it.

### Start Area

Once the game is opened, there is no longer a set time until boxes start spawning - There is now a 'start area' - a part of Sky High that functions as a start screen for the game where no boxes spawn, and the boss timer does not increase.

It contains several icons:

 Import Custom Weapon - Import a custom weapon string for use in-game. That's about it.

 Save Options - Options relating to the new saving system.

 Settings - Options relating to this instance - game mode, difficulty and some config options are found here.

It also contains a quick tutorial that can be skipped.

#### Menu Details

##### Save Options

Has 3 buttons - Load Save from File (Loads a save slot), Load Save from String (Loads a save from direct text input) and  Save Mode (Choose what do do with your save on death: either saving to current slot or copying to clipboard)

##### Settings

Has 2 selectors - Difficulty and Game Mode (explained above) and a button to delete game data - Not reversible

Changing settings while on a save slot will overwrite the saved ones - you can open a Sandbox save in Adventure

### Pathways

There are 3 main ways to play the game, and the game responds differently to which one you're doing -

#### Destruction

* Where you destroy (almost) every box, boss and Final Boss in the game.

#### Preservation

* Where you destroy (almost) nothing at all

#### Indifference

* If neither of the other conditions are met, you're on this path.
* By far the easiest path to win on.

#### Calculation

Pathways are determined by DV - an abbreviation for 'Death Value' or 'Destruction Value' - an internal way of keeping score of your destruction.

###### Obtaining

Each box gives 1 DV when destroyed, each end-of-level boss gives 250, and each Final Boss gives 2500.

###### Pathway

If your DV is within 450 DV of the current maximum, you are considered on the Destruction pathway

If your DV is below 450, you are on the Preservation pathway

If your DV is between these values, you're on Indifference.

#### Interactions

###### Visual

* Destruction shows a very slight red tint on the top and bottom of the screen

###### Gameplay

* Afterlife Heaven/Hell depends on DV - more DV = more Hell zones.
* AP5:6 - Hunter has a special trait: more DV = more damage (100 DV = +1 damage, rounded to nearest 1 damage) - not inherited

###### Characters

* The Creator boss (added in v11.0b) shows up on Destruction only.

### Commands

#### IDs

Everything in MOAB Adventure has an ID - an identifier that can be used to tell the game what to look at.

Most IDs are in the form `placeholder-id` or `placeholder-id2` (with the exception of Custom Weapon-related things). For example, the healthbar has ID `hp-bar` and AP1 has ID `AP1` (capitalisation is sometimes inconsistent), but the visual Armour sprite has ID `moab_armour` and the custom weapon centre has ID `CustomWeapons_Centre`.

Variable IDs are inconsistent - some of them start with a `-`, `!`, `.`, or even `>`, and are in various forms, including `placeholder-id`, `placeholder_id`, `placeholderid`, `PlaceholderId` or `placeholderId`. Unless you need to, just use a temporary variable.

##### Common IDs

###### Variables

`health` - (float or int) Blimp health

`shards` - (float or int) Current shards as a number

`shown-shards` - (string) Shards as you see them in the top-left.

`bloonstones` - (float or int) Bloonstones as a number.

`shown-bloonstones` - (string) Bloonstones as you see them in the bottom-middle.

`boss-hp` - Boss/Final Boss health.

###### Objects

`moab` - The player.

`boss` - The end-of-level bosses.

`final-boss` - The end-of-zone Final Bosses.

#### New Commands

`_boss` - Calls boss for the current level in the current zone.

`_final` - Calls the final boss for the current zone. Add `-cutscene` on the end to skip the cutscene

`_temp <variable> [<set|add|sub|delete> <{value}>]` - sets or performs an operation on a temporary runtime variable. If the specified variable does not exist, one will be created. If the `delete` argument is used, a value does not need to be specified, as the variable will be removed. If no arguments after `variable` are supplied, it will set the variable to 0, or create it if it does not exist.

`_impulse-reset <command>` - Takes a command off the list for used commands, so it can be impulse executed again. Only removes the first occurrence.

`_broadcast <message> [data]` - Sends a message to everything in the game.

`_broadcast-to <message> <target> [data]` - Sends a message to a specific thing, with ID `<target>`.

`_pos <target> <x> <y>` - Moves something. Valid values for `target` are `moab`, `boss`, `final-boss` or the ID of most UI elements and weapons.

Don't go looking at the demo code for IDs, they are different and will not work!

`_jump <command>` - Jumps the Command Sequence execution to the command with the given number. Equivalent to `_var .seqmarker set <command>`.

`_screen-rotate <angle>` - Sets screen rotation to the specified angle. 90 is default.

#### Utilities

##### Variable References

Any string `\variable\` in a command will automatically be replaced by the value of that variable. Any variable starting with `~` will be accessed as if it was a temporary variable. This happens *before execution*, so can be used inside commands. They are processed only once, so if, for example, a variable `var1` holding "`\var2\"` was accessed through the command `_var var3 set \var1\`, it would set `var3` to "`\var2\"` instead of the value of `var2`.

##### Positions and Rotations

Any string `\x>thing\` will get `thing`'s x position, any string `\y>thing\` will get `thing`'s y position, and any string `\dir>thing\` will get `thing`'s direction between -180 and 180, with 0 = up.

Additionally, any string `\name>thing\` will get the name of the current state of `thing`, and \size>thing\ will get `thing'`s size as a percentage of its original.

### Command Sequences

These are sets of commands with conditions that loop continuously.

Each command is written:

`>value = value -> _command`

Example sequence command:

`>\shards\ = 10k -!> _var health add 100`

This sequence will heal the player for 100HP when the number of shards they have first hits 10k. - the ! means this is an impulse command - these are run only once.

Other example uses:

`>\health\ < \max-health\ -!> _var health set 0`

This forces a 'no-hit' game, where any damage will kill you instantly.

Anything before the first `>` counts as a comment, and will be ignored in execution.

#### Operators

These are the second parts of sequence commands, and tell the game how to compare the 2 values.

* `=` - Equals. The most basic one - checks if the 2 values are equal.
* `>` - Greater than. Checks if the first value is greater than the second.
* `<` - Less than. Checks if the first value is smaller than the second.
* `!=` - Not equal to. Checks if the 2 values are different.
* `>=` - Greater than or equal to. Checks if the first value is greater than the second or the 2 values are equal.
* `<=` - Less than or equal to. Checks if the first value is smaller than the second or the 2 values are equal.
* `=-` - Equals negative. Checks if the first value is equal to the second value negated.
* `=~` - Approximately equals. Checks if the first value is close to the second.
* `~~` - Forced approximation. Checks if the first value is close to but not exactly equal to the second.

#### Executors

These are the fourth parts of sequence commands, and tell the game how to process the command.

* `->` - Execute. Executes the command if the condition is met, every time it's checked.
* `-!>` - Impulse execute. Executes the command once when the condition is first met, and doesn't execute it again (instead, it will be skipped) until the game is restarted or the command is unlocked with `_impulse-reset`.
* -?> - Conditional loop execute. Executes the command constantly until the condition is not met. Pauses execution of other commands until it finishes.
* -|{number 0+}> - Count-controlled loop execute. Executes the command the specified number of times. Pauses execution of other commands until it finishes. Can contain variable references. e.g. -|9> repeats 9 times.

## Major Changes (Gameplay/Balance)

* AP5:6 - Hunter deals more damage based on DV
* AP5:8 - Aftermath Boss/Final Boss damage increased (again) 150 -> 200
* AP5:8 - Aftermath box damage increased 50 -> 100
* Box health scaling changed to work as if the whole game was one long zone
* AP2:5 - Disruptor and above stun length reduced (5 -> 3)
* AP2:6 and 7 stun length reduced (10 -> 8)
* AP3/4 - Accelerate now shoot *slower* by default, but apply a multiplicative reload buff the longer they're fired for, slowly returning back to normal if the fire button is released.
* Shields have reduced I-frames when hit by a projectile.
* Definitely-not-influenced-by-anything Termination secret added (improved?)

## Minor Changes (Visual)

* New cursor that shows coloured upgrade arrows
* Better screen shake effect
* Window title changes based on zones, bossfights and Final Boss stages.
* Added projectile trails to bombs
* Optimised laser effects (AP3/4:6-8, AP5:8 shots)
* Added a bar behind health to hide the background
* Cutscene text made better and easier to make new/translated versions of
* Error messages are more meaningful
* Shields now flash when taking damage
* Shield HP is now shown as a small line at the top of the healthbar
* Explosion smoke opacity reduced by 50%

## Bugfixes

* AP5:6 - Hunter Final Boss damage fixed (25 -> 50)
* Defeated Super Monkey sprite now shows the correct second stage sprite.