Sacred World Dizzy v1.05 [DOWNLOADABLE]
Started by Adam Markey on 2 January 2011 • 29,472 views
I thought I would start again playing 1.01 and have just noticed that towards the end of Heritage Man's speech, he says his cousin might "beable". EDIT - so does Great Grandad dizzy once he does what he needs to do
EDIT: and the vicar asks for the cross to be returned to the "alter" not altar
[quote data-userid="90" data-postid="72678"]
Sorry, Matt.
I thought I would start again playing 1.01 and have just noticed that towards the end of Heritage Man’s speech, he says his cousin might “beable”. EDIT – so does Great Grandad dizzy once he does what he needs to do
EDIT: and the vicar asks for the cross to be returned to the “alter” not altar
[/quote]
Ooo well spotted, that's not a typo on this occasion that's me spelling it wrong, i've got it on both the screen names too. That one is a shame wasn't spotted before.
The other is i've not hit space between.
I'll sort, thanks. Let you find some others :teethy:
You spoke too soon!
i cant place the detonator any more, i get the message and no opportunity to put it down, you just get the message every time you action :o_o:
This only happens if you place the dynamite before you have the detonator - I just tried again and it works ok as long as you action rock, dynamite and then detonator
[quote data-userid="90" data-postid="72680"]
You spoke too soon!
i cant place the detonator any more, i get the message and no opportunity to put it down, you just get the message every time you action :o_o:
This only happens if you place the dynamite before you have the detonator – I just tried again and it works ok as long as you action rock, dynamite and then detonator
[/quote]
Yes there was a reason for that with the coding.
another typo as well, i feel really mean like it looks like i am trying to pull all your hard work apart ( i am not of course), but I know you want it to be as good as it can be ( and it IS good!) and I am happy to help you improve it - the troll says "your a cheeky one" - should be you're - i think the witch may also say your from your post showing her conversation
EDIT - troll says it twice!
Denzil says "Should off corrected things" instead of "should have" - maybe thats his patois as he also says "seen as you've helped" instead of seeing?
Those are very very minor so i'm not too concerned with them really but seems there a sequential issue there with that action in blowing the rocks but I don't know how to get around it with the coding. On testing I had a different sequential problem but resolved it, however it may have created that permutation in place (not sure as I kept testing & couldnt recreate any issue but maybe I never did that way).
I'm going have a little look at the code to see if I can come up with anything :smile:
*In theory* the coding works. It's a little bit round-the-houses, but it works, and that's the main thing. :smile:
What's happening is this:
1. you enable object 2086 when you enter room 27_3, (this is so that the player can't 'action' the rock before he sees the detonator.)
2. then when you action object 2086 (on the rock) you get a message telling you what you can do.
3. you place the dynamite in place, which disables 2086 and enables 2087 (also on the rock)
4. you action 2087 by using the detonator there, dropping it down. This enables 2088 (also on the rock).
5. you action 2088, which blows the rocks up.
what can also happen is that you do number 3 before number 2 above, in which case you simply bypass number 2.
Your problem is the OpenRoom_27_3() code.
consider that the player does number 3 first, and then goes and gets the detonator (number 1). so the sequence now looks like this:
1. you place the dynamite in place, which disables 2086 and enables 2087 (also on the rock)
2. you enter room 27_3, which re-enables object 2086 (which is 'in front' of 2087, meaning it will be called as preference if dizzy is in front of 2 actionable objects)
3. when you action object 2086 (on the rock) you get a message telling you what you can do. However object 2086 is not disabled
4. you can't now action 2087 by using the detonator there, because 2086 is still enabled and takes preference.
5. you're stuck.
there are a few different ways to fix this, some easier than others (the easiest is to add 2 lines into 2086 disabling it once actioned). I'm also having a go at simplifying the code so that it doesn't need 3 actionable objects. :smile:
ok, this is the code you're currently using (with spaces removed):
Objects/Brushes:
2084: dynamite trigger
2085: dynamite brush
2086: actionable trigger
2087: actionable trigger
2088: Detonator Trigger
2089: detonator brush
2090 - 2094: rock brushes
////////////////////
//POSITION DYNAMITE
////////////////////
func ActionObject_2084()
{
idx = ObjFind(2084);
if(ObjGet(idx,O_STATUS)==0)
{
Message0(5,2, "THE LARGE STONES HAVEnBLOCKED OFF ENTRY");
MessagePop();
ObjSet(idx,O_STATUS,1);
return;
GameCommand(CMD_REFRESH);
}
if(ObjGet(idx,O_STATUS)==1)
{
idx = OpenDialogInventory();
if(idx!=-1) UseObject(idx);
}
}
func UseObject_2084( idx )
{
if(ObjGet(idx,O_ID)==1013)
{
Message0(5,2, "YOU WEDGE THE DYNAMITEnBETWEEN THE STONES");
MessagePop();
InventorySub(idx);
ObjSet(idx,O_DISABLE,1);
idx = BrushFind(2085);
BrushSet(idx,B_DRAW,3);
idx = ObjFind(2086);
ObjSet(idx,O_DISABLE,1);
idx = ObjFind(2087);
ObjSet(idx,O_DISABLE,0);
GameCommand(CMD_REFRESH);
}
else
{
DropObject(idx);
}
}
/////////////////////////////////////////////////////////////////
//ENTER ROOM WHERE DYNAMITE IS, DISABLE TRIGGER WHERE IT'S USED
////////////////////////////////////////////////////////////////
func OpenRoom_27_3()
{
idx = ObjFind(2086);
ObjSet(idx,O_DISABLE,0);
}
//////////////////////////////////////////
//DISPLAY MESSAGE TO PLACE DYNAMITE FIRST
/////////////////////////////////////////
func ActionObject_2086()
{
idx = ObjFind(2086);
if(ObjGet(idx,O_STATUS)==0)
{
Message0(5,7, "YOU CAN USE THE STONEnTO SET THE DETONATOR ONnBUT THE EXPLOSIVESnNEEDS POSITIONING FIRST");
MessagePop();
}
if(ObjGet(idx,O_STATUS)==1)
{
idx = OpenDialogInventory();
if(idx!=-1) UseObject(idx);
}
}
//////////////////////////////////////
//SET THE DETONATOR INTO POSITION
//////////////////////////////////////
func UseObject_2087( idx )
{
if(ObjGet(idx,O_ID)==1014)
{
Message0(6,8, "YOU PLACE THE DETONATORnINTO POSITION ON THEnSTONE MAKING IT READY");
MessagePop();
InventorySub(idx);
ObjSet(idx,O_DISABLE,1);
idx = BrushFind(2089);
BrushSet(idx,B_DRAW,3);
idx = ObjFind(2088);
ObjSet(idx,O_DISABLE,0);
GameCommand(CMD_REFRESH);
}
else
{
DropObject(idx);
}
}
//////////////////////////////////////////
//DISPLAY MESSAGE TO PLACE DYNAMITE FIRST
/////////////////////////////////////////
func ActionObject_2088()
{
idx = ObjFind(2088);
if(ObjGet(idx,O_STATUS)==0)
{
Message0(5,7, "YOU HIT THE PLUNGER, THEREnIS A LOUD BANG AND THEnLARGE STONES ARE BLOWNnTO SMITHEREENS !!");
MessagePop();
idx = BrushFind(2085);
BrushSet(idx,B_DRAW,0);
idx = BrushFind(2090);
BrushSet(idx,B_DRAW,0);
idx = BrushFind(2091);
BrushSet(idx,B_DRAW,0);
idx = BrushFind(2092);
BrushSet(idx,B_DRAW,0);
idx = BrushFind(2093);
BrushSet(idx,B_DRAW,0);
idx = BrushFind(2094);
BrushSet(idx,B_DRAW,0);
idx = ObjFind(2088);
ObjSet(idx,O_DISABLE,1);
DoShake(12);
return;
}
if(ObjGet(idx,O_STATUS)==1)
{
idx = OpenDialogInventory();
if(idx!=-1) UseObject(idx);
}
}
the above code uses three different objects, enabling/disabling them when needed.
The code below uses the status of one object (2088) to do the same thing, reducing the coding needed, and removing the need for objects 2086 and 2087 (it doesn't matter if they're still in the map, they won't ever be used):
////////////////////
// Dynamite
////////////////////
func ActionObject_2084()
{
idx = ObjFind(2084);
if(ObjGet(idx,O_STATUS)==0)
{
Message0(5,2, "THE LARGE STONES HAVEnBLOCKED OFF ENTRY");
MessagePop();
ObjSet(idx,O_STATUS,1);
return;
}
if(ObjGet(idx,O_STATUS)==1)
{
idx = OpenDialogInventory();
if(idx!=-1) UseObject(idx);
}
}
func UseObject_2084( idx )
{
if(ObjGet(idx,O_ID)==1013)
{
Message0(5,2, "YOU WEDGE THE DYNAMITEnBETWEEN THE STONES");
MessagePop();
InventorySub(idx);
idx = BrushFind(2085);
BrushSet(idx,B_DRAW,3);
idx = ObjFind(2088);
ObjSet(idx,O_STATUS,5); // change status of 2088
GameCommand(CMD_REFRESH);
}
else
{
DropObject(idx);
}
}
/////////////////////////////////////////////////////////////////
// Enable Detonator trigger
////////////////////////////////////////////////////////////////
func OpenRoom_27_3()
{
idx = ObjFind(2088);
ObjSet(idx,O_DISABLE,0);
}
//////////////////////////////////////////
// Detonator
/////////////////////////////////////////
func ActionObject_2088()
{
idx = ObjFind(2088);
if(ObjGet(idx,O_STATUS)==0) // display message
{
Message0(5,7, "YOU CAN USE THE STONEnTO SET THE DETONATOR ONnBUT THE EXPLOSIVESnNEEDS POSITIONING FIRST");
MessagePop();
ObjSet(idx,O_STATUS,5); // change status of 2088
return;
}
if(ObjGet(idx,O_STATUS)==1) // hit the plunger
{
Message0(5,7, "YOU HIT THE PLUNGER, THEREnIS A LOUD BANG AND THEnLARGE STONES ARE BLOWNnTO SMITHEREENS !!");
MessagePop();
idx = BrushFind(2085);
BrushSet(idx,B_DRAW,0);
BrushSet(BrushFind(2090),B_DRAW,0);
BrushSet(BrushFind(2091),B_DRAW,0);
BrushSet(BrushFind(2092),B_DRAW,0);
BrushSet(BrushFind(2093),B_DRAW,0);
BrushSet(BrushFind(2094),B_DRAW,0);
GameCommand(CMD_REFRESH);
idx = ObjFind(2088);
ObjSet(idx,O_STATUS,5); // change status of 2088
DoShake(12);
return;
}
if(ObjGet(idx,O_STATUS)==5) // call 'useobject'
{
idx = OpenDialogInventory();
if(idx!=-1) UseObject(idx);
}
}
func UseObject_2088( idx )
{
if(ObjGet(idx,O_ID)==1014) // place the detonator
{
Message0(6,8, "YOU PLACE THE DETONATORnINTO POSITION ON THEnSTONE MAKING IT READY");
MessagePop();
InventorySub(idx);
ObjSet(idx,O_DISABLE,1);
idx = BrushFind(2089);
BrushSet(idx,B_DRAW,3);
idx = ObjFind(2088);
ObjSet(idx,O_STATUS,1); // change status of 2088
GameCommand(CMD_REFRESH);
}
else
{
DropObject(idx);
}
}
I also removed a couple of extraneous bits of code (for example you don't need to use ObjSet(idx,O_DISABLE,1); after InventorySub(idx); because InventorySub(idx); automatically disables the item).
also, because object 2088 isn't ever being disabled, there is nothing to go wrong if it gets re-enabled. When the puzzle is finished, changing the status of it to 5 ensures that all that happens if it's actioned again is that the inventory is called. As you'll already have used the detonator on it, you won't have it any more, so no code will be called.
I hope this helps :smile:
Cheers Jamie, as you say does work in *theory* except for as you have demonstrated with that permutation. Also it's probably most likely to occur that way once you've played & know what to do prior to the prompts which is perhaps why initially most players have been getting through and nothing highlighted.
Can you email the game file with those adjustments (also I check you've done it on v1.01) as that would be great.
The main reason for actually including it there at the entrance to the mine was to force the player to visit the Quarry before visiting the water areas, particularly as the player required that important item :teethy:
I'm hoping v1.02 would become the last update (hopes {yolkfolk}:meh: )
looking at the map I reckon there's 248 accessible rooms (it's impossible to get to some of the cloud rooms)
just change the top code to the bottom code in the game.gs file. Don’t forget to test it though. I see no bugs in it, but you never know!
[/quote]Assuming i've replaced with your new code correctly, I have tried it twice, but now it's possible to blow the stones without placing the dynamite explosives.
Can you test & check.
oops yes! :blush:
all that you need to do is take ObjSet(idx,O_STATUS,5); out of the bit of code as shown below (to stop it allowing you to place the detonator down before you've placed the explosives).
that *should* fix it:
//////////////////////////////////////////
// Detonator
/////////////////////////////////////////
func ActionObject_2088()
{
idx = ObjFind(2088);
if(ObjGet(idx,O_STATUS)==0) // display message
{
Message0(5,7, "YOU CAN USE THE STONEnTO SET THE DETONATOR ONnBUT THE EXPLOSIVESnNEEDS POSITIONING FIRST");
MessagePop();
return;
}Super, that seems to have done the trick {yolkfolk}:dizzy:
Thanks & to 'frogandhat', I actually appreciate things being highlighted as I say so you can fine tune the overall package of the game & have it as accurate & bug free as is possible (particuarly as it will be there for the future for any one to play when you as the author have moved on from it).
Got another spelling error unfortunately, when Dizzy talks to you about pretending to feed the bird, it should chirp 'constantly'
EDIT and another your instead of you're - when you give Daisy her object - and also when you speak to Grandma - and when you give the troll his item, he also says "afterall"
When moving the box - the word is leverage
Will the code above stop the rock asking you to place the explosives after you already have?
you fixed the "collasped" in the room name, but not in the 'action' text
Should Dozy say "on well, thanks junior", or should it be oh well?
[quote data-userid="90" data-postid="72705"]
Will the code above stop the rock asking you to place the explosives after you already have?
[/quote]
yes.