summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2024-04-30 00:44:30 -0300
committerJesusaves <cpntb1@ymail.com>2024-04-30 00:44:30 -0300
commitdfce21e0ecedad3126ac5ad7272761736eb16a20 (patch)
tree00e322365af0f3cb95909c21e66ecb1040542a12
parente61fee666e88fb2c9f84ff1b3f268b5161cc3b75 (diff)
downloadserverdata-dfce21e0ecedad3126ac5ad7272761736eb16a20.tar.gz
serverdata-dfce21e0ecedad3126ac5ad7272761736eb16a20.tar.bz2
serverdata-dfce21e0ecedad3126ac5ad7272761736eb16a20.tar.xz
serverdata-dfce21e0ecedad3126ac5ad7272761736eb16a20.zip
Address (slightly) @manatauro 's feedback
-rw-r--r--npc/006-9/ctrl.txt70
1 files changed, 40 insertions, 30 deletions
diff --git a/npc/006-9/ctrl.txt b/npc/006-9/ctrl.txt
index b523d0cd3..e6c752228 100644
--- a/npc/006-9/ctrl.txt
+++ b/npc/006-9/ctrl.txt
@@ -304,42 +304,52 @@ function spawn {
} else if (.@lv > 450) {
// Otherwise, we'll randomly evolve a monster into a super-boss
// Ascended units cannot be killed. Double ascension is possible.
+ // Ascensions only happen every 15 seconds, but boosts are every 4s.
do {
getunits(BL_MOB, .@lucky, 1, "006-9", 20, 20,
rand2(getmapinfo(MAPINFO_SIZE_X,"006-9")-40)+20,
rand2(getmapinfo(MAPINFO_SIZE_Y,"006-9")-40)+20);
sleep(2); // To prevent map-server from collapsing
} while (.@lucky == 0);
- // Visual aspect of the ascension
- unittalk(.@lucky, "*This unit has ascended*");
- setunitdata(.@lucky, UDT_CLASS, Birb);
- immortal(.@lucky); // Jump straight to "plain unkillable" levels
- setunitdata(.@lucky, UDT_CRIT, 32767); // Always does criticals
- // Retrieve some data
- .@atk1 = getunitdata(.@lucky, UDT_ATKMIN);
- .@atk2 = getunitdata(.@lucky, UDT_ATKMAX);
- .@atkR = getunitdata(.@lucky, UDT_ATKRANGE);
- .@aspd = getunitdata(.@lucky, UDT_ADELAY);
- .@wspd = getunitdata(.@lucky, UDT_SPEED);
- .@mode = getunitdata(.@lucky, UDT_MODE);
- // Damage multiplier: ×3
- setunitdata(.@lucky, UDT_ATKMIN, .@atk1 * 3);
- setunitdata(.@lucky, UDT_ATKMAX, .@atk2 * 3);
- // Increase attack range in 2
- setunitdata(.@lucky, UDT_ATKRANGE, .@atkR + 2);
- // Make them faster, both to move as to attack
- setunitdata(.@lucky, UDT_ADELAY, min(100, .@aspd - 80));
- setunitdata(.@lucky, UDT_SPEED, min(100, .@wspd - 35));
- // Set their AI to something more fearsome, if it isn't set yet
- .@mode = .@mode | MD_NOKNOCKBACK;
- .@mode = .@mode | MD_ANGRY;
- .@mode = .@mode | MD_CASTSENSOR_IDLE;
- .@mode = .@mode | MD_BOSS;
- .@mode = .@mode | MD_DETECTOR;
- .@mode = .@mode | MD_CHANGETARGET_CHASE;
- setunitdata(.@lucky, UDT_MODE, .@mode);
- // And mark them as something else for all eyes to see
- setunitname(.@lucky, "ASCENDED MONSTER");
+ if (.diff % 4 == 1) {
+ // Visual aspect of the ascension
+ unittalk(.@lucky, "*This unit has ascended*");
+ setunitdata(.@lucky, UDT_CLASS, Birb);
+ immortal(.@lucky); // Jump straight to "plain unkillable" levels
+ setunitdata(.@lucky, UDT_CRIT, 32767); // Always does criticals
+ // Retrieve some data
+ .@atk1 = getunitdata(.@lucky, UDT_ATKMIN);
+ .@atk2 = getunitdata(.@lucky, UDT_ATKMAX);
+ .@atkR = getunitdata(.@lucky, UDT_ATKRANGE);
+ .@aspd = getunitdata(.@lucky, UDT_ADELAY);
+ .@wspd = getunitdata(.@lucky, UDT_SPEED);
+ .@mode = getunitdata(.@lucky, UDT_MODE);
+ // Damage multiplier: ×3
+ setunitdata(.@lucky, UDT_ATKMIN, .@atk1 * 3);
+ setunitdata(.@lucky, UDT_ATKMAX, .@atk2 * 3);
+ // Increase attack range in 2
+ setunitdata(.@lucky, UDT_ATKRANGE, .@atkR + 2);
+ // Make them faster, both to move as to attack
+ setunitdata(.@lucky, UDT_ADELAY, min(100, .@aspd - 80));
+ setunitdata(.@lucky, UDT_SPEED, min(100, .@wspd - 35));
+ // Set their AI to something more fearsome, if it isn't set yet
+ .@mode = .@mode | MD_NOKNOCKBACK;
+ .@mode = .@mode | MD_ANGRY;
+ .@mode = .@mode | MD_CASTSENSOR_IDLE;
+ .@mode = .@mode | MD_BOSS;
+ .@mode = .@mode | MD_DETECTOR;
+ .@mode = .@mode | MD_CHANGETARGET_CHASE;
+ setunitdata(.@lucky, UDT_MODE, .@mode);
+ // And mark them as something else for all eyes to see
+ setunitname(.@lucky, "ASCENDED MONSTER");
+ } else {
+ // Just a minor boost, otherwise you'll be quickly put out of scene
+ // It'll be more difficult to notice these
+ .@aspd = getunitdata(.@lucky, UDT_ADELAY);
+ .@wspd = getunitdata(.@lucky, UDT_SPEED);
+ setunitdata(.@lucky, UDT_ADELAY, min(100, .@aspd - 40));
+ setunitdata(.@lucky, UDT_SPEED, min(100, .@wspd - 25));
+ }
} else {
// Otherwise, nothing happens (although you could get a penalty?)
}