Implemented (the old) Nightmarish Jitterbug instance (#4061)

* Implemented NPC_REVERBERATION (some parts are from https://github.com/idathena/trunk credit to @exneval)

Credit to @RagnarokNova for some texts correction and for the monster spawn ([source](https://rathena.org/board/topic/104496-nightmareish-jitterbug-episode-143/))
Credit to https://www.divine-pride.net/ for the monsters datas.
This commit is contained in:
Atemo
2019-04-13 15:12:30 +02:00
committed by GitHub
parent f047a6a510
commit 04c6303eb9
13 changed files with 4677 additions and 17 deletions

View File

@@ -430,6 +430,8 @@ unsigned short skill_dummy2skill_id(unsigned short skill_id) {
return SU_SV_ROOTTWIST;
case SU_LUNATICCARROTBEAT2:
return SU_LUNATICCARROTBEAT;
case NPC_REVERBERATION_ATK:
return NPC_REVERBERATION;
}
return skill_id;
}
@@ -3812,6 +3814,7 @@ static int skill_check_unit_range_sub(struct block_list *bl, va_list ap)
case RA_ICEBOUNDTRAP:
case SC_DIMENSIONDOOR:
case SC_BLOODYLUST:
case NPC_REVERBERATION:
case WM_REVERBERATION:
case GN_THORNS_TRAP:
case GN_HELLS_PLANT:
@@ -4239,6 +4242,7 @@ static TIMER_FUNC(skill_timerskill){
}
}
break;
case NPC_REVERBERATION_ATK:
case WM_REVERBERATION_MELEE:
case WM_REVERBERATION_MAGIC:
skill_castend_damage_id(src,target,skl->skill_id,skl->skill_lv,tick,skl->flag|SD_LEVEL|SD_ANIMATION);
@@ -4415,7 +4419,7 @@ static int skill_active_reverberation(struct block_list *bl, va_list ap) {
if (bl->type != BL_SKILL)
return 0;
if (su->alive && (sg = su->group) && sg->skill_id == WM_REVERBERATION) {
if (su->alive && (sg = su->group) && (sg->skill_id == WM_REVERBERATION || sg->skill_id == NPC_REVERBERATION)) {
map_foreachinallrange(skill_trap_splash, bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, bl, gettick());
su->limit = DIFF_TICK(gettick(), sg->tick);
sg->unit_id = UNT_USED_TRAPS;
@@ -4992,6 +4996,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
case NPC_VAMPIRE_GIFT:
case NPC_MAXPAIN_ATK:
case NPC_JACKFROST:
case NPC_REVERBERATION_ATK:
case NPC_ARROWSTORM:
case RK_IGNITIONBREAK:
case AB_JUDEX:
@@ -5079,6 +5084,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
case NPC_EARTHQUAKE: //FIXME: Isn't EarthQuake a ground skill after all?
skill_addtimerskill(src,tick+250,src->id,0,0,skill_id,skill_lv,2,flag|BCT_ENEMY|SD_SPLASH|1);
break;
case NPC_REVERBERATION_ATK:
case WM_REVERBERATION_MELEE:
case WM_REVERBERATION_MAGIC:
case NC_ARMSCANNON:
@@ -11834,6 +11840,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
case NPC_VENOMFOG:
case NPC_ICEMINE:
case NPC_FLAMECROSS:
case NPC_REVERBERATION:
case RA_ELECTRICSHOCKER:
case RA_CLUSTERBOMB:
case RA_MAGENTATRAP:
@@ -13231,6 +13238,7 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_
if (unit_val1 < 1) unit_val1 = 1;
unit_val2 = 0;
break;
case NPC_REVERBERATION:
case WM_REVERBERATION:
unit_val1 = 1 + skill_lv;
break;
@@ -17645,8 +17653,12 @@ static int skill_trap_splash(struct block_list *bl, va_list ap)
}
break;
case UNT_REVERBERATION: // For proper skill delay animation when used with Dominion Impulse
skill_addtimerskill(ss, tick + status_get_amotion(ss), bl->id, 0, 0, WM_REVERBERATION_MELEE, sg->skill_lv, BF_WEAPON, 0);
skill_addtimerskill(ss, tick + status_get_amotion(ss) * 2, bl->id, 0, 0, WM_REVERBERATION_MAGIC, sg->skill_lv, BF_MAGIC, 0);
if (ss->type != BL_PC)
skill_addtimerskill(ss, tick + 50, bl->id, 0, 0, NPC_REVERBERATION_ATK, sg->skill_lv, BF_WEAPON, 0);
else {
skill_addtimerskill(ss, tick + status_get_amotion(ss), bl->id, 0, 0, WM_REVERBERATION_MELEE, sg->skill_lv, BF_WEAPON, 0);
skill_addtimerskill(ss, tick + status_get_amotion(ss) * 2, bl->id, 0, 0, WM_REVERBERATION_MAGIC, sg->skill_lv, BF_MAGIC, 0);
}
break;
case UNT_FIRINGTRAP:
case UNT_ICEBOUNDTRAP: