Browse Source

Add 'U'

master
cancel 6 years ago
parent
commit
3946701d85
  1. 40
      sim.c

40
sim.c

@ -266,6 +266,7 @@ Usz UCLAMP(Usz val, Usz min, Usz max) {
_('J', 'j', jump) \
_('M', 'm', modulo) \
_('O', 'o', offset) \
_('U', 'u', uturn) \
_('X', 'x', teleport)
ORCA_DECLARE_OPERATORS(ORCA_SOLO_OPERATORS, ORCA_DUAL_OPERATORS)
@ -402,6 +403,45 @@ BEGIN_DUAL_PHASE_1(offset)
STUN(0, 1);
END_PHASE
#define UTURN_DIRS(_) \
_(-1, 0, 'N') \
_(0, -1, 'W') \
_(0, 1, 'E') \
_(1, 0, 'S')
BEGIN_DUAL_PHASE_0(uturn)
REALIZE_DUAL;
BEGIN_DUAL_PORTS
#define X(_d_y, _d_x, _d_glyph) PORT(_d_y, _d_x, IN | OUT | HASTE | NONLOCKING);
UTURN_DIRS(X)
#undef X
END_PORTS
END_PHASE
BEGIN_DUAL_PHASE_1(uturn)
#define X(_d_y, _d_x, _d_glyph) \
{ \
Glyph g = PEEK(_d_y, _d_x); \
switch (g) { \
case 'N': \
case 'n': \
case 'E': \
case 'e': \
case 'S': \
case 's': \
case 'W': \
case 'w': \
case 'Z': \
case 'z': \
POKE(_d_y, _d_x, _d_glyph); \
STUN(_d_y, _d_x); \
} \
}
UTURN_DIRS(X)
#undef X
END_PHASE
#undef UTURN_DIRS
BEGIN_DUAL_PHASE_0(teleport)
REALIZE_DUAL;
Usz write_y = 0;

Loading…
Cancel
Save