Is there a working Spinner Plate Script?

Talk about creating Grimrock 1 levels and mods here. Warning: forum contains spoilers!
Post Reply
User avatar
fazzasx
Posts: 104
Joined: Mon May 27, 2013 12:35 am

Is there a working Spinner Plate Script?

Post by fazzasx »

HI Guys, I am back again!

I have trawled through the forum looking for a way to get the party to rotate either 180 degrees (basically turn opposite) and if they step back onto the plate from the opposite direction they will spin again. I can find anything that will do this.

I have tried djoldgames teleport rotate scripts but they dont seem to work for me? I tried installing the framework but I just cant get the script to work with it so i am not sure if the framework is working or not.

Does anyone have a reliable spinner plate technique out there? I have been looking since 10pm UK time and its now 0330 :) See how I love this ;)

Let me now

Thanks
Zastaph
User avatar
Dr.Disaster
Posts: 2876
Joined: Wed Aug 15, 2012 11:48 am

Re: Is there a working Spinner Plate Script?

Post by Dr.Disaster »

This should not be too hard to do from scratch.

1st: at the place you want to spin the party place a face-changing invisible silent teleporter activated by party only
2nd: around that teleporter place up to four invisible silent pressure plates activated by party only
3rd: now let each of those pressure plates call a script entitiy on the deactivation event, similar to the party stepping off from it

The script entity now needs to do this:
- read the parties facing with party.facing (see http://www.grimrock.net/modding/scripting-reference/ )
- call Teleport:setTeleportTarget(x, y, facing, [level]) for the teleporter placed at 1st to set the facing the party shall have

for your always-180 set facing like this

Code: Select all

read <> set <> change
  0      2     +2
  1      3     +2
  2      0     -2
  3      1     -2
It could be this simple (not LUA tested, just to show the logic):

Code: Select all

if (party.facing > 1)
then
   Teleport:setTeleportTarget(teleporter-x-location, teleporter-y-location, party.facing -2)
else
   Teleport:setTeleportTarget(teleporter-x-location, teleporter-y-location, party.facing +2)
end
alois
Posts: 112
Joined: Mon Feb 18, 2013 7:29 am

Re: Is there a working Spinner Plate Script?

Post by alois »

Dr.Disaster wrote:

Code: Select all

if (party.facing > 1)
then
   Teleport:setTeleportTarget(teleporter-x-location, teleporter-y-location, party.facing -2)
else
   Teleport:setTeleportTarget(teleporter-x-location, teleporter-y-location, party.facing +2)
end
Actually, it is easier than that (without if's):

Code: Select all

Teleport:setTeleportTarget(teleporter-x-location, teleporter-y-location, (party.facing+2)%4)
using the modulus "a%b" function which gives the remainder of the division of "a" by "b"; and "add two, then take the remainder of the divsion by 4" gives you exactly the results in your table (modulo 4, adding 2 or subtracting 2 is the same thing!)

alois :)
User avatar
DesperateGames
Posts: 90
Joined: Sun Oct 06, 2013 1:54 pm

Re: Is there a working Spinner Plate Script?

Post by DesperateGames »

I would choose the following approach:

1. create a script in the dungeon with an universal "spin" function:

Code: Select all

function spin()
	party:setPosition(party.x, party.y, (party.facing+2)%4, party.level)
	party:playScreenEffect("teleport_screen")
end
2. Insert pressure plates (visible or hidden, as you like) and let them call the spin() function on activation.

The "teleport_screen" effect is optional, but I would add a screen effect and maybe a sound effect to let the player know that the spinning is intentional and not a bug in the dungeon ;-)
Last edited by DesperateGames on Sun Oct 20, 2013 5:39 pm, edited 1 time in total.
User avatar
fazzasx
Posts: 104
Joined: Mon May 27, 2013 12:35 am

Re: Is there a working Spinner Plate Script?

Post by fazzasx »

DesperateGames wrote:I would choose the following approach:

1. create a script in the dungeon with an universal "spin" function:

Code: Select all

function spin()
	party:setPosition(party.x, party.y, (party.facing+2)%4, party.level)
	party:playScreenEffect("teleport_screen")
end
2. Insert pressure plates (visible or hidden, as you like) and let them call the spin() function on activation.

The "teleport_screen" effect is optional, but I would add a screen effect and maybe a sound effect to let the player now that the spinning is intentional and not a bug in the dungeon ;-)

Thanks to maloi and desperategames for the ideas here. I went with desperategames suggesion as this was very simple to implement for a newbie like me.


Big thanks to all that contributed to this :)
Zastaph
Post Reply