SpelunkyFan wiki

Free wares from a hit Shopkeeper

Verified against the spelunky.ai port v0.1.12 on .

Free wares from a hit Shopkeeper is a quirk of Spelunky Classic in which hitting a Shopkeeper frees his wares without marking the player a thief.

Stealing from a shop, or bombing it, angers the Shopkeeper through one script, which shouts and marks the player a thief, so that a Shopkeeper waits at the next level's exit. Hitting him angers him too, but none of the ways to hit him calls that script. And an angry Shopkeeper's first step gives every ware away, so a player who hits him can carry the wares out free, with no theft. It may be by design.

What happens

#

The player buys a Pistol and shoots the Shopkeeper beside him, who falls stunned and drops his shotgun. He gets up angry, grabs the player and throws him against the floor, which costs a heart. The player then collects the shop's bomb bag, free, and no shout calls him a thief [1].

Shopkeeper's throw. The shopkeeper follows the player while he holds an unpaid pistol, and stands still once he pays. Shot with it, the shopkeeper falls stunned and drops his shotgun; he gets up angry, grabs the player and throws him against the floor, which costs a heart.

Why

#

A crack of the Whip (or a Machete's slash) sets the Shopkeeper's status to ATTACK at once, and so do a thrown item's hit and a Piranha's bite; a bullet stuns him, and he gets up in ATTACK [2] [3] [4] [5] [6]. None of them calls scrShopkeeperAnger, the script that shouts and adds to the thief count [7]. But the first step of his attack frees every ware the game is running:

else if (status == ATTACK)
{
    image_speed = 1;
    
    if (not angered)
    {
        with oItem
        {
            cost = 0;
            forSale = false;
        }
        angered = true;
    }
objects/oShopkeeper/step.gml:337-349, from spelunky.gmk, Spelunky Classic 1.1's source, © 2008, 2009 Derek Yu and Mossmouth, LLC (Spelunky User License v1.1b).

A free ware isn't for sale, so carrying it out isn't a theft: the count stays at 0, so no Shopkeeper waits at the next level's exit, and its shops greet the player as before [8].

Reproducing it

#

Hit a Shopkeeper, with the Whip, a thrown item or a shot, then take a ware. It happens in normal play. In the replay of the clip, the player buys a Pistol and shoots the Shopkeeper (frame 1490). He gets up in his attack (1545), which frees the bomb bag (1546), and the player collects it (1598): the thief count stays at 0 throughout [9]. Whipping one does the same: his attack frees the wares on the next step, with no shout and no thief [10].

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 [8], and the oracle's fingerprint of the replay pins the free bag and the count. No option turns it off.

FAQ

#
Does hitting a Shopkeeper make you a thief in Spelunky Classic?

No. A crack of the Whip, a thrown item or a shot turns the Shopkeeper on the player, but it doesn't mark him a thief: there's no shout, and no Shopkeeper waits at the next level's exit.

Are a Shopkeeper's wares free once he's angry?

Yes. The first step of his attack makes every ware free, however he was angered, so after a hit they can be carried out with no theft.

Is it safe to take the wares after hitting the Shopkeeper?

Only as far as the theft goes. He still attacks, with his Shotgun if he has it.

See also

#

References

#
  1. Clip shopkeeper/throw
  2. objects/oShopkeeper/collision_oWhip.gml:1-19
  3. objects/oItem/step.gml:289-299
  4. objects/oPiranha/step.gml:107-118
  5. objects/oBullet/collision_oEnemy.gml:14-25
  6. objects/oShopkeeper/step.gml:465-470
  7. scripts/scrShopkeeperAnger.gml:7-22
  8. Quirk 1 (docs/quirks.md)
  9. Replay fidelity/replays/weapon-seed-39-pistol.txt
  10. Replay fidelity/replays/shop-seed-11-whip.txt

Source code

#