diff --git a/scripts/_unpack/377/all.loc b/scripts/_unpack/377/all.loc index 890d932de0..eca93e40da 100644 --- a/scripts/_unpack/377/all.loc +++ b/scripts/_unpack/377/all.loc @@ -1117,6 +1117,7 @@ multivar=ernestdoor_1to2 multiloc=0,ernest_doorclosed multiloc=1,ernest_doorajar category=haunted_door +param=dir,1 [2to3] active=yes @@ -1124,6 +1125,7 @@ multivar=ernestdoor_2to3 multiloc=0,ernest_doorclosed multiloc=1,ernest_doorajar category=haunted_door +param=dir,1 [4to5] active=yes @@ -1131,6 +1133,7 @@ multivar=ernestdoor_4to5 multiloc=0,ernest_doorclosed multiloc=1,ernest_doorajar category=haunted_door +param=dir,1 [5to6] active=yes @@ -1138,6 +1141,7 @@ multivar=ernestdoor_5to6 multiloc=0,ernest_doorclosed multiloc=1,ernest_doorajar category=haunted_door +param=dir,1 [8to9] active=yes @@ -1145,6 +1149,7 @@ multivar=ernestdoor_8to9 multiloc=0,ernest_doorclosed multiloc=1,ernest_doorajar category=haunted_door +param=dir,1 [2to5] active=yes @@ -1152,6 +1157,7 @@ multivar=ernestdoor_2to5 multiloc=0,ernest_doorclosed multiloc=1,ernest_doorajar category=haunted_door +param=dir,0 [3to6] active=yes @@ -1159,6 +1165,7 @@ multivar=ernestdoor_3to6 multiloc=0,ernest_doorclosed multiloc=1,ernest_doorajar category=haunted_door +param=dir,0 [4to7] active=yes @@ -1166,6 +1173,7 @@ multivar=ernestdoor_4to7 multiloc=0,ernest_doorclosed multiloc=1,ernest_doorajar category=haunted_door +param=dir,0 [5to8] active=yes @@ -1173,6 +1181,7 @@ multivar=ernestdoor_5to8 multiloc=0,ernest_doorclosed multiloc=1,ernest_doorajar category=haunted_door +param=dir,0 [levera] active=yes @@ -1180,7 +1189,6 @@ multivar=ernestlever_a multiloc=0,levera_up multiloc=1,levera_down category=haunted_lever -param=lever_index,0 [leverb] active=yes @@ -1188,7 +1196,6 @@ multivar=ernestlever_b multiloc=0,leverb_up multiloc=1,leverb_down category=haunted_lever -param=lever_index,1 [leverc] active=yes @@ -1196,7 +1203,6 @@ multivar=ernestlever_c multiloc=0,leverc_up multiloc=1,leverc_down category=haunted_lever -param=lever_index,2 [leverd] active=yes @@ -1204,7 +1210,6 @@ multivar=ernestlever_d multiloc=0,leverd_up multiloc=1,leverd_down category=haunted_lever -param=lever_index,3 [levere] active=yes @@ -1212,7 +1217,6 @@ multivar=ernestlever_e multiloc=0,levere_up multiloc=1,levere_down category=haunted_lever -param=lever_index,4 [leverf] active=yes @@ -1220,7 +1224,6 @@ multivar=ernestlever_f multiloc=0,leverf_up multiloc=1,leverf_down category=haunted_lever -param=lever_index,5 [hauntedcompostheap] name=Compost heap @@ -76738,7 +76741,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,0 [levera_down] name=Lever A @@ -76748,7 +76750,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,0 [leverb_up] name=Lever B @@ -76758,7 +76759,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,1 [leverb_down] name=Lever B @@ -76768,7 +76768,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,1 [leverc_up] name=Lever C @@ -76778,7 +76777,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,2 [leverc_down] name=Lever C @@ -76788,7 +76786,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,2 [leverd_up] name=Lever D @@ -76798,7 +76795,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,3 [leverd_down] name=Lever D @@ -76808,7 +76804,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,2 [levere_up] name=Lever E @@ -76818,7 +76813,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,3 [levere_down] name=Lever E @@ -76828,7 +76822,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,3 [leverf_up] name=Lever F @@ -76838,7 +76831,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,4 [leverf_down] name=Lever F @@ -76848,7 +76840,6 @@ active=yes op1=Pull op2=Inspect category=haunted_lever -param=lever_index,4 [draynor_manor_fence] model=draynor_manor_fence diff --git a/scripts/_unpack/377/all.varp b/scripts/_unpack/377/all.varp index 7976edaaf3..bfdb0dbc86 100644 --- a/scripts/_unpack/377/all.varp +++ b/scripts/_unpack/377/all.varp @@ -1325,6 +1325,7 @@ transmit=yes transmit=yes [ernestdoors] +scope=perm transmit=yes [varp_669] diff --git a/scripts/quests/quest_haunted/configs/quest_haunted.varp b/scripts/quests/quest_haunted/configs/quest_haunted.varp index 71cd500e67..bc73509bcc 100644 --- a/scripts/quests/quest_haunted/configs/quest_haunted.varp +++ b/scripts/quests/quest_haunted/configs/quest_haunted.varp @@ -3,6 +3,7 @@ scope=perm [ernestlever] scope=perm +transmit=yes [haunted_manor_fountain_poisoned] scope=perm diff --git a/scripts/quests/quest_haunted/scripts/quest_haunted.rs2 b/scripts/quests/quest_haunted/scripts/quest_haunted.rs2 index 1bfb4c037c..ee3e9f67f9 100644 --- a/scripts/quests/quest_haunted/scripts/quest_haunted.rs2 +++ b/scripts/quests/quest_haunted/scripts/quest_haunted.rs2 @@ -142,43 +142,34 @@ p_teleport($dest); ~climb_ladder(0_48_52_20_33, true); [proc,reset_haunted_levers] -%ernestlever = clearbit_range(%ernestlever, 0, 5); +%ernestdoors = 0; +%ernestlever = 0; -[oploc1,_haunted_lever] -p_delay(0); -def_string $dir = "down"; -def_int $name_idx = string_length(loc_name); -if(testbit(%ernestlever, loc_param(lever_index)) = ^true) { - $dir = "up"; +[proc,haunted_get_new_lever_bit](int $current)(int) +if ($current = 0) { + return (1); } -%ernestlever = togglebit(%ernestlever, loc_param(lever_index)); -anim(human_leverdown, 0); // OSRS uses seq's not in 225, going to assume here -sound_synth(lever, 0, 0); -mes("You pull lever <$dir>."); -mes("You hear a clunk."); +return (0); -[oploc2,_haunted_lever] -def_string $dir = "up"; -if(testbit(%ernestlever, loc_param(lever_index)) = ^true) { - $dir = "down"; -} -mes("The lever is <$dir>."); - -[oploc1,_haunted_door] -if((loc_type = 1to2 & (testbit(%ernestlever, 0) = ^false & testbit(%ernestlever, 1) = ^false & testbit(%ernestlever, 3) = ^true & testbit(%ernestlever, 4) = ^true & testbit(%ernestlever, 5) = ^true)) - | (loc_type = 2to3 & (testbit(%ernestlever, 1) = ^false & testbit(%ernestlever, 3) = ^true & testbit(%ernestlever, 5) = ^true)) - | (loc_type = 4to5 & (testbit(%ernestlever, 0) = ^true & testbit(%ernestlever, 1) = ^true & testbit(%ernestlever, 3) = ^true)) - | (loc_type = 5to6 & testbit(%ernestlever, 3) = ^true) - | (loc_type = 8to9 & (testbit(%ernestlever, 4) = ^false & testbit(%ernestlever, 5) = ^true)) - | (loc_type = 2to5 & (testbit(%ernestlever, 0) = ^false & testbit(%ernestlever, 1) = ^false & testbit(%ernestlever, 2) = ^true & testbit(%ernestlever, 3) = ^true & testbit(%ernestlever, 4) = ^false & testbit(%ernestlever, 5) = ^true)) - | (loc_type = 3to6 & (testbit(%ernestlever, 1) = ^false & testbit(%ernestlever, 3) = ^true & testbit(%ernestlever, 5) = ^false)) - | (loc_type = 4to7 & (testbit(%ernestlever, 0) = ^true & testbit(%ernestlever, 1) = ^true & testbit(%ernestlever, 2) = ^false & testbit(%ernestlever, 3) = ^false & testbit(%ernestlever, 4) = ^false & testbit(%ernestlever, 5) = ^false)) - | (loc_type = 5to8 & ((testbit(%ernestlever, 2) = ^false & testbit(%ernestlever, 3) = ^true) | (testbit(%ernestlever, 0) = ^false & testbit(%ernestlever, 1) = ^false & testbit(%ernestlever, 2) = ^true & testbit(%ernestlever, 3) = ^true & testbit(%ernestlever, 4) = ^false & testbit(%ernestlever, 5) = ^true)))) { - ~open_and_close_door2(poordoor, ~check_axis(coord, loc_coord, loc_angle), door_open); - return; +[proc,haunted_get_pulled_string_for_bit](int $bit)(string) +if ($bit = 0) { + return ("up"); } -mes("This door is locked."); -sound_synth(locked, 0, 0); +return ("down"); + +[proc,haunted_get_pulled_string_for_lever](loc $loc)(string) +switch_loc ($loc) { + case levera : return (~haunted_get_pulled_string_for_bit(%ernestlever_a)); + case leverb : return (~haunted_get_pulled_string_for_bit(%ernestlever_b)); + case leverc : return (~haunted_get_pulled_string_for_bit(%ernestlever_c)); + case leverd : return (~haunted_get_pulled_string_for_bit(%ernestlever_d)); + case levere : return (~haunted_get_pulled_string_for_bit(%ernestlever_e)); + case leverf : return (~haunted_get_pulled_string_for_bit(%ernestlever_f)); +} +return ("Unknown"); + +[oploc2,_haunted_lever] +mes("The lever is <~haunted_get_pulled_string_for_lever(loc_type)>."); [proc,change_ernest] if(npc_find(coord, ernest_the_chicken, 8, 0) = true) { @@ -189,3 +180,175 @@ if(npc_find(coord, ernest_the_chicken, 8, 0) = true) { session_log(^log_adventure, "Quest complete: Ernest the Chicken"); ~send_quest_complete(questlist:haunted, feather, 250, ^haunted_questpoints, "You have completed the\\nErnest The Chicken Quest!", "300 Coins"); inv_add(inv, coins, 300); + +[proc,recalculate_ernest_doors] +// 1 -> 2 +if(%ernestlever_a = 0 + & %ernestlever_b = 0 + & %ernestlever_d = 1 + & %ernestlever_e = 1 + & %ernestlever_f = 1) { + %ernestdoor_1to2 = 1; +} else { + %ernestdoor_1to2 = 0; +} + +// 2 -> 3 +if(%ernestlever_b = 0 + & %ernestlever_d = 1 + & %ernestlever_f = 1) { + %ernestdoor_2to3 = 1; +} else { + %ernestdoor_2to3 = 0; +} + +// 4 -> 5 +if(%ernestlever_a = 1 + & %ernestlever_b = 1 + & %ernestlever_d = 1) { + %ernestdoor_4to5 = 1; +} else { + %ernestdoor_4to5 = 0; +} + +// 5 -> 6 +if(%ernestlever_d = 1) { + %ernestdoor_5to6 = 1; +} else { + %ernestdoor_5to6 = 0; +} + +// 8 -> 9 +if(%ernestlever_e = 0 + & %ernestlever_f = 1) { + %ernestdoor_8to9 = 1; +} else { + %ernestdoor_8to9 = 0; +} + +// 2 -> 5 +if(%ernestlever_a = 0 + & %ernestlever_b = 0 + & %ernestlever_c = 1 + & %ernestlever_d = 1 + & %ernestlever_e = 0 + & %ernestlever_f = 1) { + %ernestdoor_2to5 = 1; +} else { + %ernestdoor_2to5 = 0; +} + +// 3 -> 6 +if(%ernestlever_b = 0 + & %ernestlever_d = 1 + & %ernestlever_f = 0) { + %ernestdoor_3to6 = 1; +} else { + %ernestdoor_3to6 = 0; +} + +// 4 -> 7 +if(%ernestlever_a = 1 + & %ernestlever_b = 1 + & %ernestlever_c = 0 + & %ernestlever_d = 0 + & %ernestlever_e = 0 + & %ernestlever_f = 0) { + %ernestdoor_4to7 = 1; +} else { + %ernestdoor_4to7 = 0; +} + +// 5 -> 8 +if((%ernestlever_c = 0 + & %ernestlever_d = 1) + | + (%ernestlever_a = 0 + & %ernestlever_b = 0 + & %ernestlever_c = 1 + & %ernestlever_d = 1 + & %ernestlever_e = 0 + & %ernestlever_f = 1)) { + %ernestdoor_5to8 = 1; +} else { + %ernestdoor_5to8 = 0; +} + +[oploc1,_haunted_lever] +p_delay(0); +def_string $name = ""; +def_string $dir = "down"; + +if(loc_type = levera) { + $name = "A"; + %ernestlever_a = ~haunted_get_new_lever_bit(%ernestlever_a); + $dir = ~haunted_get_pulled_string_for_bit(%ernestlever_a); +} +else if(loc_type = leverb) { + $name = "B"; + %ernestlever_b = ~haunted_get_new_lever_bit(%ernestlever_b); + $dir = ~haunted_get_pulled_string_for_bit(%ernestlever_b); +} +else if(loc_type = leverc) { + $name = "C"; + %ernestlever_c = ~haunted_get_new_lever_bit(%ernestlever_c); + $dir = ~haunted_get_pulled_string_for_bit(%ernestlever_c); +} +else if(loc_type = leverd) { + $name = "D"; + %ernestlever_d = ~haunted_get_new_lever_bit(%ernestlever_d); + $dir = ~haunted_get_pulled_string_for_bit(%ernestlever_d); +} +else if(loc_type = levere) { + $name = "E"; + %ernestlever_e = ~haunted_get_new_lever_bit(%ernestlever_e); + $dir = ~haunted_get_pulled_string_for_bit(%ernestlever_e); +} +else if(loc_type = leverf) { + $name = "F"; + %ernestlever_f = ~haunted_get_new_lever_bit(%ernestlever_f); + $dir = ~haunted_get_pulled_string_for_bit(%ernestlever_f); +} + +~recalculate_ernest_doors(); + +anim(human_leverdown, 0); +sound_synth(lever, 0, 0); + +mes("You pull lever <$name> <$dir>."); +mes("You hear a clunk."); + +[aploc1,_haunted_door] +def_int $distance = 0; +//opens east +if (loc_param(dir) = 1) { + //you are west + if (coordx(coord) < coordx(loc_coord)) { + ~clipped_telewalk(calc(coordx(loc_coord) - coordx(coord)), calc(coordz(loc_coord) - coordz(coord))); + $distance = 2; + } + //you are east + else { + ~clipped_telewalk(calc(coordx(loc_coord) - coordx(coord) + 1), calc(coordz(loc_coord) - coordz(coord))); + $distance = -2; + } + loc_del(5); + loc_add(loc_coord, ernest_doorclosed, 1, loc_shape, 3); + p_teleport(movecoord(coord, $distance, 0, 0)); +} +//opens north +else if (loc_param(dir) = 0) { + //you are south + if (coordz(coord) < coordz(loc_coord)) { + ~clipped_telewalk(calc(coordx(loc_coord) - coordx(coord)), calc(coordz(loc_coord) - coordz(coord))); + $distance = 2; + } + //you are north + else { + ~clipped_telewalk(calc(coordx(loc_coord) - coordx(coord)), calc(coordz(loc_coord) - coordz(coord) + 1)); + $distance = -2; + } + loc_del(5); + loc_add(loc_coord, ernest_doorclosed, 0, loc_shape, 3); + p_teleport(movecoord(coord, 0, 0, $distance)); +}