function script LockPicking {
@lock_picking_success = 0;
setarray @pins, rand(1,3), rand(1,3), rand(1,3);
goto L_StartLockPicking;
L_NeedLockPickSet:
menu
"Unfortunately, I don't have these tools... Let's look around.", L_Return;
L_StartLockPicking:
mes "You inspect the lock and notice it isn't sophisticated.";
mes "With regular stuff, you should be able to lock pick it.";
next;
if (countitem ("LockPicks") < 1)
goto L_NeedLockPickSet;
menu
"I can try with these lock picks I just found.", L_Next,
"Maybe later.", L_Return;
L_Next:
delitem "LockPicks", 1;
mes "You insert the hook pick inside the lock, and, without applying any tension, you discover there are only 3 pins to set.";
next;
mes "You will need to set the 3 pins to align them and turn the lock's cylinder.";
mes "A wrong move will make you start over. Remember how you had set the pins!";
next;
@pin = 0;
goto L_HandlePin;
L_NextPinOrEnd:
if (@pin >= 2)
goto L_OpenDoor;
@pin = @pin + 1;
mes "Click! This pin is set!";
next;
goto L_HandlePin;
L_HandlePin:
if (@pin == 0)
mes "What to do with the first pin?";
if (@pin == 1)
mes "What to do with the second pin?";
if (@pin == 2)
mes "What to do with the last pin?";
menu
"Apply a soft pressure.", L_PinSoft,
"Apply a normal pressure.", L_PinNormal,
"Apply a strong pressure.", L_PinHard,
"Give up. I'm in a rush!", L_GiveUp;
L_GiveUp:
@lock_picking_success = 0;
@pin = 0;
cleararray @pins, 0, 3;
@pin_pressure = 0;
return;
L_PinSoft:
@pin_pressure = 1;
goto L_TestPin;
L_PinNormal:
@pin_pressure = 2;
goto L_TestPin;
L_PinHard:
@pin_pressure = 3;
goto L_TestPin;
L_TestPin:
if (@pin_pressure == @pins[@pin])
goto L_NextPinOrEnd;
mes "Nope, that did not work. And the pins are unset now...";
next;
@pin = 0;
goto L_HandlePin;
L_Return:
return;
L_OpenDoor:
@lock_picking_success = 1;
mes "The two sets of pins separate. You can now turn the cylinder to open the door!";
return;
}