There is now a GUI (in game) for the player to select which mods to use. Mods should be installed in either Data/Packages or Input/Packages (depending on the mod). The mod selection GUI allows the player to select mods and choose the order in which they are applied. This order must agree with the dependency requirements of the relevant mods.
Added new area: the White Rose. This has some health upgrades and 600% armor. We added a White Rose to a secret area in the Mylantis Caves Library. Can you find it?
Added a new area: I3 Clouds. You can use these clouds to refuel on ammo. There are also White Roses in them.
There is a new weapon mode for the laser: the Freeze Ray. This costs 2 ammo and freezes for double the usual amount of time. However the freeze time is "stacking". This can be found at the end of the treasure room in the Deep Sliver Maze.
Added new area: the Deep Sliver Maze. This can be found on the pyramids in Rivers in I3. However you must be inside of a Rainbow Flower inside a Sagittarius Portal inside a Rainbow Flower inside a Sagittarius Portal.
Now when you kill monster projectiles in Pacifist mode, it does not increase your kill count.
When you are in a text box, if you do LCTRL + C, it will copy the text of the text box to your computer's clipboard.
It is now much easier for a modder to add their own weapon to xar. You add a new Lua script for the weapon to Data/Packages/xar/Game/Item. See the files Data/Packages/xar/game_inv_exec.lua and Data/Packages/xar/Item/item_gun_1_1.lua for documentation.
Put a glass wall in front of the debug room of Rainbow Flowers so now it can only be reached by cheating.
You can now sort waypoints by "last used time". Also, the menu shows basic information about the currently selected waypoints: its level, how long since it has been used, and how long since it was first enabled.
Moved the location of the menus to copy and delete players. These are now in Options -> Game Loading/Saving.
One way blocks can now be added via Lua block scripts. See the package_tutorial2 for how to do this.
You can now provide a custom __on_render function for a moving entity. See Data/Packages/xar/MovingEnts/Other/ment_marker_short.lua for an example of this.
There are now API functions for getting the object that the player is looking at. See for example ga_look_object_block_get_chunk_id.
There are now API functions for drawing lines in the world. These can be used inside "__render_augmented" functions. This, together with the API to get the block the player is looking at, makes it easy for a modder to draw a wireframe cube showing what block the player is looking at.
The program is now able to track the exact amount of memory it has allocated. However for performance reasons, to enable this counter you must add the following line to Input/Scripts/program_startup.txt: "set engine.memory.enable_memory_counter true". With this enabled, when you go into the main menu in the upper left corner it will show you how much memory has been allocated. This will be a fraction of what the task manager says the program is using for memory.
We improved memory performance.
1.01.26: Iron war vulcans and chunk editing package
Integer environment variables are now 64 bits instead of 32 bits. As a result, integer game global variables use 64 bits.
There is now a new xar package command: snap. This command will take a "snapshot" of the chunk that contains the player and will save it in the file "Output/FileOut/chunk_snapshot.lua". This can be used for level editing. Part of getting this to work involved allowing packages to write to files in Output/FileOut. That is, there are now API functions for writing to files.
There is now another package on the game's website called xar_chunk_edit. This can be used to edit a chunk using block creation tools in game. Then the user can use the package's own snap command to auto generate a .lua block script file for that chunk.
Colorblind friendly text boxes are now in beta. See the game's website.
There is now a new rule: the program should not allocate memory buffers that are strictly more than 9 million bytes. So, the largest square image that the program can load is 1500 by 1500. The program will display a certain error message while you are playing if there is a failure to allocate a large buffer in a certain place.
Added a safeguard for 1) the double shrink glitch and 2) telefragging by growing.
Mouse buttons 3,4,5 can now be bound.
There is now a custom difficulty mode. Go to xar's package top menu, go to the difficulty menu, go to "harder mode" and enter the password "custom". Now set the environment variables "game.globals.xar.difficulty.custom.dmg_from_player" and "game.globals.xar.difficulty.custom.dmg_to_player". These are the in-damage and out-damage multipliers.
The location of the xar menu to set "use true up" has changed. Now when you set the "use true up" variable within a menu in the xar package, it will set your HUD attack display to either a cylindrical or spherical model accordingly. Also when you set true up to true (in the xar package), you can specify whether the player moves up and down along the z axis or the camera up vector.
Added a shortcut inside Fire Rate Moons. This is a shaft down to the treasure area with no obstructions, but there are very powerful monsters along the way.
The "load" command can now optionally take either "hard" or "soft" as a parameter. This will be useful for modders. In a hard load, the package is totally reloaded. In a soft load, we only partially reload the package to save time. We recommend soft loads for casual players, because it is faster. If no parameter is passed to the load command, the value of the bool engine.soft_loading is used to determine if loading is soft.
There is now a command called "saveload" which saves the game and then immediately loads. This requires cheating to be enabled, because of speedrunning. The command can be used by modders. Also, the parameters "hard" or "soft" can be passed to the command.
There is a new monster: the Iron War Vulcan. This is identical to the War Vulcan, except it only takes 1% damage when you are the same size as it. This will replace the War Vulcans in Blackberries, because killing them with rockets from the outside was too easy. On the other hand, killing Vulcans in other parts of the game with rockets when you are the same size as them is encouraged and intended.
The game now fixes your recorded difficulty if you attempt to beat the game without leaving the tutorial.
Labor of love nomination request
Nominate us for the labor of love Steam award! We have been working on this game for over 13 years, and we are still improving it!
Thank you to the community for your many comments and suggestions.
1.01.25: Enhanced hardcore mode
The xar package now has the command "claimtrophies". When this command is run, you gain a Steam achievement for every trophy that your player has already collected. Note that you run the command by opening the console "press ~" then type "claimtrophies" and hit enter.
You can now create the file "WorldNodes/xar/xar_block_overrides.txt". This file lists xar nodes that are replaced by Lua block scripts.
Now any package that depends on the xar package can have the __main functions of its Lua block scripts create xar blocks.
Now the __main functions of block scripts can use the built in xar chunk generation code to generate them.
You can now enable and disable anisotropic filtering. Use the variable "engine.render.anisotropic_filtering".
There is now a command called "save passive". This will do nothing if automatic saving is disabled. If automatic saving is enabled, this command will save the game only if at least five minutes have passed since the last save or if there are 10,000 chunks that need to be saved. "Constant saving" mode has been replaced with "automatic saving", using the "save passive" command described above. That is, "save passive" is called whenever the player is in a menu.
Hardcore mode works differently. Instead of saving the game constantly, it uses "automatic saving". However, if the player is in hardcore mode and they either try to create a new game, load a game, or exit the game, then the game will be forcibly saved.
Now there is no rendering of "special basic entities" by the engine. For example, green shrink rings are now rendered in Lua code instead of being rendered in a hard coded way by the engine.
Packages can now render weapons being held by the player. This is accomplished by having Lua code render meshes and modify the OpenGL matrix stack. Indeed, from Lua code you can now render objects in the world.
The music system now loads music in a separate thread.
The system command "help" and the xar package command "help2" have been merged into one.
1.01.24: Steam achievements
Steam achievements have been added to the game. There are currently a total of 244. That is, there are 112 achievements for normal trophies, 21 achievements for completing the game under different circumstances, and 111 achievements for "secret trophies". Secret trophies are like normal trophies, but their locations are not described in the game.
In addition to the script Input/Scripts/program_startup.txt run on startup (which is in the internal Lisp style language of the program), also the script Input/Scripts/game_startup.lua is run whenever the player loads a game. This script can call the Lua code defined by the package.
Now the console command "bind" exists, which can be used to bind input events to actions. This should be used in the game_startup.lua file.
Now when selecting a package when starting a new game, a thumbnail of the package is shown. The thumbnails themselves are located in the About directory of the package. The About directory also contains the file about.txt, which displays text about the package that the user sees when selecting the package from the new game menu.
Now from the point of view of Lua, all xar block type names start with the prefix "XAR_". These are the block types which are built into the C++ code. On the other hand, the name of a block type that is defined in Lua must start with "block_".
All Lua functions that are called from C++ must now start with a double underscore. For example, "win_hud.render" is now "win_hud.__render".
Allowed ability to turn vsync on and off. Use the variable "engine.render.enable_vsync".
Now the parameter "no_hud" can be passed to the screenshot command. So, running the command "screenshot no_hud" will take a screenshot but the hud and any other windows will not be rendered. This is, just the world will be rendered.
You can add music to be played while the user is in the main menu (before a game is loaded) by adding mp3 files to Data/Packages/base/Music/base_main_menu. Or, you can do this by making the mod Input/Packages/base.
Music now fades in and out.
There are now meshes for both rockets and nukes. The original mesh model and texture maps were created by Carbo Lemons. There are also meshes for rocket and nuke explosions.
The variable "engine.worldgen.trust_manifest" is now true by default. This improves chunk loading time on Linux. Related to this, if the player deletes the manifest.txt file in the chunks folder of their saved game, then the engine will automatically rebuild the manifest the next time they load that game. The manifest is a list containing basic information about each chunk file.
Rewrote the command system of the xar package. Now mods of the xar package can register their own commands. Also, running the command gendoc generates an html file in Output/Documentation that documents the commands for xar.
It is now impossible to pass by certain key guards if you do not have the correct key.
Added another safeguard against telefragging monsters when shrinking.
1.01.23: Custom music and modding support
You can now add custom music to the game. See the game's website for how to do this.
You can mod textures, sound, music, meshes, basic entities, moving entities, environment rects, game scripts, window game scripts, and blocks. You do this by creating the package Input/Packages/xar, and whatever is found in that package overrides the corresponding asset the standard Data/Packages/xar package.
Fixed glitch where you can telefrag large monsters by shrinking into them.
Now when you are spawned in the starting room when you start a new game, the variable game.globals.xar.difficulty.speedrun_start is set to your current time.
You can now paste into the console (control + v). That is, you hold down the left control key and press v. This just pastes to the last line that you are typing, and it does not add anything beyond the first newline character found. You can now copy the current line being typed in the console to the clipboard with control + c. That is, you hold down control and press c. You can copy the previous line of the console by doing control + 1. You can copy the line above that one by doing control + 2, etc. Also, if you do control + a, it copies everything in the console window to your clipboard.
The program now outputs the lines added to the console to the file "Output/Console/console.txt".
The command "gendoc" now also generates the file Ouput/Documentation/xar/xar_builtin_block_types.txt which lists the block names of all the C++ internal block types used by the xar packge. These do NOT have associated Lua block scripts.
The xar package script win_credits.lua now calls a script called game_credits_stats_render.lua which is responsible for rendering the ending statistics of the player in the credits. The user can copy this script to Input/Packages/xar/Game and then modify this file to render whatever speedrunning statistics the user wants. Note how this copy overrides the original game_credits_stats_render.lua file.
More properly guarded the boundary of Quicksand Grass.
Now the user can set a variable that determines whether or not the game is paused when the user alt-tabs.
Made it so the music volume can be set. Also, there is a variable sound.music.pause_when_window_no_focus specifies whether or not music is paused when the window loses the focus.
A red boarder is drawn around the screen when the player's health is low.
Improved the time it takes to start a new game (in the Xar package). It now takes less than a second.
Made a simple and an advanced version of the new game screen. Players can switch between the two.
1.01.22: Fertile radius and new I2 areas
We increased the default draw distance. The level radius for the player's level used to be 3, now it is 4. The main technical advance here is the "fertile radius". The fertile radius determines which chunks contain non-block entities. So all chunks (on a level) outside the fertile radius only contain blocks. The fertile radius for the level of the player is still 3.
Added new weapon mode: the Progressive Rocket. These rockets have a very slow velocity and do not explode, but they have a very high damage per second and damage per ammo.
Added a place called the "Stable Singletons Room" next to the player's emergency waypoint. This room has copies of some of the areas of the world, so it is easy to come back to them later. For example, when you enter I1 and eventually reach a Williston City, you can touch an item which unlocks a door in the I1 block in the Stable Singletons Room. That block contains a copy of I1.
Added three large and challenging areas to I2: Fanatic Spires, Creeping Jeni Plants, and Violets. These require stealth and will help bridge the gap between the early game and the late game.
The primary homing weapon is now much better: it launches a big ball, and if it kills a monster, one minigun primary shot is shot towards every nearby monster.
Rats now move slower and are indicated on your HUD.
Your EMP icon now looks yellow when you are close to the boundary of your EMP sphere, and it looks red when you are outside your EMP sphere. Actually, it considers all EMP spheres you have detonated, and it is red if you are outside all of them. Remember that an EMP sphere only affects monsters on the level where it was detonated.
Replaced white box devices in final boss area with arcades.
Added to the Secret Cave of Jerichos.
Made Oak Tree branches more interesting.
Made quicksand grass 11 have X's on it to differentiate it from quicksand grass 1 through 10. Also we now use less quicksand grass 11 as a border for the edges of quicksand grass 1.
Added a windowed mode.
The algorithm to teleport the player from one chunk to another is now faster. We now reuse more of the chunk tree. Specifically, we keep the old chunk tree up until the level where the source chunk path and the target chunk path differ. That is, we are building off of the old chunk tree trunk. We call this "trunk teleporting".
Made the "Chunk Changes Object Tracker" faster by hashing block paths differently. Loading of chunks is now faster when the player is hundreds of levels deep.
1.01.21: Pool balls and monster shoot delays
Rat monsters now follow the player.
Pool ball monsters now follow the player. Moreover they are able to follow the player around corners using the game's new pathing system!
Many types of monsters (marines, menaces, slivers, lampreys) are now part of a "Hive Mind". Once monsters part of the hive start attacking the player, there is a two second delay before they actually start damaging the player. The "hive delay" is indicated by the green rectangle on the lower left hand corner of the screen. Once the player is safe for 3 seconds, this delay resets. So if the player is on the boundary of a bunch of monsters that are part of the hive, the player can chip away at the edges safely. However if the player tries to fly through all the monsters, the 2 second grace period will be used up and the monsters will damage the player.
Many monsters now have a "personal delay" X (usually X = 2 seconds). Once they hit the player with a warning shot, they only deal damage after X number of seconds. This resets after not seeing the player for 3 seconds.
Certain monsters only hurt you when you are smaller than them. For these monsters, now when you are the same size as them, there will be a red letter S on your screen (to show that if you shrink, you will need to worry about them).
Most basements and cellars now have a waypoint in their treasure room.
Added grid labels to buildings in the Mylantis Top City. This makes it easier to find the House of 5 Lampreys and the Secret Farmhouse.
1.01.20: Arcades, Tommy Guns, and Rapid Railguns.
Replaced several white box devices with "arcade doors". An "arcade" is an area where when you go in it records your ammo, then you are given infinite ammo, and when you leave the area your ammo is reset to what is was when you entered. Examples of arcades are 1) The Richmond Library Arcade, 2) The Central Burlington Tower, 3) Rail Caves (just outside Burlington Cities) and 4) The Inner Crust of Oranges.
Added waypoints (and save points) to I3 Mahogany Treetops. Added Colchester Cities to Mahogany Bark along with more nuke ammo, savepoints, and a map room. Added more waypoints and ammo to Carrot and Turnip caves.
New weapon mode: Nuclear Pulse Propulsion. This is equivalent to a normal nuke, but it propels the player forward with a great velocity.
New weapon mode: The Tommy Gun. This is designed to replace the primary cannon in the later game. It damages monsters at a long range and has a high DPS. It can be found in Huntington and in the Toronto Maze.
New weapon mode: The Rapid Railgun. It has the same damage per ammo as the normal railgun, but it has a much higher damager per second.
New weapon mode: The Super Vampire Railgun. It has the damage per ammo and damage per second as the normal railgun, but it has the health stealing capability as the Vampire Railgun.
The cost to respawn (keeping all ammo) now maxes out at 400 gold.
It is now cheaper to enter and exit Montreal and Colchester Cities.
EMP immune monsters can now instead be stunned for exactly 2 seconds.
Laser Freeze immune monsters can now instead be stunned for exactly 1 second. The exception is the Pool Ball type monsters, which are truly Laser Freeze immune.
1.01.19: More I2 trophies (Willow Trees and Mystic Vines)
Removed the White Box Device at the start of Large White Flowers.
Added trophies in I2 for Willow Trees, Dark Willow Trees, and Mystic Vines.