Releases: SimNine/UrfQuest
Releases · SimNine/UrfQuest
v0.19.0
Added
- Multiplayer
- Separated game into client and server components, each of which can be run independently
- Multiple clients can connect to a single server
- Created "Logger" logging management framework
- There are multiple log levels; ALL, DEBUG, VERBOSE, ERRROR, etc
- Created static class for constants that are shared between the client and the server
- Added startup GUI for selection of client or server role, port, client name
- Added chat overlay, through which a client can send arbitrary chat messages to other clients
- Added commands and parsing of command messages
- /me, speaks a chat message in third person
- /tp, teleports issuing playing to given postion
- /give, gives issuing player the given item
- several more
- Added integration tests of client/server features
- Added mock interfaces for client/server
Changed
- The client now scans for keys each tick rather than listening for key presses and releases
- Manual print statements have been replaced with Logger.log statements
- IDs are now assigned to every entity
- IDs are now generated by an incremental value, rather than being randomly generated
- Map, entity position, and all randomly generated features are now based off of a seed
v0.18.0
Added
- Added two more water tiles, identical in behavior, with slight visual changes
- The GameBoardOverlay now increments a "tileAnimStage" counter each call to draw
- The Tiles class now contains additional BufferedImage arrays for animated tiles
- Added new "Particle" entity type; doesn't interact with other entities at all, purely for effect
- Added new BulletSplash particles; they are released when a bullet collides with something
- Added new RPG weapon
- Fires rockets in direction of facing
- Rockets do 5 damage, plus 0.15 damage for each tick within their blast radius
- Rockets release puffs of smoke as they fly
- Explosions destroy all trees within their blast radius
- Added new stone tile, can be mined (drops nothing)
- Added new iron ore tile, can be mined to get iron ore
- Added new copper ore tile, can be mined to get copper ore
- Added RPG crafting recipe: 100 gems -> 1 RPG
- Added new "tick" command
- Ticks the game a given number of times (without re-rendering each time)
- Added a new "tile interaction" highlight
- Highlights whatever tile the mouse is over within three tiles of the player
- Added ambient blockchanges; done by helper method that executes during QuestMap's update()
- Added new setblock command:
- Syntax: setblock x y type
- Added magnetic item effect: items are now drawn towards all players within a certain radius
- Added item pickup delay: items can only be picked up after a certain number of ticks (500) of being on the ground
- Added a 'held' item: this refers to an item that is held by the mouse pointer this feature will be more useful once more/better crafting GUIs are implemented
- Added a subtype of grass: grass_flower
- Added preliminary "winter mode" - purely aesthetic so far
- Added new GameWeatherOverlay
- functions as a visual filter applied overtop of the board
- currently adds a blue tint to the board and projects snowflakes
- drawback: adding this overlay considerably drops framerate
Changed
- Each entity now contains a "map" property holding the map that it is in
- Bullets now disappear when they hit trees or rocks
- Eliminated old AstralRune effect, replaced it with bullets radiating outward from player
- Bullets can now be given a custom speed
- Redid cave system; now generates much like the upper world generates, but with closed-off spaces and minable spaces
- Overhauled the item system
- Items no longer have their own classes and are now generic
- Items have an "itemType" property which determines what effects and properties they have
- Much like the tile system now
- Redid the crafting GUI
- It's a bit hackish
- A display window is added within the crafting window
- The display window displays the inputs of whichever recipe is selected
- Minimap now updates immediately once a tile is changed
- MapLink has been generalized to ActiveTile
- QuestMap now contains a grid of "ActiveTile"s (most of which are null) that will contain the locations on-grid of MapLinks, Chests, Furnaces, and all interactive tiles
- Changed magnetic pickup to have a range specific to each player
- Redid tile display system
- Tile images are now stored in a 3d array: [type][subtype][animStage]
- "Type" is the overall type of the tile; all tiles of a type have the same collision properties
- "Subtype" affects the appearance of a tile, and what items it drops
- "animStage" represents all the frames
- Moved the render ticker back to having a delay of 5ms between renders
Fixed
- Fixed bug causing the game to crash when digging into a cave
- Fixed a bug that allowed two players to pick up the same one item
v0.17.0
Added
- Added a second Player entity
- Enabled switching between the original player and the backup player by hitting 'p'
- Each player has independent inventory
- Players now have an associated current map, and maps now contain a list of players
- Projectiles now remember their source, and damage any mob other than their source
- The client will only control whichever player is selected
- Added "Rogue" mob
- Copied largely from player
- Given a shotgun, a pistol, and an SMG; chooses a different one each time it stops
- Attacks in the same manner as cyclops, but is a bit faster
- 3Has a chance of spawning in caves
Changed
- Gave hunger and mana fields to all mobs
- All items can now be (theoretically) used by all mobs
- Gave cyclopses a shotgun. Because why not
- The cyclops fires the shotgun when it is 10u away from the current player and it has a line of sight
- Cyclops now spawns in caves
- Cooldowns are now managed within items themselves
- Inventory no longer has to manage item cooldowns
v0.16.0
Added
- Added three methods to entity:
- distanceTo(e): gets the direct distance from this entity to entity e
- angleTo(e): gets the angle from this entity to entity e
- hasClearPathTo(e): computes whether this entity has a direct path to entity e
- Added two methods to mob:
- tileCoordsAtDistance(d): returns the coords of the tile 'd' away from the center of this mob in the direction it is facing
- tileTypeAtDistance(d): returns the type of the tile 'd' away from the center of this mob in the direction it is facing
- Added several new items:
- Added log item
- Added hatchet item
- When hatchet is used, if the tile one unit in front of the player is a tree, the tree is removed and a log is dropped
- Added stone item
- Added pickaxe item
- When pickaxe is used, if the tile one unit in front of the player is a boulder, the boulder is removed and stone is dropped
- Added shovel item
- When shovel is used, if the tile under the player is grass, it becomes dirt, with a 5% chance of a hole being generated
- Added new "hole" and "dirtboulder" tiles
- Inter-map link system created
- Each map now stores a hashmap of links to other maps
- When holes are created, "cave" maps are generated; each hole links to a unique cave map
- Added shotgun weapon
- Has cooldown of 400t
- Shoots 15-20 bullets in a single direction
- Added LawRune item
- Using law rune teleports the player back to their home coordinates on a given map
- Very long cooldown (1000t - maybe should be longer)
- Stackable
- Added item durability for Shovels, Pickaxes, and Hatchets
- Added rendering of miniature "durability bar" to inventory slots with durability items
- Added cosmic rune
- When used, spawns a chicken at the user's position
- 1000t cooldown (same as law rune)
- Stackable
- Added mana mechanics
- Cosmic rune use drains mana by 5.0
- Law rune use drains mana by 30.0
- Mana regenerates automatically, 0.1 per 200t
- Added a Camera class, which wraps a mob
- It is now possible to attach the camera to a mob, which it will follow
- Added a CameraMob (essentially just a dummy mob to attach a camera to)
- Added grenade item and projectile
- Short(ish) cooldown
- Has 1000t long fuse
- Explodes, creating 20 bullets which spray in all directions
- Added astral rune
- 1000t cooldown
- Disconnects the camera from the player for 1000t
- The camera remains stationary while the player can move
- Added appropriate functions in QuestGame, as there was no other reasonable place to put these methods
- Costs 50.0 mana to use
- Added an AttackRoutine class in which the attacking enemy goes directly toward the player
- Set cyclops to have AttackRoutine by default
- Added a CraftingOverlay
- Items (such as tools) can be crafted using the crafting overlay
- The user must have enough of the required items to craft an item
- Added an InventoryEntry class, a generalized display for items
- Added crafting system
- Default key: c
- Opens CraftingOverlay GUIContainer
- Contains CraftingRecipies
- CraftingRecipies contain lists of input items and output items
- When a CraftingRecipie is clicked, the player finds out if the appropriate items are available. If they are, the required items are removed, and the product items are added
- Added recipe for Hatchet and Pickaxe
Changed
- Increased accuracy of pistol and smg from (+- 10 degrees) to (+- 5 degrees)
- Merged InventoryEntry and Item classes
- Items now have all the properties and functions that InventoryEntries used to have
- Slowed down rendering clock (every 5ms to every 10ms)
- Player now spawns with a toolkit (Pickaxe, Shovel, Hatchet)
- In caves, when mining, the loot chances are as such:
- 2% to get SMG
- 2% to get Shotgun
- 6% to get Pistol
- 10% to get Law Rune
- 80% to get Stone
- Anyplace besides caves, only stone is dropped
- Weapons no longer generate on surface map; only Gems and Cheese
- Cave maps now have their center tile set as home coords
- Separated the camera completely from the player entity
- Renamed "Particle" class to "Bullet"
- Runes now generate in slightly higher frequency under rocks in caves
- Turned InventoryBar into a GUIContainer
- InventoryBar now holds ten InventoryEntries
- Replicates previous behavior, but differently
Fixed
- Minimap is now generated properly; if the map is smaller than the minimap display window, the minimap is centered in the window
- Fixed potential concurrency issue with adding new items, mobs, and projectiles.
- New items, mobs, and projectiles are now added after all processing of current entites is done
Removed
- Removed the "Overlay" class, replaced it with generalized GUIContainer class
- GUIContainers are GUIObjects that hold other GUIObjects
- Setting a GUIContainer to have a null parent makes it behave as an overlay (covering the whole screen)
v0.15.1
Added
- Added a stackable "ChickenLeg" item dropped by chickens on death 50% of the time
- Added a "fullnessBar" object to GameStatusOverlay, which displays hunger
- Player now contains a hunger counter with default size of 1000, drains hunger by one point per 1000 ticks
- Health drains by one point per 1000 ticks once fullness is empty
- Eating chicken legs increases fullness by 5, cheese increases fullness to max
v0.15.0
Added
- Addition of rudimentary AI system
- Added MobAction abstract class and MoveAction and IdleAction classes
- Added MobRoutine abstract class and IdleRoutine and FleeRoutine
- Within each entity class's update() method, the current scenario is evaluated whenever the Mob's think() method is called
- The think() method determines which routine will be used, and the routine assembles a (possibly random) order of actions
- The mob then moves according to the mob's current routine's current action
- Added AI for chicken; idles until the player is within 5 blocks, then runs away from the player until 5+ blocks away
- Added a "build mode" to QuestGame; if buildmode is activated, the player's mouse highlights the current block
- Added helper methods in QuestPanel to convert screen coordinates to game coordinates, and vice versa (some are broken)
- Added a fullscreen toggle which generates a new JFrame and JPanel when called
- Added class "Keybindings", a container for keybindings to toggle in-game functions
- Added keybinding GUI, which allows the user to bind keys to all functions
- Created another timer; one to tick the game, and one to render everything (surprise: speedup due to multithreading)
Changed
- Rebuild of entire GUI system
- Each GUIelement is now passed its relative anchor point (each corner, or the screen center)
- Moved status bars into their own class extending GUIObject
- Moved minimap into its own class extending GUIObject
- Moved inventory bar into its own class extending GUIObject
- Converted QuestGame into an overlay
- Minimap can now be toggled off completely
- Added rendering of the board's grid itself when debug is on
- Added vertical and horizontal lines to indicate where the mouse is when it is over a GUIObject
- Moved the gameboard into its own overlay
- Moved the gui (map, statusbars, inventorybar) into their own overlay
- The QuestGame is now solely a container for the logic of the game
- StatusBar GUIObject must now be instantiated with an anonymous getPercentage() method in order to display information
- Moved the full map view into its own overlay, MapViewOverlay
- When debugging, clicking on a minimap will tp the player to the point clicked
- Clicking or dragging while in build mode puts a grass tile down on the spot clicked
- Decreased bullet size from .2 to .15
- Bullets now spawn from the center of the player sprite
Full Changelog: v0.14.0...v0.15.0
v0.14.0
Added
- Added boulder variants of grass, sand, and water tiles
- Added map-specific "home coordinates", initialized as the location of the spawn area
- Added Bone item, dropped by cyclops on death
- Added death behavior for mobs
- Added full map view (opened by pressing M while ingame)
Changed
- Map terrain is now generated by three simplex noise maps instead of just one
- A distortion map (essentially just another smaller-factored terrain map) is mixed into the base terrain map
- A further distortion distribution map can limit the range of the distortion map
- Spawn area now guaranteed to be on land and not generate in the middle of a lake
- Console can now be opened by holding CTRL+F and then pressing P (even when not in debug mode)
Notes
- NEW NUMBERING SYSTEM:
- majorelease.update.bugfix_checkpoint
- This was necessary due to the size of the next update.
- The checkpoint is to ensure I don't break the code and not know how to fix it.
v0.13.0
Added
- Added "tp" command (teleports player to absolute position)
- Added "tprel" command (moves player by an offset)
- Added tile collision for mobs, in the same way that it is implemented for the player
- Added "use()" method to item, delegated pistol and smg's bullet-firing to it
- Added cooldown functionality to items, using inventory slots
- Added health functionality to mobs, and health bars that render and fade automatically
- Added sand tile (walkable and penetrable)
Changed
- Modified player class (and all mobs, by default) to use a degree-based direction system instead of a hardcoded one
Removed
- Removed the "getType()" entity method and replaced it with "instanceof" in all applicable cases
Notes
- Loader has been broken since v0.11.0
v0.12.1
Added
- Added 'mob' class as superclass of player and chicken
- Added "Cyclops" mob, moves more slowly than chicken, but in the same pattern
- Added rudimentary console, accessible by pressing F1 when debug mode is on
Changed
- Cleaned up graphics initialization of entities, tiles, player, etc
- The tree tile is now initialized as a single bufferedimage; it no longer has to be drawn with two images
v0.12.0
Added
- Added new chicken entity
- Added entities (other than the player) minimap location indicator
- Added very elementary movement for the chicken
- Added new "particle" entity type
- Added SMG weapon item
- Added ability to shoot guns (SMG and pistol); bullets currently go in random directions
Changed
- Modified game rendering so that only entities and items within 30 blocks of the player are rendered (speedup)
- Changed keybindings; space now uses items, Q now drops items
- Pistol shoots one bullet per keypress of space, SMG shoots bullets constantly
- Changed mapbuilding method privacy settings, rewrote QuestMap constructor for cleaner code
- Debug display now indicated number of items, entities, and particles currently on the map