Examples
Opening a Door
Opening a door can be achieved in different ways depending on your gameplay mechanics. For example, you could open a door when:
- A character bumps into it.
- The player clicks a “Use” or “Open” button.
Let’s start with the simplest approach: opening a door when a character bumps into it.
Example: Auto-Opening Door
# Taken from https://github.com/markusmoenig/Eldiron/blob/master/examples/Harbor.eldiron
class Door:
def event(self, event, value):
if event == "bumped_by_entity":
set_attr("visible", False)
set_attr("blocking", False)
notify_in(2, "close_door")
if event == "close_door":
if len(entities_in_radius()) == 0:
set_attr("visible", True)
set_attr("blocking", True)
else:
notify_in(2, "close_door")
How It Works
- When a character bumps into the door, the
bumped_by_entity
event is triggered. - The door opens by setting:
visible = False
(door disappears).blocking = False
(door no longer blocks movement).
- The
notify_in(2, "close_door")
function delays closing the door for 2 seconds. - When
close_door
is triggered, the script:- Checks if the area is empty (
entities_in_radius() == 0
). - If empty, the door closes (
visible = True
,blocking = True
). - If not empty, it delays the closing again by 2 seconds.
- Checks if the area is empty (
Note
Setting the blocking
attribute isn’t strictly necessary in this case, since the door instantly opens on contact. However, it is included here for clarity and flexibility in different scenarios.
Opening a Locked Gate
Opening a locked gate works similarly to opening a door, but with one key difference:
- The gate requires a key to open.
- On the
bumped_by_entity
event, the script checks if the character has the correct key in their inventory.
# Taken from https://github.com/markusmoenig/Eldiron/blob/master/examples/Harbor.eldiron
class Gate:
def event(self, event, value):
if event == "bumped_by_entity":
if len(inventory_items_of(value, "Golden Key")) > 0:
set_attr("visible", False)
set_attr("blocking", False)
notify_in(2, "close_gate")
if event == "close_gate":
if len(entities_in_radius()) == 0:
set_attr("visible", True)
set_attr("blocking", True)
else:
notify_in(2, "close_gate")
How It Works
- When a character bumps into the gate, the
bumped_by_entity
event is triggered. - The
value
parameter contains the ID of the character that bumped into the gate. - The script checks if that character has a “Golden Key” in their inventory using:
inventory_items_of(value, "Golden Key") > 0
- If the character has the key, the gate opens by setting:
visible = False
(gate disappears).blocking = False
(gate no longer blocks movement).
- The
notify_in(2, "close_gate")
function delays closing the gate for 2 seconds. - When
close_gate
is triggered, the script:- Checks if the area is empty (
entities_in_radius() == 0
). - If empty, the gate closes (
visible = True
,blocking = True
). - If not empty, it delays closing again by 2 seconds.
- Checks if the area is empty (
Tip
- The
value
parameter inbumped_by_entity
holds the ID of the character who collided with the gate. - We pass this ID to
inventory_items_of(value, "Golden Key")
to check that specific character’s inventory. - This script can be adapted to check for different key types by replacing
"Golden Key"
with another item name.