Roguelike game called "scroll", that is both a game and a file pager. I could build this in haskell during the http://7drl.org/ roguelike building competition. (7 days in March) Idea is that it's run and loads the specified file, or the GPL when no file was specified. (GPL is also its license.) The file is displayed with an ornamental ascii art of a scroll of paper at top and bottom, and on the sides. The @ is the head of a bookworm, which grows as it moves through the scroll, so >>>>>>@, >>>v v @ etc #|The bookworm can move in whitespace. It can eat letters of words, with some|### #|limitations. We want text to tend to form a barrier to it, when it's in a|##### #|paragraph like this. So, the scrollwork borders (which are impenetrable)|###### #|come in to text in these paragraphs, like I'm showing it doing here.|########## #|but, at paragraph end, there can be whitespace |# #| |# The page starts out centered, so normal 80-column text will display in scroll(1) much as it does in less(1), without the barrier getting in the way (too) badly. As the worm reaches an edge of the screen, the viewport scrolls. There is no vision constraint -- the whole file can be viewed (as much as fits in the viewport). The worm can lift its head up and look down the scroll. Although part of is wrapped up at the top and bottom of the screen. Like in nethack, ; can be used to examine a letter on-screen. For most of them, it should display their unicode name eg "LATIN CAPITAL LETTER A", which will be really amusing. The bookworm and borders and some punctuation are special elements. An empty space is "UNMARKED PAPER". Punctuation typically found around sentences can be used for both monsters and special items. Adding moving monsters would be nice, but maybe a bit hard for a short competition, and really the text of the scroll is the main obstacle. @ When the bookworm is moved into a letter of a word, it swallows that letter. >>>>>^ In the game display, the worm has eaten the "t', and so that should be displayed in inverse video. (Swallowing a letter can take a few turns, which would be good to slow it down and also to let it be attacked by monsters.) The bookworm can only grow so long (the number is one of its stats, eg LEN: 10) (Possibly the only stat?), and so it can only swallow so many letters. Once the bookworm gets to its max length, the oldest segment would normally vanish, so it appears to move around as a creature of fixed length. The worm can also back up, which shortens its displayed length. But, if it's swallowed a letter and reaches max length, it instead gets stuck! It cannot move forward, but it can move back. v v So, a paragraph that's solid and taller than the worm's LEN is not penetrable by swallowing allvthe way through it. Although carefully finding some holes between words canvlet the worm get through deeper than it normally would. @ (btw, the worm segments should appear inversed or colored; otherwise it's hard to tell if a "v" is a segment or not) Now, for the really fun bit: The bookworm is reading a magic scroll, and so it can learn spells! It does this by combining the letters it eats into words! Once it's eaten them, the player can type the word to use the letters up and cast the spell. (Type in upper-case, so conflicts with hjkl, etc don't happen.) A simple and useful spell would clear out the backlog of eaten letters, allowing the worm to move forward further than usual. This should be a word that's easy to find and not too long. Maybe just "o"? How to learn about spells? The help page can give a few. It's probably fine if the user remembers a spell and uses it in a new game. This might be the equivilant of nethack's item ID mini-game; perhaps the user learns other spells by trial and error, by swallowing letters and trying them out. That's a hard way, so there could be hints, perhaps swallowing ? teaches a spell. Or perhaps the letters swallowed in the worm want to form a spell if they can, and reorder and/or light up when they're close to making a spell. More spell ideas: * Grow the LEN temporarily (or permanently). * Invert head to other end of worm! * Cone of letter disintigration from worm's head out LEN spaces. * Tame monster * Genocide letter * Polymorph letter (all a's become b's etc) * Scramble letters (in some area of effect) * Swap lines (line below furthest down worm segment with line below that) * Reverse line (line below furthest down worm segment) * Fireball (can never help the player get past a difficult area; only useful as a way to use up swallowed letters) * Wildcard -- gain the ability to use 1 letter as a wildcard when casting a spell. (Spell must be 2+ letters long.) A good spell to add if the game seems too hard. * Learn new way to cast a spell. This spell needs a special ingredient to cast; the worm needs to have swallowed the letter(s) of the old way to cast the spell and the new way. So, if this spell was "new", and the worm swallowed "oneway", it could cast "new" and add "a" as a new way to cast "o" (leaving "y" leftover). (Or add "ya" as a new way to cast "o", but that's probably unwise.) Note that swallowing "newnewa" is a powerful combo; it lets all a's be used to cast "new", and from there swallow "aab" then "bbc" then "ccd" etc and you've soon added new spells for every letter of the alpabet you want and can cruise thru words with ease! Spell farming.. (Jerry suggests "knew a newt" as a hint to this possibility.) Note that "new" first appears on line 26 of the GPL. The letters "n", "e", and "w" all appear in the first *line*, but not too close together. * Some punctuation could modify the effect of a spell. - Swallowing a period teaches a new spell. - A comma grows the player 1 segment. - Semicolon = comma + period effect; of course. - ! could make the spell more powerful. - ? could make the spell random in some way The spell system allows adding lots of complexity, pretty easily. A spell is just a function from [Char] -> (Scroll -> Scroll) probably. Oh, BTW, there needs to be a help page, accessible by pressing ? That page is just another scroll, containing another worm. But it can be written to be easy to navigate and indeed can be a training level! Other keys; hjkl movement, but also arrow keys, since scroll(1) can be used as a pager. (no diagonals) q to quit, s to save (this means those letters cannot be part of spells) Scary idea: a fire trap could burn the paper creating irregular impenetrable borders, even possibly as holes, and burning letters which could be valuable for spells. DEATH. Gotta die. So, it's a scroll. Ascii art of one: _______________________ =(_______________________)= | >>>@ | |Lorem ipsum dolor est| |Blah blah something||` |and some more and|||` |even more. ||` | || |Foooooooo Bar||||||, |Um? What do I type||, |now? I don't know|||| |__ ___ __ __| =(__Status_message._____)= The scroll is being read, and rolled as it goes. You don't want to get wrapped up in it! So, you need to move down, at a fast enough rate, to not die. _______________________ =(_______________________)= =(__Crunch!__GAME_OVER___)= Time only moves when you do something of course. When the scroll is about to scroll, a little animation would be nice, or just a "The scroll shudders." message. Note that, if you start near the top, you're likely to die quickly. Which is ok, it's kind of an equvilant to low hit points. As you get further down, it gets easier, you have more time, and know more spells. Once you get quite near the bottom of the screen, the scroll rolls whenever you go down a line, so it may get harder again. Little problem: If you die, can't you just start over on the same file? VICTORY: Notice that there is a gap at the bottom of the scroll, between the border __ and into the status message area. |now?vI don't know|||| |__ @ ___ __ __| =(____THE END_IS NIGH__)= Let the worm go in there! But, it has to pull its tail in, possibly swallowing letters IN THE STATUS AREA to do it! |now?vI don't know|||| |__ v ___ __ __| =(____T@E END_IS NIGH__)= |now? I don't know|||| |__ ___ __ __| =(____T>>@END_IS NIGH__)= Finished by a victory dance; the scroll rolls up. _____________________ =(_____________________)= =(____T>>@END_IS NIGH__)= And the worm dangles off the end _____________________ =(_____________________)= =(____THE@END_IS NIGH__)= ^ ^ And falls off the world! To better places. Note that this implies that the world state includes the top and bottom of the scroll, including message area, and when it scrolls, it's modified by adding, moving, etc. It would be interesting, when building this, to blog about the steps of its construction. But, leave out the overall game idea. It would seem I was building a roguelike w/o putting any consideration into constructing the level. Then at then end I can reveal that the level is user-provided! Now the text of the GPL, set up as a scroll and with the worm driven through it: __________________________________________________________________________ =(__________________________________________________________________________)= | || | v GNU GENERAL PUBLIC LICENSE || | v Version 3, 29 June 2007 || | >>>>>>>>>>>>>>>>>>v || Copyright (C) 2007 Free Sovtware Foundation, Inc. || Everyone is permitted to cvpy and distribute verbatim copies||||||||` of this license document, but changing it is not allowed.|||||||||||, | @ ||||| { So far, the worm swallowed an 'f', and then an 'o', which cleared the 'f' and 'o'. Now it's swallowed a 'b', and has until LEN-1 to use that 'b' in a spell or it'll get stuck on it. I'm showing the old segments for clarity, but let's say that LEN is 6. } | vPreamble | | v< {"bi" would need to be a spell here} | | The GNU General Public License is a free, copyleft license for|||||| |software and other kinds of works. ||||| | ||||||, | The licenses for most software and other practical works are designed||, |to take away your freedom to share and change the works. By contrast,||| |the GNU General Public License is intended to guarantee your freedom to|| |share and change all versions of a program--to make sure it remains free| |software for all its users. We, the Free Software Foundation, use the||| |GNU General Public License for most of our software; it applies also to|` |any other work released this way by its authors. You can apply it to|||, |your programs, too. ||| |__ ___ __ ___ __ ___ ___ __ ___ ___ ____ ____ __| =(__The scroll shudders!_____________________________Q:quit__H:help_________)= Hmm, based on first game play, it's pretty hard, and more of a puzzle, since you have to look ahead. But maybe not really; user could try things until they found a path that works. And can always add other ways to deal with letters that are in the way, with more powerful spells, etc. Should be able to balance it. _______________________________________________________________________ =(_______________________________________________________________________)= | | | | | | | | | | | | | | |__ ___ __ ___ ___ ___ __ ___ ___ ____ ____ __| =(______________________________________________________________________)=