HerculesWS Hercules Versions Save

Hercules is a collaborative software development project revolving around the creation of a robust massively multiplayer online role playing game (MMORPG) server package. Written in C, the program is very versatile and provides NPCs, warps and modifications. The project is jointly managed by a group of volunteers located around the world as well as a tremendous community providing QA and support. Hercules is a continuation of the original Athena project.

v2024.04-rebalance

1 week ago

General changes

Rebalance changes

2-1 Classes

  • Rebalance of the 2-1 job skills, implementation based on kRO and kRO zero patch notes from 2018-10-31, iRO Wiki, rAthena and divine pride info, along with some in-game testing. (#3223, part of issue #2727)
Knight
  • Rebalance of KN_BOWLINGBASH (Bowling Bash)
    • Area of effect: 3x3 -> 5x5 centered on target
    • Number of hits changed
      • 2-handed weapons: number of hits depend on number of targets
        • 1 target: 2 hits
        • 2 ~ 3 targets: 3 hits
        • 4 or more targets: 4 hits
      • other weapons: 2 hits
    • Variable cast time removed
    • Knockback increased: 1 cell -> 5 cells
    • 1 second cooldown added
    • After using the skill, caster can't switch weapons for 1 second
    • Gutterline feature removed
  • Rebalance of KN_BRANDISHSPEAR (Brandish Spear)
    • Changed damage type: Short range physical -> Long range physical
    • Damage formula changed
    • Removed variable cast time
    • Added 0.5 s delay after skill
    • Added 1 s cooldown.
    • SP consumption increased: 12 -> 24.
    • After using the skill, caster can't switch weapons for 1 second
  • Rebalance of KN_TWOHANDQUICKEN (Two-Hand Quicken)
    • Gives additional 10% of ASPD (as equipment ASPD)
    • Now gives HIT +(2 * SkillLevel)
    • Now gives CRIT +(2 + SkillLevel)
  • Rebalance of KN_CHARGEATK (Charge Attack)
  • Fixed and variable casttime removed
  • Added Cooldown of 0.5 s
Blacksmith
  • Rebalance of BS_ADRENALINE (Adrenaline Rush)
    • Gives additional ASPD +10% to caster and party members (as Equip ASPD)
    • Added HIT +(5 + 3 * SkillLevel) effect to caster and party members
  • Rebalance of BS_OVERTHRUST (Over Thrust)
    • Weapon destruction chance removed
    • Party members bonus changed based on skill level: 5% / 5% / 10% / 10% / 15%
Assassin
  • Rebalance of AS_SONICBLOW (Sonic Blow)
    • Attack motion removed
    • Damage formula changed
    • Skill now does 50% more damage if target has less than 50% HP
    • Skill modifier is no longer halved when Enchant Deadly Poison is active
    • Global delay reduced: 2 s -> 0.5 s
    • 1 s cooldown added
  • Rebalance of AS_SPLASHER (Venom Splasher)
    • Damage formula changed
    • Explosion delay changed
    • Cooldown changed
    • Red Gemstone requirement removed
    • Explosion damage no longer splits between targets
Wizard
  • Rebalance of WZ_VERMILION (Lord of Vermilion)
    • Damage formula changed
      • Old: (100 ~ 330)% x 4 waves (10 hits each)
      • New: [400 + (Skill Level x 100)]% x 1 wave (20 hits)
    • Fixed casting time changed
      • Old: [2.48 - (Skill Level × 0.08)] s
      • New: 1.5 s at all skill levels
    • Variable casting time changed
      • Old: [9.92 - (Skill Level × 0.32)] s
      • New: [6.5 - (Skill Level × 0.2)] s
    • Global delay of skills reduced
      • Old: 5 s at all skill levels
      • New: 1 s at all skill levels
    • 5 s cooldown added
    • Chance of causing blind effect increased
  • Rebalance of WZ_METEOR (Meteor Storm)
    • Fixed casting time reduced
      • Old: 2.4 s at all skill levels
      • New: 1.5 s at all skill levels
    • Variable casting time reduced
      • Old: 9.6 s at all skill levels
      • New: 6.3 s at all skill levels
    • Global delay of skills reduced
      • Old: 2 ~ 7 s
      • New: 1 s at all skill levels
    • Cooldown added: [2 + (Skill Level x 0.5)] s
  • Rebalance of WZ_STORMGUST (Storm Gust)
    • Fixed casting time changed
      • Old: [0.8 + (Skill Level * 0.16)] s
      • New: 1.5 s at all skill levels
    • Variable casting time changed
      • Old: [3.2 + (Skill Level * 0.64)] s
      • New: [4.3 + (Skill Level * 0.2)] s
    • Global delay of skills reduced
      • Old: 5 s at all skill levels
      • New: 1 s at all skill levels
    • 6 s cooldown added
    • Damage formula changed
      • Old: (100 + 40 * Skill Level)% MATK
      • New: (70 + 50 * Skill Level)% MATK
  • Rebalance of WZ_JUPITEL (Jupitel Thunder)
    • Fixed casting time changed
      • Old: [0.32 + (Skill Level × 0.08)] s
      • New: 0.5 s at all skill levels
    • Variable casting time changed
      • Old: [1.28 + (Skill Level × 0.32)] s
      • New: [1.8 + (Skill Level × 0.2)] s
  • Rebalance of WZ_EARTHSPIKE (Earth Spike)
    • Damage formula changed
      • Old: 100% per hit
      • New: 200% per hit
    • Fixed casting time changed
      • Old: (Skill Level x 0.112) s
      • New: 0.2 + (Skill Level x 0.2) s
    • Variable casting time changed
      • Old: (Skill Level x 0.448) s
      • New: 0.7 + (Skill Level x 0.5) s
    • Global delay of skills reduced
      • Old: 0.8 + (Skill Level x 0.2) s
      • New: 0.9 + (Skill Level x 0.1) s
  • Rebalance of WZ_HEAVENDRIVE (Heaven's Drive)
    • Fixed casting time changed
      • Old: (Skill Level x 0.16) s
      • New: 0.8 s at all skill levels
    • Variable casting time changed
      • Old: (Skill Level x 0.64) s
      • New: 0.9 + (Skill Level x 0.2) s
    • Global delay of skills reduced
      • Old: 1 s at all skill levels
      • New: 0.5 s at all skill levels
Priest
  • Rebalance of PR_MAGNUS (Magnus Exorcismus)
    • Fixed casting time reduced: 3 s -> 1 s
    • Variable casting time reduced: 12 s -> 4 s
    • Global delay of skills reduced: 4 s -> 1 s
    • Cooldown added: 6 s
    • Skill now deals damage to monsters of all race monsters (instead of only Undead property and Demon race monsters)
    • Skill now deals additional 30% damage per hits to monsters with:
      • Demon race
      • Shadow property
      • Undead race or property
  • Rebalance of PR_MACEMASTERY (Mace Mastery)
    • Also gives CRI +(SkillLevel) when equipped with Maces
  • Rebalance of PR_SUFFRAGIUM (Suffragium)
    • Now affects all nearby party members (Range: 18 cells)
    • Now casts on Self instead of Target
    • Effect reduced: 15% / 30% / 45% -> 10% / 15% / 20% cast time reduction
    • Duration changed:
      • Old: 30 s / 20 s / 10 s or when you cast a skill
      • New: 60 s (no longer ends when you cast a skill)
    • SP cost increased: 8 SP -> 45 / 57 / 69 SP
    • 0.5 s fixed casting time added
    • 1 s variable casting time added
    • Global delay of skills reduced: 2 s -> 1 s
    • 30 s cooldown added
  • Rebalance of PR_IMPOSITIO (Impositio Manus)
    • Now affects all nearby party members (Range: 18 cells)
    • Now casts on Self instead of Target
    • Effect changed:
      • Old: ATK +(5 x SkillLevel)
      • New: ATK/MATK +(5 x SkillLevel)
    • Lower level buffs does not replace an active, higher level, one
    • SP cost increased:
      • Old: 10 + (Skill Level x 3)
      • New: 56 + (Skill Level x 3)
    • Duration increased: 60 s -> 120 s
    • Fixed casting time added: 0.5 s
    • Variable casting time added: 1 s
    • Global delay reduced: 3 s -> 1 s
    • Cooldown added: 30 s
Hunter
  • Rebalance of HT_LANDMINE (Land Mine), HT_CLAYMORE (Claymore Trap) and HT_BLASTMINE (Blast Mine)
    • Fixed casting time reduced: 1 s -> 0.3 s
    • Variable casting time added: 0.5 s
  • Rebalance of HT_BLITZBEAT (Blitz Beat)
    • Damage formula changed
    • Auto Blitz Beat no longer splits the damage among multiple targets

v2024.04

1 week ago

Added

  • Implemented skill->get_index_sub(), allowing to prevent error reports on the console when a skill is not found, for testing whether a skill exists in places where its absence is not an error. (#3292)
  • Implemented (m)atk/(m)def percent system: (#3290)
    • Implemented percent atk/def/matk/mdef bonus calculation, matching the official behavior
    • Added the AtkPerc, DefPerc, MatkPerc, MdefPerc calc flags to sc_config.conf to trigger recalculation of the respective stats
    • Added atk percent bonus to the client's status window like on official servers (note: the matk percent bonus is not displayed)
    • Added def percent bonus to the client's status window (included in the soft def)
    • Implemented official behavior for skills/status changes that officially rely on this system (detailed below)
  • Added the script command getitemgroupitems() to obtain a list (without duplicates) of all items contained in a given item group (#3275)
  • Added support for the ZC_SOULENERGY packet for displaying soul balls, split from ZC_SPIRITS for new clients (#3291)

Changed

  • Converted handling of packets ZC_SKILL_SELECT_REQUEST, CZ_SKILL_SELECT_RESPONSE and ZC_SPIRITS2 to the structure format. (#3292, #3291)
  • Changed the Tarot Card of Fate (CG_TAROTCARD) Strength (atk), The Magician (matk), The Devil (atk, matk), The Sun (atk, matk, def) bonus calculation to use the newly implemented atk/def percent system. This includes the new SCs SC_TAROTCARD_ATK_PERC, SC_TAROTCARD_MATK_PERC, SC_TAROTCARD_DEF_PERC. (#3290)
  • Changed the Gospel (PA_GOSPEL) bonus calculations to use the newly implemented atk/def percent system. This includes the new SC SC_GOSPEL_ATK_PERC. (#3290)
  • Changed the Provoke (SM_PROVOKE, MER_PROVOKE) SC (SC_PROVOKE) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Concentration (LK_CONCENTRATION) SC (SC_CONCENTRATION) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Bloodlust (HAMI_BLOODLUST) SC (SC_HAMI_BLOODLUST) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Vital Strike (LK_JOINTBEAT) SC (SC_JOINTBEAT) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Eske (SL_SKE) SC (SC_SKE) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Fleeting Move (HFLI_FLEET) SC (SC_HLIF_FLEET) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Curse SC (SC_CURSE) to use the newly implemented atk/def percent system. (#3290)
  • Changed SC_INCATKRATE to use the newly implemented atk/def percent system. (#3290)
  • Changed the Divest Weapon (RG_STRIPWEAPON) SC (SC_NOEQUIPWEAPON) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Mind Breaker (PF_MINDBREAKER) SC (SC_MINDBREAKER) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Divest Shield (RG_STRIPSHIELD) SC (SC_NOEQUIPSHIELD) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Fling (GS_FLING) SC (SC_FLING) to use the newly implemented atk/def percent system. (#3290)
  • Changed the Angelus (AL_ANGELUS) SC (SC_ANGELUS) to use the newly implemented atk/def percent system. (#3290)
  • Changed Poison (SC_POISON) and Deadly Poison (SC_DPOISON) to use the newly implemented atk/def percent system. (#3290)
  • Changed Asura Strike (MO_EXTREMITYFIST) to ignore atk percent bonuses. (#3290)
  • Changed several functions to take or return enum scb_flag where appropriate. (#3290)
  • Added a compatibility workaround for enum scb_flag (via typedef to e_scb_flag and int64_t constants) for pre-C23 MSVC versions that don't support enum values larger than 32 bit. This is only conditionally enabled on such compilers, and will be dropped when we'll be able to switch the C standard to C23. (#3290)
  • Split handling of the spiritball clif function into clif->spiritballs() and clif->soulball(), with incompatible arguments to the old clif->spiritball() calls. Second argument is now the amount of spheres, instead of their type. (#3291)

Fixed

  • Fixed a memory leak when reloading the unit params db (#3288)
  • Fixed an assertion failure in Auto Shadow Spell when the character has no cloned or reproduced skills. (#3292)
  • Fixed Auto Shadow Spell's inability to switch to a skill with a lower skill id than the previously selected one. (#3292)
  • Fixed an assertion failure when clicking "ok" with no skills selected or clicking "cancel" in Shadow Spell. (#3292, issue #3286)
  • Fixed the value of the flag field of packet ZC_SKILL_SELECT_REQUEST, expected to be 1 (meaning auto shadow spell) rather than the amount of skills in the list. (#3292)
  • Fixed soul balls not displaying correctly in clients from 2020 onwards. (#3291)

Deprecated

  • Support for C99 is deprecated and will be removed soon. C11 will be the required C standard since all the officially supported compilers implement that. This is a reminder that the mainstream support for VS2019 by Microsoft ended on Apr 9 2024, making VS2022 (version 17.4 and newer) the only version we currently support officially.

Other

  • Work on the rebalance patch is continuing on the rebalance branch.

v2024.03-rebalance

1 month ago

General changes

Rebalance changes

All these changes only affect Renewal. Pre-renewal is unchanged.

First classes

  • Changes from the 2018.10.31 patch (#3218, issue #2725)
Swordsman
  • Rebalance of SM_MAGNUM (Magnum Break)
    • After skill delay reduced (2 seconds -> 0.5 seconds)
    • (already implemented) Added 2 seconds of Cooldown
Merchant
  • Rebalance of MC_LOUD (Crazy Uproar)
    • Change affected players (Caster-only -> All party members in screen range)
    • Effect changed:
      • Str +4 (kept as is)
      • Extra ATK +30 (new effect)
    • CastTime: None -> 1 second
    • FixedCastTime: None -> 0.5 seconds
    • CoolDown: None -> 30 seconds
Magician
  • Rebalance of MG_FIREBOLT (Fire Bolt)
    • Fixed casting time changed.
      • Old: (0.4 + (Skill Level × 0.4)) x 0.2 seconds.
      • New: 0.2 + (Skill Level × 0.1) seconds
    • Variable casting time changed.
      • Old: (0.4 + (Skill Level × 0.4)) x 0.8 seconds.
      • New: 0.2 + (Skill Level × 0.3) seconds
    • Global delay of skills changed.
      • Old: 0.8 + (Skill Level × 0.2) seconds
      • New: 1.4 seconds at all skill levels.
    • Values based on iRO Wiki
  • Rebalance of MG_COLDBOLT (Cold Bolt)
    • Fixed casting time changed.
      • Old: (0.4 + (Skill Level × 0.4)) x 0.2 seconds.
      • New: 0.2 + (Skill Level × 0.1) seconds
    • Variable casting time changed.
      • Old: (0.4 + (Skill Level × 0.4)) x 0.8 seconds.
      • New: 0.2 + (Skill Level × 0.3) seconds
    • Global delay of skills changed.
      • Old: 0.8 + (Skill Level × 0.2) seconds
      • New: 1.4 seconds at all skill levels.
    • Values based on iRO Wiki
  • Rebalance of MG_LIGHTNINGBOLT (Lightning Bolt)
    • Fixed casting time changed.
      • Old: (0.4 + (Skill Level × 0.4)) x 0.2 seconds.
      • New: 0.2 + (Skill Level × 0.1) seconds
    • Variable casting time changed.
      • Old: (0.4 + (Skill Level × 0.4)) x 0.8 seconds.
      • New: 0.2 + (Skill Level × 0.3) seconds
    • Global delay of skills changed.
      • Old: 0.8 + (Skill Level × 0.2) seconds
      • New: 1.4 seconds at all skill levels.
    • Values based on iRO Wiki
  • Rebalance of MG_THUNDERSTORM (Thunder Storm)
    • Fixed casting time changed.
      • Old: (Skill Level × 0.8) x 0.2 seconds.
      • New: 1.5 seconds at all skill levels.
    • Variable casting time changed.
      • Old: (Skill Level × 0.8) x 0.8 seconds.
      • New: 2.5 + (Skill Level × 0.2) seconds
    • Values based on iRO Wiki
  • Rebalance of MG_FIREBALL (Fire Ball)
    • Fixed casting time changed.
      • Old: 0.3 seconds at skill level 1-5, 0.2 seconds at skill level 6-10.
      • New: 0.2 seconds at all skill levels.
    • Variable casting time changed.
      • Old: 1.2 seconds at skill level 1-5, 0.8 seconds at skill level 6-10.
      • New: 0.8 seconds at all skill levels.
    • Global delay of skills changed.
      • Old: 1.5 seconds at skill level 1-5, 1.0 seconds at skill level 6-10.
      • New: 0.7 seconds at all skill levels.
  • Rebalance of MG_SOULSTRIKE (Soul Strike)
    • Global delay of skills changed.
      • Old: 1.2 - 2.7 seconds at skill level 1-10.
      • New: 1.4 seconds at all skill levels.
  • Rebalance of MG_FROSTDIVER (Frost Diver)
    • Global delay of skill changed: 1.5 s -> 0.5 s
Acolyte
  • Moved bonus calculation of AB_CLEMENTIA and AB_CANTO to the sc_start logic.
  • Rebalance of AL_BLESSING (Blessing)
    • Also increases HIT +2 per skill level
    • Clementia also gives additional HIT +1 for each 10 job levels
  • Rebalance of AL_INCAGI (Increase Agility)
    • Also increases ASPD +1% per skill level
    • Canto Candidus also gives additional ASPD +1% for each 10 job levels
  • Rebalance of AL_ANGELUS (Angelus)
    • Now increases +50 MaxHP per SkillLevel
    • The increased HP also gets healed
    • 30s cooldown added
  • Rebalance of AL_HOLYLIGHT (Holy Light)
    • Fixed casting time changed: 0.4 s -> 0.2 s
    • Variable casting time changed: 1.6 s -> 0.8 s

v2024.03

1 month ago

This month @guilherme-gm joined us as a core developer. His long and respectable contribution history says he doesn't need much of an introduction.
He's currently working on a series of pull requests introducing the (long overdue) rebalance changes that I'll mention below, and during the past months he helped with templates and suggestions for the new proposed documentation website (also mentioned below).

Welcome @guilherme-gm and thank you!

Added

  • Created a rebalance branch to collect all the rebalance-related PRs as there will be inconsistencies in the game until they are all merged.
    • The code merged into this branch is already production-grade and would have been merged to master other than for consistency reasons.
    • Those that wish to preview the changes before they are complete are free to use this branch (see its CHANGELOG.md for details of the merged changes so far).
    • It will be eventually merged into master and will be treated the same way as master (no force-pushes, no history rewrites).
  • Migrated the Hercules GitHub wiki to a new platform (MkDocs) at the URL https://docs.herc.ws/
  • Added GitHub Actions CI workflows targeting Visual Studio on Windows. (#3284)

Changed

  • Changed openlapineupgradeui() and openlapineddukddakboxui() to allow calls without an item id when used in item scripts. (#3272)

Fixed

  • Fixed a regression in the item trade packet (2020+) causing an incorrect item grade to be sent. (#3287, since v2021.12.01)
  • Fixed a build error on Mac computers with different types of cores, such as the 'performance' and 'efficiency' cores of the M series CPUs. (#3271)

v2024.02

2 months ago

Added

  • Added GitHub Actions CI builds on macOS (Intel and ARM). (#3281)

Changed

  • Renamed the arguments of the aMalloc(), aCalloc(), aStrndup(), aRealloc(), aReallocz() macros to make it harder to accidentally swap their order. (#3280)

Fixed

  • Fixed expandinventory() not allowing to return to the initial minimum inventory size. (#3270)
  • Fixed a race condition allowing for a call to clif->pLoadEndAck() before the client's loadendack is received. (#3277)
  • Fixed a memory leak of emblem data when guilds are unloaded or disbanded. (#3278)
  • Fixed several instances of swapped arguments in aCalloc() calls, causing warnings in gcc-14. (#3280)
  • Fixed a regression causing AutoSpell not to replace the selected skill when the new skill has lower level than the previous one. (#3282)

Other

  • Updated copyright headers for year 2024.

v2023.12

4 months ago

Added

  • Added a warning when enabling the RoDEX account box on unsupported client packetvers. To continue using this feature with patched RE clients it is necessary to uncomment the ENABLE_RODEX_ACCOUNT_MAIL_RE_PATCH macro in core.h. (#3263)
  • Added a warning when a script sends account mails when the feature is disabled on the server. (#3263)
  • Added an option to allow combo skills requested during previous skill's delay to be accepted (and queued up for execution), making them easier to trigger especially by players with high latency. The option can be enabled by setting combo_cache_skill to true in conf/map/battle/skill.conf. (#3260, #3266)
  • Added constants for all messages.conf messages replacing a large amount of magic numbers. The maximum number of messages is now defined in common/msgtable.h as MSGTBL_MAX. See the related pull request description for a conversion tool that may be used to migrate custom constants. (#3265)

Changed

  • Enabled the RoDEX account box by default since the default packetver supports it. (#3263)
  • Improved the error messages, providing additional useful details, when a char server's connection request to the login server is rejected. (#3264)
  • Cleaned up some repetition from the job name switches, replaced with X macro using the class*.h files. See the pull request description for migration details in case of custom jobs. (#3265, related to #165)

Fixed

  • Fixed the snap_dodge setting not working with MO_EXTREMITYFIST. (#3241, issue #638)
  • Fixed stat food and cash stat food being stacked on top of each others. Cash food of higher level is able to overwrite buffs from normal food, while normal food won't overwrite buffs from cash food. (#3250, issue #2489)
  • Fixed some SC counters (including Storm Gust) not getting reset to 0 when a unit dies. (#3255, issue #3196)
  • Fixed costumes blocking itemskill execution, even when items are being consumed. (#3257, related to issue #2925)
  • Fixed a race condition that may cause SC statuses to be received after the character status calculations are done, when the server is under heavy load. (#3256)
  • Fixed a compiler warning caused by swapped aCalloc arguments. (#3264)
  • Fixed the MO_TRIPLEATTACK animation not workingn when there's no possible chainable combo skill. (#3259)
  • Removed an incorrect afterCastActDelay from PA_SACRIFICE in pre-renewal. (#3259)
  • Removed the fixed target from some combo skills. Monk skills act on the current target even if the last skill was used on a different enemy. (#3259)
  • Fixed MO_TRIPLEATTACK overwriting attackabletime. (#3259)
  • Fixed combo delays applying to all SC_COMBOATTACK based skills and not sending the proper time to the client. (#3259)
  • Fixed one cell movement not ignoring hidden objects (such as GMs) in its stack limit calculation. (#3259)

Removed

  • Removed nearly identical redundant Visual Studio solutions for different versions. Only one version is kept, compatible with all the supported VS versions. The AppVeyor CI configuration is updated accordingly. (#3262, #3267, #3268)

v2023.11

5 months ago

Added

  • Added an option to use an unit's current facing direction to search for free cells, instead of defaulting to east. (#3242)
    • The option, currently disabled by default, can be turned on by setting keep_dir_free_cell (conf/map/battle/misc.conf) to true.
    • Advantages:
      • Improves distribution of mobs when dispersing after being grouped. This setting allows monsters to spread in a circular fashion instead of forming a long horizontal line.
      • Allows characters to move more naturally if they came from the east, instead of walking back.
      • In some instances, fixes characters walking in a loop unable to pick up an item. (#1241)

Changed

  • Changed the map server's behavior when receiving invalid connections with unknown protocols to terminate the connection after receiving the second byte. (#3247)
  • Disabled the possibility of attaching a script to a character in autotrade mode through attachrid(). This solves a number of issues with many script commands assuming a client to be attached. (#3243, issue #568)
  • Updated map list, mapcache, NPC and hateffect constant databases. (#3249)
  • Extracted the Blade Stop (Root) trigger conditions to a separate function for better readability and maintainability. (#3254)

Fixed

  • Fixed some job concurrency conflicts in the GitHub Actions workflows causing some tests to be skipped for pushes to the master branch. (#3239)
  • Consolidated the GitHub Actions workflow entry point to always be the 'controller' regardless of the trigger condition. (#3239)
  • Fixed MO_TRIPLEATTACK not applying the same motion delay as the client in the case the next combo is not possible, causing visual glitches. (#3240)
  • Fixed the MO_TRIPLEATTACK delay formula increasing delay with dex instead of decreasing it. (#3240)
  • Fixed an issue causing characters to be stuck in a walk loop while trying to pick up an unreachable item on the ground. (#3242, issue #1241)
  • Fixed a deprecation warning issued by MariaDB causing CI test failures. (#3247)
  • Fixed range and cast time for ASC_BREAKER. (#3245, issue #1104)
  • Fixed SA_DISPEL not working in duels. (#3246, issue #640)
  • Added support for GRF files larger than 2 GiB on Windows, fixing failures in mapcache generation. (#3248, issue #2935)
  • Fixed songs not triggering their onleft or onout events when overlapping and turning into dissonance. (#3251, issue #1501)
  • Fixed the range checks of Blade Stop/Root: (#3254)
    • Fixed the target's (as in triggering attack target, and Blade Stop caster) equipped weapon wrongly affecting the skill's working range.
    • Success range is changed to 2, to match the official behavior.
    • In pre-re, changed it to always succeed against player attackers regardless of range.
    • Changed it to always succeed for non-player casters regardless of range (custom Hercules behavior, officially only players may cast Blade Stop).
  • Fixed CELL_NOSTACK making mob ai not being able to reach target under certain conditions. (#3244, issue #574)
  • Fixed the critical bonus calculation from status effects getting truncated to 0.3 CRIT per point of LUK instead of 1/3. (#3252, issue #3094)

v2023.10

6 months ago

Added

  • Added an option to synchronize the flinch animation with walk delay, improving positional lag. The option is disabled by default, uncomment the WALKDELAY_SYNC definition in src/config/core.h to enable it. (#3232)
  • Implemented logic to generate "item links" serverside and the related script command getitemlink(), including various core functionalities this relies on. (#3236, #3238)
    • This also adds basic support for the base62 encoding used by the client.

Changed

  • Refactored Auto Spell (Hindsight) and moved its configuration to a libconfig table. (#3237)
    • The configuration is available in the {re,pre-re}/autospell_db.conf file, see the documentation in the file header.
    • The separation between game logic (in skill.c) and client/display logic (in clif.c) has been improved.
    • Cast end logic has been separated from the large skill castend function into smaller dedicated functions.
    • The function skill->autospell() has been renamed to skill->autospell_spell_selected() to make its purpose clearer.
    • This refactoring will simplify some of the upcoming rebalance changes.
  • Added concurrency settings to the GitHub CI workflows to cancel old ongoing builds when a new commit is pushed, speeding up testing the up to date version. (#3238)

Fixed

  • Fixed the HPMHooking API plugin builds in VS 17.x (#3231)
  • Fixed AM_ACIDTERROR not ignoring defense on units other than those defined in battle_config.vit_penalty_target (i.e. players). (#3234)
  • Fixed Sage's free case increasing ASPD instead of decreasing it when the skill level is lower than 10. (#3235)
  • Fixed the clang-13 build in the GitHub CI, failing due to a removed package in debian unstable. (#3238)
  • Fixed AppVeyor CI builds, failing due to a missing mysql56 image. (#3238)

v2023.08

8 months ago

Note: with this release the versioning scheme has slightly changed: the release day is no longer included in the release tag and is set to 00 in the HERCULES_VERSION constant. Hotfix releases will take the form v2023.08.001 ~ v2023.08.999 (and will set HERCULES_VERSION to 202308001 ~ 202308999). Releases will still happen around the second wednesday of each month when possible.

Added

  • Added support for choosing between localtime and UTC output in the script command gettime() (defaults to localtime for backward compatibility). (#3224)
  • Added support for choosing between localtime and UTC input in the script command getcalendartime() (defaults to localtime for backward compatibility). (#3224)
  • Added the GETTIMETICK_* constants to be used with the gettimetick() script commands. It's recommended to update custom scripts to use the constants instead of numbers, as there is no guarantee that the values will not change in the future. (#3224)
  • Added an option to allow Venom Dust to give experience points. See venom_dust_exp in conf/battle/battle.conf. (#3226, issue #3188)
  • Added the missing common/packets_struct.h include to HPMapi.c and HPMlogin.c. (#3228)

Changed

  • Changed Poisoning Weapon to show the type of poison used when applied. (#3219)
  • Moved the GETTIME_* constants to source. (#3224)
  • Documented a quirk of gettimetick(GETTIMETICK_HOUROFDAY_S) (formerly known as type 1) when the server is running with a local timezone on the day daylight savings begin or end. (#3224)
  • Changed gettimetick() to reject unknown types instead of defaulting to type 0. (#3224)

Fixed

  • Fixed a typo in the sc_start() rate description in the command documentation. (#3219)
  • Fixed the duration and rate of Poisoning Weapon getting reduced more than they were supposed to be. (#3219)
  • Fixed the duration of the Venom Bleed poison effect. (#3219)
  • Fixed a missing VS 2022 solution for the HPMHooking API plugin. (#3222)
  • Fixed TF_DOUBLE not granting the Hit bonus when triggered. (#3225)
  • Fixed the command getcalendartime() returning the wrong timestamp when fed with a localtime input while daylight savings are in effect. (#3224)
  • Fixed a warning about an unused variable in npc.c with some compilers. (#3224)
  • Fixed the attendance system returning the wrong timestamp when the server is running on a local timezone and daylight savings are in effect. (#3224)
  • Fixed temporary skills not getting cleared from the skill tree on recent clients when the item granting them is unequipped. (#3227, issue #3209)

v2023.07.12

9 months ago

Added

  • Added a macro to toggle the logging of login/logout events in the API server. Disabled by default, uncomment the DEBUG_ONLINEDB_LOG definition in aclif.c to enable it. (#3207)
  • Added support for skill_db2.conf to extend/override the skill DB. Just like the item and mob databases, it supports the Inherit field to allow overriding part of a skill's entry without having to copy the rest. (#3216)

Changed

  • Increased the default value of the API server setting remove_disconnected_delay from 5000 to 50000. (#3207)
  • Reduced the timeout in the GitHub Actions CI scripts to 60 minutes, to avoid stuck jobs preventing further builds from starting for 6 hours and wasting a large amount of runner minutes. (part of #3217)
  • Replaced some lengthy pieces of repeated code in the skill DB parser with a loop. (part of #3216)
  • Changed case-insensitive checks to case-sensitive for many database fields: (#3216)
    • SkillInfo flag names
    • SkillType flag names
    • DamageType flags names
    • Requirements/WeaponTypes flags names
    • Requirements/AmmoTypes flags names
    • Requirements/State values
    • Unit/Flag flag names
    • Unit/Target values
      • NOTE: the SameGuild value was previously incorrectly listed as Sameguild in the examples and documentation. The correct version is SameGuild.
    • For debugging purposes, a piece of code similar to https://github.com/HerculesWS/Hercules/files/11782956/compare_skills.diff.txt can be used to print the values before and after applying this patch, to check the differences and ensure that no unintended changes were introduced in the parsing of one's custom entries.
  • Added a target argument to skill->check_condition_castend() to allow additional checks that require information about the skill's target. (part of #3215)

Fixed

  • Added some missing null pointer checks and assertions. (part of #3207)
  • Added API-server related configs into the copy actions of the VS projects. (part of #3207)
  • Fixed an unreliable health check in the CI builds based on MariaDB containers. (#3217)
  • Fixed some interactions of MO_KITRANSLATION. (#3215)
    • It should fail with a skill failure message and not consume requirements when: (#3215)
      • being cast on Gunslinger class
      • being cast on a player that already has 5 spheres
      • being cast on friendly non-player units (e.g. Mercenary)
  • Fixed some interactions of MO_ABSORBSPIRITS. (#3215)
    • It should fail and not consume SP when:
      • the target player doesn't have spheres
      • the target player is of Gunslinger class (due to teh game implementation not allowing them to have spheres)
      • the target player is friendly
    • It should fail and consume SP when:
      • used on a BOSS monster
      • used on a non-boss monster, but failing the 20% check
      • used on non-player units (like mercenaries)
    • moved the target check to condition cast end
  • Fixed the error message when a gunslinger is attempting to use a skill that requires coins without having the necessary amount. (#3215)
  • Fixed the stacking of WM_POEMOFNETHERWORLD to match the behavior described in the 2012.08.22 official patch notes: (#3215)
    • it cannot be placed over another instance of the skill
    • when trying to do so, it should show a position error to client