[Map for CFD2012 ] "The Descent" -File and discussion thread

Talk about creating Grimrock 1 levels and mods here. Warning: forum contains spoilers!
Ancylus
Posts: 50
Joined: Thu Oct 11, 2012 5:54 pm

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by Ancylus »

Having the note mention needing something, rather than having it, is certainly an improvement. Changing the secret door into an ordinary door or portcullis might also help hint that something should still be done in that room. I still wouldn't consider it an easy puzzle, but at least I might have figured it out then.
User avatar
SpiderFighter
Posts: 789
Joined: Thu Apr 12, 2012 4:15 pm

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by SpiderFighter »

Ancylus wrote:Having the note mention needing something, rather than having it, is certainly an improvement. Changing the secret door into an ordinary door or portcullis might also help hint that something should still be done in that room. I still wouldn't consider it an easy puzzle, but at least I might have figured it out then.
Excellent points. To the player, that will also link the hall to the earlier portcullis with the herder (after stepping out from that huge dead space that used to be the telemaze).

Thanks again, to both of you!
User avatar
Xanathar
Posts: 629
Joined: Sun Apr 15, 2012 10:19 am
Location: Torino, Italy
Contact:

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by Xanathar »

BTW: I tried step by step John's log.
I'm under the pit at 2nd level over an invulnerable spider.
Seems to happen if and only if you kill the spider exactly over the pit (the spider over the pit).

It totally looks as a game engine bug: the spider is able to attack (and kill) but receives no damage whatsoever. It cannot be killed, not even by rejumping over it.

Reloading or changing resolution removes the spider.

Happens about with 50% chance.

Screenshot with all entities at that tile dumped:

Image
Waking Violet (Steam, PS4, PSVita, Switch) : http://www.wakingviolet.com

The Sunset Gate [MOD]: viewtopic.php?f=14&t=5563

My preciousss: http://www.moonsharp.org
User avatar
SpiderFighter
Posts: 789
Joined: Thu Apr 12, 2012 4:15 pm

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by SpiderFighter »

Xanathar wrote:BTW: I tried step by step John's log.
I'm under the pit at 2nd level over an invulnerable spider.
Seems to happen if and only if you kill the spider exactly over the pit (the spider over the pit).

It totally looks as a game engine bug: the spider is able to attack (and kill) but receives no damage whatsoever. It cannot be killed, not even by rejumping over it.

Reloading or changing resolution removes the spider.

Happens about with 50% chance.

Screenshot with all entities at that tile dumped:
Pretty freaky, eh? I couldn't replicate it (of course!), even though I did the same thing he did. In any case, it's been squished in the next version already. I've moved the tile that spawns the ogre, killed the plate that the ogre triggered (to open the spider cage), and made the spider room a bit more interesting/exciting.

It is a fascinating bug, though. Check out the links I posted about it (in my reply to his post); it's been kicking around the forums (very rarely though) for a month or two.
I haven't had much time at the computer tonight (a minute here, a minute there), but I think I have that final crash squished, too.
Ancylus
Posts: 50
Joined: Thu Oct 11, 2012 5:54 pm

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by Ancylus »

SpoilerShow
SpiderFighter wrote:
Ancylus wrote:[Re: Serpent Bracer Room] Don't get me wrong, I don't object to the deadliness of the puzzle at all, since it's voluntary and has a very fair warning. It's just the specific triggering condition that seems strange to me: I would expect the trap to trigger if I take the bracer without having placed the right item into the alcove, while other items would be ignored entirely. That said, this really isn't a big deal, just something that felt a little bit off.
I see what you're saying now. That's probably just a limitation of my scripting abilities. I did notice just now (while playing through to check lighting) that the room doesn't reset if you put the bracer back, and that seems unfair to me. I can take a look at this, but it's probably just beyond me right now. My eyes are bigger than my stomach when it comes to scripting, if that makes any sense.
I would handle the trap with a script like this:

Code: Select all

function checkItems(alcove)
	for item in alcove:containedItems() do
		if item.name == "serpent_bracer" or item.name == "skull" then
			-- one of the items found, reset the trap if it has been triggered
			return
		end
	end
	
	-- neither item found, trigger the trap
end
User avatar
SpiderFighter
Posts: 789
Joined: Thu Apr 12, 2012 4:15 pm

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by SpiderFighter »

Ancylus wrote:
SpoilerShow
SpiderFighter wrote:
Ancylus wrote:[Re: Serpent Bracer Room] Don't get me wrong, I don't object to the deadliness of the puzzle at all, since it's voluntary and has a very fair warning. It's just the specific triggering condition that seems strange to me: I would expect the trap to trigger if I take the bracer without having placed the right item into the alcove, while other items would be ignored entirely. That said, this really isn't a big deal, just something that felt a little bit off.
I see what you're saying now. That's probably just a limitation of my scripting abilities. I did notice just now (while playing through to check lighting) that the room doesn't reset if you put the bracer back, and that seems unfair to me. I can take a look at this, but it's probably just beyond me right now. My eyes are bigger than my stomach when it comes to scripting, if that makes any sense.
I would handle the trap with a script like this:

Code: Select all

function checkItems(alcove)
	for item in alcove:containedItems() do
		if item.name == "serpent_bracer" or item.name == "skull" then
			-- one of the items found, reset the trap if it has been triggered
			return
		end
	end
	
	-- neither item found, trigger the trap
end
Thanks, Ancylus! I already has a laundry list of 20 other fixes/additions/changes to the next version. This will be very handy. I'm trying to learn as much as I can; I hate being crippled by my own ignorance.
User avatar
SpiderFighter
Posts: 789
Joined: Thu Apr 12, 2012 4:15 pm

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by SpiderFighter »

Having problems with that part of the script. If I use item.name then I have errors, because of how the script is set up. I've managed to have it work if the bracer is replaced, but then the script stops checking because of the "else" (so the player can just safely remove the bracer at that point).

Here's what I have:
SpoilerShow

Code: Select all

function orbcove9aaContents(entity, item)
for i in entity:containedItems() do
if i.name == item then
return true
end
end
return false
end

function orbcove9aaCheck()
if orbcove9aaContents(orbcove9aa, "humanskull")
then
humanskull_1:destroy()
sfjnd_wooden_2:open()
sfjnd_metal_1:close()
sfjnd_metal_2:close()
else
if orbcove9aaContents(orbcove9aa, "serpent_bracer")
then
sfjnd_wooden_2:open()
sfjnd_metal_1:close()
sfjnd_metal_2:close()
else
sfjnd_wooden_2:close()
sfjnd_metal_1:open()
sfjnd_metal_2:open()
end
end
end
Ancylus
Posts: 50
Joined: Thu Oct 11, 2012 5:54 pm

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by Ancylus »

Oh right, I forgot that you wanted to destroy the skull. In that case it's best to use a variable to keep track of whether it has been placed. Here's a slightly modified version of your code. (Although I don't quite see how replacing the bracer would break your script.)
SpoilerShow

Code: Select all

skull_found = false

function orbcove9aaContents(entity, item)
	for i in entity:containedItems() do
		if i.name == item then
			return true
		end
	end
	return false
end

function orbcove9aaCheck()
	if not skull_found then
		if orbcove9aaContents(orbcove9aa, "humanskull") then
			skull_found = true
			humanskull_1:destroy()
			sfjnd_wooden_2:open()
			sfjnd_metal_1:close()
			sfjnd_metal_2:close()
		else
			if orbcove9aaContents(orbcove9aa, "serpent_bracer") then
				sfjnd_wooden_2:open()
				sfjnd_metal_1:close()
				sfjnd_metal_2:close()
			else
				sfjnd_wooden_2:close()
				sfjnd_metal_1:open()
				sfjnd_metal_2:open()
			end
		end
	end
end
User avatar
SpiderFighter
Posts: 789
Joined: Thu Apr 12, 2012 4:15 pm

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by SpiderFighter »

Ancylus wrote:Oh right, I forgot that you wanted to destroy the skull. In that case it's best to use a variable to keep track of whether it has been placed. Here's a slightly modified version of your code. (Although I don't quite see how replacing the bracer would break your script.)
SpoilerShow

Code: Select all

skull_found = false

function orbcove9aaContents(entity, item)
	for i in entity:containedItems() do
		if i.name == item then
			return true
		end
	end
	return false
end

function orbcove9aaCheck()
	if not skull_found then
		if orbcove9aaContents(orbcove9aa, "humanskull") then
			skull_found = true
			humanskull_1:destroy()
			sfjnd_wooden_2:open()
			sfjnd_metal_1:close()
			sfjnd_metal_2:close()
		else
			if orbcove9aaContents(orbcove9aa, "serpent_bracer") then
				sfjnd_wooden_2:open()
				sfjnd_metal_1:close()
				sfjnd_metal_2:close()
			else
				sfjnd_wooden_2:close()
				sfjnd_metal_1:open()
				sfjnd_metal_2:open()
			end
		end
	end
end
Hmm...I don't know why either, but this acted exactly the same as my other script: Remove the bracer and the ogre doors open, put it back and ogre doors close, but then you can pick up the bracer again and nothing happens.
Ancylus
Posts: 50
Joined: Thu Oct 11, 2012 5:54 pm

Re: [Map for CFD2012 ] "The Descent" -File and discussion th

Post by Ancylus »

SpiderFighter wrote:Hmm...I don't know why either, but this acted exactly the same as my other script: Remove the bracer and the ogre doors open, put it back and ogre doors close, but then you can pick up the bracer again and nothing happens.
I just tried it and it worked fine. How is your alcove connected to the script? It should have a single connector with Event any and Action orbcove9aaCheck, and Activate Always should be enabled. And do you have any other scripts affecting any of these entities?
Post Reply