Beta 0.7.0 released. Lugdunon finally gets a power system, automation, a new crafting discipline, new items and recipes, more sounds, support for radial menus, global properties, and bug fixes.
The Arc Power system brings new depth to the gameplay in Lugdunon. Arc Power is derived from the arcane energy that manifests itself within the natural processes of the world. By using specialized Arc Generators, energy can be harnessed from wind, water, fire, light, and even sacred spaces. Players are then free to store or use this energy to power lamps, sconces, fence gates, create complex logic circuits using logic gates and information comparators, and even automate various tasks!
Arc Power components are connected using pairs of conduits; one attached to an output of a component and the other attached to the input of another component.
There are three types of conduits:
- Energy conduits transfer Arc Pulses for the purpose of powering items.
- Matter conduits transfer matter (inventory items).
- Information conduits transfer information (text, numbers, etc).
Arc Generators produce power in pulses, called Arcs. Server admins are able to tune the pulse frequency by setting the ‘arc.pulse.reset.frequency’ world configuration property (the default is one pulse / step every 4 server frames, or 5 times per second). Arc pulses are advanced from output to input each step and will expire when they reach a terminal (component with no output configured) or they reach a magnitude of 0.
Each of the Arc Generators come with benefits and drawbacks:
- Wind Generators can be placed anywhere in the overworld to generate power but only generates 1.0 arc per pulse.
- Hydro Generators can be placed only upon water and generates 4.0 arcs per pulse.
- Geothermal Generators can be placed only upon lava and generates 4.0 arcs per pulse.
- Solar Generators can be placed anywhere in the overworld to generate power and generates 8.0 arcs per pulse, however they only actively generate power from sunrise to sunset. This also affords the Solar Generator the ability to be used a simple day/night detector.
- Nemetonic Generators can only be placed directly upon a sacred space, known as a Nemeton and generates 10.0 arcs per pulse. There are only a few Nemeta in the world, so they should be regarded as precious resources.
- Arc Batteries are charged by another Arc Generator, and can be configured to output any number of arcs per pulse.
Arc power can be routed through several types of components in order to control the flow. These components consist of:
- Splitters: takes one input arc pulse and distributes it to a maximum of 5 outputs.
- Switches: simple toggle switches that either allow or deny an arc pulse passage from its input to output. There are currently three types of basic switches:
- Toggle: a manual switch which can be triggered by a player’s ‘use’.
- Pressure Plate: a manual switch that is triggered when a player walks upon it. Keep in mind that only the owner / placer of the pressure plate can see it.
- Relay: much like the other switches, but power toggled using another arc pulse signal.
- Logic Gates: act like relays, but allow power flow only if one or more arc pulse signal inputs meet a certain requirement.
- NOT: allows power to flow if the supplied input signal is unpowered.
- AND: allows power to flow if both of the supplied input signals are powered.
- OR: allows power to flow if either of the supplied input signals is powered.
- EOR: allows power to flow only if one or the other of the supplied input signals is powered.
- NAND: allows power to flow if only one of the supplied input signals is powered.
- NOR: allows power to flow if neither of of the supplied input signals are powered.
- ENOR: allows power to flow if neither or both of the supplied input signals are powered.
- Information Comparators: also act like relays, but allow power flow only if two information inputs satisfy a comparison operation:
- EQ: allows power to flow if the information inputs are equal to each other.
- NE: allows power to flow if the information inputs are not equal to each other.
- GT: allows power to flow if the primary information input is greater than the secondary information input.
- LT: allows power to flow if the primary information input is less than the secondary information input.
Using these various components, players can construct a wide array of complex machines.
Other important Arc Components introduced in this release include:
- Information Providers: serve as a source of information for another component to consume. Examples are:
- Integer Provider: a configurable provider that supplies an integer (whole number) value.
- Decimal Provider: a configurable provider that supplies a decimal value.
- Recipe Provider: a configurable provider that supplies a crafting recipe id.
- Arc Batteries: supply various indicators of its current status (capacity, output, etc).
- Crafting Stations: supply various indicators of its current status (recipe elements assembled, total recipe elements, arc power required, etc).
- Chicken Coops: supplies the current number of eggs present.
- Matter Pumps: transfer matter (inventory items) from one component to another, based upon an agreed upon contract.
- Containers: chests and barrels can both accept and provide items through matter conduits.
- Chicken Coops: can provide eggs through a matter output conduit.
- Crafting Stations: can accept items and assemble them into a result, based upon a crafting recipe supplied via its information input conduit) that is then provided to other components.
The tooltip API has been greatly expanded to support dynamic, automatically updating content:
Using the new Arc Power system, players can automate common tasks. Currently, support is available for automatically collecting eggs from chicken coops and automated crafting stations. Look for this particular feature to be expanded further in 0.7.1 and other future releases.
To accompany the new Arc Power system, Tinkering has been introduced as a new crafting discipline, along with the expected advancement progression chain and crafting station. Tinkering is focused on the creation of items that generate, manipulate, and use arc power.
New Items and Recipes
Along with the items and recipes that are necessary for the new Arc Power system, a collection of colored wool cloth (red, orange, yellow, green, blue, and violet) has been added, as well as a crafting station dedicated to the general crafting discipline. The station, while not required for a player to craft items, is to provide the ability for general item crafting automation.
In addition to the new ambient sound effect that have been added for each of the new Arc Power generators, several UI actions have been enhanced with sound effects including: picking up and placing inventory items, placing and removing placeable items, and selecting an action bar item.
Also, by employing a double-buffered technique, the long standing bug that was causing looped sound effects to be interrupted by a short pause at each loop completion has been squashed.
Radial menus are now supported, and provide a visually pleasing method of presenting a selection of multiple actions. They are currently employed in configuring items with multiple configuration options. Expect to see radial menus used in other places in the near future!
A global properties API is now available on the server-side, and is located on the World object. Modders can store and retrieve key / value pairs using this new API when implementing an entire subsystem is not feasible for the feature they are implementing / modifying. The store is written out as a JSON object to the ~/etc/globalProperties.json file.
- Fixed the gapless playback issue with looped audio tracks.
- Fixed an issue with the mousewheel not cycling up when traversing through action buttons.
- Fixed an issue with Namespace.requireAudio() not always referencing the correct mime-type.
- Fixed an issue with the delete item dialog not clearing selection on a delete confirmation.
- Fixed an issue with net.lugdunon.util.EventProducer using call instead of apply when calling listeners.
- Fixed an issue with the win64 server download's run.bat, that was causing the mods to not be locatable. Thanks Boss for bringing this to my attention!
- Fixed an issue causing certain arc pulses to not expire when they should.
- Fixed an issue with net.lugdunon.state.character.Character.setProp() not actually setting anything.
- Fixed some issues with pulses expiring prematurely.
- Fixed an issue that was preventing unpowered fence gates from being actuated manually.
- Fixed an issues with net.lugdunon.ui.icon.IconSelectorDialog.createIconDOM that was causing the tooltip to render improperly for recipes.
- Fixed an issue with information conduits in net.lugdunon.world.placeables.PlaceableItemInstance.setInventoryItem().
- Fixed some issues with the new blend mode designation for placeable items. Effects will now display, and foreground and background layers can each have their own blend mode defined.
- Fixed some issues with needless retriggering of game.showTooltip() / game.hideTooltip() when a cursor move over a placeable is detected.
- Fixed an issue with the net.lugdunon.command.core.arc.TogglePowerCommand nor correctly informing all placeable items active on a given client.
- Fixed an issue with net.lugdunon.state.character.Character.findSlotWithItem() not looking in the crafting inventory slots.
- Fixed an issue with the net.lugdunon.state.item.tooltip.ConduitTooltipExtension not updating the first (of a pair) conduit's information immediately after being split.
- Fixed an issue with the MailCache prematurely registering itself as an updateable.
- Fixed the text shadowing in buttons.
Other Changes of Note
- Updated the Tupelo tileset, ui, and icons mod to reflect the updates that Becca had submitted for June.
- Added a Carnutian Nemeton placeable item
- Added a Santonian Nemeton placeable item
- Added a Viberian Nemeton placeable item
- Placed the 3 new Nemeton in the default game world.
- Added net.lugdunon.asset.DoubleBufferedAudio as a drop-in replacement for the Audio element.
- Images, sprite definitions, and audio elements all have an assetTag property (on the client-side), which contains the asset's key.
- Added net.lugdunon.ui.ActionButton.silent to the client-side API.
- Added a window.activeInterals property that lists the interval ids for all active intervals.
- Item defs can now specify a specific audio property for each placeable item state.
- Added net.lugdunon.world.placeables.PlaceableItemInstance. getAudio() to the client-side API.
- Added net.lugdunon.world.placeables.PlaceableItemInstance. getAudioVolume() to the client-side API.
- Added net.lugdunon.world.placeables.PlaceableItemInstance. getAudioFalloffRadius() to the client-side API.
- Added net.lugdunon.world.placeables.PlaceableItemInstance. getAudioFalloffProgression() to the client-side API.
- net.lugdunon.world.placeables.PlaceableItemInstance. isSoundEmanator() now returns true if the getAudio() function returns a result.
- Added net.lugdunon.state.mail.MailCache. newLostAndFoundMail(PlayerCharacter pc) to the server-side API.
- RemovePlaceableItemCommand now requires a player character to be set in the event that a placeable item removal was triggered by a player's action.
- Added net.lugdunon.item.Item.craftingStation boolean property.
- net.lugdunon.ui.inventory.sub.CraftingGrid now supports a 'readonly' mode for viewing automated crafting content.
- Added a readonly boolean property to net.lugdunon.ui.inventory.InventoryDialog. addInventorySlot().
- Added support in net.lugdunon.state.compendium.rest. BaseCodexRESTHandler for a 'starts with' context match in addition the already present 'equals' match.
- Added net.lugdunon.state.compendium.rest. BaseCodexRESTHandler.setStartsWith() to server-side API.
- Added support to net.lugdunon.world.defaults.compendium.craftingRecipes. CodexRESTHandler for listing only the crafting recipes currently known by a give player character. For instance, to see the recipes known for the player 'Nitocris', the corresponding URL would be: 'http://server:port/rest/net/lugdunon/state/ compendium/codex/crafting/recipes/Nitocris'.
- Added ability to flag placeable items as 'visibleByPlacerOnly'. If this flag is set to true, then the placeable item instance will not be sent to a client that is not currently playing the character that placed that item.
- Added Namespace.setNamespacedProperty(object,propertyKey,properyValue) to client-side API.
- Added net.lugdunon.world.placeables.PlaceableItemInstance. showTooltip() to the client-side API.
- Added net.lugdunon.world.placeables.PlaceableItemInstance. hideTooltip() to the client-side API.
- Added game.tooltipUpdated() to the client-side API. This is useful for dynamic tooltips that update their content, and calling this function will resize and position the updated tooltip.
- Added net.lugdunon.item.Item.visibleByPlacerOnly boolean property.
- Added net.lugdunon.state.item.Item.isVisibleByPlacerOnly() to the server-side API.
- Inventory updates can now be pushed to a client even if that client didn't initiate the action that resulted in the update.
- Added game.isTooltipVisible() to the client-side API.
- game.hideLabel() and game.hideTooltip() now clear their element's contents as well as hide the element.
- Added a lava boolean property (similar to the water property) to the terrain layer data structure.
- Added net.lugdunon.command.core.inventory. GetUserDefinedDataCommand.
- Added outdoorOnly and indoorOnly properties to item definitions.
- An items' placedLocation now also contains the inventory block.
- Added net.lugdunon.state.item.ItemCache. listItemsWithUserDefinedData() to the server-side API.
- Added net.lugdunon.state.item.ItemCache. listItemsWithPlaceableUserDefinedData() to the server-side API.
- Added net.lugdunon.state.item.ItemInstance. hasUserDefinedData() to the server-side API.
- Added net.lugdunon.state.item.ItemInstance. hasPlaceableUserDefinedData() to the server-side API.
- Added net.lugdunon.state.item.PlaceableItemInstance. getArcHandler() to the server-side API.
- Added net.lugdunon.state.item.PlaceableItemInstance. isPowered() to the server-side API.
- Added net.lugdunon.state.World.getGlobalPropertyAsInt(String key) to the server-side API.
- Added net.lugdunon.state.World.getGlobalPropertyAsLong(String key) to the server-side API.
- Added net.lugdunon.state.World.getArcManager() to the server-side API.
- Added net.lugdunon.world.environment.calendar.BaseCalendar. isDaytime() to the server-side API.
- Item instance id is now displayed in item tooltips.
- Added support for item lifecycle handlers.
- Changed the assign spell tool definition property 'spell' to 'creates'.
- Added net.lugdunon.state.character.Character. findSlotWithItem(long itemInstanceId) to server-side API.
- Added net.lugdunon.state.item.action.configure. IConfigureAction.prototype.getLabel() to the client-side API.
- Added net.lugdunon.state.item.action.configure. MultipleConfigurationActions to the client-side code base.
- Added net.lugdunon.state.item.ItemLocation to the server-side code base.
- Added net.lugdunon.state.item.ItemInstance.getPlacedLocation() to the server-side API.
- Added net.lugdunon.state.mail.MailCache.listMail() to the server-side API.
- Added net.lugdunon.state.World.setGlobalProperty(String key, Object value) to the server-side API.
- Added net.lugdunon.state.World.getGlobalProperty(String key) to the server-side API.
- Added net.lugdunon.state.World.hasGlobalProperty(String key) to the server-side API.
- Added net.lugdunon.state.World.saveGlobalProperties() to the server-side API.
As always, the full change log for 0.7.0 is available here.