diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Makefile.am | 2 | ||||
| -rw-r--r-- | lib/colors/solarized.tes | 53 | ||||
| -rw-r--r-- | lib/colors/terminal.tes | 1 | ||||
| -rw-r--r-- | lib/fnkeys.tes | bin | 4391 -> 5102 bytes | |||
| -rw-r--r-- | lib/opener.tes | 15 | ||||
| -rw-r--r-- | lib/tank.tes | 211 |
6 files changed, 246 insertions, 36 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am index 0da616a..04e83ad 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,5 +1,5 @@ dist_scitecolib_DATA = color.tes lexer.tes session.tes opener.tes \ - fnkeys.tes string.tes getopt.tes + fnkeys.tes string.tes getopt.tes tank.tes # Standalone scripts. # These are not installed via _SCRIPTS as it would add the --program-prefix. diff --git a/lib/colors/solarized.tes b/lib/colors/solarized.tes index 11567d9..91b2718 100644 --- a/lib/colors/solarized.tes +++ b/lib/colors/solarized.tes @@ -17,41 +17,24 @@ * `solarized.toggle` will be mapped to the F5 function key. * F5 will also automatically terminate the command line. *! -0EJ-1"= - 000,043,054:M[color.rgb],08,3EJ Q[color.lblack] U[color.base03] - 007,054,066:M[color.rgb],00,3EJ Q[color.black] U[color.base02] - 088,110,117:M[color.rgb],10,3EJ Q[color.lgreen] U[color.base01] - 101,123,131:M[color.rgb],11,3EJ Q[color.lyellow] U[color.base00] - 131,148,150:M[color.rgb],12,3EJ Q[color.lblue] U[color.base0] - 147,161,161:M[color.rgb],14,3EJ Q[color.lcyan] U[color.base1] - 238,232,213:M[color.rgb],07,3EJ Q[color.white] U[color.base2] - 253,246,227:M[color.rgb],15,3EJ Q[color.lwhite] U[color.base3] - 181,137,000:M[color.rgb],03,3EJ !* yellow *! - 203,075,022:M[color.rgb],09,3EJ Q[color.lred] U[color.orange] - 220,050,047:M[color.rgb],01,3EJ !* red *! - 211,054,130:M[color.rgb],05,3EJ !* magenta *! - 108,113,196:M[color.rgb],13,3EJ Q[color.lmagenta]U[color.violet] - 038,139,210:M[color.rgb],04,3EJ !* blue *! - 042,161,152:M[color.rgb],06,3EJ !* cyan *! - 133,153,000:M[color.rgb],02,3EJ !* green *! -| - 000,043,054:M[color.rgb]U[color.base03] - 007,054,066:M[color.rgb]U[color.base02] - 088,110,117:M[color.rgb]U[color.base01] - 101,123,131:M[color.rgb]U[color.base00] - 131,148,150:M[color.rgb]U[color.base0] - 147,161,161:M[color.rgb]U[color.base1] - 238,232,213:M[color.rgb]U[color.base2] - 253,246,227:M[color.rgb]U[color.base3] - 181,137,000:M[color.rgb]U[color.yellow] - 203,075,022:M[color.rgb]U[color.orange] - 220,050,047:M[color.rgb]U[color.red] - 211,054,130:M[color.rgb]U[color.magenta] - 108,113,196:M[color.rgb]U[color.violet] - 038,139,210:M[color.rgb]U[color.blue] - 042,161,152:M[color.rgb]U[color.cyan] - 133,153,000:M[color.rgb]U[color.green] -' +0,3EJ + +000,043,054:M[color.rgb]U[color.base03] +007,054,066:M[color.rgb]U[color.base02] +088,110,117:M[color.rgb]U[color.base01] +101,123,131:M[color.rgb]U[color.base00] +131,148,150:M[color.rgb]U[color.base0] +147,161,161:M[color.rgb]U[color.base1] +238,232,213:M[color.rgb]U[color.base2] +253,246,227:M[color.rgb]U[color.base3] +181,137,000:M[color.rgb]U[color.yellow] +203,075,022:M[color.rgb]U[color.orange] +220,050,047:M[color.rgb]U[color.red] +211,054,130:M[color.rgb]U[color.magenta] +108,113,196:M[color.rgb]U[color.violet] +038,139,210:M[color.rgb]U[color.blue] +042,161,152:M[color.rgb]U[color.cyan] +133,153,000:M[color.rgb]U[color.green] :Q[solarized.light]"< 0U[solarized.light] ' @[solarized.light]{ diff --git a/lib/colors/terminal.tes b/lib/colors/terminal.tes index ea048aa..39c5bac 100644 --- a/lib/colors/terminal.tes +++ b/lib/colors/terminal.tes @@ -9,6 +9,7 @@ Q[color.white]U[color.selback] !* Also used for popups *! [color.calltip] 0,Q[color.lwhite],Q[color.black] +!* Due to the bold attribute this should be grey even on 8-color terminals *! [color.comment] 1,Q[color.black],Q[color.lblack] [color.number] 0,Q[color.black],Q[color.cyan] [color.keyword] 1,Q[color.black],Q[color.lwhite] diff --git a/lib/fnkeys.tes b/lib/fnkeys.tes Binary files differindex 937caf9..f58a26a 100644 --- a/lib/fnkeys.tes +++ b/lib/fnkeys.tes diff --git a/lib/opener.tes b/lib/opener.tes index c0183c8..8bcd896 100644 --- a/lib/opener.tes +++ b/lib/opener.tes @@ -36,3 +36,18 @@ EBN[\.i] Q.c-1,Q.l-1ESFINDCOLUMN:J > ]* } + +!*$ + * M[opener.check-recovery] -- Warn if there if a recovery file (#filename#) is detected + * + * This points to a prior crash or unexpected termination. + *! +@[opener.check-recovery]{ + :Q*"= ' + [* + EQ.f G* I# R + <-A"I 1; ' :R;> + I# + 1:EN*Q.f"S 2Detected recovery file "Q.f" ' + ]* +} diff --git a/lib/tank.tes b/lib/tank.tes new file mode 100644 index 0000000..0894009 --- /dev/null +++ b/lib/tank.tes @@ -0,0 +1,211 @@ +!* + * TANK MODE + * + * Drive an ASCII tank around your buffer. + * Invoke via EIQ[$SCITECOPATH]/tank.tes + *! +[tank.sprite.0] !* background *! + +!* FIXME: Perhaps encode the gun's top in the integer cell *! +[tank.sprite.1] +█▓█▓ +╠════○ +▓█▓█ +[tank.sprite.2] + █▓█▓ +○════╣ + ▓█▓█ +[tank.sprite.3] + ┌┐ +▓││█ +█││▓ +▓┴┴█ +[tank.sprite.4] +█┬┬▓ +▓││█ +█││▓ + └┘ + +!* + * f,tM[tank.rand] - LCG pseudo random number generator for values between f and t + * This is based on the version in the BSD libc. + *! +::U[tank.rand] +@[tank.rand]{ + U.tU.f + (1103515245*Q[tank.rand]+12345) & (2^*31-1)U[tank.rand] + (Q[tank.rand]^/(Q.t-Q.f+1)+Q.f) +} + +!* x,yM[tank.goto] -> success|failure *! +@[tank.goto]{ + U.yU.x + Q.x"< 0 ' Q.y"< 0 ' + J Q.y:L"F 0 ' + Q.x<0A"< I F> ' 0A-10"= I F> ' C> + -1 +} + +!* x,y,spriteM[tank.blit] *! +@[tank.blit]{ + U.sU.yU.x Q.xU.#x0 + Q.s"N + 10[tank.sprite.0] !* background *! + %[tank.blit] + ' + < + %.iQ[tank.sprite.\.s]U.c Q.c:; + Q[tank.blit]&1"= + !* toggle the chain character to simulate movements *! + Q.c-█"= ▓U.c | Q.c-▓"= █U.c ' ' + ' + + Q.c-10"= + %.y Q.#x0U.x + Q.s"N 10:[tank.sprite.0] ' + | + Q.x,Q.yM[tank.goto]; + Q.s"N !* not background sprite *! + Q.c- "= + !* space is "transparent" - copy background unmodified *! + 0A"< I | 0A-10"= I | C ' ' + -A:[tank.sprite.0] + %.x F< + ' + !* "destroy" fields we have touched *! + U.d + 0A"F 0A-10"N 0A- "N 33,126M[tank.rand]U.d ' ' ' + Q.d:[tank.sprite.0] + ' + 0A"F 0A-10"N D ' ' Q.cI + %.x + ' + > +} + +@[tank.explode]{ + !!.[explosion]*oO%. + .[explosion]✹✸✶✧· + :Q.[explosion]< + 0A"F 0A-10"N D ' ' + %.i-1Q.[explosion]IR + > +} + +0U[tank.score] + +@[tank.shoot]{ + U.#dr U.yU.x + + !* FIXME: Could also be encoded into a map *! + Q.#dr-1Oright,left,up,down + !right! + 6-1%.x %.y + 1U.#dx 0U.#dy + Oend + !left! + %.y + -U.#dx 0U.#dy + Oend + !up! + 2-1%.x + 0U.#dx -U.#dy + Oend + !down! + 2-1%.x 3%.y + 0U.#dx 1U.#dy + !* fall through *! + !end! + < + (Q.#dx%.x),(Q.#dy%.y)M[tank.goto]"F ' + 0A"< ' Q.#dy"= 0A-10"= ' ' + 0A- "N 0A-10"N 1; ' ' + 0A"F 0A-10"N D ' ' I● + -DI + > + M[tank.explode] + + %[tank.score] 1SCORE: \[tank.score] +} + +@[tank.selfdestruct]{ + U.yU.x Q.x+2U.#cx Q.y+2U.#cy + .[explosion]✹✹✸✸✶✶✧✧· + 10< + Q.#cx-10U.x 20< + Q.x-1"< %.x F> ' + Q.#cy-10U.y 20< + !* d = sqrt((x - cx)^2 + ((y - cy) * aspect)^2) *! + (Q.x-Q.#cx)^*2 + ((Q.y-Q.#cy)*2)^*2 U.#d2 + + Q.r^*2 - Q.#d2"< + Q.#d2 - (Q.r+2)^*2"< + !* on shock wave *! + Q.x,Q.yM[tank.goto]"F %.y F> ' + -D Q.rQ.[explosion]I + ' + | + !* within shock wave *! + Q.x,Q.yM[tank.goto]"F %.y F> ' + -D I + ' + %.y> + %.x> + 1 + %.r> + Q.#cx,Q.#cyM[tank.goto] +} + +ESGETCOLUMNU.x :-1U.y +Q.xU.#xo Q.yU.#yo + +!* + * Normalize identations to spaces -- assumed by M[goto] + * FIXME: Will not work well with character representations. + *! +ESGETTABDRAWMODE-2"N + J <S^I; + ESGETCOLUMN-(-1ESGETCOLUMN)U.w + -D Q.w<I > + > +' + +1CONTROL: W A S D. SHOOT: SPACE. QUIT: ESCAPE. PRESS ANY KEY TO START. + +ESGETCARETSTYLEU.[caretstyle] +0ESSETCARETSTYLE + +1U.[sprite] +< + Q.#xo,Q.#yo,0M[tank.blit] !* redraw background *! + Q.xU.#xo Q.yU.#yo + + Q.x,Q.y,Q.[sprite]M[tank.blit] + 0 U.c + :Okey.U.c + F> + !key.w! + Q.y"> -%.y ' 3U.[sprite] + F> + !key.a! + Q.x,Q.y,0M[tank.blit] !* redraw background *! + Q.x"> -%.x ' 2U.[sprite] + F> + !key.s! + Q.x,Q.y,0M[tank.blit] !* redraw background *! + %.y 4U.[sprite] + F> + !key.d! + Q.x,Q.y,0M[tank.blit] !* redraw background *! + %.x 1U.[sprite] + F> + !key. ! + !* FIXME: this also scrolls due to *! + Q.x,Q.y,Q.[sprite]M[tank.shoot] + F> + !key.! + Q.x,Q.yM[tank.selfdestruct] + 1; +> + +Q.[caretstyle]ESSETCARETSTYLE |
