Fred Vasquez
Release Notes
Version 1.51 (Under Unity Verification)
- Added functionality which allows the player to move towards where the mouse has been clicked.
- Fixed an interpolation bug which made the screen shake when playing on very low frames per second.
- Increased interpolation factor range and increased default interpolation factor value.
Version 1.5 (January 12th, 2017)
Framework:
- A major 'script system' will be added, allowing users to modify the behaviour of most events that happen in-game while also making sure such code remains outside of ROG, meaning subsequent updates to ROG will not override your scripts.
- Implementation code will be removed from the ROG code base.
- ROG will now come with the necessary script files to behave just like in 1.4.1.
- The 'Teleport' object will be removed and replaced with a more generic class, giving users the ability to use the same object for a wide range of things.
Map Editor:
- UI windows which previously allowed you to modify certain things about an object will now be removed and replaced with Unity's own inspector window, giving you the ability to change absolutely everything you want and not just the very few things I implemented in the UI windows.
- Map Editor camera starts zoomed-in instead of zoomed-out.
Version 1.4.1 August 4th, 2016
This update focuses on major structural refactors in order to make the framework a lot more sustainable and simpler to modify in the future, as well as the addition of serialization, which will allow you to save/load games during run-time.
Framework:
- A Create/Register/Remove/Destroy system structure has been added, which replaces all the function calls such as 'CreateGeometry', 'RegisterItem', etc.
- Added 'Save Map' function, which saves the state of the current map you're in.
- Added 'Save Game' function, which calls 'Save Map', and also saves the state of the actor you're controlling.
- built-in ROG objects now have 'Serialize' and 'Deserialize' functions. Serialize is called when the object is saved, Deserialize is called when the object is being loaded.
- Note: The addition of built-in 'serialize/deserialize' functionality allows you to more easily change it to some other serialization solution, such as XML or binary.
Map Editor:
- Maps are no longer saved as prefab objects, they are now serialized into human-readable text files. This allows users to save huge maps at a fraction of the time (saving 200x200 maps now takes less than half a second).
Turn based system:
- The turn based system is no longer treated as a 'Singleton' class, each map now has its own turn based system object which runs on all the actors registered to the map. There was never any advantage to having the turn based system be treated as a Singleton, and it just caused issues when loading a map while another was already loaded.
Pathfind system:
- The pathfinding system is no longer treated as a 'Singleton' class, each map now has its own pathfind system object which runs based on the layout of the map.
- You can still use this functionality without having to directly access the map.
Map:
- Maps flagged as 'isPersistent' are no longer kept in memory when a new map is loaded, they are now serialized and destroyed.
- Removed 'isPersistent' flag from the map structure.
FOV/Light changes:
- Light computation performance improved from N squared time to N time.
- Map objects now store a 'light color' variable, giving you the ability to have light sources emitting light of different colors.
UI:
- There is now a simple UI object which displays text of events that happen in the game, akin to what you see in most roguelikes.
General bug fixes/changes:
- Fixed teleport objects not being polled when checking FOV.
- Fixed issue with the FOV calculation taking into account a map object's solidness instead of whether or not it blocks vision when calculating light.
Version 1.3
Light/Field of view:
- Lighting system now allows you to light things based on distance from the light source, as opposed to a binary lit or unlit system. (Can be toggled on the Framework prefab, even during run-time)
- Lighting is no longer inconsistent when it comes to certain corners under certain situations.
- miscellaneous objects are no longer ignored when calculating FOV.
- greatly improved lighting calculation performance. (from 22ms to 2ms)
AI:
- actors can now become aggressive (or not) when actors not belonging to their faction get close to them.
- actors can now 'evade' unfriendly' actors, this makes sure a certain distance is kept from unfriendly actors.
- added an actor movement option of 'idle' and 'wander'.
- delegates can be used when certain events occur (going from passive to aggressive, etc).
Framework:
- Completely removed Tile.cs and all its references since it was a redundant class which offered no functionality.
- Removed 'ReplaceGeometry' due to redundancy.
Map Object:
- Removed the 'sprite' field from MapObject. It is a lot more user-friendly to simply use the sprite from the SpriteRenderer.
- Added 'object type' field to MapObject. This ensures that geometry/miscellaneous tiles are no longer oddly defined by the SpriteRenderer's drawing order.
General:
- template UI now comes built-in with the asset. It is still up to you to implement it.
Version 1.21 February 12th, 2016
Framework:
- You can now choose between instant or interpolated movement as well as the interpolation factor in the Framework prefab.
Refactors:
- Tiles no longer store information regarding 'exits', this information is now stored on a new object called 'Teleporter', which is another map Object that you can place like anything else.
- Teleports now allow you to select a map loading option such as:
- Next: Load the next map on the map list.
- Previous: Load the previous map that was loaded.
- Explicit: Load the map ID stored in the teleport.
- Same: Performs no actual loading, useful when you simply want to move the actor around the same map.
Map Editor:
- Tileset content view height is now relevant to number of tiles in the set, instead of a fixed height.
- User can now select whether they want to 'replace' or 'instantiate' tiles when they are drawn. ROG 1.2 replaces geometry which means the values of the tile you want to draw are given to the tile you selected, which is a much more efficient way of doing things, however, if you have added custom scripts to tiles, this will not work. So if you instantiate tiles, ROG will actually destroy the selected tile, and instantiate your new tile at the correct position. This is much slower however, but some users may need it.
Actor:
- Actions are no longer verified in the 'ComputeAction' function since they are assumed to have already been checked in the actor's AI, which is the case for every AI that comes with ROG and is a practice that must be standard. This basically means that all actions are no longer checked twice.
General:
- Fixed some exception messages.
Version 1.2 February 4th, 2016
General:
- Added a map editor which allows you to create maps as well as map patches.
- Player is no longer forced to go only down levels (such as always going downstairs), he can now visit previously generated maps, both procedurally or hand-crafted ones.
- Tiles, Actors and items can now emit light, as opposed to being an Actor-only feature.
- Tiles, Actors and items now have a 'MapObject' component, which allows them to set things such as whether or not they are solid, whether they emit light, etc. This gives you the flexibility to have objects that are solid but don't particularly block vision (such as glass, etc).
- minor fix to light calculations.
- General code readability improvements, major refactoring of certain classes.
New Assets:
- Added placeholder GUI assets.
- Added a number of new sprites used by new tiles and actors.
Items:
- Added 'Behaviour Pick Up' enum field to items, this allows you select whether you want the item you just picked up to be used, equipped, or simply added to the inventory.
- Added OnEquip function to items, doesn't do much, but allows you to do things when an item is equipped if you wish.
- Added 'name' field to Items, just like with actors, it's mostly cosmetic.
- Added Chest Item, which drops items on the ground based on its loot table.
AI:
- Added several useful AI functions to help you easily create complex AI behaviour.
- Actors with an AI_Follow script no longer melee attack enemies from afar.
Action:
- Added action that allows an actor to drop an item from its inventory.
- Movement actions are now correctly bound by the cost of the actor's movement speed.
Map:
- Maps now store a list of colors which is used when rendering the map. This functionality was only available through the FrameworkSettings component which has been removed. This allows you render different maps in different colors.
- Maps now store a map visibility reduction field, all light sources' visibility will be reduced by this value (as a percentage). Useful if you want to change how 'foggy' a particular map is.
MapNodes:
- Added a new tile object called miscellaneous. This tile represents things that go above the geometry, such as a fence, or a tree.
- Number of actors at a MapNode is no longer checked or relevant when calculating if the map node is walkable, instead, the actors' 'isSolid' value is checked.
- MapNode vision is no longer dictated by whether or not the geometry tile is solid. Now the 'blocks visibility' field is checked.
Map Generator:
- Added 'Is persistent' field, if a map is persistent, it means that it will not be destroyed once another map is loaded. This flag should be set to true only for maps which you plan to have the player visit several times, so that it isn't recreated every time.
- Added 'Entrance tile' field. If set, a tile will be placed where the player has spawned, which allows the player to go back to the previous map that it came from.
- Map generators now store a list of hand-crafted content called map patches, these can be placed depending on its settings.
- Improved performance of the enemy generator.
- Added MapStorer component which stores a reference to a hand-crafted map. It works much like a map generator, except that it loads a pre-made map.
- Dungeon map generator's performance was drastically improved and it no longer creates rooms at the edges of the map, this way all room are correctly surrounded by solid tiles instead of empty map edge.
- Fixed potential crash when generating dungeons.
Version 1.1 January 21st, 2016
Actors:
- Actors now belong to particular "Factions". These are very general, and refer to things such as "good guys", "bad guys", "npcs", and such. Useful for when you want certain actors to be friendly towards other particular actors.
- Actors now store a reference to an "owning" actor. Useful for when you wish to do things such as casting a spell or firing an arrow. If an arrow kills an enemy, the experience is given to the actor that owns the arrow, not the arrow itself (that would be odd).
- Added "Name" variable to Actors. Mostly cosmetic.
Actions:
- Actions now store a 'statistics' reference, just like actors.
- Actions now store a 'manaCost' reference, it is automatically depleted from the actor's statistics when the action is performed.
- Actions now compare the actor's mana value to the action's mana cost when determining if the action can be performed.
- Actions now store a 'range' reference, isn't directly used by the framework, but it's there if you need it. Defaults to 0.
Statistics:
- Stats now store a 'mana' reference. It is automatically depleted when actors use actions which have a particular mana cost.
Framework:
- Added optional variable to Framework.CreateActor which refers to an "owning" Actor. The created actor will be owned by the given actor and its faction will also be set to whatever faction the owner belongs to.
- Added function 'GetPointsAround' which returns a list of points around the given center based on radius and field of view.
Path-finding:
- It is now possible to request paths which ignore geometry. Useful if you want the absolute 'cheapest' path from one point to another. This means the computed path will not attempt to avoid obstacles such as solid tiles. For example, a fireball should follow the straightest path towards a particular point, regardless of geometry.
Map:
- MapNodes now store a list of actors instead of a single actor. Helps make it future-proof, for instance, you could allow "trap" objects to be placed at particular points in the map without forcing other actors to not walk over them. Also applies to spells, etc.
Utilities:
- Added function Ulities.MousePosition, which populates a vector2 which equals the position of a MapNode that is currently being hovered over the mouse. Useful for when casting spells towards particular locations, or getting item descriptions from items on the ground, etc.
- Added function 'GetPointsAround' which returns a list of points around a particular position based on the given radius.
Miscellaneous:
- Added fireball spell, which includes the actor, ai, and action objects.
- Improved naming convention of standard prefabs.
- General code readability improvements, slight refactoring of certain classes.