New Content - Implemented Spookyraven Revamp

Veracity

Developer
Staff member
It would be nice if we set a timer for 37 turns every time you find an "In the Dark" adventure, and perhaps remember where you saw it, just as we do for semirares. The counter will remind you to go to the desired location for another In the Dark encounter, if you want to do so, and the last location will help you decide where to go, assuming you've been following the clues correctly.

I don't have an opinion on whether we should make it easier to follow the clues. Perhaps by putting spoilers on the choice options that lead to the next clue. I assume those choices will not even be there if you have not been given the clue for them.
 

Darzil

Developer
I don't have an opinion on whether we should make it easier to follow the clues. Perhaps by putting spoilers on the choice options that lead to the next clue. I assume those choices will not even be there if you have not been given the clue for them.
They seem to be those tricky choices where they redirect to new choices with different values and the same choice number, just to make life interesting, like the Cinderella content that we haven't added spoilers for.

So for example, choice 900, Lights Out in the Billiards Room, has two options:
1 - Search for a light
2 - Get the heck out of here

1 leads you to choice 900:
1 - Maybe let's not hang out in here
2 - What the heck, let's explore a bit

2 on that leads you to choice 900:
1 - Search that cupboard over there
2 - Examine the taxidermy heads
 

Veracity

Developer
Staff member
If you are following either the Stephen or Elizabeth path, does it matter if you miss an In the Dark encounter or if you go to the wrong one?

To my eye, the most reasonable way for KoL to have it implemented is to record "next Stephen location" and "next Elizabeth location". If you adventure in the dark in either of those locations, it gives you the hints about what you saw last and, if you follow the right path, gives you the next clue and updates the appropriate "next" location. If you go somewhere that is not a "next" location or do the wrong thing in the correct location, nothing changes. If they did it like that, you could actually be following both trails. Presumably, we'd want to track the current progress on both paths and save the turn number of the last In the Dark location we actually saw, regardless of what happened. Given that, we could look at current turn number and know how many turns to go before the next In the Dark adventure, regardless of whether there is an active timer, and where you might want to go to continue on either path. I assume both paths are one-per ascension - in which case we'd have to remember that, too. Is that the case?

On the other hand, there are any number of other less convenient things KoL could have done: let you pursue only one path at a time, make you restart if you miss an encounter or go to the wrong one or screw up your choices. Since that wouldn't make narrative sense - once you've gotten a clue, why would it become invalid? - I'd hope that they have a more rational implementation. But, the content is so new that I've only had one character make it all the way through one reward, so far.

Hmm. I'll go have another character try to start both paths and see if she can go back and forth. I.e., test some of my conjectures.
 

Veracity

Developer
Staff member
OK, it behaved exactly as I expected:

I started the Stephen path
I started the Elizabeth path
I alternated between the two paths, visiting the correct "next" location.
In each case, I was presented the expected clue for the next location.

I guess the only thing I need confirmed is my conjecture that you can only encounter Stephen and Elizabeth once each per ascension.
 

Yendor

Member
[98942] Ply 1 droopy doll eye + 1 heavy necklace chain
--------------------
7346 doll-eye amulet 350318483 dolleyenecklace.gif accessory d 600
doll-eye amulet 0 Mys: 35
# doll-eye amulet: +40% Item Drops in Spookyraven Manor
doll-eye amulet Single Equip
--------------------

There appears to be a semi-rare in the Storage Room: full-length mirror.
 

Yendor

Member
The Summoning Chamber has changed; here's the new form:
Code:
<form method="post" action="choice.php">
   <input name="pwd" value="PWD" type="hidden">
   <input name="whichchoice" value="922" type="hidden">
   <input name="option" value="1" type="hidden">
   <input size="20" name="demonname" type="text">
   <input value="Summon" class="button" type="submit">
</form>
 
Last edited:

lostcalpolydude

Developer
Staff member
A few people in the G-D thread have seen drops from the full-length mirror...

I'm guessing The Summoning Chamber requires loading some URL before you can submit that form.
 

Fluxxdog

Active member
Summoning Chamber:
URL: []http://127.0.0.1:60080/place.php?whichplace=manor4&action=manor4_chamber[]
Was able to summon Ak'gyxoth and get drinks with ash visit_url("choice.php?pwd&whichchoice=922&option=1&demonname=Ak'gyxoth")
UPDATE: Next day, tried the ash visit_url() and it didn't work as predicted. Chained the two URLs:
[]ash visit_url("place.php?whichplace=manor4&action=manor4_chamber"); visit_url("choice.php?pwd&whichchoice=922&option=1&demonname=Ak'gyxoth");[]
...and voila! I gots da booze!

HTML:
HTML:
<html><head>
<script language=Javascript>
<!--
if (parent.frames.length == -1) location.href="game.php";
//-->
</script>
<script language=Javascript src="/images/scripts/jquery-1.5.1.js"></script>
<script language=Javascript src="/images/scripts/keybinds.min.2.js"></script>
<script language=Javascript src="/images/scripts/window.20111231.js"></script>
<script language="javascript">function chatFocus(){if(top.chatpane.document.chatform.graf) top.chatpane.document.chatform.graf.focus();}
if (typeof defaultBind != 'undefined') { defaultBind(47, 2, chatFocus); defaultBind(190, 2, chatFocus);defaultBind(191, 2, chatFocus); defaultBind(47, 8, chatFocus);defaultBind(190, 8, chatFocus); defaultBind(191, 8, chatFocus); }</script><script>
function switchFocus()
{
	if (top.chatpane.document.chatform.graf.focus) 
		top.chatpane.document.chatform.graf.focus(); 
	return false;
}
function repeat()
{
	var linx = document.getElementsByTagName("A");
	for (var i = 0; i < linx.length; i++)
	{
		if (typeof timersfunc != 'undefined') {
			if (!timersfunc()) { 
				return; 
			}
			timersfunc = null;
		}
		var link = linx[i];
		if (link.innerHTML.match(/Adventure Again/) || link.innerHTML.match(/Do it again/))
			location.href = link.href;
	}
}

defaultBind(47, CTRL, switchFocus);
defaultBind(191, CTRL, switchFocus);
defaultBind(47, META, switchFocus);
defaultBind(191, META, switchFocus);
defaultBind(192, NONE, repeat);
defaultBind(220, NONE, repeat);
</script><script language="javascript">
	function updateParseItem(iid, field, info) {
		var tbl = $('#ic'+iid);
		var data = parseItem(tbl);
		if (!data) return;
		data[field] = info;
		var out = [];
		for (i in data) {
			if (!data.hasOwnProperty(i)) continue;
			out.push(i+'='+data[i]);
		}
		tbl.attr('rel', out.join('&'));
	}
	function parseItem(tbl) {
		tbl = $(tbl);
		var rel = tbl.attr('rel');
		var data = {};
		if (!rel) return data;
		var parts = rel.split('&');
		for (i in parts) {
			if (!parts.hasOwnProperty(i)) continue;
			var kv = parts[i].split('=');
			tbl.data(kv[0], kv[1]);
			data[kv[0]] = kv[1];
		}
		return data;
	}
</script><script type="text/javascript" src="/images/scripts/pop_query.20130705.js"></script>
<script type="text/javascript" src="/images/scripts/ircm.20120523.js"></script>
<script type="text/javascript">
function pop_ircm_contents(i, some) {
	var contents = '',
		shown = 0,
		da = ' <a href="#" rel="?" class="small dojaxy">[some]</a> <a href="#" rel="',
		db = '" class="small dojaxy">[all]</a>',
		dc = '<div style="width:100%; padding-bottom: 3px;" rel="',
		dd = '<a href="#" rel="1" class="small dojaxy">[';
	one = 'one'; ss=some;
if (i.d==1 && i.s>0) { shown++; 
contents += dc + 'sellstuff.php?action=sell&ajax=1&type=quant&whichitem%5B%5D=IID&howmany=NUM&pwd=37c14e9612fb623ed2a1edcfc6bf53e4" id="pircm_'+i.id+'"><b>Auto-Sell ('+i.s+' meat):</b> '+dd+one+']</a>';
if (ss) { contents += da + i.n + db;}
contents += '</div>';
}

	return [contents, shown];
}
var todo = [];
function nextAction() {
	var next_todo = todo.shift();
	if (next_todo) {
		eval(next_todo);
	}
}
function dojax(dourl, afterFunc, hoverCaller, failureFunc, method, params) {
	$.ajax({
		type: method || 'GET', url: dourl, cache: false,
		data: params || null,
		global: false,
		success: function (out) {
			nextAction();
			if (out.match(/no\|/)) {
				var parts = out.split(/\|/);
				if (failureFunc) failureFunc(parts[1]);
				else $('#ChatWindow').append('<font color="green">Oops!  Sorry, Dave, you appear to be ' + parts[1] + '.</font><br />' + "\n");
				return;
			}

			if (hoverCaller)  {
				float_results(hoverCaller, out);
				if (afterFunc) { afterFunc(out); }
				return;
			}
$(top.mainpane.document).find("#effdiv").remove(); if(!window.dontscroll || (window.dontscroll && dontscroll==0)) { window.scroll(0,0);}
			var $eff = $(top.mainpane.document).find('#effdiv');
			if ($eff.length == 0) {
				var d = top.mainpane.document.createElement('DIV');
				d.id = 'effdiv';
				var b = top.mainpane.document.body;
				if ($('#content_').length > 0) {
					b = $('#content_ div:first')[0];
				}
				b.insertBefore(d, b.firstChild);
				$eff = $(d);
			}
			$eff.find('a[name="effdivtop"]').remove().end()
				.prepend('<a name="effdivtop"></a><center>' + out + '</center>').css('display','block');
			if (!window.dontscroll || (window.dontscroll && dontscroll==0)) {
				top.mainpane.document.location = top.mainpane.document.location + "#effdivtop";
			}
			if (afterFunc) { afterFunc(out); }
		}
	});
}
</script><script>

var currentkey = 49;
$(document).ready(function () {
	$('form').each(function () {
		var form = this;
		defaultBind(currentkey++, NONE, function () { form.submit(); });
		return currentkey < 58;
	});
});

</script><link rel="stylesheet" type="text/css" href="/images/styles.20130904.css">
<style type='text/css'>
.faded {
	zoom: 1;
	filter: alpha(opacity=35);
	opacity: 0.35;
}
</style>

<script src="http://code.jquery.com/jquery-1.9.1.js"></script><script src="/stationarybuttons.1.js"></script><link rel="stylesheet" type="text/css" href="/stationarybuttons.1.css"><script language="Javascript" src="/basics.js"></script><link rel="stylesheet" href="/basics.1.css" /></head>

<body><div id="page"><div id="mafiabuttons"><center><table width="95%"><tr><td align=left><div id="btnwrap"><input type="button" onClick="document.location.href='choice.php?action=auto';void(0);" value="auto" id="defaultButton"> </div></td></tr></table></center></div><div class='content' id='content_'><div id='effdiv' style='display: none;'></div><div>
<Center><table  width=95%  cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>Summoning Chamber</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><center>You enter the Summoning Chamber.  The air is heavy with evil, and otherworldly whispers echo 
melodramatically through your mind.
<p>One of them asks you the name of the Demon you would summon.<p>
<form method="post" action="choice.php">
   <input type="hidden" name="pwd" value="37c14e9612fb623ed2a1edcfc6bf53e4" />
   <input type="hidden" name="whichchoice" value="922" />
   <input type="hidden" name="option" value="1" />
   <input type="text" size="20" name="demonname" />
   <input type="submit" value="Summon" class="button" />
</form>
<p>
<a href="place.php?whichplace=manor4">Back to the Spookyraven Manor Cellar</a>

</center>
</td></tr></table></center></td></tr><tr><td height=4></td></tr></table></div></div></div></body><script src="/onfocus.1.js"></script></html>
 
Last edited:

Fluxxdog

Active member
I fought one. It didn't drop anything. If it has a drop, perhaps it is rare, like the Red Fox glove.
The one I fought dropped A Light That Never Goes Out, which I had equipped. There are likely limitations on what items it can reproduce.
 

Darzil

Developer
It would be nice if we set a timer for 37 turns every time you find an "In the Dark" adventure, and perhaps remember where you saw it, just as we do for semirares. The counter will remind you to go to the desired location for another In the Dark encounter, if you want to do so, and the last location will help you decide where to go, assuming you've been following the clues correctly.
According to G-D :
some quick testing with some multis indicates it uses your total Turns Played (total) counter. When it's divisible by 37, you get "Lights Out!". It doesn't care about turns in spookyraven or anything else. (Well, I haven't checked clovers/semirares...) (http://forums.kingdomofloathing.com/vb/showpost.php?p=4620623&postcount=211)

I guess we could make the 37 adventure thing opt in, and always display it til both paths are complete?
 

Erich

Member
According to G-D :

[stuff]

I guess we could make the 37 adventure thing opt in, and always display it til both paths are complete?

I was going to come by and post the same thing. I borked my counter due to juggling other aftercore quests and now have to wing getting the lights out counter again.
 

Veracity

Developer
Staff member
I guess we could make the 37 adventure thing opt in, and always display it til both paths are complete?
Sounds like a good solution. I was going to come back and say that I am absolutely certain we'd get people whining about the timer until I noticed you said "opt in". And if it is "opt in", we should probably make it a "stop adventuring" timer, rather than merely an "informational" one. We could even have a nag screen in the Relay Browser, like fortune cookies, which tells you what the current state of the two paths is, so you can decide where you want to go.

We track both Elizabeth and Stephen now, so we can easily tell if you've completed one or the other path, unless you've progressed outside of KoLmafia or before I added the tracking.

It also might be nice to have a "spookyraven" command. Something like:

spookyraven
List current state of the two paths and tell you how long until the next Lights Out

spookyraven elizabeth
Mark the elizabeth path as done

spookyraven stephen
Mark the stephen path as done

spookyraven on|off
turn on or off the the 37 turn counter, creating it, as needed, if "on"
 

lostcalpolydude

Developer
Staff member
With a wine bomb, you visit place.php?whichplace=manor4&action=manor4_chamberwall to open up the chamber, which removes the wine bomb from inventory. The resulting HTML is:

<table><tr><td>You approach the suspicious masonry.<p>You shake up the wine bomb and hurl it at the masonry. The ensuing blast leaves a giant jagged hole in the wall, leading into an eerily lit chamber beyond.<p>A hunched and crooked figure stands by a rough stone altar, surrounded by candles and arcane implements. Could this be... Lord Spookyraven?</td></tr></table>

I think this is also when you lose the recipe: mortar-dissolving solution, but I didn't watch closely enough.
 
Last edited:
So I like the new Spookyraven Lights Out counter. However, in spading the Lights Out adventure I have discovered that once you know which turn Lights Out happens on, the 37 turn counter is good no matter what zone you adventure in. So even if you return 37x2=74 turns later you will get a lights out adventure. Therefore I would like to propose that once mafia sees a Lights Out adventure, it sets a permenant rolling Lights Out counter that does not go away if you do not adventure in Spookyraven, but just resets itself.
 

Theraze

Active member
Any chance the new cellar unlocker can be made default, since there's still only 1 choice?
[1017] The Haunted Ballroom
Encounter: We'll All Be Flat
We'll All Be Flat
Unsupported choice adventure #921
choice 1: Play the music
Click here to continue in the relay browser.
 

Crowther

Active member
So I like the new Spookyraven Lights Out counter. However, in spading the Lights Out adventure I have discovered that once you know which turn Lights Out happens on, the 37 turn counter is good no matter what zone you adventure in. So even if you return 37x2=74 turns later you will get a lights out adventure. Therefore I would like to propose that once mafia sees a Lights Out adventure, it sets a permenant rolling Lights Out counter that does not go away if you do not adventure in Spookyraven, but just resets itself.
Someone on the forums said it was turns played modulo 37, so you don't even need to see one to know when next the one will be. I was about to verify that, but it's time to go to lunch.

EDIT: Didn't work, or I did it wrong.

Code:
> counters

Last semirare found 2749 turns ago (on turn 424) in The Sleazy Back Alley

Unexpired counters:
Spookyraven Lights Out (37)

> ash (turns_played() % 37);

Returned: 28

So, you can miss many of them and it always comes up every 37 turns, but finding the first one is different for each characters. Another multi:
Code:
> counters

Last semirare found 53 turns ago (on turn 270) in The Haunted Storage Room

Unexpired counters:
Spookyraven Lights Out (37)
Fortune Cookie (140)

> ash (turns_played() % 37);

Returned: 27
I missed many chances in a row to pick up a Lights Out. I just looked back in my logs, found my modulo number and had no trouble hitting it first try.
 
Last edited:

Veracity

Developer
Staff member
Both charpane.php and api.php/what=status have two variables:

turnsplayed is the total number of turns you have played.
turnsthisrun is the total number of turns you have played this run.

Unfortunately, at the moment, we only fetch the latter. We store it in KoLCharacter.currentRun. And ASH's "turns_played" function returns - turnsthisrun. Oops.

We'd need to make KoLmafia fetch turnsplayed from charpane.php and api.php and store it in KoLCharacter.turnsPlayed and create a new ASH function named total_turns_played(), or something
 
Top