Dragon Shire

Wiki
  • Hold both the Sun Shrine (top) and the Moon Shrine (bottom) at the same time to unlock the Dragon Altar.
  • Channel the Dragon Altar for 3 seconds to claim the Dragon Knight. Moving, taking damage, or losing a Shrine mid-channel breaks the attempt.
  • Once claimed, the Dragon Knight lasts until destroyed or until its timer runs out.
  • Its duration is 55 seconds plus 2 seconds per full game-minute elapsed.

Objective Timers

EventDurationSecondsSource
Shrine Activation Warning0:3030slibMapM_gv_mMGardensDragonWarningTime_C
Shrines Activate1:0060slibMapM_gv_mMGardensDragonDragonTowerStartTime_C
Shrine Respawn1:3090slibMapM_gv_mMGardensDragonDragonTowerRespawnTime_C
Dragon Knight Duration0:5555slibMapM_gv_mMGardensDragonDragonKnightStartingTime_C

Units

Dragon Knight

HP
8350
Speed
4
Scaling
Life
+500/min 1-5, +750/min 6-10, +1000/min 11-15, +1250/min 16-20, +1500/min 21-25, +2250/min 26+
Basic damage
+9/min 1-5, +13.5/min 6-10, +18/min 11-15, +22.5/min 16-20, +27/min 21-25, +40.5/min 26+
Abilities
  • QFlame BreathDragonKnightFireBreath

    Breath a cone of flame, dealing 85 damage and burn the area of effect for an additional 160 damage over 4 seconds.

  • WSavage ChargeDragonKnightBullRush

    After a short delay, charge an enemy Hero to knock them back and deal 450 damage.

  • RRubble MakerDragonKnightRubbleMaker

    Increases damage to Structures and Minions by 100%. Reduces damage from Structures by 60%. Permanently Unstoppable. The Dragon Knight explodes on death, knocking back nearby enemies.

  • DLeave DragonDragonKnightLeaveDragon

    Leave the Dragon Knight.

Weapons
IDDamagePeriodRange
GardensDragonKnightWeapon1801s2
GardensDragonKnightPuntWeapon2000.5s2

Holding Both Shrines

A team can only channel the Dragon Altar while it holds both the Sun Shrine and the Moon Shrine. Enemy Heroes can retake a Shrine before the 3-second channel finishes to lock the Altar again.


    for ( ; ( (autoC86FE021_ai >= 0 && lv_towerIndex <= autoC86FE021_ae) || (autoC86FE021_ai < 0 && lv_towerIndex >= autoC86FE021_ae) ) ; lv_towerIndex += autoC86FE021_ai ) {
        if ((UnitGetOwner(libMapM_gv_mMGardensDragonDragonTowers[lv_towerIndex].lv_shrineUnit) == libCore_gv_cOMPUTER_TeamOrder)) {
            lv_orderTowersOwned += 1;
        }

        if ((UnitGetOwner(libMapM_gv_mMGardensDragonDragonTowers[lv_towerIndex].lv_shrineUnit) == libCore_gv_cOMPUTER_TeamChaos)) {
            lv_chaosTowersOwned += 1;
        }

    }
    if (((lv_chaosTowersOwned == libMapM_gv_mMGardensDragonDragonTowerObeliskCount_C) || (lv_orderTowersOwned == libMapM_gv_mMGardensDragonDragonTowerObeliskCount_C))) {
        if ((lv_chaosTowersOwned == libMapM_gv_mMGardensDragonDragonTowerObeliskCount_C)) {
            libMapM_gf_MMGardensDragonActivateStatueForTeam(libCore_gv_cOMPUTER_TeamChaos);
            libMapM_gf_MMDragonballsTransmissionDragonCapturableQ(libGame_gv_teamChaosIndex_C);
        }
        else {
            libMapM_gf_MMGardensDragonActivateStatueForTeam(libCore_gv_cOMPUTER_TeamOrder);
            libMapM_gf_MMDragonballsTransmissionDragonCapturableQ(libGame_gv_teamOrderIndex_C);
        }
    }
    else {
        if ((UnitGetOwner(libMapM_gv_mMGardensDragonStatue) != 0)) {

Dragon Knight Duration Scales With Game Time

The Dragon Knight's duration is not fixed. Once claimed, it lasts 55 seconds plus 2 more for each full game-minute elapsed, unless destroyed first.


    TextTagShow(libMapM_gv_mMGardensDragonStatueTextTag, libCore_gv_playerGroupFromPlayer[libCore_gv_oBSERVER_ObserverUIPlayer], false);
    TimerStart(libMapM_gv_mMGardensDragonDragonStatueActiveReminderTimer, 1.0, false, c_timeGame);
    return true;
}

fixed libMapM_gf_MMGardensDragonDragonDuration () {
    // Automatic Variable Declarations
    // Implementation
    return IntToFixed((FixedToInt(libMapM_gv_mMGardensDragonDragonKnightStartingTime_C)+2*FixedToInt(TimerGetElapsed(libGame_gv_gameTimer))/60));
}

bool libMapM_gf_MMGardensDragonObeliskFullyCaptured (unit lp_obeliskUnit) {
    // Variable Declarations
    int lv_obeliskIndex;

    // Automatic Variable Declarations
    int auto7B50E203_ae;

Timer Source

mapmechanicslib_h.galaxy — constants

const fixed libMapM_gv_mMGardensDragonWarningTime_C = 30.0;
const fixed libMapM_gv_mMGardensDragonDragonTowerStartTime_C = 60.0;
const fixed libMapM_gv_mMGardensDragonDragonTowerRespawnTime_C = 90.0;
const fixed libMapM_gv_mMGardensDragonDragonKnightStartingTime_C = 55.0;

mapmechanicslib.galaxy — timer start


    // Actions
    if (!runActions) {
        return true;
    }

    TimerStart(libMapM_gv_mMGardensDragonDragonTowerStartTimer, libMapM_gv_mMGardensDragonDragonTowerStartTime_C, false, c_timeGame);
    return true;
}

//--------------------------------------------------------------------------------------------------
void libMapM_gt_MMGardensDragonGateOpen_Init () {
    libMapM_gt_MMGardensDragonGateOpen = TriggerCreate("libMapM_gt_MMGardensDragonGateOpen_Func");

// ...

    if (!runActions) {
        return true;
    }

    TriggerExecute(libMapM_gt_MMGardensDragonObjectiveUIHandler, true, false);
    libMapM_gv_mMGardensDragonCurrentState = libMapM_ge_MMGardensDragonState_ObelisksWarning;
    TimerStart(libMapM_gv_mMGardensDragonDragonTowerWarningTimer, libMapM_gv_mMGardensDragonWarningTime_C, false, c_timeGame);
    TimerStart(libMapM_gv_mMGardensDragonDragonTowerGoalActivationTimer, (libMapM_gv_mMGardensDragonWarningTime_C - 5.0), false, c_timeGame);
    if ((libMapM_gv_mMDragonballsTransmissionShrinesRechargeFirstTime == true)) {
        libMapM_gv_mMDragonballsTransmissionShrinesRechargeFirstTime = false;
        libMapM_gf_MMDragonballsTransmissionObelisksChargingFirstQ();
    }
    else {
        libMapM_gf_MMDragonballsTransmissionObelisksChargingRepeatQ();

// ...

    }

    if ((lv_player > libCore_gv_bALMaxPlayers)) {
        lv_player = libMapM_gv_mMGardensDragonPlayer;
    }

    TimerStart(libMapM_gv_mMGardensDragonDragonTowerRespawnTimer, libMapM_gv_mMGardensDragonDragonTowerRespawnTime_C, false, c_timeGame);
    TimerStart(libMapM_gv_mMGardensDragonDragonKnightLifeTimer, 0.0, false, c_timeGame);
    libGame_gf_SendEventMapDragonShireDragonEnds();
    ActorSend(libCore_gf_ActorStoredForUnit(libMapM_gv_mMGardensDragonUnit, 1), "Destroy");
    libMapM_gf_MMGardensDragonDragonHasLeftArtHooks();
    Wait(0.5, c_timeGame);
    libMapM_gf_MMDragonballsTransmissionDragonExpireQ();

// ...

    if (!runActions) {
        return true;
    }

    TriggerExecute(libMapM_gt_MMGardensDragonObjectiveUIHandler, true, false);
    libMapM_gv_mMGardensDragonCurrentState = libMapM_ge_MMGardensDragonState_ObelisksWarning;
    TimerStart(libMapM_gv_mMGardensDragonDragonTowerWarningTimer, libMapM_gv_mMGardensDragonWarningTime_C, false, c_timeGame);
    TimerPause(libMapM_gv_mMGardensDragonDragonTowerStartTimer, true);
    TimerPause(libMapM_gv_mMGardensDragonDragonTowerGoalActivationTimer, true);
    return true;
}

//--------------------------------------------------------------------------------------------------

Source Files