* d2loader refactor
- export sources
- asset and source both have a Path method
- make asset and source implement fmt.Stringer, which just calls Path method
- Loader.AddSource now returns the source and an error
* Update loader.go
* adding animdata loader
* utility methods, more tests, export record struct
- added methods for fps and frame duration calculation to the AnimationDataRecord
- exported AnimationDataRecord
- split the various structs into their own files
- added getter methods for retrieving records by name
- added tests for the new utility methods
* move music path enumerations into d2resource
* move text dictionary (.tbl) loader into d2fileformats sub-package d2tbl
* lint fix, add doc file for d2tbl
* moved data_dictionary.go into d2fileformats sub-package d2txt, added doc file
* added sub-packages d2geom for geometry-related things, and d2path for path-related things
* moved calcstring.go to d2calculation
* move bitmuncher, bitstream, stream reader/writer from d2common into sub-package d2datautils
* fix lint errors in d2datadict loaders (caused by moving stuf around in d2common)
* move size.go into d2geom
* move d2common/cache.go into sub-package d2common/d2cache
* renamed d2debugutil to d2util, moved utility functions from d2common into d2util
* adding logger implementation to d2common
* Adding file loader implementation
The file loader works in terms of `Sources` and `Assets`. A `Source` is
something like a filesystem that has a cache. An `Asset` is something
that implements `io.ReadSeeker` and has a few methods of its own.
There are currently `Source` implementations for MPQ archives and for the
host filesystem, meaning that one can specify a directory on the host fs to
load files from.
`Sources` are added to a loader with `loader.AddSource(path)`, where `path`
resolves somewhere on disk. In the case that the path points to an MPQ,
then an MPQ `Source` is created and added to the loader. If `path` resolves
to a directory, then a filesystem source is added.
Files are loaded with `loader.Load("data/global/excel/monstats.txt")`, and the
sources are searched in the order that they were added.
* adding tests for d2common/logger_test.go
* adding tests and testdata for d2loader
* logger lint fixes, fixed missing test case
* minor edits, lint fixes, changes some comments, embedded Logger into Loader
* moved d2loader into d2common (I dont think it belonged in d2core)
* removed my simple cache implementation in favor of our existing cache in d2common
* Set HP/Mana stats when globes are clicked
* Display HP or Mana stat when hovering over globe
* Display HP/Mana stats when hovering globe or when toggling by clicking the respective globe. Rename internal to assets and move assets package into folder.
* Adding .bmp to assets folder
* adding loaders for rare prefix/suffix records
* switch to slices instead of maps for storing rare prefix/suffix records
* rare items now use the rare prefix/suffix names
- fixed lint errors in d2interface
- removed `archived_` from interface names, was not necessary
- removed the Bitmuncher and Bitstream interfaces, as they are too specific and unnecessary
* adding debug printing boxes for entity bounds
* minor edits
- adding `spawnmon` command. currently does not have a netpacket, just for debug
- adding `GetSize` method to map entities for getting frame bounds (for debug printing)
* bug fix
* Working sound engine and sound environments
* Clean up sounds.txt loader
* Make global volume settings apply properly
Als shuffle some stuff around
* Reset sound engine on game unload
* wip d2items system and item properties
* added loader for TreasureClassEx.txt
* wip item spawn from treasure class records
* wip items
* add call to init item equivalencies, remove treasure class test from d2app
* made item affix records global var a map of affix codes to the records
* changed how item to item common record equivalency is determined
* changed set items records export to a map of their codes to the records, grouped property params into a struct
* changed property parameter field from calcstring to string
* fixed bug in stat value clone
* adding equipper interface as part of stat context, eventually to be used to resolve set bonus (among other things)
* made the item interface simpler, only needs name and description methods
* adding equipper interface, for anything that will equip or have active items
* handle case where min and max are swapped, removed commented code
* added property/stat resolution for magic, rare, set, and unique items
* adding item generator which can roll for items using treasure class records
* fixed item equivalency func being called in the wrong spot
* added item spawning
- added packet type for spawning items
- added client/server handlers for SpawnItem packets
- added map entity for items
- added simpler item provider function in diablo2item package
- added debug terminal command for spawning items
* wip d2items system and item properties
* added loader for TreasureClassEx.txt
* wip item spawn from treasure class records
* wip items
* add call to init item equivalencies, remove treasure class test from d2app
* made item affix records global var a map of affix codes to the records
* changed how item to item common record equivalency is determined
* changed set items records export to a map of their codes to the records, grouped property params into a struct
* changed property parameter field from calcstring to string
* fixed bug in stat value clone
* adding equipper interface as part of stat context, eventually to be used to resolve set bonus (among other things)
* made the item interface simpler, only needs name and description methods
* adding equipper interface, for anything that will equip or have active items
* handle case where min and max are swapped, removed commented code
* added property/stat resolution for magic, rare, set, and unique items
* adding item generator which can roll for items using treasure class records
* fixed item equivalency func being called in the wrong spot
* added loader for ItemTypes.txt
* added loader for bodylocs.txt
* lint fix for item_types loader
* adding loader for sets.txt
* minor edit
* adding loader for SetItems.txt
* added loader for automagic.txt
* entity debug rendering, with command
needed to add getter method to MapEntity interface, so that's the reasoning for changing objects/npcs/player/etc
this currently brings allocs/s up to 10 (you can check by running `fps` command, se we need to look into d2debugutils and how it handles drawing text
* reverting velocity copy, broke the map entity tests. debug display wont show velocity currently.
* adding velocity debug
* Reorganize MapEngine
This is already turning into a mess...
* Map engine selects tile index to use
Still very ugly
* Fix subtile flag combination
* Prepare randomly generated base tiles
* Restore collision viewer
* Movement works again, searches for straight paths
Paths are now d2vector slices
* Fix LOS calculation
* Fix test (I think)
* Unnecessary constructor assignments removed.
* Position implemented in d2common.Path
* Position implemented in mapEntity.Step.
* Position implemented in d2common.PathTile.
- made an enum for NPCActionType to get rid of magic numbers
- moved the enum to d2enum
- fixed lint errors in npc.go
- fixed lint errors in mapstamp.go (because it was using npc.go)
* adding ranged number type, for use in stats
* Loaded Skills.txt
* asset manager only binds terminal commands if terminal != nil
* WIP stats
* cache getter and clear methods were not implemented
* asset manager handles a nil terminal pointer
* adding skilldesc.txt loader (needs work)
* ctc stat descriptions functions working
* moving description functionality out of itemstatcost loader and into stats
* stats seem like a central part of diablo, moving into d2core.
* stats seem like a central part of diablo, moving into d2core.
* delint
* adding statlist, statlist reduction, unit tests
* minor edits to stat.go
* lint error in statlist.go
* Remove dependency on actual data from mpq files
stats unit tests now use mock data
* fixing some lint errors, formatting
Co-authored-by: Maxime Lavigne (malavv) <duguigne@gmail.com>
* Reflect and ReflectSurface benchmark.
* Rotate, NinetyAnti and NinetyClock benchmark.
* Equals, EqualsApprox, CompareApprox and IsZero benchmark.
* Benchmarks for everything else.
Also removing dead functions and commented out code and correcting typos.
* Initial test and benchmark for mapEntity.Step().
* Removed `&& !m.hasPath()` from mapEntity.atTarget
* Direction is now updated when the path node changes mid-step and target is updated when path is set.
* Test improvements.
* Deleted old benchmark function and tidying.
* d2math.Abs added.
* Abs benchmark and optimisation.
* Negate and Distance benchmark.
* Length and SetLength benchmark.
* Lerp and Dot benchmark.
* Cross and Normalize benchmark.
* Angle and SignedAngle benchmark.
* Trivial change to Vector.Abs()
* Fixed NaN on normalize 0 vector.
* Tentative implementation in getStepLength.
* mapEntity.TileX/Y removed.
* Fixed Position and Target not being initialised in createMapEntity.
* mapEntity.Position is no longer embedded.
* mapEntity.LocationX/Y no longer used outside map_entity.go.
* mapEntity.subCellX/Y removed.
* mapEntity.LocationX/Y removed.
* mapEntity.OffsetX/Y and TargetX/Y removed.
* Direction method added to Vector, returns 0-64 direction.
* Moved Vector.Direction() to Position.DirectionTo and refactored.
* Renamed RenderOffset from SubCell and tested IsZero.
* d2math.WrapInt added for use with directions.
* Tidied up position and tests.
* Refactored d2common.AdjustWithRemainder into d2mapEntity.
* Tidying up d2mapEntity.
* Final cleanup.
* Lint warnings.
* Spelling correction.
* lint updates for /d2astar
* png issue
* debug package
* load bmp properly
* debug draft
* Vector float64 (#565)
* Fixed nil pointer in Copy()
* Position added
Added Floor() and String() methods to Vector.
Also added Position which declares an embedded Vector2 and returns various forms of it.
* d2vector.Vector2 renamed to d2vector.BigFloat
* vector.go renamed to big_float.go
* Float64 stub and more renaming
* Vector value getters
* Separate vector types with initial methods.
* Divide and lint warnings.
* Distance and Length.
* Scale, Abs and Negate.
* CompareFloat64Fuzzy delta direction reversed.
* Refactor vector_test.go.
* Renamed Approx methods.
* Distance and Length.
* Distance and Length.
* Removed BigFloat and Vector, renamed Float64 to Vector, simplified tests.
* Angle, SignedAngle and other small functions.
* Receiver rename.
* SingedAngle and test fixed
* Rotate.
* SetLength.
* Cross.
* NinetyAnti and NinetyClock.
* Lerp and Clamp.
* Reflect and ReflectSurface.
* Cardinal convenience functions.
* Comments.
* Panic on NaN and Inf in Position.
* Lint warnings and comments.
* D2map lint warnings (#566)
* Comments and newlines in engine.go
* Comments and newlines in object.go
* Comments and newlines in animated_entity.go
* Comments and newlines in missile.go
* Comments and newlines in npc.go
* Comments and newlines in player.go
* Removed object.go (incorrectly merged it in during rebase).
* Comments and newlines in renderer.go.
* Comments and newlines in map_entity.go.
* Comments and newlines in walk_mesh.go.
* Comments and newlines in viewport.go and tile_cache.go.
* Comments and newlines in stamp.go and wilderness_tile_types.go.
* Comments and newlines in everything else.
* removing inventory grid test for now because it causes builds to fail on github (#570)
* Refactored d2enum (#567)
* Refactored animation mode enum
* More d2enum changes
* Refactored tile enum
* Refactored weapon class enum
* Refactored more enums
* Refactored item event enum
* Fixed init_functions animation mode
* Removed string2enum from MonsterAnimationMode
* Refactored ItemStatCost description
* Last enum lint errors
* Regenerated monster stringer file
* compressed image
* Replaced restruct with StreamReader (#574)
* Fixed bug in palette.go (#575)
* Javascript console commands (#572)
* Allow the execution of JS from the terminal when hosting a local game or playing a single game
Signed-off-by: William Claude <w.claude@thebeat.co>
* Reorganise imports on edited files
Signed-off-by: William Claude <w.claude@thebeat.co>
* Remove Reset
Signed-off-by: William Claude <w.claude@thebeat.co>
* Add inventory.txt loader, use the records (#573)
* adding resource entry for inventory.txt
* adding loader for inventory.txt
* adding call to inventory.txt loader in d2app
* d2game now uses the inventory.txt records for making the inventory panel
* removed comments
* remove unused files
* update go.mod
* lint updates for /d2astar
* png issue
* update go.mod
Co-authored-by: danhale-git <36298392+danhale-git@users.noreply.github.com>
Co-authored-by: dk <dknuth0101@gmail.com>
Co-authored-by: Intyre <Intyre@gmail.com>
Co-authored-by: William <1004323+aziule@users.noreply.github.com>
* adding resource entry for inventory.txt
* adding loader for inventory.txt
* adding call to inventory.txt loader in d2app
* d2game now uses the inventory.txt records for making the inventory panel
* Fixed nil pointer in Copy()
* Position added
Added Floor() and String() methods to Vector.
Also added Position which declares an embedded Vector2 and returns various forms of it.
* d2vector.Vector2 renamed to d2vector.BigFloat
* vector.go renamed to big_float.go
* Float64 stub and more renaming
* Vector value getters
* Separate vector types with initial methods.
* Divide and lint warnings.
* Distance and Length.
* Scale, Abs and Negate.
* CompareFloat64Fuzzy delta direction reversed.
* Refactor vector_test.go.
* Renamed Approx methods.
* Distance and Length.
* Distance and Length.
* Removed BigFloat and Vector, renamed Float64 to Vector, simplified tests.
* Angle, SignedAngle and other small functions.
* Receiver rename.
* SingedAngle and test fixed
* Rotate.
* SetLength.
* Cross.
* NinetyAnti and NinetyClock.
* Lerp and Clamp.
* Reflect and ReflectSurface.
* Cardinal convenience functions.
* Comments.
* Panic on NaN and Inf in Position.
* Lint warnings and comments.
* Add PushEffect, handle effects in renderer
* Set effects instead of blend
* Stop using PushCompositeMode, use PushEffect
* Remove remaining composite mode things
* moved filter constants back to d2enum
* moving key and mouse button enums into d2enum
* moving render type enum into d2enum
* moving input even priority enums into d2enum
* moving terminal enums into d2enum
* lint fixes for the game.go
* lint fixes for the gui_testing.go
* lint fixes for the blizzard_intro.go, map_engine_testing.go and select_hero_class.go
* added package comment for the d2gamescreen package
* fixes after merge
* Split DCC and decode direction on demand
* Clean up
* More cleanup
* Make dc6 animation it's own type
* Make base animation private
* Also decode DC6 directions on demand
* abstracted palettes, colors, and palette manager
* make asset manager use the palette manager interface
* added BGRA setter/getter, fixed lint errors
* abstraction for animation and animation manager
* abstracted font and font manager
* abstracted palettes, colors, and palette manager
* make asset manager use the palette manager interface
* added BGRA setter/getter, fixed lint errors
* abstraction for animation and animation manager
I realized that the file manager is actually managing file access
to the archives, but it's doing so through the archive manager.
I've renamed it, it's now called ArchivedFileManager because that
is really what it is.
* Fixed nil pointer in Copy()
* Position added
Added Floor() and String() methods to Vector.
Also added Position which declares an embedded Vector2 and returns various forms of it.
* Position tests improved
* Move MapEntity to d2interface
* New package d2object, first object initFun
Moves objects out to their own package and implements the very first
init function, torches/braziers now gets their animation mode set at creation.
* Apply name again
* Turn on waypoints
* Quit using ObjectLookupRecord in composite
* Unexport SetMode in map entities
* Get rid of weaponClass from MapEntity
* Pass ObjectType to composite instead of string
* Use layer weaponclass from cof
* Manage more stuff directly in composite
* Explicitly index when picking equipment
* DS1 reader no longer looks up objects
* Start of enteties managing their own equipment
* stringer and string2enum CompositeType
String2enum
* Use CompositeType stringer to simplify composite
* Finally fix GetDelimitedList
And lint issues
* NPC selects random equipment
* fixed lint issues of the package d2core/d2inventory
* fixed lint issues of the d2script package
* fixed lint issues of the d2common/d2interface package
* fixed lint issues of the d2common/d2resource package
* fixed lint issues of the d2core/d2term package
* fixed conflict errors
* Fixes#496 using ebiten.SubImage to Render Section of a Surface.
I had to add matching functions to both animation and sprite to get it to be called
for a sprite object.
* Fixed linter warning on comments for Sprite and Animation.
* Removing what's remaining of the old Sprite re-generation and caching.
* adding comments to d2interface for linter
* moved d2render renderer interfaces and types into d2interface
* fixed most lint errors for monstats loader
* de-lint d2data wip
* d2data: resolve linting errors
* adding comments to d2interface for linter
* moved d2render renderer interfaces and types into d2interface
* fixed most lint errors for monstats loader
* decouple bitmuncher to interface
* adding comments to d2interface for linter
* moved d2render renderer interfaces and types into d2interface
* fixed most lint errors for monstats loader
* String2enum ObjectAnimationMode
* Render objects at their assigned layer
Gets the orderflag from the object record and assign it to the mapentity
so the renderer can get at it.
This adds another render pass that loops through the objects.
* Get object animation speed from their txt entry
* WIP refactor of d2map stuff
* more d2map refactor
adding realm init to game client
passing map engine from client and server into realm at init
change `generate map packet` to have act and level index as data
* client explodes, but getting there
* realm now initializes, networking works, but map generators dont currently do anything
* changed the way that level type records are loaded
* fixed funcs for level data lookups
* started implementing level generator, currently crashing
* client no longer exploding
* d2networking refactor
put exports into d2client.go and d2server.go
kept GameClient and GameServer methods into their respective files
made methods for packet handlers instead of the giant switch statements
* bugfix: getting first level id by act
* minor refactor of gamescreen for readability
* towns now generate on server start, create player takes act and level id as args, levels have their own map engine
* Save/load hero stats and display them in stats panel.
* Load default hero state for characters created before saving stats was introduced
Co-authored-by: Presiyan Ivanov <presiyan-ivanov@users.noreply.github.com>
* Use integer directions for rotating map entities
* Manage composite directly in npc
* Player manages its own composite
* Split up animation mode types
Players, monsters, objects all have their own types
* Clean up AnimatedEntity
* Rename AnimatedEntity -> Object
* Keep the object txt record on hand in Object
When clicking on the other side of a wall or in an an inaccessible area,
route the player the closest possible node. This allows running along
walls and matches the original closely.
Co-authored-by: Nicholas Eden <neden@zigzagame.com>