Added support for gen/rune descriptions (unsocketed only)
Rune names display as Riiablo.colors.orange
Expanded PropertyList API to support some package methods
Added Stat.Instance constructor including param field
Inherent item details are printed for all items now when present
Added Stat.Instance.format() and preparing to remove Stat.Instance.format(boolean)
Added description specific to socketables ("Can be Inserted into Socketed Items")
Added support for stat aggregation
Added support for stat value adding
Organized property lists more appropriately with well-defined indexes
Disabled set item stats until support is added for only using the appropriate property list
Improved item drop labels
Created Item Details header table
Changed Entity label to be an Actor
Changed ItemHolder label to the item details header
Added copy constructor to Label
Rewrote stat format strings (should be correct)
Rewrote item details builder
Changed stat impl to use a map for item inherent stats
Added inherent stats header
Added ethereal/socket footer
Added potion right click description
Added placeholders for many item inherent stats
Added item stat name format support for most stats
Added CharStats excel
Added CharStats.Entry retrieval from CharacterClass
Fixed bug when retrieving class id from skill without a class
Added classId and CharacterClass lookups from Skills excel
Added item stat encoding support
Changed item stats to use array (items can have multiple copies of same stats, e.g., add 2 different skills)
Adjusted some item encoding count values (see issue #19)
Fixed assignment bugs within GdxKeyMapper
Added bind and unbind console command to (un)assign keys
Added key and key value suggesters
Fixed issue where controlpanel left/right skill buttons was not getting correct blendmode
Added aura icon color
Added default button state BlendMode
Changed level entry image to use BlendMode.DARKEN
Added darkenGold color
Changed darken colors to be references of existing colors (looks correct)
Clicking a SpellsQuickPanel button will hide the panel
Added SpellsQuickPanel
Added HotkeyButton assigned to MappedKey
Added Skill1-16 Keys
Button now has a customizable disabled and highlight state
Hacked together a couple skills for testing purposes
Added animation overlay support (will expand in future)
Added Entity.cast(int)
ControlPanel left and right skill corresponds and changes based on active skill
Mapped key now allows primary key as NOT_MAPPED
Added Map from string to mode index
Added Animation clamp function to play animation until over or stop at last frame
Added additional fields to excel Skills
Added excel Overlay
Added player skill levels to SpellsPanel
Increased visibility of D2S.SkillData
Added Skills class to Player to retrieve skill levels (without modifiers)
Added level entry label
Added BlendMode.TINT_ID_RED since I can't subtract RGB components
Fixed EntryFile column in Levels.Entry
Added DCWrapper which wraps a DC in an Image and adds blending functionality
Exposed a Map's act
Implemented warp interaction (hard-coded to specific offset)
Added Den of Evil (hard-coded layout)
Increased MapLoader min load to load all Act 1 DT1s (will relax a bit) and up to cave level type
Added button to show all labels for items on the ground
Fixed issue where dropped items were overwriting existing entities -- going to replace with ashley soon
Changed blockIndex back to final
Removed ability to mark blocks as deleted
Moved mpqs to MPQFileHandleResolver
Added public final references to individual mpqs
Forced gem.wav to resolve to d2sfx manually
These changes will have a lower impact when pkexplode eventually gets fixed
Fixed entities not un-setting selection on mobile
Fixed projection matrix not setting to the correct viewport
Changed auto zoom to apply if default viewport is 360p (for desktop debugging)
Changed item drop sound to play in the panels and not cursor
This resolved an issue where dropping item on the ground was playing the inventory drop sound
Added BRIGHTEN blend mode which adds some contrast and lightens image
BRIGHTEN more closely matches the in-game effect than TINT_ID
Playing around with new blend modes -- will experiment with actual HSL method as well
Added support for invisible entities, e.g., placeholders for actual entities
Added some logging for unknown DS1 objects (when no backing id can be found)
Removed virtual MPQ file support -- was for previous version where I was making fake assets
Other minor changes
See #8 on some MPQ read issues I've noticed
Copied over code and fixed some core design issues (much more to come)
Leaving in old code still for now in case some bugs were introduced
Re-designed most of the UI to be far more dynamic in its scaling
Added detection for the android soft keyboard and some UI elements will now actively display above it
Cleanup of old files (not including the old code-base)
Fixed item code 0x53 which was mislabeled
Rewrote Entity class to remove Vector3 dependency and add support for indexed fields
Console cvar completion no longer cares about character case
Added TINT_ID blend mode to add the current color to the image (will use later to highlight entities)
Added very basic controller support (namely splash and main menu)
Redesigned CharacterPreview to be a watered-down player entity instead of a completely separate code-base
Added AnimationWrapper and EntityWrapper classes to assist with adding game elements to Stage
Lots more undocumented changes
Fixed issue with font glyph sizes being slightly too short
I think this was a fix for when there was no padding between glyphs -- no adverse changes apparent yet
Added support for COF layer transforms (transparency, luminance blending, etc)
Added tint to Animation.Layer
Refactored Animation API a bit to make common use-case easier
Refactored colors order, added transparency colors
Changed audio system design to support audio instances backed by either a Sound or Music instance
Made NpcDialogBox the owner of the audio it's playing to ensure proper disposal
Added NPC dialog box support
Added customized implementation of LibGDX scrollpane
Adjusted MapListener to cancel dialog and ignore input temporarily
Changed padding of BorderedPaletteIndexedDrawable
Adjusted BorderedPaletteIndexedDrawable background bounds to be slightly smaller than border bounds
Added fontformal11 to Diablo.font
Attempted change on cancel callback behavior -- only called when upnav
Introduced some parent functions in NpcMenu to help with determining submenus
Changed menus to NpcMenu (I don't imagine the need for the generalization right now)
Added NPC menus with submenu support
Fixed issue with cursor movement stopping when touching certain actors
Changed some debug fonts to use consolas12
Changed MapListener implementation to work using client updates instead of InputListener
Fixed MapListener input flow with menus and entity targeting
Introduced Entity.getLabelOffset to replace setting label position manually per implementation
Added MapRenderer.projectScaled which is the same as Camera.project, except uses camera viewport width and height
Labels will now output using screen coordinates and clamp to window bounds
MapRenderer will now renderer more closely to the game itself
Background layer and foreground layers are now interwoven so entities will render behind correct objects,walls,etc
Shadow abstracted from animation rendering to render separately
Animation class now maintains a box that is representative of all its current layers (COF bbox is inaccurate)
Added getBox(int) to DC and began process to change implementation behavior of how animation boxes should be retrieved
Added className to Entity and Map.Zon to constituent classes
Changed how Labels are implemented in Entity
Added drawShadow method to Entity
Fixed Entity BBox checking to check for more accurate Animation BBox
Added Entity interaction range and interaction methods
Updated Entity API in Monster and StaticEntity
Added some i18n support
Added Waypoint support to StaticEntity
Fixed DS1 shadow layer
Added support for default orientation to DS1.Cell
Changed visibility of Map.Zone.map and Map.Zone.level
Added copyShadows to Map.Preset
Added Map.flags methods to retrieve flags of a specified subtile in world-space
Added MapGraphPath.isEmpty
Implemented Label support to MapListener and GameScreen
Added entity target support to MapListener
Implemented improved MapListener API to GameScreen
Added interact support to AI
Added basic greeting to Npc AI on interaction
Added support for ds1 object selection
Added additional contains methods with Vector2 (Vector3 to be removed soon)
Added MapListener which will be the primary controller for map elements
Disabled entity over updates with MapRenderer (handled by MapListener)
Increased visibility of StaticEntity fields to public
Fixed entity starting direction
Changed default angle for Player entities to -PI/2
Entities will no longer update angles to target if target is zero
Re-enabled animation speeds for walk animations
Rewrote Direction utility class to relate directions based on tile instead of unit circle
MapRenderer will not longer update angles of objects that have no target set
Added basic AI support along with NPC AI which uses built in paths/actions
NPCs will choose a random path after each arrival after their action finishes
Added support for per-entity run/walk speed along with a toggle
Added Map as a param for static/monster Entity creation along with Map.Zone
Fixed some debug drawing for entity paths
Added max steps parameter to path generation to avoid some behavior on Android with 1 unit walls
Android movement should be reimplemented as raycasting to help with moving near walls
Removed gdx-ai dependency and replaced GraphPath with my own implementation
Refactored Entity.updatePath to Entity.setPath
Removed src position from path (first element is now first target)
MapPather works in real-time -- improvements to be made
Disabled updateTask in client to use update(float) entity method instead
Added floating point position support to MapRenderer camera
Rewrote MapRenderer with optimizations for 60%+ FPS improvement!
Fixed numerous performance hogs and made optimizations (more to come)
Fixed issue where render bounds was calculated before zoom applied
Frame time on Android (GN5) down from 25ms to 10ms
Frame time on PC seeing similar results (now 0.17ms from about 0.45)
Implemented gdx-ai path finder for testing
Repo cleanup
Added support for path finding metrics for debugging purposes
Disabled some Entity debug messages
Implemented path smoothing on generated paths
Created MapGraph.MapGraphPath
MapRenderer will now render path as lines between points
Entity will clear path once final target reached
Added angle and animation support to Entity pathing
Entities will now change to run animation and set direction to target angle
Implemented basic touchpad support with new movement system
Replaced MapRenderer and MapViewer and removed any existing dependencies
Removed code comments from older revisions
MapRenderer.drawDebug changes projection matrix automatically
Added debug support for path smoothing
Added back networking to player movements
Removed old MapPather and references
Deleted Entity.move() as it's now irrelevant
Integrated path finding into Entity
Changed API a bit to accommodate reusing GraphPath
Introduced DiagonalHeuristic -- will need better one later on to include all 16 directions
Added support for StaticEntity labels
Refactored entity labels/names into Entity class -- needs optimization
Fixed issue where changing Label text wouldn't resize Label itself
Fixed issue where left padding on Label background Drawable was ignored
Added basic entity cursor focusing using backing animation bounds and MapRenderer
Added background drawable support to Label widget
Improved ColorDrawable padding calculations such that min width/height is a sum of respective padding
Disabled some mouse debugging features in MapRenderer
MapRenderer will now properly hide tiles whose mainIndexes intersect with current position poppads
Entity dirty components debug message will print string representation of flags instead of raw int
Included reference to source DS1.Object in StaticEntity and Monster classes
Added reference to DS1.Path in DS1.Object owner (assumes 1 path per object)
Moved path debug rendering to Entity from MapRenderer
Added Entity.drawDebugPath(ShapeRenderer)
Added Monster class generated from DS1 objects -- belong to Map Zones and render per-tile -- optimization needed
Refactored DS1 object generation to Entity class as static method to create type 1 or 2 entities
Updated screenshot with dynamic entities
Removed type from StaticEntity constructor (already included with Objects.Entry)
Added Excel classes for monstats and monstats2 -- optimizations can be made later
GameScreen now ignores hotkeys while chat box is open
Esc closes chat box
Closing chat box will now set text to empty string
Chat output TextArea will no longer block touch events (i.e., inventory management)
Fixed issue with single player player entity creation by blocking some packets
Fixed issue with character colormap transforms not working as intended for 0x7
Small fix for in-game chat box printing enters -- need to block key commands while typing
Added padding to in-game chat box
Removed shift to not move in-town (was not working as intended anyways)
Fixed bug with Map.find(int) returning actual GridPoint -- now returns a copy
Added workaround for set(String) in Cvar when generic type is String
Transition to entity package with refinements
Separated services into ChatServer, DedicatedServer and Sessions
Single player uses same code-base as DedicatedServer with a special loopback socket
Added SelectCharacterScreen2 copy -- will replace later on with more versatile SelectCharacterScreen impl
Some work on in-game chat
Separated Server into multiple systems (will be easier to transition to distributed servers later)
Minor entity changes -- may transition to an ECS soon