- Added Rocks container
- Added DiscreteNoise and a DIY Worley generator
- Added RockLayer
- Used to generate rock strata
- Reworked SurfaceTerrainGenerator to use contexts
- Version is now pre-alpha 2. Yay?
- Removed compass display in the lower-left
- The cross can now be hidden by pressing F1
- Does not hide LayerAbout though
- Generator spawns the player in the middle of a surface rather than at
its edge
- Removed old (pre-planet) worldgen
- TestGravityModel remains
- Moved surface generator to .logic.world.generation.surface
- Split planet generator into generator logic and config
- Logic moved to .logic.world.generation.planet
- Config extracted into TestGenerationConfig & others in .test.gen
- GravityModel renamed to Test:PlanetGravityModel
- TestTerrainGenerator utilities moved and made public thru Fields
- Reconfigured planet generator to be a passable
- Increased planet size to R=0.5 km
- Added noise-based heightmaps (fabulous cliffs included)
- Added noise-based forest density map
- Reworked all SurfaceFeatures
- TestGrassFeature now also places scatter and flowers
- TestTreeFeature and TestBushFeature:
- Common code exctracted to MultiblockVegetationFeature
- Made prettier
- gud muscle flex yeeeeeeeeeeee
- Fixed a bug in the gravity model
- A lot of other changes that I already forgot about
There was a deadlock that sometimes occurred when passing PacketSetBlock
to client: PacketSetBlock first acquired monitor of the chunk it
modified, than attempted to lock the visible chunks set. In parallel, a
chunk update first acquires the visible chunks, than the individual
chunk. Turns out, markForUpdate() doesn't need to be synchronized, so
PacketSetBlock can now acquire the locks sequentially, avoiding the
deadlock.
- SurfaceFeatures that change neighboring chunks no longer suffer from
tearing if world saving is enabled
- World saving is still disabled by default
- wontfix until we get a new, more optimized world IO system
- See GitHub issue #13 for details
- Removed WorldAccessor getter from Server. This is an implementation
detail.
- Removed SurfaceWorld, SurfaceFeature.Request (see previous commit)
- RotatingServerContext now rotates coordinates, too
- Fixed a bug caused by the implementation of push methods by
TransformingServerContext
- Fixed unbounded recursion in WorldGenericRO.hasTile(Vec3i, BlockFace,
int)
There is a problem with faces in contexts when up != POS_Z, world
crashes soon after startup
- Added TransformingServerContext - a common basis for context wrappers
that alter the coordinate space
- Added RotatingServerContext - a context wrapper that rotates the
coordinate space
- Used to ensure positive Z is up
- PacketAffectTile now checks the provided tile tag for validity
- This causes a crash when the invalid action is requested, not
executed
- TickChunk task reuses contexts
- Test:Grass now (again) randomly disappears under opaque blocks
- Fixed a truly egregious bug in AbstractContextRO.pop()
- Fixed BlockContext.pushRelative(AbsRelation)
- Some changes in toString methods in contexts
- Fixed AbstractContextRO.isSubcontexting()
- Fixed push(...) overrides in FilterServerContext
- Fixed DefaultChunkLogic.tmp_generateTickLists()
- Debug screen now also lists visible and loaded chunks
- AbstractContextRO.Frame now has a toString()
- All TickContexts including TickContextMutable are deleted
- Previous occurrences of TickContexts are replaced by appropriate
ServerContexts
- Added Context.popAndReturn methods for convenience
Current known problems:
- World does not generate properly on startup
- No bulk methods in the new API (the likes of forEachTile, etc.)
- AbsFace/RelFace ambiguity in the new API (see
TestTileLogicGrass.java:68)
- TestTileLogicGrass.java:53 is disabled for some reason
- Added DefaultServerContextLogic
- A standard implementation of ServerTileContext.Logic that delegates
all methods to a ServerTileContext instance
- Now used by DefaultServerContextImpl
- Added FilterServerContext
- A base for creating context wrappers
The intention is to bottleneck all read queries and write requests
through context objects without the need to create practically useless
Chunk, TileStack and TileRef wrappers.
- WorldGenericContext{RO,WO} no longer extend WorldGeneric{RO,WO}
- Added tag access for tiles to contexts
- Documented almost all context methods
- Renamed isBlockLoaded() to isLocationLoaded()
- I found some inner peace
- ReusableServerContext will be the default context implementation. It
is sort of implemented, but not really
- WorldLogic{,RO} now declare getData() method
- WorldGenericContextWO.removeEntity(EntityGeneric) received a default
implementation
- TileDataContext.getTag() received a default implementation
Server read-write (not RO) interfaces do not extend the complimentary
*GenericContextWO interfaces by design. It makes no sense to set a
BlockLogic, but it makes plenty of sense to refer to a ChunkData rather
than a ChunkDataRO.
*takes a deep breath
- Renamed Generic world structure interfaces to the following scheme:
{Block,Tile,Chunk,World}Generic{,Stack,Reference}{RO,WO}
(e.g. GenericWritableChunk -> ChunkGenericWO)
- RO is Read Only, WO is Write Only
- Generic writable interfaces no longer extend their read-only
counterparts (thus Write Only)
- TileGenericStack{RO,WO} are now interfaces; AbstractList is only
introduced by final implementations
- TileGenericReferenceRO now has a WO counterpart
- Fixed compilation issues with the previous commit
- Declared some additional functionality for Generic interfaces
- Old ChunkData and WorldData renamed to DefaultChunkData and
DefaultWorldData
- Now considered to be an implementation detail; references will be
minimized
- Introduced TileDataStack{,RO}, TileDataReference{,RO}, ChunkData{,RO},
WorldData{,RO} interfaces
- Suffix -RO indicates Read Only, no suffix means read-write
- To be used in place of DefaultChunk and DefaultWorld
- Designed to support wrappers and "fake" implementations
- May need some refinement (fix return/parameter types, ...)
- Surface world generator is now implemented poorly (WIP)
- Should compile. May work fine. Unless Java inheritance rules have
screwed me over.
- Added SurfaceFeature
- Used to generate chunk features
- Added SurfaceTopLayerFeature
- A superclass for features that are only concerned with editing the
surface
- Added grass, temporary bushes and temporary trees
- Bushes and trees do not generate properly due to bugs
- Added Test:TemporaryLeaves
- Added SurfaceWorld (a GenericWritableWorld wrapper)
- Added some unit tests for rotation utilities
- Fixed a whole lot of bugs
- Added GenericWritableWorld
- Moved static methods from GenericChunk to GenericChunks
- GenericEntity now declares getEntityId()
- GenericWorld now declares getEntity(long)
- Added a lambda-based mapToFaces variations for AbsFace and RelFace
- Moved some method definitions from ChunkData to GenericChunk
- Moved some method definitions from ChunkData to GenericWritableChunk
- Refactored GenericChunk including changing some method signatures
- Added some documentation for GenericChunk
- ChunkRequestDaemon now attempts to generate requested loaded non-ready
chunks upon discovery
- The server is now only specified once for WorldGenerator
- WorldLogic now actively checks the generation contract
- Renamed SurfaceScatterGenerator to SurfaceFeatureGenerator
- Renamed PlanetScatterGenerator to PlanetFeatureGenerator
- Added a very basic interface for adding generation features
- Removed debug leftovers from PlayerManager and VisionManager
- Game will now play all Vorbis files in music/ directory (at runtime)
- Random order with random pauses (15 to 60 sec)
- Force start by pressing M
- Added AudioRegistry for performance
- Speakers now can change data correctly
- Added ResourceReaders
- Classpath and Filesystem for now
- Added local controls. Use with ControlTriggers.localOf(...)
NB: No actual music files included (yet). Place them in music/ directory
of the game directory (e.g. in <project>/run/music).
- Scatter generation is now triggered properly in TestPlanetGenerator
- WorldGenerators are now required to call addChunk() themselves (again)
- ChunkManager now generates loaded chunks that are not ready
- Chunks scheduled for unloading no longer unload if they become
requested while in queue
- Collision models now rotate to match entity's general up direction
- Extracted rotation logic from RelRelation into AxisRotations
- Test:PlanetGravityModel is now properly centered
- Fixed some small bugs
- WorldData no longer acquires a GravityModel automatically
- On the server, GravityModel is specified by WorldGenerator
- On the client, GravityModel is received from the server via a
PacketSetGravityModel
- Added BlockFace - a *Face superclass
- Refactored and optimized Rel{Relation, Face}
- Replaced most AbsFace references with BlockFace or RelFace
- Chunks now have an up direction
- Determined by GravityModel's discrete up
- Static; cannot change unless chunk is reloaded
- Chunk models are now rendered rotated accordingly
- Fixed some minor bugs that were somehow revealed by these changes
- Moved TileLogicGrass to .test, where it belongs
- Disabled grass despawn until a new worldgen is implemented
- Added BlockRelation as an abstract superclass to existing relations
- Must be given an absolute "up" direction before use
- Moved AbsFace, AbsRelation and BlockRelation to .world.rels
- Renamed Face to ShapePart to reduce confusion with AbsFace
- Added GravityModel
- can specify gravity varying by location and time
- Added GravityModelRegistry
- Stored in WorldData
- Removed Minecraft gravity mode
- Re-added localization
- Currently en-US, ru-RU
- Switch with L
- Used in LayerTestGUI and the new LayerAbout
- Added LayerAbout
- Contains game named and version
- Localized
- TestLayerGUI is hidden by default
- Switch visiblity with F3
- Fixed alignment of text inside Labels
- Fixed crash reports not showing suppressed exceptions and causes
- Added Painting to demonstrate "HD" texture support
- Added RoughPaint and DecorativeBricks to decorate a house outside
- Added WhitePaint to create windows
- Added TilesSmall and TilesLarge
- Updated Glass texture to make it brighter and add streaks
- Made sure texture names had correct case
- Renamed Test:Wood to Test:Log
- Renamed Test:Time to Test:Clock
- Links in crash reports are now clickable from Eclipse
- Updated/prettified README.md
- Wrote extensive building guides
- Removed pictures/
- Removed music samples
- Made sure that git creates run/ when cloning
- Eclipse is now able to detect native dependencies correctly
- `buildPackages.sh debian' exits with correct exit code
- Renamed `require*Dependencies' to `request*Dependencies'
- Added the following Gradle tasks:
- buildLocal (alias for build)
- buildCrossPlatform (builds with all natives)
- packageDebian
- packageWindows
- Gradle no longer downloads or packages natives for wrong platforms
(unless buildCrossPlatform or require*Dependencies is run)
- Gradle should no longer complain about deprecated features
- buildPackages.sh is now a lot more robust
- Removed the following dependencies:
- Apache Commons Math
- Everything in LWJGL except OpenGL/AL, GLFW, STB and core
- Added text outlining
- Shrunk and moved compass bar (it no longer pretends to be a hotbar)
- Changed cross to match text proportions
- Refactored TileRenderSimple into TileRender{Opaque,Transparent}Surface
- Also renamed OpaqueTile into OpaqueSurface
- Added about and version info
- Added GuavaEventBusHijacker to access an inexplicably package-private
constructor in EventBus
- Added and utilized ReportingEventBus that reports caught exceptions
- Different blocks can now be placed
- Select block with (vertical) mouse wheel scrolling when block
placing is active
- All blocks except Test:Air are available
- Different tiles can now be placed
- Select tile with (vertical) mouse wheel scrolling when tile placing
is active
- Switch between placing blocks and tiles with middle mouse button,
horizontal mouse scrolling or Shift + (vertical) mouse scrolling
- Changed Test GUI text color to white to increase readability on blocks
- Recolored Test:Stones to better match granite textures
- Selection box restored
- Controls no longer get stuck after player entity is reloaded
- Moved test spawn location a little down so chunks would load
conveniently
- Moved test spawn variable into TestContent
- ShapeFragment.glsl now declares uniformColorMultiplier, which is used
as an additional fragment color multiplier (independent from VBAs)
- Managed with a new stack by ShapeRenderHelper
- Fixed dynamic font colors
- Added granite (monolith, cracked and gravel variants)
- Generates as a random combination of the variants instead of stone
on mountain cliffs
- Added snow (opaque, half and quarter variants)
- Generates at altitudes above 1500 m
- Distribution is bad atm, not fixing until proper worldgen is
introduced
- Reduced cliff areas
- Hotfixed texture flickering
- Changed dirt texture