From 1eee39113bc65fdd923b9cf171d9ff436c194687 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Wed, 14 Jan 2009 06:13:46 +0000 Subject: [PATCH] JavaScript port of Blue Adept's Piss-o-Rama --- xtrn/pisorama/pisorama.doc | 20 +++ xtrn/pisorama/pisorama.js | 330 +++++++++++++++++++++++++++++++++++++ 2 files changed, 350 insertions(+) create mode 100644 xtrn/pisorama/pisorama.doc create mode 100644 xtrn/pisorama/pisorama.js diff --git a/xtrn/pisorama/pisorama.doc b/xtrn/pisorama/pisorama.doc new file mode 100644 index 0000000000..d13ccb0ff1 --- /dev/null +++ b/xtrn/pisorama/pisorama.doc @@ -0,0 +1,20 @@ +[Piss-o-Rama] + 1: Name Piss-o-Rama + 2: Internal Code PISORAMA + 3: Start-up Directory ../xtrn/pisorama + 4: Command Line *../xtrn/knk/pisorama.js + 5: Clean-up Command Line + 6: Execution Cost None + 7: Access Requirements + 8: Execution Requirements + 9: Multiple Concurrent Users Yes +10: Intercept Standard I/O No +11: Native (32-bit) Executable No +12: Use Shell to Execute No +13: Modify User Data No +14: Execute on Event No +15: Pause After Execution No +16: BBS Drop File Type None +17: Place Drop File In Node Directory +18: Time Options... + diff --git a/xtrn/pisorama/pisorama.js b/xtrn/pisorama/pisorama.js new file mode 100644 index 0000000000..d1264e4ee1 --- /dev/null +++ b/xtrn/pisorama/pisorama.js @@ -0,0 +1,330 @@ +/*************************************************************************** +*Please Read! PLEASE READ! Please Read! PLEASE READ! Please READ!!@!!@ * +* * +* The Piss-O-Rama * +* Version 2.0 * +* * +* By: Dave Lahti a.k.a. The Blue Adept * +* * +* This is the Second version of the Piss-O-Rama, a favorite among * +* SysOps who aren't afraid to let people see a "bad word" on their board. * +* (And I say afraid literally. It is not a challenge to their machismo, * +* just that for some reason they can't handle the word.)This version is the* +* first to come out with Source Code. Version 1.0 was in Turbo Pascal, and * +* I ended up not liking the final product. You will find version 2 much * +* MORE enjoyable, I hope. Feel Free to send any comments or view the latest* +* in Piss-O-Rama upadates on my board. I hereby declare this software * +* TOTALLY public-domain. (Especially since I used skeleton.c!) * +* * +* The Blue Demesnes BBS * +* San Francisco, California * +* (415)-333-1982 * +* Node 4552 of WWIVnet (For Now....) * +***************************************************************************/ + +/* + * Actually, this is version 3.0... now in JS rather than C + * Translated by Stephen Hurd (aka: Deuce) + */ + +var game_dir='.'; +try { throw barfitty.barf(barf) } catch(e) { game_dir=e.fileName } +game_dir=game_dir.replace(/[\/\\][^\/\\]*$/,''); +game_dir=backslash(game_dir); + +/* Now, the Piss-O-Rama variables... */ + +var dick_size=0, /* What kind of a punch he packs... */ + arm_strength=0, /* Obvious, I hope */ + will_power=0, /* How bad he wants to go */ + beers=0, /* How many beers he has drank */ + ptsleft=50; /* How many points left the user has */ + +function piss() +{ + var phases=new Array("", "New", "Quarter", "Half", "Full"); + var direcs=new Array("", "North", "South", "East", "West"); + var speeds=new Array("", "Breeze", "Gust", "Gale", "Tsunami"); + var sizes=new Array("", "Thimble", "2-Liter Bottle", "Gallon Milk-Jug", "55-Gallon Drum"); + var attempt, + arc, /* The Arc which the user picks */ + phase_of_moon, /* The Tidal effects on the piss-arc */ + wind_direction, /* Hope you don't piss in the wind! */ + wind_speed, /* If you are, hope it ain't going fast! */ + temperature, /* The colder it is... */ + bladder_size, /* How big the pouch be = pressure */ + max_arc, /* Maximum Arc based on dicksize vs + * armstrength */ + concentration, /* What's on your mind? */ + playboy_factor, /* Random event causing physical disorder */ + drunk, /* How drunk he is (affects aim) */ + distance; /* How far */ + + for(attempt=0; attempt<=2; attempt++) { + phase_of_moon=random(4)+1; + wind_direction=random(4)+1; + wind_speed=random(4)+1; + temperature=random(100)+1; + bladder_size=random(4)+1; + max_arc = (arm_strength * 3) - (dick_size); + concentration = random(100) + 1; + playboy_factor = random(2); + drunk = (beers / 10); + + printf("\r\n\r\n Status Screen For Attempt #%d\r\n\r\n", attempt + 1); + printf("Dick Size : %-7d Arm Strength : %-2d\r\n",dick_size, arm_strength); + printf("Will Power : %-7d Beers : %-2d\r\n", will_power, beers); + printf("Phase Of Moon : %-7s Wind Direction : %-5s\r\n", phases[phase_of_moon], direcs[wind_direction]); + printf("Temperature : %-7d Wind Speed : %-7s\r\n", temperature, speeds[wind_speed]); + printf("Concentration : %-7d Bladder Size : %-15s\r\n", concentration, sizes[bladder_size]); + + if (max_arc < 0) + max_arc = 0; + do { + printf("\r\n\r\nEnter Arc [0-90] (Max Arc = %d) : ", max_arc); + arc=parseInt(console.getstr('', 2)); + } while (isNaN(arc) || arc > max_arc || arc < 0); + distance = beers * 2; + if ((arc < 50) && (arc > 30)) { + distance += random(20); + } else { + distance -= random(20); + } + distance += will_power + beers; + if ((phase_of_moon == 3) || (phase_of_moon == 4)) { + distance -= random(20); + } else { + distance += random(20); + } + switch (wind_direction) { + case 1: /* North */ + distance /= 5; + break; + case 2: /* South */ + distance += wind_speed * 5; + break; + case 3: /* East */ + case 4: /* West */ + distance -= wind_speed * 3; + break; + } + if (temperature <= 60) + distance += (temperature / 2); + distance += bladder_size * 2; + distance += concentration / 10; + if (playboy_factor) { + write("\r\n\r\nSomeone threw a Playboy out on the field."); + write("\r\nYou get a stiffy. -30 your distance.\r\n\r\n"); + distance -= 30; + } + drunk = beers * 2; + if (drunk >= 40) { + write("\r\n\r\nYou are really drunk, and it has affected your aim."); + write("\r\n -30 your distance.\r\n\r\n"); + distance -= 30; + } + if (distance < 0) + distance = 1; + printf("\r\n\r\nYou Have Pissed %d meter(s). \r\n\r\n", distance); + + var f=new File(game_dir+"best.pis"); + var highscore; + if(f.exists) { + if(f.open("r")) { + highscore=f.iniGetObject(null); + f.close(); + } + } + else { + highscore=new Object(); + highscore.comment="Noone has beat the high score yet."; + highscore.oldscore=10; + highscore.oldname="The Blue Adept"; + if(f.open("w+")) { + f.iniSetObject(null, highscore); + f.close(); + } + } + + if (distance > highscore.oldscore) { + write("\r\n\r\nYou Got The High Score!\r\n\r\n"); + write("Please Enter A Comment:\r\n"); + highscore.comment=console.getstr('',159); + if(user.name==undefined || user.name=='') { + write("Please Enter Your Name: "); + highscore.oldname=console.getstr('',40); + } + else + highscore.oldname=user.name; + highscore.oldscore=distance; + if(f.open("w+")) { + f.iniSetObject(null, highscore); + f.close(); + } + } + write("\r\n\r\nCurrent High Score : \r\n"); + printf("%s pissing in at %d meters!\r\n\r\n", highscore.oldname, highscore.oldscore); + printf("He had This to say about his victory:\r\n%s\r\n", highscore.comment); + + console.pause(); + + } +} + +function edit(ask) +{ + write("[Enter #]: "); + var ret = parseInt(console.getstr('', 3)); + if ((ret >= 0) && (ret <= ptsleft)) { + if(isNaN(ret)) + ret=0; + ptsleft -= ret; + return (ret); + } else { + if ((ret < 0) && ((ret * -1) < ask)) { + ptsleft += (ret * -1); + return (ret); + } else { + writeln(""); + return (0); + } + } +} + + +function mainmenu() +{ + var ch; + var ab=false; + do { + console.clear(); + writeln(""); + writeln(""); + write(" Piss-O-Rama - Main Menu\r\n\r\n"); + printf(" Points Left : %d\r\n\r\n", ptsleft); + printf(" D)ick Size (Currently %-2d)\r\n", dick_size); + printf(" A)rm Strength (Currently %-2d)\r\n", arm_strength); + printf(" W)ill Power (Currently %-2d)\r\n", will_power); + printf(" B)eers (Currently %-2d)\r\n", beers); + write(" P)iss\r\n"); + write(" I)nstructions\r\n"); + write(" Q)uit to the BBS\r\n\r\n"); + write("Your Command : "); + ch = console.getkeys("QIPBWAD"); + switch (ch) { + case 'Q': + ab = true; + break; + case 'D': + write("\r\n\r\nInput Integer to Add to Dick Size. (negative to subtract)\r\n"); + dick_size += edit(dick_size); + break; + case 'A': + write("\r\n\r\nInput Integer to Add to Arm Strength. (negative to subtract)\r\n"); + arm_strength += edit(arm_strength); + break; + case 'W': + write("\r\n\r\nInput Integer to Add to Will Power. (negative to subtract)\r\n"); + will_power += edit(will_power); + break; + case 'B': + write("\r\n\r\nInput Integer to Add to Beers. (Negative to subtract)\r\n"); + beers += edit(beers); + break; + case 'P': + piss(); + ab = true; + break; + case 'I': + write("\r\n\r\n Instructions for Piss-O-Rama"); + write("\r\n\r\n"); + write(" Ok, in this game, the object is to piss as far as you can. There are\r\n"); + write(" several factors which can alter your performance. Four of them are\r\n"); + write(" configurable by you. They are:\r\n"); + write("\r\n"); + write(" Dick Size - The heavier the meat, the more punch it packs.\r\n"); + write(" Arm Strength - If less than dick size, you won't get a good arc.\r\n"); + write(" Will Power - How bad you need/want to go.\r\n"); + write(" Beers - The more you drink, the more you gotta go. Be careful,\r\n"); + write(" it can affect your aim.\r\n"); + write(" Arc - The Arc you choose to piss at.\r\n"); + writeln(""); + console.pause(); + writeln(""); + write(" Now, there are several features which are random on every try , of\r\n"); + write(" which you get three per run. They are:\r\n"); + writeln(""); + write(" Phase of the moon - The tidal effects on your urination.\r\n"); + write(" Wind Direction - Hope you aren't pissing in the wind.\r\n"); + write(" Wind Speed - If you are, hope it isn't blowing hard.\r\n"); + write(" Temperature - The colder it is, the worse you have to go.\r\n"); + write(" Bladder Size - Bigger Bladder = More Pressure.\r\n"); + write(" Concentration - Is your mind on this, or how badly you have to go #2?\r\n"); + write(" Playboy Factor - A Random event causing a physiological disorder.\r\n"); + write(" Drunkeness - Depends on the Beers variable, and can affect aim.\r\n"); + writeln(""); + writeln(""); + write(" You start out with 50 points, so use them wisely.\r\n"); + writeln(""); + writeln(""); + writeln(""); + console.pause(); + break; + + + } + } while (!ab); +} + +/* + * If we're running under jsexec, fake it! + */ +if(this.console==undefined) { + console=new Object(); + console.clear=function() { write("\x0c"); }; + console.getstr=function(dflt, maxlen) { + return(readln().substr(0,maxlen)); + }; + console.pause=function() { + write("[Hit Enter]"); + readln(); + write("\b \b\b \b\b \b\b \b\b \b\b \b\b \b\b \b\b \b\b \b\b \b"); + }; + console.getkeys=function(str) { + var ret; + + str=str.toUpperCase(); + while(1) { + ret=readln().toUpperCase(); + if(ret.length > 1) + continue; + if(str.indexOf(ret)!=-1) + return(ret); + } + }; + console.attributes=0; + console.write=function(str) { + /* Strip CTRL-A, ANSI, and CTRL characters except tab, \r, and \n */ + write(str.replace(/\x01./g,'').replace(/\x1b\[[\x30-\x3f]*[\x20-\x2f]*[\x40-\x7e]/g,'').replace(/[\x00-\x06\x0b\x0e-\x1f]/g,'')); + } + console.writeln=function(str) { + /* Strip CTRL-A, ANSI, and CTRL characters except tab, \r, and \n */ + writeln(str.replace(/\x01./g,'').replace(/\x1b\[[\x30-\x3f]*[\x20-\x2f]*[\x40-\x7e]/g,'').replace(/[\x00-\x06\x0b\x0e-\x1f]/g,'')); + } +} + +console.clear(); +writeln(""); +writeln(""); +writeln(""); +write(" As you pull down your zipper, you enter....\r\n\r\n"); +write(" The Piss-O-Rama!\r\n"); +write(" Version 2.0\r\n\r\n"); +write(" By: The Blue Adept #1@4552\r\n\r\n\r\n"); +console.pause(); +mainmenu(); +console.clear(); +writeln(""); +writeln(""); +write("Thanks for Playing the Piss-O-Rama!\n\n"); + -- GitLab