From d75e1169b8dbd1b9c6d3c7fa68178dba6ab4925c Mon Sep 17 00:00:00 2001 From: deuce <> Date: Tue, 27 Aug 2019 04:44:31 +0000 Subject: [PATCH] Add Barak's House IGM (Initial port) Does not currently have an install/uninstall thing... I'm still figuring out how that should work. --- xtrn/lord/barak/barak.js | 1325 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 1325 insertions(+) create mode 100644 xtrn/lord/barak/barak.js diff --git a/xtrn/lord/barak/barak.js b/xtrn/lord/barak/barak.js new file mode 100644 index 0000000000..750124efea --- /dev/null +++ b/xtrn/lord/barak/barak.js @@ -0,0 +1,1325 @@ +'use safe'; + +function catchup() +{ + while (dk.console.waitkey(0)) { + dk.console.getkey(); + } +} + +function read_direction() +{ + var ch = dk.console.getkey(); + + switch(ch) { + case '8': + case 'KEY_UP': + return 'U'; + case '4': + case 'KEY_LEFT': + return 'L'; + case '2': + case 'KEY_DOWN': + return 'D'; + case '6': + case 'KEY_RIGHT': + return 'R'; + case 'q': + case 'Q': + return 'Q'; + case ' ': + return ' '; + default: + return '|'; + } +} + +function check_move(x, y) +{ + if (x > 57) { + return false; + } + if (y > 21) { + return false; + } + if (x < 16) { + return false; + } + if (y < 4) { + return false; + } + return true; +} + +function run() +{ + var old_gold = player.gold; + var time = 30; + var over = false; + var you_x = random(41) + 16; + var you_y = random(17) + 4; + var bar_x = random(41) + 16; + var bar_y = random(17) + 4; + var you_old_x = you_x; + var you_old_y = you_y; + var bar_old_x = bar_x; + var bar_old_y = bar_y; + var old_time = (new Date()).valueOf() + 500; + var j; + var gold = []; + var tmp; + var stole = 0; + var num; + var cur_time; + + function important(x, y) { + var i; + + for (i = 0; i < gold.length; i++) { + if (gold[i].x === x && gold[i].y === y) { + return i; + } + } + return -1; + } + + for (j = 0; j < 10; j++) { + tmp = {x:random(41)+16, y:random(17)+4}; + gold.push(tmp); + dk.console.gotoxy(tmp.x - 1, tmp.y - 1); + lw('`r6`%\xec`r0'); + } + dk.console.gotoxy(you_x - 1, you_y - 1); + lw('`r6`%\xea`r0'); + dk.console.gotoxy(bar_x - 1, bar_y - 1); + lw('`r6`%B`r0'); + dk.console.gotoxy(1, 7); + lw('`0READY...'); + dk.console.gotoxy(1, 8); + mswait(1000); + lw('`0SET...'); + mswait(1000); + lw('`4GO!'); + mswait(400); + do { + ch = read_direction(); + if (ch === 'L') { + if (check_move(you_x - 1, you_y)) { + you_x -= 1; + } + } + else if (ch === 'R') { + if (check_move(you_x + 1, you_y)) { + you_x += 1; + } + } + else if (ch === 'U') { + if (check_move(you_x, you_y - 1)) { + you_y -= 1; + } + } + else if (ch === 'D') { + if (check_move(you_x, you_y + 1)) { + you_y += 1; + } + } + else if (ch === 'Q') { + over = true; + } + if (you_old_x != you_x || you_old_y != you_y) { + dk.console.gotoxy(you_x - 1, you_y - 1); + lw('`r6`%\xea`r0'); + num = important(you_x, you_y); + if (num >= 0) { + gold[num].x = 0; + gold[num].y = 0; + player.gold += player.level * player.level * 100; + stole += 1; + dk.console.gotoxy(0, 7); + lw('`r0`0Gold: `%'+pretty_int(player.gold)); + dk.console.gotoxy(0, 8); + lw('`0Time: `%'+pretty_int(time)+' '); + } + dk.console.gotoxy(you_old_x - 1,you_old_y - 1); + lw('`r6 `r0'); + } + you_old_x = you_x; + you_old_y = you_y; + if ((new Date()).valueOf() > old_time) { + old_time += 500; + if (you_x > bar_x && check_move(bar_x+1,bar_y)) { + bar_x += 1; + } + if (you_x < bar_x && check_move(bar_x-1,bar_y)) { + bar_x -= 1; + } + if (you_y > bar_y && check_move(bar_x,bar_y+1)) { + bar_y += 1; + } + if (you_y < bar_y && check_move(bar_x,bar_y-1)) { + bar_y -= 1; + } + dk.console.gotoxy(0, 7); + lw('`r0`0Gold: `%'+pretty_int(player.gold)); + dk.console.gotoxy(0, 8); + lw('`0Time: `%'+pretty_int(time)+' '); + time--; + } + if (bar_old_x !== bar_x || bar_old_y !== bar_y) { + dk.console.gotoxy(bar_x - 1, bar_y - 1); + lw('`r6`%B`r0'); + dk.console.gotoxy(bar_old_x - 1, bar_old_y - 1); + num = important(bar_old_x, bar_old_y); + if (num >= 0) { + lw('`r6\xec`r0'); + } + else { + lw('`r6 `r0'); + } + } + bar_old_x = bar_x; + bar_old_y = bar_y; + if (bar_old_x === you_x && bar_old_y === you_y) { + dk.console.gotoxy(bar_x - 4, bar_y - 1); + lw('`)Splat!'); + mswait(1000); + lln('`r0`c `%YOU ARE DEFEATED.'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln(' `2Barak laughs as warm blood flows down your cheek.'); + if (old_gold != player.gold) { + sln(' He savagely takes back the gold you stole from him.'); + } + player.gold = old_gold; + sln(' Maybe next time?'); + sln(''); + lln(' `4YOU FEEL AWFULLY WEAK.'); + sln(''); + player.hp = 1; + catchup(); + return; + } + if (time < 0) { + dk.console.gotoxy(you_x - 4, you_y - 1); + lw('`0YAHOO!'); + mswait(1000); + lln('`r0`c `%YOU PUT BARAK TO SHAME!'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln(' `2Barak curses as you nimbly dance away from his'); + sln(' knife. Not only did you live, you also stole '); + lln(' `0'+pretty_int(player.gold - old_gold)+'`2 from his house!'); + sln(''); + if (player.clss === 3) { + if (stole === 10) { + lln(' `%FOR FANTASTIC THIEVING, YOU GET AN EXTRA '+pretty_int(200 * player.level * player.level)); + player.gold += 200 * player.level * player.level; + sln(''); + } + } + lln(' `%YOU HEAD HOME, IN GOOD HUMOR.'); + sln(''); + catchup(); + return; + } + } while (!over); +} + +function start_fight() +{ + var i; + var mc = morechk; + + morechk = false; + lln('`c `%HAVING FUN AT BARAK\'S'); + sln(''); + for (i = 0; i < 18; i++) { + lln('`r0 `r6 `r0'); + } + sln(''); + lln(' `0(`2Use the keypad`0, `2arrow keys or `%Ctrl`0-`2S`0,`2E`0,`2D`0,`2X keys to run like hell!`0)'); + run(); + morechk = mc; + more_nomail(); +} + +function sugar() +{ + var ch; + + if (player.sex === 'M') { + lln(' `0"You want sugar?! Go give a few gems to `#Violet`0, she\'ll give'); + sln(' you some sugar! Har!"'); + } + else { + lln(' `0"You want sugar?! Go give a few gems to `%Seth Able`0, he\'ll give'); + sln(' you some sugar! Har!"'); + } + sln(''); + lln(' `2(`0Y`2)ou animal! How dare you! Prepare to fight!'); + lln(' `2(`0L`2)augh loudly at Baraks lame humor.'); + sln(''); + lw(' `2Your choice? [`0Y`2] :`%'); + ch = getkey().toUpperCase(); + sln(ch); + sln(''); + if (ch === 'L') { + lln(' `2You giggle uncontrollably. Barak looks pleased as hell.'); + sln(''); + more_nomail(); + lln(' `0"You know kid? You\'re ok. Here is a little somethun for ya."'); + sln(''); + lln(' `%BARAK TOSSES YOU A GEM!'); + player.gem++; + player.put(); + sln(''); + sln(' You trot back home in triumph.'); + sln(''); + more_nomail(); + return; + } + lln(' `2Barak looks quite upset.'); + sln(''); + more_nomail(); + lln(' `2He then pulls out a bigass knife.'); + sln(''); + more_nomail(); + lln(' `2He then proceeds to chase you around the house with it.'); + sln(''); + more_nomail(); + start_fight(); +} + +function say_slow(str) +{ + var i; + + for (i = 0; i < str.length; i++) { + sw(str[i]); + mswait(100); + } +} + +function say_slow2(str) +{ + var i; + + for (i = 0; i < str.length; i++) { + sw(str[i]); + mswait(10); + } +} + +function hair_end(times_hit, shots_left) { + var num_end; + + + lln('`c `%EPILOGUE'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-'); + lln(' `2The battle is over.'); + sln(''); + if (times_hit > 0 && times_hit < 5) { + lln(' You struck the hair `0'+pretty_int(times_hit)+'`2 times.'); + } + if (times_hit === 0) { + lln(' `2The old woman laughs at you. `#"You are the worst shot I have'); + sln(' ever seen, fool! Go practice with the hair on your back. Begone."'); + sln(''); + if (player.sex === 'M') { + lln(' `4The old women flashes you! `2You gag reflexes take over as you'); + lln(' gape at her `4crusty saggers`2.'); + sln(''); + } + lln(' `%YOU TRUDGE HOME IN DEFEAT - YOU FEEL HAIRABLE.'); + player.high_spirits = false; + sln(''); + more_nomail(); + return; + } + if (times_hit === 5) { + lln(' `2You totally `%DESTROYED `2the hair!'); + sln(''); + if (shots_left > 0) { + lln(' `0You even had `%'+pretty_int(shots_left)+' `2tries left!'); + } + } + sln(''); + more_nomail(); + if (times_hit < 5) { + lln(' `#"Not bad! Here is your reward." `2the wrinkled woman cackles.'); + } + else { + lln(' `#"Incredible! Here is your reward."`2 the saggy one exclaims.'); + } + lln(' `0She waves her hair strangely.'); + sln(''); + if (times_hit > 4) { + num_end = (times_hit+shots_left) * (10*player.level); + } + else { + num_end = (times_hit) * (5*player.level); + } + num_end *= player.level; + player.exp += num_end; + if (player.exp > 220020020) { + player.exp = 220020020; + } + lln(' `%YOU GET '+pretty_int(num_end)+' EXPERIENCE.'); + sln(''); + if (times_hit === 5) { + lln(' `%YOUR STRENTH IS RAISED BY ONE!'); + player.str += 1; + sln(''); + // DIFF: The original returned here... + } + more_nomail(); + player.high_spirits = true; + lln(' `0You travel home in an incredible mood.'); +} + +function fly() +{ + var j; + var tries; + var time; + var old_time2; + var old_time; + var old_time1; + var cur_time; + var wx; + var wy; + // DIFF: forward1 was uninitialized... + var forward1 = !(random(2) === 0); + var wep_char; + var times_hit; + var speed; + + wep_char = 'I'; + lln('`c `%A HAIRY PREDICAMENT'); + sln(''); + for (j = 0; j < 10; j++) { + lln('`r0 `r6 `r0'); + } + lln('`r0 `r6 `#o `r0'); + lln('`r0 `r6 `#<`5\xdb`#> `r0'); + lln('`r0 `r6 `#/\'> `r0'); + sln(''); + tries = 10; + time = 40; + dk.console.gotoxy(24,18); + lw('`0Tries Left: `%'+pretty_int(tries)+' '); + dk.console.gotoxy(24,19); + lw('`0Time Left: `%'+pretty_int(time)+' '); + speed = random(10); + dk.console.gotoxy(0,22); + lln(' `0(Press space to take your best shot) '); + old_time = (new Date()).valueOf(); + old_time1 = old_time; + old_time = old_time + 500; + old_time1 = old_time1 + speed * 10; + wz = 23; + wy = 5; + dk.console.gotoxy(wz-1,wy-1); + lln('`r6\xf7\xf7'); + times_hit = 0; + j = 1; + + do { + ch = read_direction(); + if (tries > 0 && ch === ' ') { + tries -= 1; + j = 14; + old_time2 = cur_time+100; + dk.console.gotoxy(24,18); + lw('`0`r0Tries Left: `%'+pretty_int(tries)+' '); + } + if (cur_time > old_time2 && j > 4) { + if (j !== 14) { + dk.console.gotoxy(29,j); + lw('`r6 '); + } + dk.console.gotoxy(29,j - 1); + lw('`r6'+wep_char); + j -= 1; + if (j === 4 && wz > 28 && wz < 31) { + times_hit += 1; + dk.console.gotoxy(0,22); + lw('`r0'); + if (times_hit === 1) { + lw(' `0You hit the thing! It wobbles a little. `2<KEY> '); + } + if (times_hit === 2) { + lw(' `0Nice shot! The wig falters a bit. `2<KEY> '); + } + if (times_hit === 3) { + lw(' `0Direct hit! The hair piece is limping around! `2<KEY> '); + } + if (times_hit === 4) { + lw(' `0You knock some hairs off - It\'s almost dead! `2<KEY> '); + } + if (times_hit === 5) { + lw(' `0Beautiful shot. The wig stops moving. `2<KEY> '); + } + ch = getkey(); + if (times_hit === 5) { + hair_end(times_hit,tries); + return; + } + speed = random(10); + dk.console.gotoxy(0,22); + lln('`r0 `0(Press space to take your best shot) '); + } + old_time2 = cur_time+100; + } + if (time < 1) { + dk.console.gotoxy(0,22); + lln('`r0 `%YOU ARE OUT OF TIME! '); + mswait(2000); + hair_end(times_hit, tries); + return; + } + if (tries < 1 && j < 5) { + dk.console.gotoxy(0,22); + lln('`r0 `%YOU ARE TOO TIRED TO THROW AGAIN! '); + mswait(2000); + hair_end(times_hit,tries); + return; + } + cur_time = (new Date()).valueOf(); + if (cur_time > old_time) { + old_time = cur_time; + old_time += 500; + time -= 1; + dk.console.gotoxy(25,20); + lw('`0`r0Time Left: `%'+pretty_int(time)+' '); + } + if (cur_time > old_time1) { + old_time1 = cur_time+speed * 10; + dk.console.gotoxy(wz-1,wy-1); + lw('`r6 '); + if (forward1) { + wz += 1; + if (wz === 39) { + forward1 = false; + } + } + else { + wz -= 1; + if (wz < 24) { + forward1 = true; + } + } + dk.console.gotoxy(wz-1,wy-1); + lw('`r6`$\xf7\xf7'); + } + } while (time >= 0); +} + +function beard() +{ + var man; + var ch; + + sln(''); + lln(' `2Barak\'s face falls. `0"You don\'t like my beard?"'); + sln(''); + lln(' `%"No, I definitely do not." `2you assure him.'); + sln(''); + lln(' `2A large tear wells up in one if his eyes.'); + sln(''); + more_nomail(); + lln(' `2Just then, an old women pops up behind him!'); + sln(''); + lw('`0 '); + say_slow('"MOTHER!"'); + lln(' `2Barak screams. `0"Get back into the basement!"'); + sln(''); + more_nomail(); + man = (player.sex === 'M' ? 'man' : 'woman'); + lln(' `#"I will not, boy! - That young '+man+' just insulted your beard!"'); + sln(''); + lln(' `2You scowl at the hag. `%"I\'m just being honest with your boy, ma\'am."'); + sln(''); + lln(' `#"I cannot tell if you are being serious or not! Are you willing to'); + sln(' let me test your skills?"'); + sln(''); + lln(' `2(`0A`2)gree with the hag'); + lln(' `2(`0T`2)ell her to shove it'); + sln(''); + lw(' `2You decide to ... [`0A`2] :`%'); + ch = getkey().toUpperCase(); + if (ch !== 'T') { + ch = 'A'; + } + sln(ch); + sln(''); + if (ch === 'T') { + player.hp = 1; + lln(' `%"Forget it, ancient one. Your boy looks like an ogre." `2you'); + sln(' taunt.'); + sln(''); + more_nomail(); + man = (player.sex === 'M' ? '"YOU BASTARD!"' : '"YOU BITCH!"'); + lw(' `#'); + say_slow(man); + lln(' `2screams the old woman, spittle forming at her mouth. '); + sln(' She then plucks off her hair - only a few strands of white adorn'); + sln(' her bald head!'); + sln(''); + more_nomail(); + lln(' `4SHE `)THROWS `4HER HAIR AT YOU!'); + sln(''); + more_nomail(); + lln('`c `2Time has passed. Hours have passed - you rub your sore head'); + sln(' wondering what happened.'); + sln(''); + more_nomail(); + lln(' `2YOU TRUDGE HOME WEAK AND DEJECTEDLY.'); + sln(''); + return + } + if (ch === 'A') { + player.hp = 1; + lln(' `%"Lets do this thing, antique." `2you challenge.'); + sln(''); + lln(' `2Her wig rises from her head as if by `#magic`2!'); + sln(''); + lln(' `%IT FLOATS WILDLY AROUND THE ROOM!'); + sln(''); + more_nomail(); + lln(' `2You grip your `0'+player.weapon+' `2tightly, and prepare to'); + sln(' take down the hurling hair piece.'); + sln(''); + more_nomail(); + fly(); + return; + } +} + +function wait() +{ + mswait(1000); + sw('.'); +} + +function history() +{ + if (random(2) == 0) { + lln(' `%"The Way Things Were" `2by `0Master Turgon`2.'); + sln(''); + sln(' Our town has gone to pot. Things used to be so nice - Children'); + sln(' used to play on the street. Now they huddle together under their'); + lln(' beds and whisper stories about the dreaded `4Dragon`2. '); + sln(''); + lln(' I remember when my own daughter, `#Violet`2 (my but she\'s grown) used'); + sln(' laugh and play outside. (now she seems to play inside more often now)'); + sln(''); + sln(' Many have asked, why don\'t *I* hunt the dragon? The answer is'); + sln(' simple. I\'m not expendable - like all these new warriors. Someone'); + sln(' must stay behind and teach the others. (Also, someone\'s got to run'); + sln(' my training center, right?!)'); + sln(''); + more_nomail(); + sln(' Am I a coward? Maybe. But I am getting along in years. We need a'); + sln(' younger hero.'); + sln(''); + sln(' ** THE END **'); + sln(''); + more_nomail(); + } + else { + lln(' `%"The Story Of The Gods" `2by `0Master Turgon`2.'); + sln(''); + sln(' Even in this day and age many of us are religious. Many of us'); + sln(' still believe in God. Some say it is a male deity, others say'); + lln(' female. I believe the latter. Her name is said to be `%Jennie`2.'); + sln(''); + sln(' Once a man named Nalyd Yakcm screamed the devine ones named in the'); + sln(' forest. He came back to the village telling people she appeared to'); + sln(' him. Is it true? None can say.'); + sln(''); + sln(' ** THE END **'); + sln(''); + more_nomail(); + } +} + +function skill() +{ + if (player.clss === 1) { + lln(' `%"The Art Of Swordfighting" `2by Aragorn.'); + sln(''); + sln(' Swing it good, swing it hard - and try to avoid blows to your'); + sln(' groin area.'); + if (player.skillw < 40) { + player.skillw += 1; + } + } + if (player.clss === 2) { + lln(' `%"The Art Of Being Mystical" `2by Atsuko Sensei.'); + sln(''); + sln(' Never fully explain yourself, and well - thats pretty much'); + sln(' it.'); + if (player.skillm < 40) { + player.skillm += 1; + } + } + if (player.clss === 3) { + lln(' `%"The Art Of Thievery" `2by Chance.'); + sln(''); + sln(' Sellect your targets carefully. Don\'t steal from level'); + sln(' 12 people - being beheaded isn\'t particularly fun.'); + if (player.skillt < 40) { + player.skillt += 1; + } + } +} + +function newspaper() +{ + switch (random(9)) { + case 0: + lln(' `2You read a clipping from `06 `2years ago.'); + sln(''); + lln(' `2-=-=-=-=`%DIVORCE ROCKS NATION!`2=-=-=-=-'); + lln(' `2Sweet hearts `0Seth Able `2and `#Violet `2are'); + lln(' divorced! `0"They were a troubled couple" `2reports'); + sln(' a close friend. No one really knows why the breakup'); + sln(' occurred.'); + break; + case 1: + lln(' `2You read a clipping from `02`2 years ago.'); + sln(''); + lln(' `2-=-=-=-=`%CHILD FOUND!`2=-=-=-=-'); + lln(' `2Tiny angelic faced `#Lee Wren`2 was found today. Her'); + sln(' life was barely saved by the healers - thanks to The'); + lln(' Old Man who brought her in. `0"Usually it\'s the old '); + lln(' man that needs saving." `2a bystander comments.'); + break; + case 2: + lln(' `2You read a clipping from `07`2 years ago.'); + sln(''); + lln(' `2-=-=-=-=`%TROUBLE IN PARADISE!`2=-=-=-=-'); + lln(' `2A fight errupted in the Able home as newly weds `0Seth`2 '); + lln(' and `#Violet`2 had a squabble. Over what? `0"A big dumb egg"'); + lln(' `2a family friend informed. Now, the relationship as well'); + sln(' as the egg is cracked as ever.'); + break; + case 3: + lln(' `2You read a clipping from `013`2 years ago.'); + sln(''); + lln(' `2-=-=-=-=`%GRAND OPENING!`2=-=-=-=-'); + lln(' `2Are you scrawny and have arms like toothpicks? Come enroll at'); + lln(' `%Turgon\'s Warrior Training`2. Head trainer `0Turgon `2GURANTEE\'S'); + lln(' `2you\'ll be kicking butt in two weeks flat. (`0Women trained too!`2)'); + break; + case 4: + lln(' `2You read a clipping from `08`2 years ago.'); + sln(''); + lln(' `2-=-=-=-=`%NEW TRAINER HIRED!`2=-=-=-=-'); + lln(' `2Recently a local boy known as Barak was hired as a level 2'); + lln(' master at Turgon\'s Warrior Training. `0"We needed somebody'); + lln(' fast and couldn\'t be picky."`2 commented Turgon.'); + break; + case 5: + lln(' `2You read a clipping from `09`2 years ago.'); + sln(''); + lln(' `2-=-=-=-=`%AN UNPOPULAR HAUNT IS CLOSED`2=-=-=-=-'); + lln(' `%"King Arthur\'s House Of Sex" `2was closed today. It seems'); + lln(' the owner just wasn\'t getting the business. `0"People seemed to'); + lln(' prefer good looking girls. Next time I\'ll listen."`2 he commented'); + break; + case 6: + lln(' `2You read a clipping from `09`2 years ago.'); + sln(''); + lln(' `2-=-=-=-=`%A NEW PLACE OPENS!`2=-=-=-=-'); + lln(' `%"Abdul\'s Armour" `2had it\'s grand opening today. It seems the'); + lln(' young lady who owns it used to be a minstrel. `0"People were always'); + sln(' fighting over me and getting hurt. I saw the need for better'); + lln(' armour."`2 she commented.'); + break; + case 7: + lln(' `2You read a clipping from `09`2 years ago.'); + sln(''); + lln(' `2-=-=-=-=`%THIEF ESCAPES!`2=-=-=-=-'); + lln(' `2A young man known as `%"Chance"`2 `2escaped jail today. Many believe'); + sln(' this hard to find individual to be a ringleader of a guild of thieves.'); + lln(' `0"His father was a Master Thief - Young `%Chance`2 will become one also."'); + lln(' `2comments Turgon.'); + break; + case 8: + lln(' `2You read a clipping from `02`2 months ago.'); + sln(''); + lln(' `2-=-=-=-=`%Healers Blow It!`2=-=-=-=-'); + lln(' `2The level one master `%Halder`2 seems to have convinced the healers to'); + sln(' create a wieght gaining potion for him. Instead, the faulty formula'); + lln(' shrunk his twig and berries. `%Halder`2 was heard begging `0"Please don\'t'); + sln(' print this!"'); + break; + } +} + +var x1 = 0; +var y1 = 0; +function draw_man(x, y) +{ + if (x1 !== 0) { + dk.console.gotoxy(x1, y1 - 1); + lw('`r0 '); + dk.console.gotoxy(x1 - 1, y1); + sw(' '); + dk.console.gotoxy(x1 - 1,y1 + 1); + sw(' '); + } + dk.console.gotoxy(x, y - 1); + lw('`r0`#o'); + dk.console.gotoxy(x - 1, y); + lw('`#<`5\xdb`#>'); + dk.console.gotoxy(x - 1,y + 1); + lw('`#/\'>'); + x1 = x; + y1 = y; +} + +function chest() +{ + var chest = [true, true, true, true, true, true]; + var x = 21; + var y = 7; + var bad_one = random(6); + var cur_chest; + var n1; + var j; + var chests_opened = 0; + + lln('`c `0** `%THE BASEMENT `0**'); + sln(''); + lln(' `r1`!\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc`r0 `r1\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc`r0'); + lln(' `r1\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xdb`r0 `r1\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xdb`r0'); + sln(''); + sln(''); + sln(''); + lln(' `r1`!\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc`r0 `r1\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc`r0'); + lln(' `r1\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xdb`r0 `r1\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xdb`r0'); + sln(''); + sln(''); + sln(''); + lln(' `r1`!\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc`r0 `r1\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc`r0'); + lln(' `r1\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xdb`r0 `r1\xdb\xdb\xdb\xdb\xdb\xdb\xdb\xdb`r0'); + + dk.console.gotoxy(0, 19); + lln(' `0(`2Use Arrow Keys`0, `2Num Pad or `%Ctrl`0-`2S`0,`2E`0,`2D`0,`2X`0 to move. `%Space `2to open chests`0)'); + + draw_man(x, y); + do { + ch = read_direction(); + if (ch === 'R') { + if (x < 50) { + x += 1; + draw_man(x, y); + } + } + if (ch === 'L') { + if (x > 21) { + x -= 1; + draw_man(x, y); + } + } + if (ch === 'U') { + if (y > 7) { + y -= 1; + draw_man(x, y); + } + } + if (ch === 'D') { + if (y < 17) { + y += 1; + draw_man(x, y); + } + } + if (ch === ' ') { + cur_chest = -1; + if (x === 21 && y === 7) { + cur_chest = 0; + } + if (x === 21 && y === 12) { + cur_chest = 1; + } + if (x === 21 && y === 17) { + cur_chest = 2; + } + if (x === 51 && y === 7) { + cur_chest = 3; + } + if (x === 51 && y === 12) { + cur_chest = 4; + } + if (x === 51 && y === 17) { + cur_chest = 5; + } + if (cur_chest === -1) { + dk.console.gotoxy(0, 19); + lw(' `0Are you trying to open air? '); + continue; + } + else if (chest[cur_chest] === false) { + dk.console.gotoxy(0, 19); + lln(' `0The chest is empty. (`2Hmm - Maybe \'cuz you already opened it?!`0)'); + more_nomail(); + dk.console.gotoxy(0, 19); + lw(' `0Barak seems to be looking the other way. '); + } + else { + dk.console.gotoxy(0, 19); + lw(' `0You sneakily open a chest up while Barak isn\'t looking... '); + if (cur_chest < 3) { + dk.console.gotoxy(x-4,y-3); + } + else { + dk.console.gotoxy(x-3,y-3); + } + lw('`r1`!\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf`r0'); + dk.console.gotoxy(0, 20); + lw(' `2'); + say_slow('YOU FIND...'); + lw('`%'); + if (bad_one === cur_chest) { + lw('`4'); + say_slow2('BARAK\'S CRAZY MOTHER!'); + sln(''); + sln(''); + more_nomail(); + lln('`c `%** `4THE JIG IS UP. `%**'); + lln('`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln(' `#"You thieving little puke!" `2Barak\'s mother screams at you.'); + lln(' `2Bits of foam bubble through her teeth in her frenzy.'); + sln(''); + more_nomail(); + if (chests_opened > 1) { + lln(' At least you got away with opening `%'+pretty_int(chests_opened)+'`2 chests!'); + } + else if(chests_opened === 0) { + sln(' You didn\'t steal one thing - Rotten luck today.'); + } + else { + sln(' You only stole one thing - Sort of rotten luck today.'); + } + sln(''); + sln(' At her command, Barak throws you out!'); + sln(''); + if (chests_opened > 1) { + lln(' `0You trudge back to town `2- `%Victorious`0!'); + } + else if (chests_opened === 1) { + lln(' `0You trudge back to town. Not especially proud of yourself.'); + } + else { + lln(' `4You crawl back to down in total defeat.'); + } + sln(''); + more_nomail(); + return; + } + chest[cur_chest] = false; + chests_opened += 1; + if (random(2) == 0) { + say_slow2('A GEM!'); + player.gem += 1; + } + else { + n1 = 20 * player.level; + n1 *= player.level; + n1 = random(n1 * player.level) + 1; + say_slow2('A POUCH WITH '+pretty_int(n1)+' GOLD IN IT!'); + player.gold += n1; + if (player.gold > 2100100100) { + player.gold = 2100100100; + } + } + sln(''); + more_nomail(); + if (chests_opened === 5) { + lln('`c `%** `0EXELLENT! `%**'); + lln('`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln(' `2You figure now would be a good time to leave - You have a'); + lln(' `2feeling something awfully putrid is in that last chance...'); + sln(''); + lln(' `0"Leaving already, friend '+player.name+'`0?" `2Barak asks'); + sln(' disappointedly.'); + sln(''); + lln(' `2You barely supress laughing at loud. `%"Uh, yeah... Been a long day."'); + sln(''); + lln(' `0BARAK GIVES YOU SOME ULTRA ALE FOR HELPING HIM CLEAN UP!'); + player.hp = player.hp_max + parseInt(player.hp_max / 4, 10); + sln(''); + lln(' `0You trudge back to town `2- `%FEELING WONDERFUL`0!'); + more_nomail(); + return; + } + dk.console.gotoxy(0, 20); + dk.console.cleareol(); + switch (random(6)) { + case 0: + lw(' `0Barak looks occupied with studying his \'Playmaid\' collection...'); + break; + case 1: + lw(' `0Barak seems busy scratching himself in a corner...'); + break; + case 2: + lw(' `0Now seems like a good time to steal something...'); + break; + case 3: + lw(' `0You smile - Barak is totally absorbed in chasing a rat around...'); + break; + case 4: + lw(' `0Barak looks busy arranging his severed heads...'); + break; + case 5: + lw(' `0Barak is busy amusing himself by making faces in a mirror.'); + break; + } + } + } + } while (ch !== 'Q'); + more_nomail(); +} + +function shoot() +{ + var r; + var ch; + + lln('`c `%Chatting With Barak'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln(' `0"Shoot the breeze?" `2Barak asks, obviously puzzled.'); + sln(''); + lln(' `2(`0C`2)an I read some of your books?'); + lln(' `2(`0W`2)ant to play a game?'); + sln(''); + lw(' `2You decide to say... [`0W`2] :`%'); + ch = getkey().toUpperCase(); + sln(ch); + sln(''); + if (ch === 'C') { + lln(' `0"Books?! BOOKS?! You know I can\'t read!" `2Barak shouts, tears'); + sln(' streaming out of his eyes.'); + sln(''); + more_nomail(); + lln(' `2(`0L`2)augh like hell at poor Barak.'); + lln(' `2(`0O`2)ffer to read him a story.'); + sln(''); + lw(' `2You decide to ... [`0O`2] :`%'); + ch = getkey().toUpperCase(); + sln(ch); + if (ch !== 'L') { + r = random(3) + 1; + lln(' `0"You will?" `2Barak pitifully, wiping his nose. `0"Will'); + lln(' you read this to me?"'); + lln(''); + lw(' `2Barak shows you a book of.'); + wait(); + wait(); + wait(); + if (r === 1) { + lln(' `%History`2.'); + } + if (r === 2) { + lln(' `%Newspaper Clippings`2.'); + } + if (r === 3) { + if (player.clss === 1) { + lln('`0Fighting`2.'); + } + if (player.clss === 2) { + lln('`#Magic Use`2.'); + } + if (player.clss === 3) { + lln('`1Dirty Deeds`2.'); + } + } + sln(''); + lln(' `2You are non-plussed, but agree to read it.'); + sln(''); + more_nomail(); + lln('`c `%Story time with Barak'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + if (r === 1) { + history(); + } + if (r === 2) { + newspaper(); + } + if (r === 3) { + skill(); + } + sln(''); + lln(' `2You put down the book. `0"Please, '+player.name+'`0! Read more!"'); + lln(' `2Barak whines.'); + sln(''); + more_nomail(); + lln(' `2You smile. `%"Nah, I gotta go. See you later."'); + sln(''); + more_nomail(); + } + else { + lw(' `2You can\'t stop yourself from bellowing out in laughter. Barak\'s'); + sln(' face falls. Then turns to stone.'); + sln(''); + more_nomail(); + sln(' He then pulls out an Able\'s Sword!'); + sln(''); + more_nomail(); + sln(' Barak hunts you down like a dog.'); + sln(''); + more_nomail(); + start_fight(); + } + return; + } + lln(' `0"Game? Ok - Uh, want to play \'let\'s clean out the basement\'?"'); + lln(' `2Barak asks slyly.'); + sln(''); + lln(' `2(`0O`2)k, uh, that sounds like a really fun game.'); + lln(' `2(`0F`2)orget it. I\'m not that stupid.'); + sln(''); + lw(' `2You decide to ... [`0O`2] :`%'); + ch = getkey().toUpperCase(); + if (ch !== 'F') { + ch = 'O'; + } + sln(ch); + sln(''); + if (ch === 'O') { + lln(' `2Barak looks overjoyed. You smile at his simplicity, and get'); + lln(' ready to pocket a few things for yourself in this little \'cleanup\'.'); + sln(''); + more_nomail(); + chest(); + return; + } + lln(' `0"You stupid brat!" `2screams Barak in a fit of rage. `0"Get out'); + sln(' my house!"'); + sln(''); + lln(' `2You wonder if helping out would have been that bad of an idea...'); + sln(''); + lln(' `%YOU TRUDGE HOME, FEELING LIKE A LOSER.'); + sln(''); + more_nomail(); +} + +function knock() +{ + var ch; + + lln('`c `%Visiting Old Friends'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln(' `%Barak opens the door!'); + sln(''); + lln(' `0"Whadaya ya want, kid?" `2Barak asks harshly.'); + sln(''); + lln(' `2(`0J`2)ust wanted to shoot the breeze, friend!'); + lln(' `2(`0C`2)an I borrow a cup of sugar, neighbor?'); + lln(' `2(`0Y`2)our beard went out of style centuries ago.'); + sln(''); + lw(' `2You decide to say... [`0J`2] :`%'); + ch = getkey().toUpperCase(); + sln(ch); + sln(''); + if (ch === 'C') { + sugar(); + return; + } + if (ch === 'Y') { + beard(); + return; + } + shoot(); +} + +function walk_in() +{ + var ch; + + lln('`c `%Uh oh...'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln(' `2You saunter in like you own the place. Barak'); + sln(' stares at you in wonder as you help yourself to'); + sln(' some meat and cheese sitting on the table.'); + sln(''); + lln(' `0"You insolent pubby! You will die for this."`2 the '); + sln(' bearded man growls.'); + sln(''); + lln(' `2(`0A`2)ppologize and leave him be'); + lln(' `2(`0K`2)ick him in the shin and have a good laugh'); + sln(''); + lw(' `2You decide to... [`0A`2] :`%'); + ch = getkey().toUpperCase(); + if (ch !== 'K') { + ch = 'A'; + } + sln(''); + sln(''); + if (ch === 'A') { + lln(' `%"I\'m uh.. sorry.. I thought no one was home," `2you'); + sln(' finish lamely.'); + if (player.cha > 1) { + player.cha -= 1; + } + player.put(); + sln(''); + lln(' `0"You stupid fool!" `2 Barak screams. He then gives'); + sln(' you a severe throttling to your face and ears.'); + sln(''); + more_nomail(); + lln(' `2You are then thrown out of his house, landing in a rather'); + sln(' large pile of cow dung.'); + sln(''); + lln(' `%(THE SMELL IS OVERWELMING, YOU LOSE 1 CHARM)'); + sln(''); + more_nomail(); + } + if (ch === 'K') { + lln(' `2You kick him a good one!'); + sln(''); + if (player.level < 3) { + lln(' `2Barak laughs at your puny attempt.'); + lln(''); + player.cha -= 1; + more_nomail(); + sln(' He grabs you by your throat and lifts you off the ground.'); + lln(' `0"You fool. I am the level two master - And you have never bested'); + sln(' me. How do you expect to do so now?"'); + sln(''); + more_nomail(); + sln(' `2You are then thrown out of his house, landing in a rather'); + sln(' large pile of cow dung.'); + sln(''); + lln(' `%(THE SMELL IS OVERWELMING, YOU LOSE 1 CHARM)'); + } + else { + lln(' `%He screams in pain!'); + sln(''); + more_nomail(); + lln(' `2You help yourself to another chunk of bread, and'); + sln(' laugh so hard at Barak small pieces fly out of'); + sln(' your mouth and pummel him.'); + sln(''); + more_nomail(); + lln(' `0"No more!" `2Barak shrieks in a rather high pitched voice.'); + sln(''); + lln(' You laugh. `%"Give me your most valuable possesion, you hairy'); + lln(' fool." `2you demand.'); + sln(''); + lln(' `0"Alright! I\'ll give you a flask of my Ultra Ale, damnit!"'); + sln(''); + more_nomail(); + sln(' `2You snatch up this \'Ultra Ale\' and drain it in one swig.'); + sln(''); + lln(' `%YOU FEEL INVICINCIBLE!'); + sln(''); + lln(' `2You feel you\'ve done enough Barak taunting for now and head home.'); + player.hp = player.hp_max + parseInt(player.hp_max / 4, 10); + } + sln(''); + more_nomail(); + } +} + +var Barak_Defs = [ + { + prop:'day', + type:'SignedInteger', + def:-1 + }, + { + prop:'can_play', + type:'Array:150:Boolean', + def:eval('var aret = []; while(aret.length < 150) aret.push(true); aret;') + } +]; + +function run_maint(b) +{ + var i; + + for (i = 0; i < b.can_play.length; i++) { + b.can_play[i] = true; + } + b.put(); +} + +var bs; +function main() +{ + 'use strict'; + var ch; + var b; + var i; + + foreground(2); + background(0); + + // TODO: Some sort of install/uninstall thing... + + lln('`r0`0`2`c `%Visiting A Friend'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + if (!dk.console.ansi) { + sln(' NOTE: The \'arcade\' sequences in this IGM *REQUIRE* ANSI terminal'); + sln(' support. Things will look out of wack in your current settings.'); + sln(' You can switch to ANSI inside of LORD by pressing 3 from the main'); + sln(' menu. You just better hope your terminal supports it...'); + sln(''); + } + + bs = new RecordFile(js.exec_dir+'barak.dat', Barak_Defs); + js.on_exit('bs.locks.forEach(function(x) {bs.unLock(x); bs.file.close()});'); + if (bs.length < 1) { + b = bs.new(); + } + else { + b = bs.get(0); + } + if (bs.day != state.days) { + run_maint(b); + } + if(!b.can_play[player.Record] || player.forest_fights < 1) { + lln(' `2You like Barak and all - But you feel a might too weary to'); + sln(' make the trip. Maybe tomorrow.'); + sln(''); + more_nomail(); + exit(0); + } + b.can_play[player.Record] = false; + + // TODO: Not range checked or anything... + player.forest_fights--; + lln(' `2Feeling a might lonely, you decide to pay a visit to a'); + sln(' dear friend. It\'s no short journey and you are quite'); + sln(' tired when you arrive.'); + sln(''); + lln(' `2(`0K`2)nock on the door'); + lln(' `2(`0W`2)alk in like you own the place'); + lln(' `2(`0H`2)ead back to town'); + sln(''); + lw(' `2You decide to... [`0K`2] :`%'); + ch = getkey().toUpperCase(); + if ('WHK'.indexOf(ch) == -1) { + ch = 'K'; + } + sln(ch); + sln(''); + if (ch === 'H') { + lln(' `2You decide maybe you should have called first - and trudge back'); + sln(' home.'); + sln(''); + more_nomail(); + exit(0); + } + if (ch === 'K') { + knock(); + } + if (ch == 'W') { + walk_in(); + } +} + +main(); +exit(0); -- GitLab