/*======================================== * SL.as: * Copyright 1993,1999 Toyoda Masashi * (toyoda@is.titech.ac.jp) * [ActionScript3 neta version] Copyright 2008 kaikoga * (info@mail.kaikoga.net) * Last Modified: 2008/ 3/21 *======================================== */ /* sl version 3.03 : ActionScript3 neta version 0.0.0 */ /* by kaikoga 2008/ 3/21 */ /* sl version 3.03 : add usleep(20000) */ /* by Toyoda Masashi 1998/ 7/22 */ /* sl version 3.02 : D51 flies! Change options. */ /* by Toyoda Masashi 1993/ 1/19 */ /* sl version 3.01 : Wheel turns smoother */ /* by Toyoda Masashi 1992/12/25 */ /* sl version 3.00 : Add d(D51) option */ /* by Toyoda Masashi 1992/12/24 */ /* sl version 2.02 : Bug fixed.(dust remains in screen) */ /* by Toyoda Masashi 1992/12/17 */ /* sl version 2.01 : Smoke run and disappear. */ /* Change '-a' to accident option. */ /* by Toyoda Masashi 1992/12/16 */ /* sl version 2.00 : Add a(all),l(long),F(Fly!) options. */ /* by Toyoda Masashi 1992/12/15 */ /* sl version 1.02 : Add turning wheel. */ /* by Toyoda Masashi 1992/12/14 */ /* sl version 1.01 : Add more complex smoke. */ /* by Toyoda Masashi 1992/12/14 */ /* sl version 1.00 : SL runs vomitting out smoke. */ /* by Toyoda Masashi 1992/12/11 */ package sltest2 { import sltest2.*; import net.kaikoga.vvm.*; import net.kaikoga.curses.*; public class SL { private const D51HIGHT:int = 10; private const D51FUNNEL:int = 7; private const D51LENGTH:int = 83; private const D51PATTERNS:int = 6; private const D51STR1:String = " ==== ________ ___________ "; private const D51STR2:String = " _D _| |_______/ \\__I_I_____===__|_________| "; private const D51STR3:String = " |(_)--- | H\\________/ | | =|___ ___| "; private const D51STR4:String = " / | | H | | | | ||_| |_|| "; private const D51STR5:String = " | | | H |__--------------------| [___] | "; private const D51STR6:String = " | ________|___H__/__|_____/[][]~\\_______| | "; private const D51STR7:String = " |/ | |-----------I_____I [][] [] D |=======|__ "; private const D51WHL11:String = "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "; private const D51WHL12:String = " |/-=|___|= || || || |_____/~\\___/ "; private const D51WHL13:String = " \\_/ \\O=====O=====O=====O_/ \\_/ "; private const D51WHL21:String = "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "; private const D51WHL22:String = " |/-=|___|=O=====O=====O=====O |_____/~\\___/ "; private const D51WHL23:String = " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "; private const D51WHL31:String = "__/ =| o |=-O=====O=====O=====O \\ ____Y___________|__ "; private const D51WHL32:String = " |/-=|___|= || || || |_____/~\\___/ "; private const D51WHL33:String = " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "; private const D51WHL41:String = "__/ =| o |=-~O=====O=====O=====O\\ ____Y___________|__ "; private const D51WHL42:String = " |/-=|___|= || || || |_____/~\\___/ "; private const D51WHL43:String = " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "; private const D51WHL51:String = "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "; private const D51WHL52:String = " |/-=|___|= O=====O=====O=====O|_____/~\\___/ "; private const D51WHL53:String = " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "; private const D51WHL61:String = "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "; private const D51WHL62:String = " |/-=|___|= || || || |_____/~\\___/ "; private const D51WHL63:String = " \\_/ \\_O=====O=====O=====O/ \\_/ "; private const D51DEL:String = " "; private const COAL01:String = " "; private const COAL02:String = " "; private const COAL03:String = " _________________ "; private const COAL04:String = " _| \\_____A "; private const COAL05:String = " =| | "; private const COAL06:String = " -| | "; private const COAL07:String = "__|________________________|_ "; private const COAL08:String = "|__________________________|_ "; private const COAL09:String = " |_D__D__D_| |_D__D__D_| "; private const COAL10:String = " \\_/ \\_/ \\_/ \\_/ "; private const COALDEL:String = " "; private const LOGOHIGHT:int = 6; private const LOGOFUNNEL:int = 4; private const LOGOLENGTH:int = 84; private const LOGOPATTERNS:int = 6; private const LOGO1:String = " ++ +------ "; private const LOGO2:String = " || |+-+ | "; private const LOGO3:String = " /---------|| | | "; private const LOGO4:String = " + ======== +-+ | "; private const LWHL11:String = " _|--O========O~\\-+ "; private const LWHL12:String = "//// \\_/ \\_/ "; private const LWHL21:String = " _|--/O========O\\-+ "; private const LWHL22:String = "//// \\_/ \\_/ "; private const LWHL31:String = " _|--/~O========O-+ "; private const LWHL32:String = "//// \\_/ \\_/ "; private const LWHL41:String = " _|--/~\\------/~\\-+ "; private const LWHL42:String = "//// \\_O========O "; private const LWHL51:String = " _|--/~\\------/~\\-+ "; private const LWHL52:String = "//// \\O========O/ "; private const LWHL61:String = " _|--/~\\------/~\\-+ "; private const LWHL62:String = "//// O========O_/ "; private const LCOAL1:String = "____ "; private const LCOAL2:String = "| \\@@@@@@@@@@@ "; private const LCOAL3:String = "| \\@@@@@@@@@@@@@_ "; private const LCOAL4:String = "| | "; private const LCOAL5:String = "|__________________| "; private const LCOAL6:String = " (O) (O) "; private const LCAR1:String = "____________________ "; private const LCAR2:String = "| ___ ___ ___ ___ | "; private const LCAR3:String = "| |_| |_| |_| |_| | "; private const LCAR4:String = "|__________________| "; private const LCAR5:String = "|__________________| "; private const LCAR6:String = " (O) (O) "; private const DELLN:String = " "; private var ACCIDENT:int = 0; private var LOGO:int = 0; private var FLY:int = 0; private var ERR:int = -1; private var OK:int = 0; private var LINES:int = 24; private var COLS:int = 80; private var m_Curses:SS_ICurses = SLMain.m_Inst.m_Curses; private var my_mvaddstr:Function = SLMain.m_Inst.my_mvaddstr; private function option(str:String):void { var p:int = 0; while (str.charCodeAt(p) > 0) { switch (str.charAt(p++)) { case 'a': ACCIDENT = 1; break; case 'F': FLY = 1; break; case 'l': LOGO = 1; break; default: break; } } } public function SL (argv:Array) { /*insert loop*/ m_Curses.initscr(); for (;;) { /*end insert loop*/ var x:int, i:int; var argc:int = argv.length; /* for (i = 1; i < argc; ++i) { if (argv[i].charAt(0) == '-') { option(argv[i].slice(1)); } } m_Curses.initscr(); */ //signal(SIGINT, SIG_IGN); m_Curses.noecho(); /* m_Curses.leaveok(true); */ m_Curses.scrollok(false); /*dummy shell*/ m_Curses.leaveok(false); m_Curses.clear(); m_Curses.refresh(); m_Curses.mvaddstr(0, 0, "$ sl"); m_Curses.move(0, 6); m_Curses.refresh(); while (m_Curses.mvgetch(0, 6) == -1) throw new SS_SleepVVM(100, true); m_Curses.clear(); m_Curses.refresh(); m_Curses.leaveok(true); /*end dummy shell*/ for (x = COLS - 1; ; --x) { if (LOGO == 0) { if (add_D51(x) == ERR) break; } else { if (add_sl(x) == ERR) break; } m_Curses.refresh(); throw new SS_SleepVVM(20, true); //usleep(20000); } //mvcur(0, COLS - 1, LINES - 1, 0); /*insert loop*/ ACCIDENT = (Math.random() < 0.5) ? 0 : 1; FLY = (Math.random() < 0.5) ? 0 : 1; LOGO = (Math.random() < 0.5) ? 0 : 1; } /*end insert loop*/ m_Curses.endwin(); } private var sl:Array = [[LOGO1, LOGO2, LOGO3, LOGO4, LWHL11, LWHL12, DELLN], [LOGO1, LOGO2, LOGO3, LOGO4, LWHL21, LWHL22, DELLN], [LOGO1, LOGO2, LOGO3, LOGO4, LWHL31, LWHL32, DELLN], [LOGO1, LOGO2, LOGO3, LOGO4, LWHL41, LWHL42, DELLN], [LOGO1, LOGO2, LOGO3, LOGO4, LWHL51, LWHL52, DELLN], [LOGO1, LOGO2, LOGO3, LOGO4, LWHL61, LWHL62, DELLN]]; private var coal:Array = [LCOAL1, LCOAL2, LCOAL3, LCOAL4, LCOAL5, LCOAL6, DELLN]; private var car:Array = [LCAR1, LCAR2, LCAR3, LCAR4, LCAR5, LCAR6, DELLN]; private function add_sl(x:int):int { var i:int, y:int, py1:int = 0, py2:int = 0, py3:int = 0; if (x < - LOGOLENGTH) return ERR; y = LINES / 2 - 3; if (FLY == 1) { y = (x / 6) + LINES - (COLS / 6) - LOGOHIGHT; py1 = 2; py2 = 4; py3 = 6; } for (i = 0; i <= LOGOHIGHT; ++i) { my_mvaddstr(y + i, x, sl[(LOGOLENGTH + x) / 3 % LOGOPATTERNS][i]); my_mvaddstr(y + i + py1, x + 21, coal[i]); my_mvaddstr(y + i + py2, x + 42, car[i]); my_mvaddstr(y + i + py3, x + 63, car[i]); } if (ACCIDENT == 1) { add_man(y + 1, x + 14); add_man(y + 1 + py2, x + 45); add_man(y + 1 + py2, x + 53); add_man(y + 1 + py3, x + 66); add_man(y + 1 + py3, x + 74); } add_smoke(y - 1, x + LOGOFUNNEL); return OK; } private var d51:Array = [[D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL11, D51WHL12, D51WHL13, D51DEL], [D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL21, D51WHL22, D51WHL23, D51DEL], [D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL31, D51WHL32, D51WHL33, D51DEL], [D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL41, D51WHL42, D51WHL43, D51DEL], [D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL51, D51WHL52, D51WHL53, D51DEL], [D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL61, D51WHL62, D51WHL63, D51DEL]]; private var coal_d51:Array = [COAL01, COAL02, COAL03, COAL04, COAL05, COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL]; private function add_D51(x:int):int { var y:int, i:int, dy:int = 0; if (x < - D51LENGTH) return ERR; y = LINES / 2 - 5; if (FLY == 1) { y = (x / 7) + LINES - (COLS / 7) - D51HIGHT; dy = 1; } for (i = 0; i <= D51HIGHT; ++i) { my_mvaddstr(y + i, x, d51[(D51LENGTH + x) % D51PATTERNS][i]); my_mvaddstr(y + i + dy, x + 53, coal_d51[i]); } if (ACCIDENT == 1) { add_man(y + 2, x + 43); add_man(y + 2, x + 47); } add_smoke(y - 1, x + D51FUNNEL); return OK; } private var _man:Array = [["", "(O)"], ["Help!", "\\O/"]]; private function add_man(y:int, x:int):void { var i:int; for (i = 0; i < 2; ++i) { var aa:int = (LOGOLENGTH + x) / 12; my_mvaddstr(y + i, x, _man[aa % 2][i]); } } private const SMOKEPTNS:int = 16; private var S:Array = []; private var sum:int = 0; private var Smoke:Array = [["( )", "( )", "( )", "( )", "( )", "( )" , "( )" , "( )" , "()" , "()" , "O" , "O" , "O" , "O" , "O" , " " ], ["(@@@)", "(@@@@)", "(@@@@)", "(@@@)", "(@@)", "(@@)" , "(@)" , "(@)" , "@@" , "@@" , "@" , "@" , "@" , "@" , "@" , " " ]]; private var Eraser:Array = [" ", " ", " ", " ", " ", " " , " " , " " , " " , " " , " " , " " , " " , " " , " " , " " ]; private var dy:Array = [ 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; private var dx:Array = [-2, -1, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3 ]; private function add_smoke(y:int, x:int):void { var i:int; if (x % 4 == 0) { for (i = 0; i < sum; ++i) { my_mvaddstr(S[i].y, S[i].x, Eraser[S[i].ptrn]); S[i].y -= dy[S[i].ptrn]; S[i].x += dx[S[i].ptrn]; S[i].ptrn += (S[i].ptrn < SMOKEPTNS - 1) ? 1 : 0; my_mvaddstr(S[i].y, S[i].x, Smoke[S[i].kind][S[i].ptrn]); } my_mvaddstr(y, x, Smoke[sum % 2][0]); S[sum] = {y:y, x:x, ptrn:0, kind:sum % 2}; sum ++; } } } }