beginterrainscript;
variables;
short i_am_open = 0;
short cur_terrain;
short i_am_locked = 0;
short door_opened;
short choice;
body;
beginstate INIT_STATE;
cur_terrain = terrain_in_this_spot();
if (((cur_terrain >= 14) && (cur_terrain <= 17)) ||
((cur_terrain >= 50) && (cur_terrain <= 53)))
i_am_open = 1;
else i_am_open = 0;
if (get_memory_cell(0) > 0) {
i_am_locked = 1;
set_mechanism_difficulty(get_memory_cell(0));
set_physical_strength(get_memory_cell(0));
if ((get_memory_cell(2) > 0) || (get_memory_cell(3) > 0)) {
if (get_sdf(get_memory_cell(2),get_memory_cell(3)) > 0)
i_am_locked = 0;
}
}
break;
beginstate START_STATE;
break;
beginstate SEARCH_STATE;
cur_terrain = terrain_in_this_spot();
if (((cur_terrain >= 14) && (cur_terrain <= 17)) ||
((cur_terrain >= 50) && (cur_terrain <= 53)))
i_am_open = 1;
else i_am_open = 0;
if (i_am_open == 1) {
print_str_color("You close the door.",2);
flip_terrain(my_loc_x(),my_loc_y());
i_am_open = 0;
play_sound(-59);
}
break;
beginstate BLOCK_MOVE_STATE;
cur_terrain = terrain_in_this_spot();
if (((cur_terrain >= 14) && (cur_terrain <= 17)) ||
((cur_terrain >= 50) && (cur_terrain <= 53)))
i_am_open = 1;
else i_am_open = 0;
if (i_am_open == 0) {
block_entry(1);
door_opened = 1;
if ((get_memory_cell(2) > 0) || (get_memory_cell(3) > 0)) {
if (get_sdf(get_memory_cell(2),get_memory_cell(3)) > 0)
i_am_locked = 0;
}
if ((get_memory_cell(1) > 0) && (i_am_locked > 0)) {
if (has_special_item(get_memory_cell(1))) {
print_str_color("You have the key which unlocks this door.",2);
if ((get_memory_cell(2) > 0) || (get_memory_cell(3) > 0))
set_flag(get_memory_cell(2),get_memory_cell(3),1);
i_am_locked = 0;
}
}
if (i_am_locked) {
reset_dialog();
if (get_memory_cell(1) > 0)
add_dialog_str(0,"This door is locked, and you don't have the right key. You can have your strongest character try to bash it down (which requires high strength) or have your most skilled character try to pick the lock (which requires Tool Use skill and a lockpick).",0);
else add_dialog_str(0,"This door is locked. You can have your strongest character try to bash it down (which requires high strength) or have your most skilled character try to pick the lock (which requires Tool Use skill and a lockpick).",0);
add_dialog_choice(0,"Leave the door alone.");
add_dialog_choice(1,"Try to bash it down.");
add_dialog_choice(2,"Try to pick the lock.");
choice = run_dialog(0);
if (choice == 1)
end();
if (choice == 2) {
if (run_bash_door(get_physical_strength()) == FALSE)
door_opened = 0;
}
if (choice == 3) {
if (run_pick_lock(get_mechanism_difficulty()) == FALSE)
door_opened = 0;
else if ((get_memory_cell(2) > 0) || (get_memory_cell(3) > 0))
award_party_xp(BASE_TRAP_XP,1 + 2 * get_mechanism_difficulty());
}
}
if (door_opened) {
print_str("You open the door.");
if ((get_memory_cell(2) > 0) || (get_memory_cell(3) > 0))
set_flag(get_memory_cell(2),get_memory_cell(3),1);
flip_terrain(my_loc_x(),my_loc_y());
i_am_open = 1;
i_am_locked = 0;
play_sound(-58);
}
}
break;
beginstate UNLOCK_SPELL_STATE;
cur_terrain = terrain_in_this_spot();
if (((cur_terrain >= 14) && (cur_terrain <= 17)) ||
((cur_terrain >= 50) && (cur_terrain <= 53)))
i_am_open = 1;
else i_am_open = 0;
if ((i_am_open > 0) || (i_am_locked == 0))
print_str_color("Unlock Doors: The spell doesn't affect unlocked doors.",2);
else {
if (get_unlock_spell_strength()*5 >= get_mechanism_difficulty()) {
print_str_color("Unlock Doors: The spell unlocks a door.",2);
i_am_locked = 0;
play_sound(9);
if ((get_memory_cell(2) > 0) || (get_memory_cell(3) > 0))
set_flag(get_memory_cell(2),get_memory_cell(3),1);
}
else
print_str_color("Unlock Doors: The spell isn't strong enough to affect the door.",2);
}
break;
beginstate DISPEL_BARRIER_STATE;
if ((i_am_open == 0) && (i_am_locked)) {
print_str_color("Dispel Barrier: The spell fails to affect a locked door.",2);
}
break