diff --git a/xtrn/lord/outhouse/README.md b/xtrn/lord/outhouse/README.md new file mode 100644 index 0000000000000000000000000000000000000000..aa4881adbb42f99516d8dff30bd0d71bdceec464 --- /dev/null +++ b/xtrn/lord/outhouse/README.md @@ -0,0 +1,18 @@ +# The Outhouse - An IGM for JSLord + +## From outhouse.txt + +-> What the Heck is This!??? + + This is a quick daily IGM for JSLord. Pop over to the Outhouse and do your +business! Trade 1 Forest Fight for the chance at a stat boost, or take your +chances and find a spot in the wild. This was designed to be a quick daily +play, though there is a lot of text to read through :) + + This IGM was originally created by Robert Fogt in the 90s, but I was +passed the source to fix the BP200 errors. I figured that this would be a fun +addition to any JSLord game, so here we are! + +-> Any Questions? Drop me a line at: + + Email: dasme@dasme.org diff --git a/xtrn/lord/outhouse/outhouse.js b/xtrn/lord/outhouse/outhouse.js new file mode 100644 index 0000000000000000000000000000000000000000..6c47ccfd01cf553be0c00c712665e540ae440713 --- /dev/null +++ b/xtrn/lord/outhouse/outhouse.js @@ -0,0 +1,603 @@ +'use strict'; +/* + The Outhouse + Javascript version for JSLord (LoRD v5) + (c) 2023 Lloyd Hannesson - dasme@dasme.org +*/ +var outhouseName = 'The Outhouse'; +var outhouseNameFancy = '`0T`2he `0O`2uthouse'; +var outhouseVersion = 'JS v1.0'; +var menu_redisplay = true; +var menu_done = false; +var outhouseFile; +var outhouseRecord; + +var Outhouse_Defs = [ + { + prop:'lrdrecord', + name:'Lord Player Record #', + type:'SignedInteger', + def:-1 + }, + { + prop:'day', + name:'Lord Day last played.', + type:'Integer', + def:123456 + }, + { + prop:'business', + name:'Done your business?', + type:'Boolean', + def:false + } +]; + +/* -=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */ +/* Utility Functions */ +/* -=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */ + +function exit_game() { + var i; + + sclrscr(); + sln(''); + lln(' `2Thanks for visiting`% '+outhouseName+' `0'+outhouseVersion); + lw(' `2Now returning to Other Places'); + for (i = 0; i < 5; i++) { + mswait(300); + lw('`4.'); + } + + player.put(); + outhouseRecord.put(); + outhouseFile.close(); +} + +function command_prompt(currentPlace,menu_keys) { + var ch; + + sln(''); + lln(' `#[`5'+currentPlace+'`#] `2(? for menu)'); + lw('`2 Your command, `0'+player.name+'`2 : '); + + do { + ch = getkey().toUpperCase(); + }while (menu_keys.indexOf(ch) === -1); + + lw('`2'+ch); + return(ch); +} + +function press_a_key(no_clear) { + var ch; + //lw(' `2<`0MORE`2>'); + lw(' `@� `0Press A Key `@�'); + flush_keys(); + ch = getkey(); + if(no_clear) { + dk.console.print('\r'); + dk.console.cleareol(); + } else { + sclrscr(); + } +} + +function are_you_sure() { + var ch; + + sln(''); + lw(' `2Really QUIT? [`0Y`2/`0N`2] '); + ch = getkey().toUpperCase(); + if(ch === 'Y') { + return(true); + } + sln(''); + return(false); +} + +function flush_keys() { + while (dk.console.waitkey(0)) { + dk.console.getkey(); + } +} + +function say_slow(str,ms) { + // yoinked and modified from barak.js! + var i; + ms = (ms == "") ? 100 : ms; + for (i = 0; i < str.length; i++) { + sw(str[i]); + mswait(ms); + } +} + +function CharmCheck(Charm) { + player.cha = player.cha + parseInt(Charm); + if (player.cha > 32000) { + player.cha = 32000; + } + if (player.cha < 0) { + player.cha = 0; + } +} + +function GemCheck(Gems) { + player.gem = player.gem + parseInt(Gems); + if (player.gem > 32000) { + player.gem = 32000; + } + if (player.gem < 0) { + player.gem = 0; + } +} + +function GoldCheck(Gold) { + player.gold = player.gold + parseInt(Gold,10); + if (player.gold > 2000000000) { + player.gold = 2000000000; + } + if (player.gold < 0) { + player.gold = 0; + } +} + +function DefCheck(Def) { + player.def = player.def + parseInt(Def); + if (player.def > 32000) { + player.def = 32000; + } + if (player.def < 0) { + player.def = 0; + } +} + +function StrCheck(Str) { + player.str = player.str + parseInt(Str); + if (player.str > 32000) { + player.str = 32000; + } + if (player.str < 0) { + player.str = 0; + } +} + +function ForestCheck(Forest) { + player.forest_fights = player.forest_fights + parseInt(Forest); + if (player.forest_fights > 32000) { + player.forest_fights = 32000; + } + if (player.forest_fights < 0) { + player.forest_fights = 0; + } +} + +/* -=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */ +/* Other Functions */ +/* -=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */ + +function outhouseIntro() { + sclrscr(); + sln(''); + lln('`%'+outhouseName+' - Ver '+outhouseVersion); + sln(''); + lln('`2An IGM for LORD by `0SETH ABLE ROBINSON'); + lln('`2Thanks to Stephen Hurd (Deuce) and other contributors'); + lln('`2for porting LORD to JS!'); + sln(''); + lln('`2Written By `%Lloyd Hannesson'); + lln('`2Original Concept By `#Robert Fogt'); + sln(''); + lln('`2Email me for support/bug reports: `%dasme@dasme.org'); + sln(''); + lln('`4Copyright (c) 1995-2023 - Lloyd Hannesson'); + sln(''); + press_a_key(); +} + +function outhouseMaint() { + outhouseRecord.day = state.days; + outhouseRecord.business = false; + outhouseRecord.put(); +} + +function outhouseInitialize() { + var i; + var recordFound=false; + + outhouseFile = new RecordFile(js.exec_dir+'outhouse.dat', Outhouse_Defs); + js.on_exit('outhouseFile.locks.forEach(function(x) {outhouseFile.unLock(x); outhouseFile.file.close()});'); + + if (outhouseFile.length < 1) { + outhouseRecord = outhouseFile.new(); + outhouseRecord.lrdrecord = player.Record; + outhouseRecord.day = state.days; + outhouseRecord.put(); + } else { + + /* + We will have to iterate through all of the records. If we can't match the + LoRD record ID, we'll have to create a new record. + */ + for (i = 0; i < outhouseFile.length; i++) { + outhouseRecord=outhouseFile.get(i); + if(outhouseRecord.lrdrecord == player.Record) { + recordFound=true; + break; + } + } + + // If we didn't find our record, we'll have to add one here. + if(!recordFound){ + outhouseRecord = outhouseFile.new(); + outhouseRecord.lrdrecord = player.Record; + outhouseRecord.day = state.days; + outhouseRecord.put(); + } + + // If we do have a record and it's a new day, reset all of the booleans. + if(outhouseRecord.day != state.days){ + outhouseMaint(); + } + } + +} + +function found_shiny() { + var rand; + var temp; + + press_a_key(1); + lln('`2 As you are getting up you notice a quick flash of something shiny'); + lln(' out of the corner of your eye. Looking closer you see an item'); + lln(' inside of the hole you just sat on.'); + sln(''); + lln(' Against all common sense and everything your mother told you, you'); + lw(' make a grab for the item'); + + say_slow('.....',400); + + rand = random(2); + + if (rand == 0) { + temp = player.level * 3500; + GoldCheck(temp); + player.put(); + lln(' and find a pouch with `%'+pretty_int(temp)+'`2 gold!'); + } else { + temp = player.level * 3; + GemCheck(temp); + player.put(); + lln(' and find a small pouch with `%'+temp+'`2 gems!'); + } + + sln(''); + lln(' `0 "I wonder who left this here?" `2you think to yourself `0"wait, I hope'); + lln(' that this was placed here and not..." `2you stop yourself and decide'); + lln(' to just take the `%WIN`2 and not worry about the `4HOW`2.'); +} + +function in_the_outhouse() { + var pooped = false; + var rand; + + if(player.forest_fights < 1) { + sclrscr(); + sln(''); + lln('`2 You were heading towards the outhouse when you realized that you\'re'); + lln('`2 too tired. You turn around and head back to town.'); + sln(''); + lln('`0 You really didn\'t have to go that bad anyways, maybe tomorrow.'); + sln(''); + press_a_key(); + } else { + ForestCheck(-1); + rand=random(3); + + sclrscr(); + sln(''); + lln(' `%In the Outhouse'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + + switch (rand) { + case 0: + CharmCheck(2); + lln('`2 After waiting for what seemed like hours, you finally get to the'); + lln('`2 old Outhouse door. You enter, sit down, and can now get down to business.'); + lln('`2 This place seems nicer than some rooms at the Inn. There is even a small'); + lln('`2 wash basin and mirror on the wall. Neat!'); + sln(''); + lln('`2 After doing your business, you take the time to wash up and comb your hair.'); + sln(''); + lln('`0 You look much better now.'); + sln(''); + lln('`% YOU GAIN 2 CHARM POINTS!'); + break; + case 1: + DefCheck(2); + lln('`2 After waiting for what seemed like hours, you finally get to the'); + lln(' old Outhouse door. You enter, sit down, and can now get down to business.'); + lln(' This place seems nicer than some rooms at the Inn!'); + sln(''); + lln(' While doing your business you notice a small tear in your'); + lln(' `0'+player.arm+'`2, but thankfully it looks fixable!'); + sln(''); + lln(' You grab your repair kit from your backpack and manage to perfectly'); + lln(' repair the damage!'); + sln(''); + lln('`% YOU GAIN 2 DEFENSE POINTS!'); + break; + case 2: + StrCheck(2); + lln('`2 You enter the Outhouse, sit down and quickly get down to business.'); + lln(' To pass the time you start to sing one of your favourite drinking songs,'); + lln(' "`5Ode to the Red Dragon `#(`5Please don\'t eat me`#)`2". You must have been quite'); + lln(' noisy since someone starts banging on the Outhouse wall.'); + sln(''); + lln(' The vibrations of your voice, combined with the banging dislodged'); + lln(' some of the nails holding this shack together. They fall PERFECTLY'); + lln(' onto your `0'+player.weapon+'`2!'); + sln(''); + lln(' Besides looking bad-ass, they look like they will actually increase the'); + lln(' damage! Who needs to work out when you can just attach more pointy things'); + lln(' to your weapon!?'); + sln(''); + lln('`% YOU GAIN 2 ...err... "STRENGTH" POINTS!'); + } + + outhouseRecord.business = true; + outhouseRecord.put(); + player.put(); + pooped = true; + + rand = random(3); + + if (rand == 0) { + sln(''); + found_shiny(); + sln(''); + press_a_key(1); + } + + sln(''); + lln('`2 Satisfied, you turn and run back to the realm.'); + sln(''); + + press_a_key(1); + } + + return pooped; +} + +function behind_the_trees() { + var pooped = false; + var ch; + var rand; + var yes_no; + + sclrscr(); + sln(''); + lln(' `%Behind the Trees'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln('`2 You wait until nobody is looking and run towards the trees. You really'); + lln(' have to go bad, and if you don\'t do something quick you\'ll explode!'); + sln(''); + lln('`0 You hear voices in the distance but you cant tell if they are'); + lln(' coming closer or not.'); + sln(''); + lln(' `2You grab some leaves off the nearest tree and think about your options and'); + lln(' wonder if you should take a chance and try to go here?'); + sln(''); + lw(' `2Do you want chance it? [`0Y`2/`0N`2] '); + + yes_no = ['Y','N']; + do { + ch = getkey().toUpperCase(); + }while (yes_no.indexOf(ch) === -1); + + lw('`2'+ch); + sln(''); + sln(''); + + if(ch=='Y') { + rand = random(10); + switch (rand) { + case 0: + case 1: + case 2: + CharmCheck(-1); + player.put(); + pooped = true; + sclrscr(); + sln(''); + lln(' `%Oh... oh no. Noooo.'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln('`2 As you drop your pants, a large group of people walk by. You hear'); + lln(' laughter and look up to see the group of people pointing and snickering.'); + sln(''); + lln(' In your rush to get away you manage to `0step in the mess you made`2.'); + sln(''); + lln(' After the crowd disperses, you manage to clean yourself up a bit in'); + lln(' the nearby river. It will be a while before you\'ll be able to wash'); + lln(' your embarrassment away.'); + sln(''); + lln('`4 YOU LOSE 1 CHARM!'); + break; + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + CharmCheck(1); + player.put(); + pooped = true; + sclrscr(); + sln(''); + lln(' `%Finally... Relief!'); + lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + lln('`2 You make your way to the trees and find a nice well hidden bush.'); + lln(' Thankfully it seems as the nearby crowd has dispersed and you are free'); + lln(' to do your business in peace.'); + sln(''); + lln('`2 You feel better now. Man, that was close one! You have a new pep'); + lln(' in your step and it shows!'); + sln(''); + lln('`% YOU GAIN 1 CHARM!'); + } + + outhouseRecord.business = true; + outhouseRecord.put(); + + } + + sln(''); + lln('`2 You turn, and run back to the realm.'); + sln(''); + press_a_key(); + menu_done = true; + + return pooped; +} + +/* -=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */ +/* Menus */ +/* -=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */ + +function mainMenu() { + var menu_keys; + var menu_choice; + var ch; + var poop_check; + + do { + if (menu_redisplay == true) { + sclrscr(); + sln(''); + lln(' `5.�`#��`2[`0The Outhouse`2]`#��`5�.'); + sln(''); + lln(' `2 You realize that you really do need to make a pit stop so you head'); + lln(' `2towards the outhouses. When you get there you see a `0very `2long line.'); + lln(' `2You also notice some trees a fair distance away that look deserted. If'); + lln(' `2you do decide to wait in line you\'ll lose `01`2 forest fight today. A '); + lln(' `2small sign is nearby in the clearing.'); + sln(''); + lln(' `2What would you like to do?'); + sln(''); + lln(' `5�`2[`0w`2]`5� `0W`2ait in line at the outhouse.'); + lln(' `5�`2[`0g`2]`5� `0G`2o behind the trees.'); + lln(' `5�`2[`0r`2]`5� `0R`2ead the small sign.'); + lln(' `5�`2[`0l`2]`5� `0L`2eave, you decide to just hold it for awhile.'); + sln(''); + menu_redisplay = false; + } + + menu_keys=['W','G','R','L','?','V']; + menu_choice = command_prompt('The Outhouse',menu_keys); + sln(''); + + switch (menu_choice) { + case 'W': + menu_redisplay=true; + if(outhouseRecord.business != true) { + poop_check = in_the_outhouse(); + if(poop_check) { + // They pooped in the outhouse so account for that + menu_done=true; + } + } else { + sclrscr(); + sln(''); + lln('`2 As much as you would like to go again, you just don\'t have anything'); + lln('`2 left to give... maybe after a meal and some strong mead.'); + sln(''); + lln('`2 You turn around and head back to town.'); + sln(''); + press_a_key(); + menu_done=true; + } + break; + case 'G': + menu_redisplay=true; + if(outhouseRecord.business != true) { + + poop_check = behind_the_trees(); + if(poop_check) { + // They pooped behind the trees so account for that + menu_done=true; + } + + } else { + sclrscr(); + sln(''); + lln('`2 As much as you would like to go again, you just don\'t have anything'); + lln('`2 else to give... maybe after a meal and some strong mead.'); + sln(''); + lln('`2 You turn around and head back to town.'); + sln(''); + press_a_key(); + menu_done=true; + } + break; + case 'R': + menu_redisplay=true; + outhouseIntro(); + break; + case 'L': + if(are_you_sure()) { + menu_done = true; + sln(''); + sln(''); + lln(' `2You realize that you don\'t have to go as bad as you thought...'); + lln(' `2You turn, and run back to the realm.'); + sln(''); + press_a_key(1); + } + menu_redisplay = true; + break; + case 'V': + menu_redisplay=true; + show_stats(); + break; + case '?': + menu_redisplay=true; + } + } while (!menu_done); +} + +/* -=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */ + +function main() { + outhouseInitialize(); + + foreground(2); + background(0); + sclrscr(); + + if(outhouseRecord.business) { + sln(''); + lln(' `%The Outhouse'); + lln('`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); + sln(''); + lln('`2 You were heading towards the outhouse when you realized that you\'re'); + lln('`2 too tired. You turn around and head back to town.'); + sln(''); + lln('`2 You really didn\'t have to go that bad anyways, maybe tomorrow...'); + sln(''); + press_a_key(); + } else { + mainMenu(); + } + exit_game(); +} + +if (argc == 1 && argv[0] == 'INSTALL') { + var install = { + desc:outhouseNameFancy + } + exit(0); +} else { + main(); + exit(0); +} \ No newline at end of file diff --git a/xtrn/lord/outhouse/outhouse.txt b/xtrn/lord/outhouse/outhouse.txt new file mode 100644 index 0000000000000000000000000000000000000000..0ebc0cb5349652b67b0f5b47cacf7caa45b3c376 --- /dev/null +++ b/xtrn/lord/outhouse/outhouse.txt @@ -0,0 +1,58 @@ + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + + The Outhouse for JSLord v1.0 + (C) Copyright 1995-2023: Lloyd Hannesson All rights reserved. + + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +-> What the Heck is This!??? + + This is a quick daily IGM for JSLord. Pop over to the Outhouse and do your +business! Trade 1 Forest Fight for the chance at a stat boost, or take your +chances and find a spot in the wild. This was designed to be a quick daily +play, though there is a lot of text to read through :) + + This IGM was originally created by Robert Fogt in the 90s, but I was +passed the source to fix the BP200 errors. I figured that this would be a fun +addition to any JSLord game, so here we are! + + +-> Simple Set-Up + + Installing The Outhouse couldn't be any easier! Just run the following: + + jsexec lord.js +IGM outhouse/outhouse.js + + +-> Simple Un-Installation + + Un-installing The Outhouse is just as easy. Run the following: + + jsexec lord.js -IGM outhouse/outhouse.js + + +-> Q and A + + Q: What does this IGM add to Lord? + + A: Basically you can trade 1 Forest Fight for a chance at Charm, Defense or + Strength. There is a chance at finding some extra loot as well. If you + choose not to spend the Forest Fight you can gain or lose charm. + + Hopefully this won't break any meta, but please let me know! + +=----- + + Q: Why so few Qs? + + A: Well this is new... no Qs mean no As! + +=----- + + +-> Any Other Questions? Drop me a line at: + + Email: dasme@dasme.org + + +-> The Outhouse Copyright (c) 1995-2023 - Lloyd Hannesson \ No newline at end of file