Spelunky is © 2008, 2009 Derek Yu and Mossmouth, LLC, and is used under the [Spelunky User License v1.1b](https://spelunky.ai/LICENSE.txt). spelunky.ai is an unofficial fan project, not affiliated with or endorsed by Mossmouth. The game and its assets may not be sold.

Music by George Buzinkai and Jonathan Perry; sound effects made in SFXR. From Spelunky Classic 1.1, © 2008, 2009 Derek Yu and Mossmouth, LLC.

# Two Damsels for one heart

From the spelunky.ai wiki: <https://spelunky.ai/wiki/two-damsels-one-heart>. Verified against the spelunky.ai port [v0.1.12](https://github.com/851-labs/spelunky/releases/tag/v0.1.12) on 28 October 2026.

Two Damsels for one heart is a quirk of Spelunky Classic in which two Damsels saved on one level, which only a custom level has, give one heart between them.

| Quirk     |                                                                                                                                                                                                                  |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Status    | GML + Oracle                                                                                                                                                                                                     |
| Where     | [`objects/oTransition/create.gml:42-45`](https://spelunky.ai/wiki/source/objects/oTransition/create#L42-L45)                                                                                                     |
| Pinned by | `fidelity/replays/damsel-two-saved-one-heart.txt`                                                                                                                                                                |
| Row       | [docs/quirks.md §1, Bugs and leftovers in the 1.1 source](https://github.com/851-labs/spelunky/blob/main/docs/quirks.md#1-bugs-and-leftovers-in-the-11-source): “Two Damsels saved on one level give one heart.” |

A [Damsel](https://spelunky.ai/wiki/damsel) saved gives the player a heart, and the game counts each one saved. But the heart doesn't
come from the save: it comes from the kissing Damsel on the screen between levels, and that screen makes one,
however many were saved. A level of the game never has two Damsels to save, so it only shows in a custom level.

## What happens

On a custom level, the player carries two Damsels onto the exit, one after the other, and goes through. The
screen between levels shows both in his loot, but only one kisses him, and only one heart rises[^1].

**Clip: Two Damsels saved, one heart.** The player carries two damsels onto a custom level's exit, one after the other, and goes through. The screen between levels shows both damsels in his loot, but only one kisses him, and only one heart rises. ([video](https://spelunky.ai/wiki/media/clips/quirks/two-damsels-one-heart/clip.mp4))

## Why

Each Damsel saved adds 1 to `global.xdamsels`, whether she's carried through the exit, carried onto it, which
takes her in and leaves the player on the level, or walks in by herself[^2][^3]. Beside the count
for one carried through, a commented-out line is where each once gave a heart:

```gml objects/oPlayer1/step.gml:782-789
        else if (holdItem.type == "Damsel")
        {
            if (holdItem.hp > 0)
            {
                // global.plife += 1;
                if (isRealLevel()) global.damselsSavedTotal += 1;
                global.damsels += 1;
                global.xdamsels += 1;
```

[`objects/oPlayer1/step.gml:782-789`](https://spelunky.ai/wiki/source/objects/oPlayer1/step#L782-L789), from `spelunky.gmk`, Spelunky Classic 1.1's source, © 2008, 2009 Derek Yu and Mossmouth, LLC ([Spelunky User License v1.1b](https://spelunky.ai/LICENSE.txt)).

The screen between levels shows a Damsel in the loot for each, counting `xdamsels` down[^4], but its create event makes one kissing Damsel for any
number above 0:

```gml objects/oTransition/create.gml:42-45
if (global.xdamsels > 0)
{
    instance_create(176+8, 176+8, oDamselKiss);
}
```

[`objects/oTransition/create.gml:42-45`](https://spelunky.ai/wiki/source/objects/oTransition/create#L42-L45), from `spelunky.gmk`, Spelunky Classic 1.1's source, © 2008, 2009 Derek Yu and Mossmouth, LLC ([Spelunky User License v1.1b](https://spelunky.ai/LICENSE.txt)).

The heart is hers: leaving the screen, her room end adds it, `global.plife += 1`[^5]. So two Damsels, or ten, give one[^6].

## Reproducing it

A level of the game has one Damsel at most. The free one, in a nook, is made only while `oGame.damsel` is false[^7], which a Kissing Parlor sets as the rooms are made, before the
treasure, and a level has one shop at most; the Temple's [Sacrifice Pit](https://spelunky.ai/wiki/sacrifice-pit) sets it first, and the
Temple then picks a Parlor only while it's false[^6]. So it takes a custom level: put two of the
[level editor](https://spelunky.ai/wiki/level-editor)'s Damsels (`D`) in it[^8], carry
both onto the exit, and go through. The replay of the clip's staged scene, a custom level, carries one Damsel onto
the exit, then the other: `damsels` goes to 2. The screen between levels shows both in the loot, makes one kissing
Damsel and one heart, and the player's hearts go from 4 to 5[^9].

## In the port

The spelunky.ai port reproduces it exactly: it's in docs/quirks.md's list of the 1.1 source's bugs[^6], and the oracle's fingerprint of the replay pins the count, the kissing Damsel and the hearts.
No option turns it off.

## FAQ

### Do two Damsels saved on one level give two hearts?

No. The screen between levels shows both in the loot, and both count as saved, but it makes one kissing [Damsel](https://spelunky.ai/wiki/damsel), and her kiss is the one heart.

### Can a level of the game have two Damsels to save?

No. A level the game makes has one Damsel at most: the free one, the Kissing Parlor's or the Sacrifice Pit's. Only a custom level, with two or more of the [level editor](https://spelunky.ai/wiki/level-editor)'s, has more.

### Do the extra Damsels count for anything?

Yes. Each one saved adds to the run's count of Damsels saved, and each shows in the loot between levels; only the heart is shared.

## See also

- **Related:** [Damsel](https://spelunky.ai/wiki/damsel), [Health](https://spelunky.ai/wiki/health), [Level editor](https://spelunky.ai/wiki/level-editor)

## References

[^1]: Clip quirks/two-damsels-one-heart

[^2]: [`objects/oPlayer1/step.gml:2068-2092`](https://spelunky.ai/wiki/source/objects/oPlayer1/step#L2068-L2092)

[^3]: [`objects/oDamsel/step.gml:3-11`](https://spelunky.ai/wiki/source/objects/oDamsel/step#L3-L11)

[^4]: [`objects/oTransition/alarm_0.gml:89-95`](https://spelunky.ai/wiki/source/objects/oTransition/alarm_0#L89-L95)

[^5]: [`objects/oDamselKiss/other_room_end.gml:1`](https://spelunky.ai/wiki/source/objects/oDamselKiss/other_room_end#L1)

[^6]: Quirk 1 (docs/quirks.md)

[^7]: [`scripts/scrTreasureGen.gml:73-79`](https://spelunky.ai/wiki/source/scripts/scrTreasureGen#L73-L79)

[^8]: [`scripts/scrCreateTileObj.gml:293-296`](https://spelunky.ai/wiki/source/scripts/scrCreateTileObj#L293-L296)

[^9]: Replay `fidelity/replays/damsel-two-saved-one-heart.txt`

### Source code

- [`objects/oTransition/create.gml`](https://spelunky.ai/wiki/source/objects/oTransition/create)
- [`objects/oTransition/alarm_0.gml`](https://spelunky.ai/wiki/source/objects/oTransition/alarm_0)
- [`objects/oDamselKiss/other_room_end.gml`](https://spelunky.ai/wiki/source/objects/oDamselKiss/other_room_end)
- [`objects/oPlayer1/step.gml`](https://spelunky.ai/wiki/source/objects/oPlayer1/step)
- [`objects/oDamsel/step.gml`](https://spelunky.ai/wiki/source/objects/oDamsel/step)
- [`scripts/scrTreasureGen.gml`](https://spelunky.ai/wiki/source/scripts/scrTreasureGen)
- [`scripts/scrCreateTileObj.gml`](https://spelunky.ai/wiki/source/scripts/scrCreateTileObj)
