Unlocking an exit with a keycard
Thickar
01 Jun 2018, 04:50So I have this game where several doors need a key card to open. But not just possessing the key card but actually swiping it. Not sure how to do this, would it a verb and the item? Also there will be several doors that require the key card, so it need to use the card to open a specific door at a time. Also some of the doors are in the same room, so just coding it so using the key card in a specific room, would open all the doors that require in in the room.

K.V.
01 Jun 2018, 05:14Maybe something like this (with verbs and a fake key):
<!--Saved by Quest 5.7.6726.930-->
<asl version="550">
<include ref="English.aslx" />
<include ref="Core.aslx" />
<game name="Doors and Keycards">
<gameid>8374474a-df18-4e5a-99d2-30a6d61ddb8d</gameid>
<version>2.0</version>
<firstpublished>2018</firstpublished>
</game>
<object name="room">
<inherit name="editor_room" />
<isroom />
<object name="player">
<inherit name="editor_object" />
<inherit name="editor_player" />
<object name="keycard1">
<inherit name="editor_object" />
<alias>green keycard</alias>
<take />
<look>A green keycard.</look>
<swipe type="script">
choices = NewObjectList()
foreach (o, FilterByAttribute(ScopeReachable(), "keycard", this)) {
list add (choices, o)
}
ShowMenu ("Swipe it where?", choices, true) {
obj = GetObject(result)
if (not GetBoolean (obj, "locked")) {
msg ("It is already unlocked.")
}
else {
obj.locked = false
obj.isopen = true
msg ("Done. The door slides open.")
}
}
</swipe>
</object>
</object>
<object name="door">
<inherit name="editor_object" />
<inherit name="openable" />
<inherit name="container_lockable" />
<feature_container />
<look>A green door with number 1 etched onto it.</look>
<takemsg>It's fixed in place.</takemsg>
<alias>green door (1)</alias>
<keycount type="int">1</keycount>
<keycard type="object">keycard1</keycard>
<key type="object">fake_key</key>
</object>
<object name="door1">
<inherit name="editor_object" />
<inherit name="openable" />
<inherit name="container_lockable" />
<feature_container />
<alias>green door (2)</alias>
<look>A green door with number 2 etched onto it.</look>
<takemsg>It's fixed in place.</takemsg>
<keycount type="int">1</keycount>
<keycard type="object">keycard1</keycard>
<key type="object">fake_key</key>
</object>
<object name="door2">
<inherit name="editor_object" />
<inherit name="openable" />
<inherit name="container_lockable" />
<feature_container />
<look>A yellow door.</look>
<takemsg>It's fixed in place.</takemsg>
<alias>yellow door</alias>
<keycount type="int">1</keycount>
<keycard type="object">keycard2</keycard>
<key type="object">fake_key</key>
</object>
</object>
<verb>
<property>swipe</property>
<pattern>swipe</pattern>
<defaultexpression>"You can't swipe " + object.article + "."</defaultexpression>
</verb>
<object name="keycard2">
<inherit name="editor_object" />
<take />
<look>A yellow keycard.</look>
</object>
<object name="fake_key">
<inherit name="editor_object" />
</object>
</asl>
Each door has a "keycard" object attribute set to the appropriate keycard.
XanMag
01 Jun 2018, 06:27I think I’m X2 I simply used the “use other object on this” script. For the correct key I would obviously unlock/open the door. For incorrect keys I used the else if script here and commented ‘that didn’t seem to work on this door.’ For the else part of the script, I simply scripted a comment like ‘that obviously won’t work.’
If you don’t like the use this bit, simply add a verb like ‘swipe’ to the door/keypad and run the same scripts.
I’m sure KVs code works fine too but just in case you like the “dumbed down” version like me. :)