// TMW2 scripts. // Author: // Jesusalva // Description: // SEALED SHRINE submodule - Sagratha's Cave - 015-8 // Uses setq3 - setq1 stage 3 // Check for validity function script SaggySealCheck { .@q=getq(HurnscaldQuest_Sagratha); .@q3=getq3(HurnscaldQuest_Sagratha); // Cheater Detected if (!MAGIC_LVL || .@q < 3) { setq HurnscaldQuest_Sagratha, 0, 0, 0; sc_end SC_CASH_PLUSEXP; sc_end SC_OVERLAPEXPUP; sc_start SC_OVERLAPEXPUP, 300000, -20; warp "Save", 0, 0; return false; } // Okay, if it is not stage 3, we don't need to unseal if (.@q != 3) return false; return true; } // Main menu // ( .name$ ) function script SaggySealInit { mesc l("Attempt to break the seal?"); mesc l("Warning: This will drain mana and spawn monsters. You shall not leave this cave section!"); if (askyesno() == ASK_YES) { npctalk3 l("You started the seal break sequence. Please stand by."); addtimer(1000, getarg(0)+"::OnBreakSeal01"); } return; } // Seal Spawn // (name, seal x, seal y, stageId, {seal map}) function script SaggySealInit { .@n$=getarg(0); .@x=getarg(1); .@y=getarg(2); .@z=getarg(3); .@m$=getarg(4, "018-5"); // Do nothing if @SaggySeal$ is busy - we will NOT begin another unsealing. if (@SaggySeal$ != "" && .@z) end; else @SaggySeal$=.@n$; // Drain some Mana // Max wave is 9... So it should cap at 10% .@val=7+(.@z/3); if (Sp < MaxSp/100*.@val) { npctalk l("You don't have enough mana to continue. The seal remains active."); @SaggySeal$=""; end; } percentheal 0, -(.@val); // BaseLevel: 37 monster .@m$, .@x, .@y, "Seal Guardian", MagicGoblin, (.@z/2)+1; switch (.@z) { case 0: .@mobId=any(HouseMaggot,SlimeBlast); break; case 1: .@mobId=AngryScorpion; break; case 2: .@mobId=AngryBat; break; case 3: .@mobId=RedSlime; break; case 4: .@mobId=AngryRedScorpion; break; case 5: .@mobId=Bandit; break; case 6: .@mobId=Skeleton; break; case 7: .@mobId=BlueSlime; break; case 8: .@mobId=RedMushroom; break; case 9: .@mobId=BlackSlime; break; default: Exception("ERROR, INVALID Z VALUE FOR SAGRATHA SEAL: "+.@z, RB_DEFAULT|RB_IRCBROADCAST); .@mobId=WickedMushroom; break; } monster .@m$, .@x, .@y, "Seal Guardian", .@mobId, 1; // Schedule next sequence if (.@z+1 < 10) .@nx$="0"+(.@z+1); else .@nx$=str(.@z+1); // 3.5s each wave, giving you ~1s to kill/endure each "boss" .@t=3500+(.@z*980); addtimer2(.@t, .@n$+"::OnBreakSeal"+.@nx$); return; } 018-5,0,0,0 script #SaggySeal1 NPC_SUMMONING_CIRC,0,0,{ end; OnTouch: .@q=getq(HurnscaldQuest_Sagratha); .@q3=getq3(HurnscaldQuest_Sagratha); // Check if it can be operated if (!SaggySealCheck()) end; // Check if this seal is ok if (.@q3 & .sealId) { npctalkonce l("This seal was already broken, proceed to the next seal!"); end; } // It is stage 3, so we will write to setq3 that the seal is open... Soon. SaggySealInit(.name$, .x, .y, 0, getmap()); end; OnBreakSeal01: SaggySealInit(.name$, .x, .y, 1, getmap()); end; OnBreakSeal02: SaggySealInit(.name$, .x, .y, 2, getmap()); end; OnBreakSeal03: SaggySealInit(.name$, .x, .y, 3, getmap()); end; OnBreakSeal04: SaggySealInit(.name$, .x, .y, 4, getmap()); end; OnBreakSeal05: SaggySealInit(.name$, .x, .y, 5, getmap()); end; OnBreakSeal06: SaggySealInit(.name$, .x, .y, 6, getmap()); end; OnBreakSeal07: SaggySealInit(.name$, .x, .y, 7, getmap()); end; OnBreakSeal08: SaggySealInit(.name$, .x, .y, 8, getmap()); end; OnBreakSeal09: SaggySealInit(.name$, .x, .y, 9, getmap()); end; OnBreakSeal10: .@q3=getq3(HurnscaldQuest_Sagratha); npctalk3 l("The seal was broken!"); @SaggySeal$=""; setq3 HurnscaldQuest_Sagratha, .@q3 | .sealId; end; OnInit: .sealId=1; setarray .xpos, 115, 119, 116, 121, 126, 125, 137, 136, 115; setarray .ypos, 117, 117, 119, 122, 125, 115, 117, 123, 118; .@z=rand(getarraysize(.xpos)); movenpc .name$, .xpos[.@z], .ypos[.@z], 0; end; } 018-5,0,0,0 script #SaggySeal2 NPC_SUMMONING_CIRC,0,0,{ end; OnTouch: .@q=getq(HurnscaldQuest_Sagratha); .@q3=getq3(HurnscaldQuest_Sagratha); // Check if it can be operated if (!SaggySealCheck()) end; // Check if this seal is ok if (.@q3 & .sealId) { npctalkonce l("This seal was already broken, proceed to the next seal!"); end; } // It is stage 3, so we will write to setq3 that the seal is open... Soon. SaggySealInit(.name$, .x, .y, 0, getmap()); end; OnBreakSeal01: SaggySealInit(.name$, .x, .y, 1, getmap()); end; OnBreakSeal02: SaggySealInit(.name$, .x, .y, 2, getmap()); end; OnBreakSeal03: SaggySealInit(.name$, .x, .y, 3, getmap()); end; OnBreakSeal04: SaggySealInit(.name$, .x, .y, 4, getmap()); end; OnBreakSeal05: SaggySealInit(.name$, .x, .y, 5, getmap()); end; OnBreakSeal06: SaggySealInit(.name$, .x, .y, 6, getmap()); end; OnBreakSeal07: SaggySealInit(.name$, .x, .y, 7, getmap()); end; OnBreakSeal08: SaggySealInit(.name$, .x, .y, 8, getmap()); end; OnBreakSeal09: SaggySealInit(.name$, .x, .y, 9, getmap()); end; OnBreakSeal10: .@q3=getq3(HurnscaldQuest_Sagratha); npctalk3 l("The seal was broken!"); @SaggySeal$=""; setq3 HurnscaldQuest_Sagratha, .@q3 | .sealId; end; OnInit: .sealId=2; setarray .xpos, 39, 33, 43, 53, 51, 55, 60, 68, 63, 56; setarray .ypos, 120, 130, 134, 132, 119, 121, 122, 120, 129, 124; .@z=rand(getarraysize(.xpos)); movenpc .name$, .xpos[.@z], .ypos[.@z], 0; end; } 018-5,0,0,0 script #SaggySeal3 NPC_SUMMONING_CIRC,0,0,{ end; OnTouch: .@q=getq(HurnscaldQuest_Sagratha); .@q3=getq3(HurnscaldQuest_Sagratha); // Check if it can be operated if (!SaggySealCheck()) end; // Check if this seal is ok if (.@q3 & .sealId) { npctalkonce l("This seal was already broken, proceed to the next seal!"); end; } // It is stage 3, so we will write to setq3 that the seal is open... Soon. SaggySealInit(.name$, .x, .y, 0, getmap()); end; OnBreakSeal01: SaggySealInit(.name$, .x, .y, 1, getmap()); end; OnBreakSeal02: SaggySealInit(.name$, .x, .y, 2, getmap()); end; OnBreakSeal03: SaggySealInit(.name$, .x, .y, 3, getmap()); end; OnBreakSeal04: SaggySealInit(.name$, .x, .y, 4, getmap()); end; OnBreakSeal05: SaggySealInit(.name$, .x, .y, 5, getmap()); end; OnBreakSeal06: SaggySealInit(.name$, .x, .y, 6, getmap()); end; OnBreakSeal07: SaggySealInit(.name$, .x, .y, 7, getmap()); end; OnBreakSeal08: SaggySealInit(.name$, .x, .y, 8, getmap()); end; OnBreakSeal09: SaggySealInit(.name$, .x, .y, 9, getmap()); end; OnBreakSeal10: .@q3=getq3(HurnscaldQuest_Sagratha); npctalk3 l("The seal was broken!"); @SaggySeal$=""; setq3 HurnscaldQuest_Sagratha, .@q3 | .sealId; end; OnInit: .sealId=4; setarray .xpos, 140, 143, 146, 147, 145, 143; setarray .ypos, 140, 141, 139, 144, 147, 143; .@z=rand(getarraysize(.xpos)); movenpc .name$, .xpos[.@z], .ypos[.@z], 0; end; } // Sagratha Seals Eletronic Barriers 018-5,120,130,0 script #SaggySealBarrier1 NPC_HIDDEN,0,4,{ OnTouch: if (@SaggySeal$ != "") { npctalk3 l("The seal retaliates! It was super effective. You are dead!"); @SaggySeal$=""; percentheal -100, -100; end; } end; } 018-5,74,142,0 script #SaggySealBarrier2 NPC_HIDDEN,0,4,{ OnTouch: if (@SaggySeal$ != "") { npctalk3 l("The seal retaliates! It was super effective. You are dead!"); @SaggySeal$=""; percentheal -100, -100; end; } end; } 018-5,137,154,0 script #SaggySealBarrier3 NPC_HIDDEN,0,5,{ OnTouch: if (@SaggySeal$ != "") { npctalk3 l("The seal retaliates! It was super effective. You are dead!"); @SaggySeal$=""; percentheal -100, -100; end; } end; }