Browse Source

replaces zig with lerp

master
Nicola Pisanti 6 years ago
parent
commit
0b3dd23d4e
  1. 35
      sim.c

35
sim.c

@ -245,7 +245,7 @@ static void oper_poke_and_stun(Glyph* restrict gbuffer, Mark* restrict mbuffer,
_('W', movement) \
_('X', teleport) \
_('Y', yump) \
_('Z', zig)
_('Z', lerp)
#define MOVEMENT_CASES \
'N' : case 'n' : case 'E' : case 'e' : case 'S' : case 's' : case 'W' \
@ -747,26 +747,21 @@ BEGIN_OPERATOR(yump)
POKE(0, 1, PEEK(0, -1));
END_OPERATOR
BEGIN_OPERATOR(zig)
BEGIN_OPERATOR(lerp)
LOWERCASE_REQUIRES_BANG;
Glyph* gline = gbuffer + width * y;
gline[x] = '.';
if (x + 1 == width)
return;
if (gline[x + 1] == '.') {
gline[x + 1] = This_oper_char;
mbuffer[width * y + x + 1] |= (U8)Mark_flag_sleep;
} else {
Usz n = 256;
if (x < n)
n = x;
for (Usz i = 0; i < n; ++i) {
if (gline[x - i - 1] != '.') {
gline[x - i] = This_oper_char;
break;
}
}
}
PORT(0, -1, IN);
PORT(0, 1, IN);
PORT(1, 0, IN | OUT);
Glyph g = PEEK(0, -1);
Isz rate = 1;
if (g != '.' && g != '*')
rate = (Isz)index_of(g);
Isz target = (Isz)index_of(PEEK(0, 1));
Isz val = (Isz)index_of(PEEK(1, 0));
Isz mod = (val <= target - rate)
? rate
: ((val >= target + rate) ? -rate : target - val);
POKE(1, 0, glyph_of((Usz)(val + mod)));
END_OPERATOR
//////// Run simulation

Loading…
Cancel
Save