Releases: Crypto137/MHServerEmu
Releases · Crypto137/MHServerEmu
1.0.1
General
- Did a minor optimization pass.
- Disabled EventScheduler performance warnings in Release configuration builds.
- Overhauled the login queue:
- Improved the accuracy of the place in line value displayed to clients.
- Clients that disconnect and reconnect within 10 minutes of passing the login queue are now put in the front. This is allowed once per complete queue pass to prevent abuse.
- Reduced the default value of the
MaxLoginQueueClientssetting to 8192. - Added the
BypassLoginQueueaccount flag that can be used to allow specific accounts to skip the login queue.
- Whitelist mode can now be toggled at runtime using the new
!server whitelistcommand. The initial toggle state is loaded fromConfig.inias before, and toggling it at runtime using the command does not modifyConfig.ini. - Implemented
ProfileServerFrameUnreal console command. This can be used by server administrators to investigate server performance issues in-game. - The
DisableMissionXPBonusessetting now affects only property-based experience bonuses (e.g. boosts, hero synergies). - Added PvP matchmaking buckets for 1v1/2v2/3v3/4v4.
- These are accessible via a new set of chat commands:
!pvp 1v1,!pvp 2v2,!pvp 3v3,!pvp 4v4. - The standard 5v5 PvP queue is now also accessible via the
!pvp 5v5command.
- These are accessible via a new set of chat commands:
Items
- Expanded the
SpecialsCostumesCardsTokensloot table:- Special drops may now come from a much wider variety of sources across the entire game, similarly to event drops.
- The loot table now includes Fortune Card Mark 2-6 as potential drops. The relative drop rate of Fortune Cards compared to hero tokens and costumes remains unchanged.
- All variants of The Omega Drive artifact can now drop during the Operation Omega event.
- Implemented event-specific daily login gifts.
- Implemented custom loot cooldown channel mappings to fix issues with legacy event drops. Custom mappings are loaded from
Data/Game/LootCooldownChannels.json. - Added a short cooldown to stacking boosts to mitigate issues caused by spam interacting with them.
- Legacy boost exchange vendors are now hidden in the default server configuration.
Live Tuning
- When Live Tuning is loaded, the server will now apply event-specific settings for each calendar date based on a pre-defined schedule. This can be toggled using the new
EnableLiveTuningEventssetting. - The server will now also automatically reload Live Tuning data when the daily mission reset happens (10:00 UTC+0) to refresh event settings. This can be toggled using the new
AutoRefreshLiveTuningsetting. - A list of active events is printed in chat in a secondary message of the day when you log in and when the Live Tuning data is reloaded.
- Live Tuning events are defined in the
Events.jsonandEventSchedule.jsonfiles located inData\Game\LiveTuning. You can define custom events by creating files namedEventsOverride.jsonandEventScheduleOverride.jsonin the same folder. Overrides completely replace the default data when they are loaded, so be sure to copy default events to your overrides if you want to keep them. - The following events are active in the default schedule:
- Primary Weekly Rotation
- Cosmic Chaos
- Odin's Bounty
- Operation Omega
- Mystic Mayhem
- A.R.M.O.R. Incursion
- Secondary Weekly Rotation
- Heroes for Hire
- The Wealth of Kings County
- Daredevil / Defenders
- Day of Week Specific
- Midtown Madness (Monday)
- Special Dates
- Australia Day (January 25-26)
- Lunar New Year (one week beginning on the first day of the Chinese lunisolar calendar)
- Valentine's Day (February 13-19)
- St. Patrick's Day (March 16-22)
- April Fools' Day (April 1)
- Marvel Heroes Anniversary (June)
- End of Summer (August 25-31)
- Halloween (October 26 – November 1)
- Winter Holiday (December 20 – January 2)
- Primary Weekly Rotation
- The following content that was previously always available is now event-specific:
- Cosmic Chaos
- Moondragon vendor NPC in Avengers Tower
- Odin's Bounty
- Odin's Bounty chest drops in S.H.I.E.L.D. Holo-Sim
- Operation Omega
- S.H.I.E.L.D. Omega Access Files reward for completing Shared Quests
- S.H.I.E.L.D. Holo-Sim daily missions
- S.H.I.E.L.D. vs HYDRA mission
- Rose Solomon and Baron Von Lind buffer NPCs in Avengers Tower
- Agent Dum Dum Dugan vendor NPC in Avengers Tower
- Mystic Mayhem
- Infernal Limbo game mode
- Strike on Limbo mission
- Legendary Mystic Scroll drops
- A.R.M.O.R. Incursion
- A.R.M.O.R. Research Drives reward for completing Shared Quests
- A.R.M.O.R. Defender mission
- Jocasta vendor NPC in Avengers Tower
- Daredevil / Defenders
- Orders from the Hand drops and their exchange using the event terminal
- The Wealth of Kings County
- Bundles of Cash drops
- Industry City Patrol daily missions
- Anniversary
- Bozhe Moi! mission
- Cosmic Chaos
- Implemented Live Tuning variables:
eWETV_VisibleeMTV_EventInstance
- Vendor loot tables can now be hot swapped using Live Tuning. To do this, add
VendorInventoryEntryPrototypeinstances to aVendorTypePrototypewith data patches, and then toggle loot tables via Live Tuning.
Web API
- Adjusted game performance metrics to match in-game data:
UpdateTimerenamed toProcessingTime.FrameTimenow outputs the time interval between simulation updates, which should be around 50 ms under normal circumstances.
Bug Fixes
- Fixed a game instance crash that could happen when Omega / Infinity bonuses were applied to players in different game instances at the same time.
- Fixed an issue where difficulty tier restrictions were not applied to spawned mobs and summoned entities in some cases (e.g. StarkTech Sentinels in the Axis raid).
- Fixed an issue where the
!item givecommand could not create some store-only costumes. - Re-enabled primary resource migration for heroes other than Human-Torch and Scarlet Witch.
- Disabled secondary resource migration for Ant-Man and Blade.
1.0.0
General
- Account data from 0.x versions is no longer supported.
- This applies to both SQLite and JSON database backends.
- If you try to load a 0.x SQLite database file, it will renamed with the .old extension added (e.g.
Account.db.old), and a new database file will be created. - Legacy 0.x database files are still usable with 0.x versions of MHServerEmu.
AutoUnlockAvatarsandAutoUnlockTeamUpsconfig settings are now disabled by default.- Store purchases can now be made during the tutorial if neither
AutoUnlockAvatarsnorAutoUnlockTeamUpsconfig settings are enabled. - The
!item creditchestcommand has been adjusted:- The command is now disabled by default. It can be enabled using the new
EnableCreditChestConversionconfig setting. - Conversion ratio can now be adjusted using the new
CreditChestConversionMultiplierconfig setting.
- The command is now disabled by default. It can be enabled using the new
- Mission experience bonuses can now be disabled using the new
DisableMissionXPBonusesconfig setting to imitate pre-0.8.1 behavior. - Player limits can now be enabled for hub regions using the new
EnableTownPlayerLimitconfig setting.
Live Tuning
- Global live tuning variables have been moved out of
LiveTuningData.jsoninto a separate file namedLiveTuningDataGlobal.jsonby default. - The following global live tuning variables are now set to 1.0 by default (down from 1.5):
eGTV_XPGaineGTV_LootDropRateeGTV_LootRarityeGTV_LootRarity
- Implemented the
eRTV_PlayerLimitregion live tuning variable.
Web Frontend
- Added proper MIME types for .xml and .json files served by the web dashboard.
- Improved visuals for the Eternity Splinter conversion UI and bundle information pages.
Bug Fixes
- Fixed an issue where player data loss could happen if an autosave was triggered while a region transfer was happening.
- Fixed an issue where a match region instance was created and never closed when an invite for the only player group expired (e.g. when using queue bypass).
- Fixed an issue where the event infinite loop check limit would trigger when a game instance had higher than normal processing latency.
- Fixed an issue where the !dance command was not usable for new accounts.
- Fixed various typos and incorrect translations in the Russian achievement text.
0.8.1
General
- The server has received a significant optimization pass focused primarily on physics, collision detection, and path finding. Overall it should result in noticeably more efficient memory management, reducing the frequency and length of garbage collection pauses server-side.
- Achievements have received a polishing pass.
- Merged data from
AchievementContextMap.jsonandAchievementPartyVisible.jsonintoAchievementInfoMap.json. - Added patches to fix various bugs and make legacy achievements earnable again.
- Added Russian localization for achievements.
- Merged data from
- Implemented autosaving.
- Player data is now autosaved every 15 minutes while a player remains in the same game instance.
- The autosave interval can be adjusted using the new
AutosaveIntervalMinutesconfiguration setting. Autosaves can be disabled by setting it to 0. - Autosaves supplement the existing system that saves player data on game instance transfers.
- Implemented the Ultimate Prestige system.
- Ultimate Prestige allows you to reset your Prestige level after reaching Cosmic Level 60.
- You can enable Ultimate Prestige by using the new
EnableUltimatePrestigeserver configuration setting. - When enabled, Ultimate Prestige can be activated by typing the new
!ultimateprestige activatecommand in-game. - You can see the number of times Ultimate Prestige has been activated for the current hero by typing the
!ultimateprestige levelcommand. - Please note that this is a completely custom system that is fully separate from Gazillion's Omega Prestige that was planned to be introduced in game version 1.53.
- Implemented dynamic allocation for data-only entries in the property info table. This change makes it easier to support multiple versions of the game.
- The !account userlevel command now works with user level names in addition to numerical values (e.g.
!account userlevel test1@test.com adminis now equivalent to!account userlevel test1@test.com 2).
Social
- Implemented a grace period before removing players from their current region after leaving a party.
- Implemented map discovery data synchronization between party members.
- Player names can now be blacklisted similarly to guild names by adding them to a file named
PlayerNameBlacklist.txtlocated in the Data folder.- Player name blacklist can be reloaded using the new
!server reloadplayernameblacklistcommand.
- Player name blacklist can be reloaded using the new
- Implemented a new chat tip broadcast system.
- When enabled, the server will periodically broadcast tip messages loaded from a text file to all connected players.
- This system can be enabled and configured using the following configuration settings:
EnableChatTips,ChatTipFileName,ChatTipIntervalMinutes, andChatTipShuffle.
Loot
- Added a data patch to restore the
SpecialsCostumesCardsTokensloot table, which contains fortune cards, hero tokens, and costumes. - Implemented the 250 G reward for reaching level 15 for the first time.
- Implemented mission reward scaling. This includes scaling rewards in open missions down based on contribution, as well as scaling experience rewards up for all missions based on various factors (difficulty, avatar synergy, etc.).
- Implemented stacking currency bonuses.
- Implemented gem socketing. This will remain unused until version 1.48 is fully supported, because StarkTech cubes were made unavailable in later versions.
- Implement mission reward properties. This will remain unused until version 1.48 is fully supported, because reward properties were removed from missions in later versions.
Web Frontend
- Made improvements to allow the dashboard to be used as a server for store assets:
- Implemented recursive file loading.
- Added proper MIME types when serving images.
- Implemented restricted web API endpoints that require an API key to access.
- API keys can be generated using the new
!webapi generatekeycommand. - API keys are saved to
Data/Web/ApiKeys.json. Keys can be reloaded from this file at runtime using the new!webapi reloadkeys command. - API keys are not logged, the only way to access generated keys is by reading them from the
ApiKeys.jsonfile. - Each API key has a specific access type assigned to it (e.g.
AccountManagement), which limits its functionality to a specific domain. - API keys need to be provided when making requests to restricted endpoints by adding them as an Authorization HTTP request header with a Bearer scheme (e.g.
Authorization: Bearer FFFFFFFF).
- API keys can be generated using the new
- A new set of restricted endpoints for account management has been added:
/AccountManagement/SetPlayerName/AccountManagement/SetPassword/AccountManagement/SetUserLevel/AccountManagement/SetFlag/AccountManagement/ClearFlag
Bug Fixes
- Added a patch to fix the
RaftNPEQuinjetKismetControllermission and prevent a soft lock when a player gets disconnected during the quinjet cutscene. - Fixed an issue where supergroups would not be correctly replicated to game instances when there was a duplicate login for the only member of a supergroup in a game instance hosting a hub region.
- Fixed an issue where picking up an orb that has almost disappeared as a lower level hero would result in a negative level value being used for calculating the experience reward.
- Fixed an issue where internal per-avatar PvP match counters were incremented when visiting regions that use PvP metagames without the
IsPvPflag. - Disabled primary resource migration between game instances as a workaround for hero specific mechanics not working correctly (e.g. Human Torch's Heat).
- Fixed an issue where items that replace themselves with other items on interaction would not count for achievement progress if the replacement item stacked with an existing item.
- Fixed an issue that caused some session-specific data to persist on logout while running the server with
JsonDBManagerenabled.
0.8.0
General
- Implemented the Fire & Ice PvP mode.
- This mode can be enabled using the
eGTV_PVPEnabledglobal live tuning variable.
- This mode can be enabled using the
- Implemented cell hotspots (e.g. lava in the Muspelheim raid, platforms during the Red Onslaught encounter in the Axis raid).
- Implemented damage transfer for twin boss spawns.
- LiveTuning files are now loaded from their own subdirectory located in
Data/Game/LiveTuning. - Frontend connection rate limiting is now traffic-based instead of packet-based. This should result in fewer disconnects for unstable connections, such as over Wi-Fi.
- Account downloading is now rate limited for regular users to once per 30 minutes with a burst of up to 5 downloads. This restriction is not applied to moderator and admin accounts.
- Added server-side email validation when creating accounts with behavior similar to what the client does on the login screen.
- The
HideSensitiveInformationconfig setting now uses hashing instead of masking to hide exact IP addresses from logs. !boostcommands now continue applying after switching heroes.- Implemented
!boost invulnerableand!boost manacommands. - Continued to incrementally improve optimization.
Social
- Implemented matchmaking for match regions.
- Implemented the player trade system.
- Implemented guilds (supergroups).
- Specific guild names can be blacklisted by creating a file named
GuildNameBlacklist.txtin the Data folder and adding the names you want to blacklist to it. - There is no guild persistence on server shutdown when JsonDBManager is enabled.
- Specific guild names can be blacklisted by creating a file named
- Renamed the
LogTellsconfig setting toLogPrivateChatRoomsand made it apply to party and guild chat in addition to tells.
Regions
- Implemented transition destination selection. This is used to select floors when interacting with the elevator in Avengers Tower (Invaded) in Chapter 10.
- Death release and power teleports now ignore player and party difficulty preferences and always use the current region's difficulty tier.
- Runtime entity properties (e.g. current resource amounts) now migrate between game instances if they should.
- Summon and buyback inventories now migrate between game instances.
- Enabled the "Not Droppable" affix.
- Items with this affix can be traded only via the player trade system.
- This affix will be automatically applied to existing items where needed when you log in for the first time after updating.
Loot
- Heroes now need to be "combat active" to receive loot and experience rewards for defeating most enemies. Heroes are considered to be "combat active" if they have attacked a hostile target within the last 30/60 seconds depending on the game mode.
- Entities flagged as
SpawnLootForMissionContributorsnow spawn loot for contributor players outside of the "nearby" range. - Implemented orb effect reduction based on shrinkage progress.
- Implemented additional loot drop event types:
OnHealthBelowPctHit,OnHealthBelowPct,OnHit, andOnDamagedForPctHealth.
MTX Store
- Implemented Eternity Splinter to G conversion via the "Add G" panel in the store UI.
- The
!store convertescommand can now convert a user provided number of Eternity Splinters. - Added a new config setting called
ESToGazillioniteConversionStep, which can be used to specify an Eternity Splinter to G conversion step and reduce G loss to rounding errors. - Implemented store bundles.
- Bundle web assets can now be served from a customizable CDN URL using the following config settings:
RewriteOriginalBundleUrls,BundleInfoUrl, andBundleImageUrl.
- Bundle web assets can now be served from a customizable CDN URL using the following config settings:
- Implemented gifting.
- Unlike the original Gazillion implementation, players can now send gifts only to nearby players, similar to trade. This was done to reduce potential abuse cases and for technical reasons.
- Original game settings used to limit gifting are applied and can be configured:
GiftingEnabled,GiftingAccountAgeInDaysRequired,GiftingAvatarLevelRequired, andGiftingLoginCountRequired. - Added two additional custom limit settings:
GiftingOmegaLevelRequiredandGiftingInfinityLevelRequired.
- Removed the
MHServerEmu.Billingproject.- If you have overrides for the
Billingsection in yourConfigOverride.ini, you will need to rename the section toMTXStore. - Store page URL settings in the
MTXStoresection no longer include the "Store" prefix.
- If you have overrides for the
- Overhauled catalog files.
Catalog.jsonandCatalogPatch.jsonnow have the same structure.- Catalog entries are now loaded from all JSON files with the "Catalog" prefix located in
Data/Game/MTXStore. This functions similarly to live tuning and data patches. - Additional catalog files can override existing catalog entries from files parsed first by using the same SKU id. Catalog files are parsed in alphabetical order.
- Removed
ApplyCatalogPatchandOverrideStoreUrlsconfig settings.
- Implemented Founders Pack permanent buffs.
- The original Ultimate Pack permanent buff can be unlocked using the
ConsumablePermaBuffitem. This item cannot be acquired in normal gameplay.
- The original Ultimate Pack permanent buff can be unlocked using the
- Restored the label that says "Owned" when you try to buy a costume that you already have.
Web Frontend
- Overhauled the web frontend implementation to make it easier to add and modify endpoints.
- As part of this overhaul, the
MHServerEmu.Authproject has been renamed toMHServerEmu.WebFrontend. If you have overrides for theAuthsection in yourConfigOverride.ini, you will need to rename the section toWebFrontend.
- As part of this overhaul, the
- All regular web API endpoints are now fully JSON-based.
- All endpoints now always return structured data in the JSON format. Specifying
?outputFormat=no longer does anything. - POST requests to the
/AccountManagement/Createendpoint should now contain a JSON object withEmail,PlayerName, andPasswordfields. - Removed HTML representations of individual endpoints.
- All endpoints now always return structured data in the JSON format. Specifying
- Implemented a new feature - Web Dashboard.
- The dashboard serves as the unified frontend for all other endpoints accessible from a web browser.
- It can be toggled using the
EnableDashboardconfig setting. - Dashboard files are loaded during server startup from
Data/Web/Dashboard. This directory can be customized using theDashboardFileDirectoryconfig setting. - The dashboard can be reloaded at runtime using the new
!server reloaddashboardcommand. - By default, the dashboard is served from
http://localhost:8080/Dashboard/. You can customize the URL using theDashboardUrlPathconfig setting. - If you are exposing endpoints on a public server via a reverse proxy, your API paths may differ from the default configuration. In this case you need to specify the origin suffix in
config.jsin the Dashboard directory. For example, if you expose server status viahttps://example.com/api/ServerStatus, you need to set the origin suffix to/api.
- Account creation requests now return operation result codes instead of strings.
- Implemented login rate limiting. This can configured using the following settings:
EnableLoginRateLimit,LoginRateLimitCostMS, andLoginRateLimitBurst.
Bug Fixes
- Fixed an issue that prevented the completion of the Show 'em Who's Boss legendary mission from counting for the Legend of Industry City achievement.
- Fixed an issue with party id replication that caused some client-side validation to not work correctly until the player transferred to another game instance.
- Fixed an issue where only one instance of powers that have multiple instances would be replicated to the client when a previously known entity would enter proximity.
- Fixed an issue where powers were not being completely unassigned when exiting world with more than one instance of the same power assigned.
- Fixed an issue that caused procs granted by equipment to be assigned twice when an agent (avatar or team-up) entered world. This allowed these agents to retain granted procs even after the item that granted them was unequipped.
- Fixed an issue where nullifiers in the Axis raid were not changing state correctly, preventing them from charging.
- Fixed an issue where proc powers that use a caster override were not correctly unassigned from the caster specified by the override.
- Fixed an issue where the subway transition in Upper East Side in Chapter 4 did not work and displayed a “The destination region is still downloading” message.
- Fixed an issue that allowed players to proceed to upper floors of Avengers Tower (Invaded) in Chapter 4 without completing the current floor’s objective.
- Fixed a game instance crash that could occur when purchasing items with unlimited quantities from vendors, and the destination inventory was full.
- Fixed an issue where concurrent access to uncached data in the
AchievementDatabasecould corrupt its internal state, resulting in game instances crashing whenever a player logged in. - Fixed an issue where subcommands in command groups were not case insensitive as intended.
- Fixed an issue that prevented the Fire and Ice account mission from starting after completing the Battle for Asgard mission in Chapter 9.
- Fixed an issue where the bosses during the Sisters of Magma encounter in the Muspelheim raid could become invulnerable with no health remaining.
0.7.0
General
- Overhauled game thread management, resulting in significant load balancing improvements in multiplayer scenarios.
- The number of game threads can be configured using the new
NumWorkerThreadssetting inConfig.ini. We recommend to set this value to be less or equal to the available number of logical CPUs.
- The number of game threads can be configured using the new
- Improved frame timing when running the server on Windows.
- Implemented login queues:
- Login queues can be configured using the new
ServerCapacityandMaxLoginQueueClientssettings inConfig.ini. - The following settings have been removed:
SimulateQueue,QueuePlaceInLine, andQueueNumberOfPlayersInLine.
- Login queues can be configured using the new
- Implemented Whitelist mode:
- When enabled, only accounts that have been explicitly whitelisted can log into the game.
- Whitelist mode can be enabled with the new
UseWhitelistsetting inConfig.ini. - Accounts can be added to and removed from the whitelist using the new
!whitelistand!unwhitelistcommands.
- Player data is now automatically saved when transferring between game instances.
- Player data saving can now be disabled by setting
EnablePersistenceto false inConfig.ini. - Improved the SQLite persistence layer:
- The database now uses the WAL mode, resulting in increased concurrent performance. You may now see additional .shm and .wal files in the Data directory while the server is running.
- Switched to using the SQLite backup API for creating automatic backups.
- Automatic backups are now created asynchronously.
- Migration scripts are now embedded in the
MHServerEmu.DatabaseAccess.dllfile. If you are upgrading from an older version of the server, theMHServerEmu\Data\SQLitefolder is no longer needed and can be removed. - Optimized entity queries.
- The
ConfigOverride.inifile is now automatically created on server startup if it does not already exist. - Adjusted default network settings:
- Increased the receive timeout from 30 to 60 seconds.
- Changed the Frontend bind IP to
0.0.0.0to simplify configuration for LAN play.- You still need to specify an accessible IP address in
Config.iniandSiteConfig.xmlto allow remote clients to connect to your server.
- You still need to specify an accessible IP address in
- Made changes to the web API:
- Removed performance metrics from the
/ServerStatusendpoint. - Improved the html output of the
/Metrics/Performanceendpoint. - Added the
/RegionReportendpoint.
- Removed performance metrics from the
- Players can now kill their current hero using the new
!player diecommand. This can be used if your hero or the encounter you are in gets stuck. - Improved the achievement system:
- Implemented additional achievement tracking events, resulting in more achievements being earnable.
- Fantastic Four related achievements are now earnable again.
- Implemented overrides for the
AchievementInfoMap.jsonfile that function similar to Live Tuning and prototype patches. - Added an example AchievementInfoMap override that restores unreleased party achievements. This is disabled by default.
- Implemented AI leashing.
- Continued to incrementally improve optimization.
Social
- Implemented Friend and Ignore lists.
- Implemented parties.
- Implemented the
eGTV_PartyXPBonusPctLive Tuning variable. - Implemented reviving other players by interacting with them.
- Implemented Tells (private chat messages).
- By default, the text of Tells is not included in server logs. You can configure this using the new
LogTellssetting inConfig.ini.
- By default, the text of Tells is not included in server logs. You can configure this using the new
- Server notifications are now logged with other chat messages when split logging is enabled.
- Renamed Grouping config settings:
MotdPlayerName->ServerName.MotdPrestigeLevel->ServerPrestigeLevel.
Regions
- Overhauled region instancing:
- Public regions are now processed independently from other regions, preventing lagging public regions from “dragging down” other regions with them.
- Public regions now follow expiration and regeneration behaviors defined in the original game data.
- There is now only a single instance of each hub region.
- Players can now transfer between regions within the same game instance without doing a full reload. This is mostly a backend change that results in faster loading times in some cases (e.g. transferring between Danger Room levels).
- Match regions (e.g. X-Defense, Holo-Sim, raids, etc.) are now treated as private regions. To play in these regions with other players you now need to invite them to your party.
- Private story instances (e.g. The Raft) now reset when you swap to a different hero.
- All regions now reset on prestige.
- The following instancing related settings have been removed from
Config.ini:GameInstanceCount,PlayerCountDivisor,RegionCleanupIntervalMS, andRegionUnvisitedThresholdMS.
- Players now return to the last visited hub region on logout.
- Bodysliding or using a “Travel to Base” portal now returns the player to the last visited hub region.
- Player can now return from hubs to the last bodyslide location.
- Added collision checking when entering a region to reduce overlap of players in the start location.
- Revealed map now persists for up to 8 hours on logout.
Powers
- Implemented additional power events:
DespawnTarget(used by Purifier commanders).TeleportToPartyMember.TeleportRegion(used for Surtur boss teleports in Muspelheim).
- Implemented power specs.
Items
- Implemented crafting.
- Implemented runewords.
- Implemented PetTech affixes.
- Implemented item stack splitting.
- Implemented remaining item interaction actions:
- Learning crafting recipes.
- Unlocking STASH tabs.
- Team-up experience potion.
- Opening a UI panel (e.g. Vibranium Ticket).
- Unlocking emotes.
- Updated the default store catalog:
- Removed development only costumes.
- Removed costumes that come from non-store sources (Fortune Cards, achievements, and default costumes).
- Added appropriate prices for the remaining costumes that were excluded from the store by default (e.g. Fantastic Four costumes).
- Added Fantastic Four heroes and their stash tabs.
- The
!unlock herocommand has been removed because the heroes it was added to unlock are now available in the store.
- The
- Store bundle purchases have been disabled until the bundle feature works properly to prevent players from accidentally wasting G.
- Increased the default G balance for new accounts from 5000 to 10000. This affects only accounts that log in for the first time after this change.
- Replaced the
LootDropWeightMultiplierOverridesystem with prototype patches. - The Eternity Splinter drop cooldown can now be adjusted using the new
ESCooldownOverrideMinutessetting inConfig.ini. - Eternity Splinters that drop at the same time can now be forced to drop as a single stack using the new
CombineESStackssetting in Config.ini. - Separated the
!player costume defaultsubcommand into its own command,!player disablevu. The!player costumecommand is now available only to server admins, while!player disablevuis available to all players. - Loot boxes that use the
ReplaceSelfLootTableaction (e.g. S.H.I.E.L.D. Supply Drop) no longer overflow into the Delivery Box inventory. - Added a new
!item cleardeliveryboxcommand that can be used to destroy all items in the Delivery Box inventory. - Heroes can no longer gain full experience value from orbs that were spawned for other heroes.
- Added a patch to revert the 99.9% artifact drop chance reduction introduced by Gazillion along with S.H.I.E.L.D. Supply Boosts.
Bug Fixes
- Fixed a crash when invoking leaderboard commands from the in-game chat.
- Fixed a crash when trying to reload leaderboard schedule with the leaderboard system disabled.
- Fixed an issue where the
MaxResetCountsetting allowed leaderboards to run one more time than intended. - Fixed an issue where leaderboard entries were written to the database repeatedly even if there were no changes.
- Fixed a major memory leak that occurred when players disconnected if the leaderboard system was turned on.
- Fixed a minor memory leak caused by
ItemResolverContextnot being cleared whenItemResolverinstances were returned to a pool. - Fixed a minor memory leak that occurred when entity instances failed to enter world due to their initial coordinates being outside of region bounds.
- Fixed a minor memory leak that occurred when interacting with items that use eval-based validation.
- Fixed an issue that prevented loot tables from spawning props.
- Fixed an issue where loot drops that are supposed to roll only on specific days of the week would always be eligible for rolling.
- Fixed an issue that prevented raid encounters from resetting after reaching the player death limit.
- Fixed an issue that prevented additional power spec pages from being unlockable.
- Fixed an issue where loot tables that use the
PickWeightTryAllpicking method were not using the weights specified in choice node prototypes. - Fixed an issue where that caused the inner part of Loki’s Energy Ring in phase 2 to damage players. This also makes safe spots during the Surtur fight in Muspelheim work more consistently.
- Fixed a crash related to spawners when shutting down game instances.
- Fixed an issue that caused heroes with larger collision bounds to sometimes get stuck in the terrain when switching from a smaller hero.
- Fixed an issue that prevented items that replace themselves with loot table output from rolling items with level requirements.
- Fixed an issue that prevented controlled entities with dramatic entrance animations from being affected by hidden passive powers when loading into a region.
0.6.0
General
- Implemented avatar and team-up unlocks.
- Automatic unlocks can be toggled by changing the
AutoUnlockAvatarsandAutoUnlockTeamUpssettings inConfig.ini. - Automatic unlocks are on by default for testing. This will be changed in version 1.0.0.
- Team-ups now unlock after you finish the tutorial, same as avatars.
- Added a new
!unlock herocommand, which can be used to unlock “removed” heroes (Fantastic Four and Silver Surfer).
- Automatic unlocks can be toggled by changing the
- Implemented avatar and team-up synergies.
- Implemented prestige.
- Implemented avatar-specific swap validation. This fixes the exploit that allowed you to swap to heroes that do not pass the restrictions for the current region and/or difficulty.
- Added a new
PlayerCountDivisorsetting toConfig.ini, which can be used to set the target number of players per game instance. - Implemented Prototype Patch Manager, which can be used to apply server-side changes to game data at runtime.
- Ping calculations now take server-side processing delay into account. This results in ping values being higher in general, which is more representative of the actual latency.
- Overhauled the Frontend service.
- Improved performance of network message handling.
- Improved overall reliability.
- Players will no longer get frequently disconnected on unreliable connections (e.g. when playing over Wi-Fi).
- Overhauled the command system.
- Implemented command documentation generator. Documentation for the current set of commands can be generated by using the new
!generatecommanddocscommand. - Command invocations are now logged.
- Implemented command documentation generator. Documentation for the current set of commands can be generated by using the new
- Added
!level maxomegaand!level resetomegaadmin commands. - Continued to incrementally improve optimization.
Social
- Implemented leaderboards.
- Leaderboards can be enabled by changing the value of the
LeaderboardsEnabledsetting inConfig.inito true. - By default only the three permanent leaderboards (Achievement Points, Prestige Progression, and Progression Summary) are enabled.
- Time-limited leaderboards can be enabled by modifying the
LeaderboardSchedule.jsonfile located inData\Leaderboards. Schedule changes can be applied by using the new!leaderboards reloadschedulecommand or by restarting the server.IsEnabledturns the leaderboard on or off.StartTimespecifies the reference time in the UTC+0 time zone used for calculating leaderboard resets.MaxResetCountspecifies how many times leaderboards can reset. The default value of 0 means that the leaderboard can reset indefinitely. The number of resets is calculated relative toStartTime.
- Leaderboards can be enabled by changing the value of the
- Implemented the Nearby tab of the Social panel.
- The Say and Emote chat channels are now limited to players in proximity.
- The Local chat channel is now limited to players in the current region.
- Chat player reports are now logged.
Powers
- Implemented power progression.
- Travel and ultimate powers now unlock at appropriate levels.
- Ultimate powers can now be upgraded using tokens.
- Team-ups now unlock powers as their mastery level increases.
- “Benefit While Team-Up is Away” procs now work.
- Implemented talents.
- Added a new
AllowSameGroupTalentssetting toConfig.ini, which can be used to allow talents in the same row to be active at the same time.
- Added a new
- Implemented Rogue’s Stolen Powers.
- Added new admin commands for managing Stolen Powers:
!power stealpowers– unlocks all stealable powers.!power stealavatarpowers– unlocks powers that can be stolen from other playable heroes.!power forgetstolenpowers– removes all stolen power unlocks.
- Implemented transform powers.
- Implemented secondary resource overrides.
- Implemented bonuses to numbers of power charges.
- Implemented persistent cooldowns.
- Implemented a new
!power cooldownresetadmin command, which can be used to reset cooldowns and charges. - Implemented
DamageTransferproperties. One example of how this is utilized is the Sisters of Magma boss encounter in Muspelheim, where it is used to create a shared health pool for multiple bosses.
Items
- Implemented loot vaporization.
- Implemented affixes on team-up gear that affect the avatar.
- Implemented login rewards.
- Implemented item binding.
- Item binding can be disabled in
Config.iniusing the newDisableAccountBindingandDisableCharacterBindingsettings. - Character binding is disabled by default until unbinding via the crafting system is implemented.
- The Not Droppable flag for tradable items is disabled until the trade window is implemented.
- Item binding can be disabled in
- Implemented loot spawned by interaction.
Live Tuning
- Adjusted default live tuning data:
- PvP is now disabled by default.
BirthdayCakeSlice2016andBirthdayEventPowerUpParentare no longer disabled by default to allow them to roll in non-drop contexts (e.g. leaderboard reward boxes).- The
Anniversary2017Lootloot table, which containsBirthdayCakeSlice2016andBirthdayEventPowerUpParent, is now disabled by default.
- Implemented live tuning variables:
- Global
eGTV_CosmicPrestigeXPPcteGTV_LootVaporizationEnabled
- Area
eATV_AreaMobSpawnHeateATV_AreaMobSpawnHeatReturn
- World Entity
eWETV_MobHealtheWETV_LootGroupNumeWETV_LootNoDropPercent
- Population
ePOTV_PopulationObjectWeight
- Loot
eLTTV_GroupNum
- Global
Bug Fixes
- Fixed an issue with the loot vacuum power that caused it to grant more credits than it is supposed to.
- Fixed an issue that prevented non-avatar entities from spawning loot through power events (e.g. Extra Healing Orbs affix in Danger Room scenarios).
- Fixed an issue with avatar live tuning for the client not referencing the correct prototypes.
- Fixed an issue with how negative integer and time property values are replicated to the client.
- Fixed an issue with AI-controlled agents not using the correct cooldown values when their powers are interrupted.
- Fixed an issue that made players get stuck in the throwing state when picking up throwable objects in hub regions (e.g. chairs in the S.H.I.E.L.D. Recon Post in Chapter 3).
- Fixed avatar primary resource not resetting on resurrection.
- Fixed cheat death procs not preventing death.
- Fixed an issue that prevented non-physical sources of unmodifiable damage over time from applying.
- Fixed bounds of AI-controlled world entities becoming corrupted after using a power. This fixes various desync issues, especially with enemies that move by teleporting (e.g. M.O.D.O.K.).
- Fixed an issue that caused
AIAggroRangeoverride properties to not be taken into account. - Added a workaround for an issue where controlling a mission target entity prevented mission completion.
- Fixed an issue that made the Hunting Grounds waypoint in Chapter 6 unusable.
- Fixed an issue that prevented the lifespan of entities created by summon powers from being modified by power duration bonuses on the summoner entity.
- Fixed an issue where enemies tagged by multiple powers from the same player were tracking only the last tagging power, preventing some achievements from being completeable.
- Fixed weekly commendation limit not resetting if a player fully capped their commendations in a previous week.
- Fixed
DamageMagnitudeproperty not being taken into account in damage calculations (e.g. She-Hulk’s finishers, Muspelheim boss powers). - Fixed an issue where elite enemies would get stuck in a “zombie” state when they became unsimulated at low health.
0.5.0
General
- Implemented achievements.
- Implemented alternate advancement systems (Infinity and Omega)
- Only one alternate advancement system can be active at the same time. Omega can be enabled by setting
InfinitySystemEnabledtofalseinConfig.ini. - Please keep in mind that while it is possible to enable Omega, it is not officially supported in version 1.52, and it may contain balance and/or technical issues with specific nodes.
- Removed
!player infinitypointsand!player omegapointscommands. - Added
!level maxinfinityand!level resetinfinitycommands.
- Only one alternate advancement system can be active at the same time. Omega can be enabled by setting
- Improved the population spawn priority system for cases where limited spawn placements had to be distributed among high numbers of requests.
- Implemented Danger Room region affixes.
- Overhauled team-up management.
- Team-ups will now follow you when you transition within the same region (e.g. elevator rides in tower regions).
- Team-up modes are now selectable.
- Implemented replication of audio emotes.
- You can now override specific settings from
Config.iniwithout modifying it by creating aConfigOverride.inifile.ConfigOverride.iniuses the same structure asConfig.ini.- This allows you to keep your customized settings when you update the server and override the original
Config.inifile.
- Implemented basic support for running multiple game instances.
- The current load balancing implementation puts newly connected clients into game instances with the least amount of players in them.
- The number of instances can be configured using the new
GameInstanceCountsetting inConfig.ini. - You can see your current game instance id using the
!region infocommand. - Currently it is not possible to transfer from one game instance to another. This will be improved in future versions.
- Implemented logging channels, which can be used to filter log messages by their source. These can be configured using the new
ConsoleChannelsandFileChannelssettings inConfig.ini. - Implemented outputting logs into multiple files by category (e.g. outputting chat message log into a separate file). This can be enabled using the new
FileSplitOutputsetting inConfig.ini. - Made web API pages slightly less ugly.
- Updated client connection timeouts.
- Reduced send timeout from 10 to 6 seconds.
- Added receive timeout of 30 seconds.
- Send and receive timeouts can now be configured.
- Continued to incrementally improve optimization.
Powers
- Implemented bounce powers.
- Implemented conditions (buffs and debuffs).
- Implemented over time effects (damage, healing, etc.).
- Implemented primary and secondary resources.
- Implemented health power costs.
- Implemented weapon costs (not being able to throw multiple copies of the same weapon).
- Implemented prioritized power activation queue for player input.
- Implemented additional power validation to keep clients in sync with the server. In some cases this can cause powers to be interrupted client-side if they fail to activate server-side.
- Implemented knockback effects.
- This includes both effects that knock characters back and pull towards a point.
- Implemented variable activation time calculation for hold and release powers. This allows them to deal extra damage and trigger other effects at full charge.
- Implemented powers that force teleport their target (e.g. Magik’s Step to Me).
- Implemented hit reactions.
- In most cases this interrupts and/or immobilizes enemies when they take damage.
- Implemented procs (74 trigger types in total).
- Implemented self-targeting powers (e.g. Loki’s Spirits of the Dead, War Machine’s Autogun passive).
- Implemented damage split based on the number of hit targets (e.g. Rogue’s stolen power for Lord Brimstone).
- Implemented controlled agents (e.g. Emma Frost's Psychic Domination).
- Implemented summon powers.
- Implemented power hotspots (areas that deal damage and apply other effects).
- Implemented damage shield powers.
- Implemented costume visual overrides for hit effects and conditions.
Stats
- Implemented minimum level for dynamic combat level scaling based on region.
- Implemented damage scaling for various difficulty tiers and modes across the entire game.
- Implemented damage scaling with the number of nearby players.
- The definition of “nearby” depends on the region. In general, in private regions “nearby” covers the entire region, while in public combat zones “nearby” is equivalent to about a single screen.
- Implemented primary attributes.
- Implemented damage mitigation stats (defense, block, dodge, percentage damage reduction).
- Implemented tenacity and other forms of status effect resistance.
- Implemented on hit recovery stats (e.g. health on hit).
- Implemented over time regen stats (e.g. health regen).
- Implemented various conditional damage modifiers.
Items
- Implemented consumable items that unlock vanity titles.
- Implemented character token loot boxes. Character tokens themselves are currently not usable.
- Reduced the default spacing of loot on the ground from 32 to 20 units.
- Added a new
LootSpawnGridCellRadiussetting toConfig.ini, which can be used to configure loot spacing. - Implemented a new
!item creditchestcommand, which can be used to convert 500 000 credits into a chest item that can be sold for the same amount of credits. - Implemented spendable Gs.
- Initial G value for new accounts is set to 5000. This can be adjusted using the new
GazillioniteBalanceForNewAccountssetting inConfig.ini. - Gs can be acquired by converting Eternity Splinters via the new
!store convertescommand. This command converts 100 Eternity Splinters to the equivalent number of Gs using theESToGazillioniteConversionRatiosetting inConfig.ini. - The default conversion ratio is set to 1:2.25 (225 Gs for 100 Eternity Splinters), which is what Gazillion used to price heroes.
- Accounts created before spendable Gs were implemented are considered “new” in terms of G balance and will receive the configured initial amount for new accounts when they log in.
- Accounts with admin privileges can use the new
!store addgcommand to grant themselves arbitrary amounts of Gs at no cost.
- Initial G value for new accounts is set to 5000. This can be adjusted using the new
- Implemented region loot table overrides. This is used primarily in regions that distribute loot via chests with variable rewards (e.g. Holo-Sim, X-Defense, Danger Room).
Live Tuning
- Live tuning will now be loaded from all json files that start with
LiveTuningDatalocated inData\Gamein alphabetical order. - Implemented
LootDropWeightMultiplieroverrides, which can be configured by editingData\Game\LootDropWeightMultiplierOverrides.json.- This can be used to allow some removed items, like Fantastic Four insignias, to drop again.
- Multiple
LootDropWeightMultiplierOverridesfiles can be placed inData\Game, and they will all be loaded in alphabetical order, same as LiveTuningData. - You must restart the server to apply
LootDropWeightMultiplieroverrides.
- Implemented live tuning variables:
- Global
eGTV_OmegaXPPcteGTV_InfinityXPPcteGTV_RespectLevelForOmegaXPeGTV_RespectLevelForInfinityXPeGTV_BoostTimersRunning
- Power
ePTV_PowerCostePTV_PowerDamagePVEePTV_PowerDamagePVP
- WorldEntity
eWETV_MobPowerDamage
- Condition
eCTV_Enabled
- Global
Bug Fixes
- Fixed a bug that made missions triggered by level ups not completeable if the player did not open the mission notification before logging out or transitioning to another region.
- Fixed a bug that made AI controllers ignore active combo powers. This fixes the behavior of various enemy and team-up powers across the entire game, including charge and teleport movement powers being interrupted, as well as characters moving around when they are not supposed to.
- Fixed a bug that caused some player powers to be interrupted before their effect was applied in some circumstances.
- Added a safeguard against the server being stuck in an infinite error loop when listening for new client connections.
- Fixed missile powers not scaling with user stats.
- Fixed an issue that was causing the same base item type to drop multiple times in a row in some circumstances.
- Fixed an issue that prevented loot table modifiers (level offset, forced rarity, etc.) from being applied to tables rolled for missions, vendors, and items that replace themselves with loot (chests, fortune cards, etc.).
- Fixed an issue that caused loot to drop 3 item levels lower than it should in most circumstances.
- Fixed an issue with the server’s float value rounding behavior not matching the client in some cases.
- Fixed an issue that prevented items from being spawned via the population system (e.g. evidence briefcases in Danger Room scenarios).
- Fixed an issue that caused the elevator in the cosmic difficulty of Midtown Patrol to lead to the original version of Hell’s Kitchen in Chapter 1.
- Fixed a number of issues that could get heroes stuck in throwing state, not being able to do anything.
- Fixed an issue that caused rollover channel loot cooldowns to not be set (e.g. daily shared quest bonus).
- Fixed an issue that prevented beam sweep powers (e.g. Agent Coulson’s Destructive Sweep) from applying their effect more than once, as they should.
- Fixed an issue that made powers unusable when cooldown modifying effects were applied to them.
- Fixed an issue that prevented flat cooldown reduction effects (e.g. Punisher’s Reload) from applying.
- Fixed an issue that prevented bosses in triple Skrull boss encounters from using some of their powers.
- Fixed an issue the caused scheduled events to sometimes trigger in incorrect order at subframe precision (less than 50 ms).
- Fixed a number of bugs that caused locomotion state desync in some sitati...
0.4.0
Missions
- Implemented story missions. The entire story from the Prologue all the way to Chapter 10 is now playable.
- Implemented legendary missions.
- Implemented shared quests.
- Implemented daily and weekly influence missions.
- Implemented region events.
- Implemented discoveries.
- Implemented metagame-based game modes:
- Patrols (Midtown, Brooklyn, Hightown)
- Cosmic Trial
- X-Defense
- S.H.I.E.L.D. Holo-Sim
- The Age of Ultron
- Infernal Limbo
- Danger Room
- Overhauled the region population system. Mobs and NPCs now spawn dynamically based on what is happening in the region.
- As a result of this, the
WorldEntityRespawnTimeMSsetting no longer makes sense and it has been removed from Config.ini.
- As a result of this, the
- You can now earn bounty chests by defeating enemies in terminals.
- Terminals now reset automatically when you exit the region after defeating the boss. Resetting them manually via the !instance reset command is still possible.
- Match regions are now capped at their intended maximum number of players.
Loot
- Implemented item affix generation.
- Implemented non-item loot types: orbs, currencies, experience points, and more.
- Implemented cooldown-based drops (Eternity Splinters, Cube Shards, etc.).
- Implemented buying items from vendors (including buying back sold items).
- Implemented vendor leveling.
- Implemented legendary item leveling.
- Implemented relics.
- Implemented rare item find (RIF), special item find (SIF), and credits bonuses.
- Implemented various bonus experience sources.
- Implemented loot box items that replace themselves with loot on interaction. This includes fortune cards, story rewards boxes, and more.
- Note: Loot boxes that spawn loot in the game world (e.g. Odin’s Bounty) are not yet implemented.
- Implemented highlights for recently added picked up items and items moved to stash tabs that are not currently being viewed.
- Implemented vanity title unlocking and selection.
- Note: Most sources of vanity title rewards are still not in the game.
- Implemented grid-based loot spawn positions.
Difficulty
- Implemented dynamic combat level (DCL). Enemies across the entire game now scale to your character’s level.
- Implemented difficulty selection. Difficulty currently affects rewards, but does not make combat harder.
- Implemented enemy affixes.
Miscellaneous
- Map exploration now persists when you return to a region.
- Waypoints now need to be unlocked.
- Retargeted the project to .NET 8. The server now requires you to have the .NET 8 Runtime installed to run.
- Implemented various optimizations. This results in improved server startup times (up to 40% in certain scenarios) and reduced game simulation stuttering.
- Improved the save timeout system to mitigate rollbacks under very high load.
- Updated the setup tool:
- Renamed the executable to Setup.exe for clarity.
- Enabled single-file publish.
- Improved game client detection.
- Implemented a Linux compatibility mode.
- This mode can be enabled by using the new
!account togglelinuxmodecommand. - Please not that while enabling this mode will allow you to log in using a patched client running on Linux, it disables certain incompatible security measures and will make your account more susceptible to theoretical session hijacking attacks. We do not recommend to use this feature on public servers.
- This mode can be enabled by using the new
- Updated the build process to automatically include the correct version of the SQLite interop library on Linux.
- Implemented performance metrics. These can be accessed using the new
/Metrics/Performance APIendpoint.
Bug Fixes
- Fixed an issue where enemies that have multiple loot table for different difficulty tiers would roll all of them.
- Fixed an issue that caused charge powers to get stuck at 0 charges when transitioning within a region (e.g. going from one floor to another) or swapping to another hero.
- Fixed various issues related to multithreading and server lag.
- Fixed two memory leaks related to entities not being cleared after shutting down their regions.
- Fixed enemies running in place when idle.
- Fixed map icons for distant entities not being able to rotate to bottom left directions.
- Disabled boss teleport powers that caused desynchronization issues between the client and the server. These will be re-enabled in a future update once all the issues are resolved.
Live Tuning
- Implemented global tuning variables:
eGTV_VendorBuyPriceeGTV_VendorXPGaineGTV_LootSpecialDropRateeGTV_LootRarityeGTV_RespectLevelForGlobalXPeGTV_RespectLevelForGlobalRIFeGTV_RespectLevelForGlobalSIFeGTV_RespectLevelForAvatarXPeGTV_RespectLevelForRegionXPeGTV_ServerBonusUnlockLevelOverride
- Implemented world entity tuning variables:
eWETV_MobDropRateeWETV_MobSpecialDropRateeWETV_MobDropRarityeWETV_VendorEnabledeWETV_EternitySplinterPrice
- Implemented avatar tuning variables:
eAETV_BonusXPPcteAETV_EternitySplinterPrice
- Implemented region tuning variables:
eRT_BonusXPPcteRT_BonusItemFindMultiplier
0.3.0
General
- Implemented powers.
- Powers now deal damage when you hold the button down.
- Powers now deal damage to all enemies in their effect radius.
- Powers now have proper activation timing (damage is now dealt during the contact frame rather than instantly).
- Throwable objects now deal damage.
- Powers that have charges now consume charges.
- Added an option called
DisableMovementPowerChargeCostthat disables power charge consumption for player movement powers.
- Added an option called
- Implemented base damage calculations based on tooltip formulas.
- Implemented critical and brutal strike chance and damage multiplier calculations.
- NOTE: Not all power mechanics are currently implemented. Powers that rely on unimplemented mechanics may not deal damage or do anything at all. Unimplemented power mechanics include: resources, conditions (buffs and debuffs), hotspots (areas that deal damage, heal, etc.), summons, bouncing, and more.
- Implemented AI for enemies and friendly NPCs.
- Implemented team-ups and vanity pets. Summoned team-ups persist when transferring between regions or logging out.
- Implemented death and resurrection for avatars and team-ups.
- Overhauled the persistence layer:
- The server now saves player data, avatars, team-ups, items, and controlled entities. This means your progress and inventory contents will no longer be wiped when transferring between regions or logging out.
- Implemented automated database file migration for backward compatibility with save data from older versions of the server.
Account.dbfile will now be created on server startup if it does not exist.- Implemented automatic backups of saved data. By default the server saves up to 5 backups with an interval of at least 15 minutes between them. Backup number and frequency can be changed in the
Config.inifile.
- Implemented avatar and team-up leveling.
- Implemented live tuning. Tuning variables can be adjusted by editing the
LiveTuningData.jsonfile and applied by invoking the !server reloadlivetuning command in the server console. - Non-critical errors will now shut down the game instance and disconnect players instead of shutting down the entire server.
Items
- Implemented loot tables. Quality and base types should be mostly accurate, but items currently have no affixes.
- Implemented per-player instanced loot. Instanced loot can be disabled in the
Config.inifile. - Items “purchased” in the in-game store are now added to the player’s inventory.
- Implemented itemized costumes.
- Implemented stash tab unlocks and customization.
- Implemented selling items to vendors.
- Implemented the first iteration of the loot vacuum.
- Implemented expiration timers for items lying on the ground.
Regions
- Implemented private region instances.
- Only you have access to your private instances. In the future parties will also be able to access private instances of the party leader.
- Enemies no longer respawn in private instances.
- You can see your active private instances using the new
!instance listcommand. - Private instances reset every 5-10 minutes with default server settings. You can reset your private instances manually using the new
!instance resetcommand. You cannot reset the instance you are currently in using this command, so you need to move to another region first. Private instances also reset when you log out.
- Implemented faraway point of interest indicators.
- Using transitions to teleport within the same region now snaps the camera to to the target location rather than doing interpolated movement through environment.
- Using transitions to teleport within the same region with a loading screen (e.g. using an elevator transition in a tower region) no longer causes the player to fully re-enter the region, making loading times faster.
- If you get stuck in an infinite loading screen by warping into an unsafe region that the client does not have assets for, you will now be returned to the default hub region on your next login.
Miscellaneous
- Implemented an option to apply maximum health magnitude bonus to all player avatars via the configuration file. This is a temporary option to compensate for the lack of stats from equipment, and it will be removed at some point later on.
- Implemented JSON output for the web API.
- Implemented
!account downloadcommand that allows you to download your account’s data. This data can be used when playing offline on your own server. - Implemented a number of optimizations:
- Optimized memory management of vector math data structures.
- Optimized handling of network traffic.
- Optimized entity property parameter decoding.
Major Bug Fixes
- Fixed an issue that prevented some of the larger avatars from being able to drop items on the ground.
- Fixed an issue that made it possible for the current avatar to get outside of the player’s area of interest, making it disappear on the client.
- Fixed an issue that was causing some client messages to be be ignored by the server, especially when there were many small messages arriving in a short period of time.
0.2.0
Second stable release.
Major New Features
- Overhauled the area of interest system: clients are now notified of what is happening on the server in real time, allowing you to, for example, see enemies respawn.
- Implemented multiplayer: you can now see other players logged into the same server in-game and interact with them.
- Avatar swapping now happens in-game with no loading screens.
- Implemented the inventory system: you can pick up and drop items to the ground, stack them, equip and unequip them, see items equipped on nearby avatars. Currently there is no inventory persistence, so inventories are wiped when you log out or transfer between regions.
- Enemies now drop loot. Currently the loot system uses a placeholder loot table for all enemies, and there is no affix generation. The placeholder loot table includes crafting elements, relics, artifacts, rings, runeword glyphs, costumes, and pets.
- Implemented the navi system: the server now has a representation of the world geometry, which we currently use for basic collision detection when spawning enemies and dropping items. In the future this will also be used for systems such as pathfinding and AI.
- Implemented physics and locomotion systems, which makes it possible to synchronize world entity movement between clients.
Other Changes
- Overhauled server architecture: the server is now divided into replaceable services.
- Improved handling of situations when multiple clients are attempting to use the same account.
- Implemented saving and loading of the default account data used when authentication bypass is enabled.
- Overhauled archive serialization and protobuf message parsing.
- Overhauled game simulation timing and event scheduling.
- Implemented in-engine cutscene playback for prologue regions.
- Implemented default configuration values, allowing the server to start with options missing in the Config.ini.
- Region cleanup and entity respawn intervals are now configurable.
- Implemented various new chat commands. Here are some of them:
- !item give [pattern] – searches for an item prototype matching the provided pattern, generates an item and adds it to the player’s inventory.
- !item drop [pattern] – searches for an item prototype matching the provided pattern, generates an item and drops it to the ground.
- !region warp [pattern] – searches for a region matching the provided pattern and teleports the player there.
- !server broadcast [text] – broadcasts a notification to all players on the server.
- Implemented world entity power collections, which makes it possible to add and remove powers available for specific world entities to use.
- Implemented world entity condition collections, which makes it possible to add and remove condition effects (buffs and debuffs) to/from world entities.
- Implemented various game data tables that are used to simplify access to some of the data contained in the game database.
- Numerous other small optimizations and improvements.