I only have Daemon Eyes for you!

Talk about creating Grimrock 1 levels and mods here. Warning: forum contains spoilers!
User avatar
Grimwold
Posts: 511
Joined: Thu Sep 13, 2012 11:45 pm
Location: A Dungeon somewhere in the UK

Re: I only have Daemon Eyes for you!

Post by Grimwold »

Ok I see what is happening... it is to do with item.id vs item.name

When I set my test version up I spawned an ordinary blue gem but gave it the id = "blue_gem_fake" so I was using item.id ==
e.g.
SpoilerShow
spawn("blue_gem",nil,nil,nil,nil,"blue_gem_fake")
However it looks like you are spawning a new item type which has name = "blue_gem_fake"... so you will need to use item.name ==
e.g.
SpoilerShow
spawn("blue_gem_fake",nil,nil,nil,nil)
So.... Hopefully this revised party script should work for your setup...

Code: Select all

    cloneObject{
      name = "party",
      baseObject = "party",
      onPickUpItem  = function(party,item)
        if item.name == "blue_gem_fake" then
          return false
        else
          return true
        end
      end,
    }
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: I only have Daemon Eyes for you!

Post by akroma222 »

LOL I so almost tried that, then thought... 'nah that is silly chris, it is the same thing!'
Clearly not though... Works like a charm!!!
Thank you good sir, much appreciated... You da man 8-)
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: I only have Daemon Eyes for you!

Post by akroma222 »

Further to that, I have found that
SpoilerShow

Code: Select all

cloneObject{
  name = "party",
  baseObject = "party",
  onPickUpItem  = function(party,item)
    if item.name == "blue_gem_fake" then
      return false
    end
  end,
}
will also work, however, I also need to do the same for other coloured gems (green, red and maybe yellow if I can get my hands on it).
I tried:
SpoilerShow

Code: Select all

cloneObject{
  name = "party",
  baseObject = "party",
  onPickUpItem  = function(party,item)
    if item.name == "blue_gem_fake" then
      return false
    end
  end,
}

cloneObject{
  name = "party",
  baseObject = "party",
  onPickUpItem  = function(party,item)
    if item.name == "green_gem_fake" then
      return false
    end
  end,
}

cloneObject{
  name = "party",
  baseObject = "party",
  onPickUpItem  = function(party,item)
    if item.name == "red_gem_fake" then
      return false
    end
  end,
}
as well as:
SpoilerShow

Code: Select all

cloneObject{
  name = "party",
  baseObject = "party",
  onPickUpItem  = function(party,item)
    if item.name == {"blue_gem_fake","green_gem_fake","red_gem_fake"} then
      return false
    else
      return true
    end
  end,
}
But that ends up allowing me to pick up all of them still.... would I have to make a local gem list including all fake gems?
Sorry to ask so many questions, I am learning, but slowly :?
User avatar
Grimwold
Posts: 511
Joined: Thu Sep 13, 2012 11:45 pm
Location: A Dungeon somewhere in the UK

Re: I only have Daemon Eyes for you!

Post by Grimwold »

Additonal clones of the party will not work, as each successive one will replace the previous.. You are on the right lines with the second example, but there is a problem with the setup of your IF statement.

A very basic solution, I think (but have not tested), would be

Code: Select all

if item.name == "blue_gem_fake" or item.name == "red_gem_fake" or item.name == "green_gem_fake" then
But you could script a more robust solution.... if you changed the name of the fake games to "fake_gem_xxxxx" you could check for the first 9 characters of the name as a substring. like so.

Code: Select all

if item.name:sub(1,9) == "fake_gem_" then
with this you could have any number of different fake gem types, none of which the party could pick up. The reason I would re-name the gems to do it this way is because the colours have different numbers of characters... with this way we know we can always check characters 1 to 9 for the string "fake_gem_"


I used something similar with pits called "sequence_pit_xx" to activate ALL pits that began with that ID.
SpoilerShow

Code: Select all

function openAllPits()
  for i in allEntities(party.level) do
      if i.id:sub(1,13) == "sequence_pit_" then
        i:open()
      end
   end
end
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: I only have Daemon Eyes for you!

Post by akroma222 »

Ahh beautiful!!
Changed the names to 'fake_gem_xxx' and used the - if item.name == "fake_gem_blue" or if item.name == "fake_gem_green" etc etc and it works great!! THANK YOU
Kept the fake gem name change in case I want to use the other script (pit sequnce) you have suggested too... it is a good one, I have used it to reset (open all portcullis) a gate maze that changes every time you hit a lever....
Thanks again Grimwold!! (seems you are answering my questions in more threads than just this one) :P
BTW nice display pic, if I am not mistaken - 'Dwarven Warriors' from either 3rd/4th ed magic core set (or Fallen Empires?)
User avatar
Grimwold
Posts: 511
Joined: Thu Sep 13, 2012 11:45 pm
Location: A Dungeon somewhere in the UK

Re: I only have Daemon Eyes for you!

Post by Grimwold »

akroma222 wrote:Thanks again Grimwold!! (seems you are answering my questions in more threads than just this one) :P
BTW nice display pic, if I am not mistaken - 'Dwarven Warriors' from either 3rd/4th ed magic core set (or Fallen Empires?)
I enjoy solving scripting problems and like to help.

Dwarven Warriors indeed... artwork by Quinton Hoover... for the very first ever release of Magic: The Gathering right through to 5th Edition.
User avatar
akroma222
Posts: 1029
Joined: Thu Oct 04, 2012 10:08 am

Re: I only have Daemon Eyes for you!

Post by akroma222 »

Indeed! Inspired to get up some Akroma Angel of Wrath artwork.... the pixels are restrictions are brutal so it is hard to tell it is her :)
User avatar
Komag
Posts: 3658
Joined: Sat Jul 28, 2012 4:55 pm
Location: Boston, USA

Re: I only have Daemon Eyes for you!

Post by Komag »

Is there some method to make the hook work for items already in the inventory or in hands?

I want to run a check on something right when the player left-clicks to pick up an item in the players hand, but onPickUpItem only works for items in the dungeon that the player doesn't currently have.
Finished Dungeons - complete mods to play
User avatar
Grimwold
Posts: 511
Joined: Thu Sep 13, 2012 11:45 pm
Location: A Dungeon somewhere in the UK

Re: I only have Daemon Eyes for you!

Post by Grimwold »

I thought there was a way to do that... I remember various discussions about cursed items that cannot be dropped and about torches that cannot be held in hand... but can't find an answer to your specific situation.
User avatar
Komag
Posts: 3658
Joined: Sat Jul 28, 2012 4:55 pm
Location: Boston, USA

Re: I only have Daemon Eyes for you!

Post by Komag »

I found this post, but it's not quite what I'm looking for:
viewtopic.php?p=33965#p33965

I may just use a short timer (0.2 or so) to very often run the check I'm looking to run, so if a player does select an item being held in hand, the timer will soon see that it's no longer equipped.
Finished Dungeons - complete mods to play
Post Reply