old_contents: import {
    not,
    hasBoots,
    hasHammer,
    hasSilverware,
    hasSpeedboat,
    hasSunglasses,
    returnTrue
  } from 'state/definitions/abilities';
  
  const canBlock = returnTrue;
  const canCollect = returnTrue;
  const canDestroy = returnTrue;
  const canKill = returnTrue;
  const canWin = returnTrue;
  
  const blocksUnless = (hasAbility) => ({
    canBlock: not(hasAbility),
    canDie: hasAbility
  });
  
  export const entities = {
    // Special
    SA: { type: 'tape', canCollect },
    SB: { type: 'door', canWin },
    SC: { type: 'person' },
    SD: { type: 'invisible', canBlock },
    SE: { type: 'ghost' },
    // Powerups
    PA: { type: 'sunglasses', canCollect },
    PB: { type: 'silverware', canCollect },
    PC: { type: 'speedboat',  canCollect },
    PD: { type: 'boots',      canCollect },
    PE: { type: 'hammer',     canCollect },
    // Bounds
    BA: { type: 'treeA',    canBlock },
    BB: { type: 'treeB',    canBlock },
    BC: { type: 'building', canBlock },
    BD: { type: 'rabbit',   ...blocksUnless(hasHammer) },
    BE: { type: 'chicken',  ...blocksUnless(hasHammer) },
    BF: { type: 'fishA',    ...blocksUnless(hasSpeedboat) },
    BG: { type: 'fishB',    ...blocksUnless(hasSpeedboat) },
    BH: { type: 'turtle',   ...blocksUnless(hasBoots) },
    BI: { type: 'camel',    ...blocksUnless(hasHammer) },
    BJ: { type: 'cloud',    canBlock },
    BK: { type: 'creepsun', ...blocksUnless(hasHammer) },
    // Killers without items
    DA: { type: 'sun',     canKill: not(hasSunglasses) },
    DB: { type: 'corn',    canBlock: not(hasSilverware), canDestroy: hasSilverware },
    DC: { type: 'wave',    canBlock: not(hasSpeedboat) },
    DD: { type: 'fire',    canKill: not(hasBoots) },
    DE: { type: 'snowman', canKill: not(hasHammer), canDie: hasHammer },
    // Killers always
    KA: { type: 'bee',       canKill },
    KB: { type: 'gator',     canKill },
    KC: { type: 'snake',     canKill },
    KD: { type: 'carA',      canKill },
    KE: { type: 'carB',      canKill },
    KF: { type: 'taxi',      canKill },
    KG: { type: 'firetruck', canKill },
    KH: { type: 'police',    canKill },
    KI: { type: 'ambulance', canKill },
  };
  
  export const powerupTypes = [
    entities.PA.type,
    entities.PB.type,
    entities.PC.type,
    entities.PD.type,
    entities.PE.type
  ];
  
new_contents: import {
    not,
    hasBoots,
    hasHammer,
    hasSilverware,
    hasSpeedboat,
    hasSunglasses,
    returnTrue
  } from 'state/definitions/abilities';
  
  const canBlock = returnTrue;
  const canCollect = returnTrue;
  const canDestroy = returnTrue;
  const canKill = returnTrue;
  const canWin = (s) => s.get('numTapes') === s.get('numTapesTotal');
  
  const blocksUnless = (hasAbility) => ({
    canBlock: not(hasAbility),
    canDie: hasAbility
  });
  
  export const entities = {
    // Special
    SA: { type: 'tape', canCollect },
    SB: { type: 'door', canWin },
    SC: { type: 'person' },
    SD: { type: 'invisible', canBlock },
    SE: { type: 'ghost' },
    // Powerups
    PA: { type: 'sunglasses', canCollect },
    PB: { type: 'silverware', canCollect },
    PC: { type: 'speedboat',  canCollect },
    PD: { type: 'boots',      canCollect },
    PE: { type: 'hammer',     canCollect },
    // Bounds
    BA: { type: 'treeA',    canBlock },
    BB: { type: 'treeB',    canBlock },
    BC: { type: 'building', canBlock },
    BD: { type: 'rabbit',   ...blocksUnless(hasHammer) },
    BE: { type: 'chicken',  ...blocksUnless(hasHammer) },
    BF: { type: 'fishA',    ...blocksUnless(hasSpeedboat) },
    BG: { type: 'fishB',    ...blocksUnless(hasSpeedboat) },
    BH: { type: 'turtle',   ...blocksUnless(hasBoots) },
    BI: { type: 'camel',    ...blocksUnless(hasHammer) },
    BJ: { type: 'cloud',    canBlock },
    BK: { type: 'creepsun', ...blocksUnless(hasHammer) },
    // Killers without items
    DA: { type: 'sun',     canKill: not(hasSunglasses) },
    DB: { type: 'corn',    canBlock: not(hasSilverware), canDestroy: hasSilverware },
    DC: { type: 'wave',    canBlock: not(hasSpeedboat) },
    DD: { type: 'fire',    canKill: not(hasBoots) },
    DE: { type: 'snowman', canKill: not(hasHammer), canDie: hasHammer },
    // Killers always
    KA: { type: 'bee',       canKill },
    KB: { type: 'gator',     canKill },
    KC: { type: 'snake',     canKill },
    KD: { type: 'carA',      canKill },
    KE: { type: 'carB',      canKill },
    KF: { type: 'taxi',      canKill },
    KG: { type: 'firetruck', canKill },
    KH: { type: 'police',    canKill },
    KI: { type: 'ambulance', canKill },
  };
  
  export const powerupTypes = [
    entities.PA.type,
    entities.PB.type,
    entities.PC.type,
    entities.PD.type,
    entities.PE.type
  ];
  
subject: Fix canWin ability so it actually checks tapes