YolkfolkThe Dizzy Fansite
Community discussion

Sacred World Dizzy v1.05 [DOWNLOADABLE]

Started by Adam Markey on 2 January 2011 • 29,472 views

83 posts
#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
👍 0
#72679

[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:

👍 0
#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

👍 0
#72681

[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.

👍 0
#72682
I placed the dynamite, then went and collected the detonator, actioned the rock, got the message, but cant now place the dynamite as its been placed, and dont get the option to use the detonator as the inventory never comes up.

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?
👍 0
#72683
I don't mind at all as others will always find things you don't see as you have so much to cover & gives opportunity to fine tune the finished package.

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).
👍 0
#72688
I have not programmed a Dizzy Age game, so forgive me if I am wrong, but you obviously have a flag to prevent you placing the detonator until you place the dynamite, so i see 2 possible solutions - either set that flag when the dynamite is placed irrespective of whether you have tried to place the detonator, or have a flag set so that you cant place the dynamite until you have attempted to place the detonator.
👍 0
#72689
yeah you can use the status settings of something there to determine which point the player is at.

I'm going have a little look at the code to see if I can come up with anything :smile:
👍 0
#72690
right, I've worked out what's going wrong.

*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:
👍 0
#72692

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:

👍 0
#72693

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: )

👍 0
#72694
If you're able to do as you say and maybe email the game file to me that would be great. 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!

looking at the map I reckon there's 248 accessible rooms (it's impossible to get to some of the cloud rooms)
👍 0
#72695
[quote data-userid="23" data-postid="72694"]

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.
👍 0
#72696

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;
}
👍 0
#72698

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).

👍 0
#72705
Thank goodness! Dont want to upset you after all your hard work, and the amount of enjoyment you have given us all!

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?
👍 0
#72709

[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.

👍 0