TreasureHunt storyline integration: Intro, Outro, NPCs
|
@ -0,0 +1,14 @@
|
|||
[DefCore]
|
||||
id=Hat
|
||||
Version=5,2,0,1
|
||||
Category=C4D_Object
|
||||
Width=8
|
||||
Height=8
|
||||
Offset=-4,-4
|
||||
Vertices=2
|
||||
VertexX=-3,3
|
||||
VertexY=1,-1
|
||||
VertexFriction=20
|
||||
Value=5
|
||||
Mass=10
|
||||
ColorByOwner=1
|
|
@ -0,0 +1,31 @@
|
|||
// S2Hat genrated by blender2ogre 0.6.0
|
||||
|
||||
material S2Hat
|
||||
{
|
||||
receive_shadows on
|
||||
|
||||
technique
|
||||
{
|
||||
pass S2Hat
|
||||
{
|
||||
ambient 0.13066382706165314 0.11021058261394501 0.8000000715255737 1.0
|
||||
diffuse 0.10453106320695671 0.08816846740496853 0.640000066757203 1.0
|
||||
specular 0.5 0.5 0.5 1.0 12.5
|
||||
emissive 0.0 0.0 0.0 1.0
|
||||
|
||||
alpha_to_coverage off
|
||||
cull_hardware clockwise
|
||||
depth_check on
|
||||
depth_write on
|
||||
scene_blend one zero
|
||||
|
||||
texture_unit
|
||||
{
|
||||
texture S2Hat.png
|
||||
tex_address_mode wrap
|
||||
scale 1.0 1.0
|
||||
colour_op modulate
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 241 B |
|
@ -0,0 +1,6 @@
|
|||
/*--- Hat ---*/
|
||||
|
||||
local Collectible = 1;
|
||||
local Name = "$Name$";
|
||||
local Description = "$Description$";
|
||||
local Rebuy = true;
|
|
@ -0,0 +1,2 @@
|
|||
Name=Hut
|
||||
Description=Mein Hut der hat drei Ecken
|
|
@ -0,0 +1,2 @@
|
|||
Name=Hat
|
||||
Description=My hat has three vertices!
|
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 34 KiB |
|
@ -1,7 +1,6 @@
|
|||
[DefCore]
|
||||
id=DialogueSimple
|
||||
id=Deco_AltMaterials2
|
||||
Version=5,2,0,1
|
||||
Category=C4D_StaticBack
|
||||
Picture=0,0,64,64
|
||||
Width=1
|
||||
Height=1
|
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 132 B |
|
@ -0,0 +1 @@
|
|||
This definition is not created. It just serves as a container for custom mesh materials, which aren't loaded unless the definition is valid.
|
|
@ -0,0 +1,62 @@
|
|||
material CrashedAirplane
|
||||
{
|
||||
receive_shadows on
|
||||
technique
|
||||
{
|
||||
pass
|
||||
{
|
||||
cull_hardware none
|
||||
scene_blend alpha_blend
|
||||
ambient 0.500000 0.500000 0.500000 1.000000
|
||||
diffuse 0.800000 0.800000 0.800000 1.000000
|
||||
specular 0.000000 0.000000 0.000000 1.000000 3.500000
|
||||
emissive 0.000000 0.000000 0.000000 1.000000
|
||||
|
||||
texture_unit Overlay
|
||||
{
|
||||
texture CrashedPaint.png
|
||||
tex_address_mode wrap
|
||||
filtering trilinear
|
||||
colour_op_ex modulate src_texture src_player_colour
|
||||
// take alpha from texture only, ignore player alpha
|
||||
alpha_op_ex source1 src_texture src_player_colour
|
||||
}
|
||||
texture_unit Plane
|
||||
{
|
||||
texture Crashedairplane.jpg
|
||||
tex_address_mode wrap
|
||||
filtering trilinear
|
||||
colour_op_ex blend_current_alpha src_current src_texture
|
||||
// Don't blend alpha, to make sure we have full intensity at the base/overlay border region
|
||||
alpha_op_ex add src_current src_texture
|
||||
}
|
||||
texture_unit Light
|
||||
{
|
||||
// apply lighting
|
||||
colour_op_ex modulate src_current src_diffuse
|
||||
alpha_op_ex modulate src_current src_diffuse
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
material GoldenShovel
|
||||
{
|
||||
receive_shadows on
|
||||
technique
|
||||
{
|
||||
pass
|
||||
{
|
||||
ambient 0.500000 0.500000 0.500000 1.000000
|
||||
diffuse 1.000000 1.000000 1.000000 1.000000
|
||||
specular 0.000000 0.000000 0.000000 1.000000 0.250000
|
||||
emissive 0.000000 0.000000 0.000000 1.000000
|
||||
texture_unit
|
||||
{
|
||||
texture GoldenShovel.jpg
|
||||
tex_address_mode wrap
|
||||
filtering trilinear
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 9.2 KiB |
|
@ -1,42 +0,0 @@
|
|||
/* Nachrichten fuers Intro */
|
||||
|
||||
func MessageBoxAll(string message, object talker, bool permanent)
|
||||
{
|
||||
if (permanent) permanent = "@"; else permanent = "";
|
||||
message = Format("%s<c %x>%s:</c> %s", permanent, talker->GetColor(), talker->GetName(), message);
|
||||
CustomMessage(message, nil, NO_OWNER, 150,150, nil, GUI_MenuDeco, GetPortraitDef(talker));
|
||||
}
|
||||
|
||||
func GetPortraitDef(object talker)
|
||||
{
|
||||
var portrait = talker.portrait;
|
||||
// Default definition has Clonk portrait
|
||||
// (Can't get default from skin, because there's no function GetSkin D:)
|
||||
if (!portrait || portrait == "" || portrait == "Clonk") return DialogueSimple;
|
||||
// Otherwise, bind portrait to an invisible object
|
||||
// (note: invisible object is leaked. can't really know when the message will be gone.)
|
||||
if (!talker.portrait_obj)
|
||||
{
|
||||
talker.portrait_obj = CreateObject(DialogueSimple);
|
||||
talker.portrait_obj->SetAction("Attach", talker);
|
||||
talker.portrait_obj->SetGraphics(portrait);
|
||||
talker.portrait_obj.Visibility = VIS_None;
|
||||
}
|
||||
return talker.portrait_obj;
|
||||
}
|
||||
|
||||
func AttachTargetLost() { return RemoveObject(); }
|
||||
|
||||
local ActMap=
|
||||
{
|
||||
Attach =
|
||||
{
|
||||
Prototype = Action,
|
||||
Name="Attach",
|
||||
Procedure=DFA_ATTACH,
|
||||
NextAction="Attach",
|
||||
Length=1,
|
||||
FacetBase=1,
|
||||
AbortCall = "AttachTargetLost"
|
||||
}
|
||||
};
|
|
@ -15,20 +15,12 @@ func Entrance()
|
|||
return _inherited(...);
|
||||
}
|
||||
|
||||
func QueryOnSell()
|
||||
{
|
||||
GameCallEx("OnTreasureSold", this);
|
||||
return false; // allow sale
|
||||
}
|
||||
|
||||
// returns the color of the gem (used for effects)
|
||||
func GetGemColor()
|
||||
{
|
||||
return RGB(0, Random(100), Random(100));
|
||||
}
|
||||
|
||||
public func IsValuable(){ return true; }
|
||||
|
||||
local Name = "$Name$";
|
||||
local Description = "$Description$";
|
||||
local Collectible = 1;
|
||||
|
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
|
@ -1,10 +1,12 @@
|
|||
/* Automatically created objects file */
|
||||
|
||||
static npc_dagobert, npc_tarzan, g_golden_shovel;
|
||||
|
||||
func InitializeObjects()
|
||||
{
|
||||
CreateObject(Grass, 1627, 396);
|
||||
CreateObject(Grass, 1636, 385);
|
||||
CreateObject(Grass, 1716, 366);
|
||||
CreateObject(Grass, 1786, 469);
|
||||
CreateObject(Grass, 1574, 493);
|
||||
CreateObject(Grass, 1564, 493);
|
||||
CreateObject(Grass, 1537, 525);
|
||||
|
@ -19,27 +21,25 @@ func InitializeObjects()
|
|||
var Chest0009 = CreateObject(Chest, 1002, 313);
|
||||
Chest0009.Plane = 50;
|
||||
|
||||
CreateObject(Goal_TreasureHunt, 0, 0);
|
||||
|
||||
CreateObject(Rule_TeamAccount, 0, 0);
|
||||
|
||||
CreateObject(Rule_NoPowerNeed, 0, 0);
|
||||
|
||||
var LargeCaveMushroom0015 = CreateObject(LargeCaveMushroom, 1308, 1038);
|
||||
LargeCaveMushroom0015->SetClrModulation(0xffe4effc);
|
||||
var LargeCaveMushroom0019 = CreateObject(LargeCaveMushroom, 1345, 1028);
|
||||
LargeCaveMushroom0019->SetClrModulation(0xffe1e3ee);
|
||||
LargeCaveMushroom0019->SetMeshMaterial("FlyAmanitaMushroom", 0);
|
||||
var LargeCaveMushroom0023 = CreateObject(LargeCaveMushroom, 1399, 1025);
|
||||
LargeCaveMushroom0023->SetClrModulation(0xfff3e3e7);
|
||||
LargeCaveMushroom0023->SetMeshMaterial("FlyAmanitaMushroom", 0);
|
||||
var LargeCaveMushroom0027 = CreateObject(LargeCaveMushroom, 1464, 999);
|
||||
LargeCaveMushroom0027->SetClrModulation(0xffe0e6dd);
|
||||
var LargeCaveMushroom0031 = CreateObject(LargeCaveMushroom, 1450, 1012);
|
||||
LargeCaveMushroom0031->SetClrModulation(0xffe4eae2);
|
||||
var LargeCaveMushroom0035 = CreateObject(LargeCaveMushroom, 1523, 993);
|
||||
LargeCaveMushroom0035->SetClrModulation(0xffe2deee);
|
||||
LargeCaveMushroom0035->SetMeshMaterial("FlyAmanitaMushroom", 0);
|
||||
var LargeCaveMushroom0013 = CreateObject(LargeCaveMushroom, 1308, 1038);
|
||||
LargeCaveMushroom0013->SetClrModulation(0xffe4effc);
|
||||
var LargeCaveMushroom0017 = CreateObject(LargeCaveMushroom, 1345, 1028);
|
||||
LargeCaveMushroom0017->SetClrModulation(0xffe1e3ee);
|
||||
LargeCaveMushroom0017->SetMeshMaterial("FlyAmanitaMushroom", 0);
|
||||
var LargeCaveMushroom0021 = CreateObject(LargeCaveMushroom, 1399, 1025);
|
||||
LargeCaveMushroom0021->SetClrModulation(0xfff3e3e7);
|
||||
LargeCaveMushroom0021->SetMeshMaterial("FlyAmanitaMushroom", 0);
|
||||
var LargeCaveMushroom0025 = CreateObject(LargeCaveMushroom, 1464, 999);
|
||||
LargeCaveMushroom0025->SetClrModulation(0xffe0e6dd);
|
||||
var LargeCaveMushroom0029 = CreateObject(LargeCaveMushroom, 1450, 1012);
|
||||
LargeCaveMushroom0029->SetClrModulation(0xffe4eae2);
|
||||
var LargeCaveMushroom0033 = CreateObject(LargeCaveMushroom, 1523, 993);
|
||||
LargeCaveMushroom0033->SetClrModulation(0xffe2deee);
|
||||
LargeCaveMushroom0033->SetMeshMaterial("FlyAmanitaMushroom", 0);
|
||||
|
||||
CreateObject(Trunk, 1000, 313);
|
||||
CreateObject(Trunk, 1006, 313);
|
||||
|
@ -65,223 +65,303 @@ func InitializeObjects()
|
|||
|
||||
CreateObject(EnvPack_Crate, 494, 385);
|
||||
|
||||
CreateObject(Fern, 1711, 368);
|
||||
CreateObject(Fern, 1793, 474);
|
||||
CreateObject(Fern, 1645, 384);
|
||||
CreateObject(Fern, 1525, 535);
|
||||
|
||||
var Rank0068 = CreateObject(Rank, 1320, 326);
|
||||
Rank0068->SetR(148);
|
||||
Rank0068->SetPosition(1320, 326);
|
||||
var Rank0069 = CreateObject(Rank, 1327, 298);
|
||||
Rank0069->SetR(165);
|
||||
Rank0069->SetPosition(1327, 298);
|
||||
var Rank0070 = CreateObject(Rank, 1424, 257);
|
||||
Rank0070->SetR(108);
|
||||
Rank0070->SetPosition(1424, 257);
|
||||
var Rank0071 = CreateObject(Rank, 1430, 248);
|
||||
Rank0071->SetR(39);
|
||||
Rank0071->SetPosition(1430, 246);
|
||||
var Rank0072 = CreateObject(Rank, 1413, 262);
|
||||
Rank0072->SetR(128);
|
||||
Rank0072->SetPosition(1413, 262);
|
||||
var Rank0073 = CreateObject(Rank, 1396, 263);
|
||||
Rank0073->SetR(-131);
|
||||
Rank0073->SetPosition(1396, 263);
|
||||
var Rank0066 = CreateObject(Rank, 1320, 326);
|
||||
Rank0066->SetR(148);
|
||||
Rank0066->SetPosition(1320, 326);
|
||||
var Rank0067 = CreateObject(Rank, 1327, 298);
|
||||
Rank0067->SetR(165);
|
||||
Rank0067->SetPosition(1327, 298);
|
||||
var Rank0068 = CreateObject(Rank, 1424, 257);
|
||||
Rank0068->SetR(108);
|
||||
Rank0068->SetPosition(1424, 257);
|
||||
var Rank0069 = CreateObject(Rank, 1430, 248);
|
||||
Rank0069->SetR(39);
|
||||
Rank0069->SetPosition(1430, 246);
|
||||
var Rank0070 = CreateObject(Rank, 1413, 262);
|
||||
Rank0070->SetR(128);
|
||||
Rank0070->SetPosition(1413, 262);
|
||||
var Rank0071 = CreateObject(Rank, 1396, 263);
|
||||
Rank0071->SetR(-131);
|
||||
Rank0071->SetPosition(1396, 263);
|
||||
|
||||
CreateObject(SproutBerryBush, 1823, 493);
|
||||
|
||||
CreateObject(Trunk, 401, 1147);
|
||||
|
||||
CreateObject(Tree_Coconut, 78, 1152);
|
||||
CreateObject(Tree_Coconut, 332, 1150);
|
||||
CreateObject(Tree_Coconut, 51, 1142);
|
||||
CreateObject(Tree_Coconut, 333, 1150);
|
||||
|
||||
CreateObject(Tree_Coniferous, 1864, 464);
|
||||
CreateObject(Tree_Coniferous, 2788, 679);
|
||||
CreateObject(Tree_Coniferous, 2788, 680);
|
||||
|
||||
var Lichen0095 = CreateObject(Lichen, 2694, 706);
|
||||
Lichen0095->SetAction("Grown");
|
||||
var Lichen0093 = CreateObject(Lichen, 2694, 706);
|
||||
Lichen0093->SetAction("Grown");
|
||||
|
||||
CreateObject(BigRock, 1301, 500);
|
||||
CreateObject(BigRock, 1207, 282);
|
||||
CreateObject(BigRock, 1291, 263);
|
||||
|
||||
var Amethyst0101 = CreateObject(Amethyst, 803, 583);
|
||||
Amethyst0101.Plane = 190;
|
||||
var Amethyst0099 = CreateObject(Amethyst, 803, 583);
|
||||
Amethyst0099.Plane = 190;
|
||||
|
||||
var Chest0103 = CreateObject(Chest, 515, 966);
|
||||
Chest0103.tool_spawn = TeleGlove;
|
||||
var Chest0104 = CreateObject(Chest, 227, 760);
|
||||
Chest0104.tool_spawn = Pickaxe;
|
||||
var Chest0105 = CreateObject(Chest, 634, 902);
|
||||
Chest0105.tool_spawn = GrappleBow;
|
||||
var Chest0106 = CreateObject(Chest, 616, 903);
|
||||
Chest0106.tool_spawn = GrappleBow;
|
||||
var Chest0107 = CreateObject(Chest, 472, 455);
|
||||
var Chest0108 = CreateObject(Chest, 546, 383);
|
||||
var Chest0109 = CreateObject(Chest, 840, 47);
|
||||
Chest0109.tool_spawn = WindBag;
|
||||
var Chest0110 = CreateObject(Chest, 853, 1574);
|
||||
var Chest0111 = CreateObject(Chest, 1428, 1542);
|
||||
var Chest0112 = CreateObject(Chest, 1765, 1191);
|
||||
var Chest0113 = CreateObject(Chest, 1878, 719);
|
||||
Chest0113.tool_spawn = Axe;
|
||||
var Chest0114 = CreateObject(Chest, 1943, 714);
|
||||
var Chest0115 = CreateObject(Chest, 2103, 1119);
|
||||
var Chest0116 = CreateObject(Chest, 397, 583);
|
||||
var Chest0117 = CreateObject(Chest, 871, 583);
|
||||
Chest0117->SetMeshMaterial("GoldenChest", 0);
|
||||
var Chest0118 = CreateObject(Chest, 12, 39);
|
||||
var Chest0119 = CreateObject(Chest, 2786, 55);
|
||||
var Chest0120 = CreateObject(Chest, 1830, 486);
|
||||
Chest0120.tool_spawn = Hammer;
|
||||
var Chest0121 = CreateObject(Chest, 730, 135);
|
||||
var Chest0122 = CreateObject(Chest, 1626, 1590);
|
||||
var Chest0101 = CreateObject(Chest, 515, 967);
|
||||
Chest0101.tool_spawn = TeleGlove;
|
||||
var Chest0102 = CreateObject(Chest, 227, 760);
|
||||
Chest0102.tool_spawn = Pickaxe;
|
||||
var Chest0103 = CreateObject(Chest, 624, 943);
|
||||
Chest0103.tool_spawn = GrappleBow;
|
||||
var Chest0104 = CreateObject(Chest, 603, 942);
|
||||
Chest0104.tool_spawn = GrappleBow;
|
||||
var Chest0105 = CreateObject(Chest, 472, 455);
|
||||
var Chest0106 = CreateObject(Chest, 546, 383);
|
||||
var Chest0107 = CreateObject(Chest, 840, 47);
|
||||
Chest0107.tool_spawn = WindBag;
|
||||
var Chest0108 = CreateObject(Chest, 853, 1574);
|
||||
var Chest0109 = CreateObject(Chest, 1428, 1542);
|
||||
var Chest0110 = CreateObject(Chest, 1765, 1191);
|
||||
var Chest0111 = CreateObject(Chest, 1878, 719);
|
||||
Chest0111.tool_spawn = Axe;
|
||||
var Chest0112 = CreateObject(Chest, 1943, 714);
|
||||
var Chest0113 = CreateObject(Chest, 2103, 1119);
|
||||
var Chest0114 = CreateObject(Chest, 397, 583);
|
||||
var Chest0115 = CreateObject(Chest, 871, 583);
|
||||
Chest0115->SetMeshMaterial("GoldenChest", 0);
|
||||
var Chest0116 = CreateObject(Chest, 12, 39);
|
||||
var Chest0117 = CreateObject(Chest, 2786, 55);
|
||||
var Chest0118 = CreateObject(Chest, 1830, 486);
|
||||
Chest0118.tool_spawn = Hammer;
|
||||
var Chest0119 = CreateObject(Chest, 730, 135);
|
||||
var Chest0120 = CreateObject(Chest, 1626, 1591);
|
||||
|
||||
var StoneDoor0123 = CreateObject(StoneDoor, 940, 1151);
|
||||
var StoneDoor0121 = CreateObject(StoneDoor, 940, 1151);
|
||||
StoneDoor0121->SetComDir(COMD_Down);
|
||||
StoneDoor0121->MakeInvincible();
|
||||
var StoneDoor0123 = CreateObject(StoneDoor, 1084, 1151);
|
||||
StoneDoor0123->SetComDir(COMD_Down);
|
||||
StoneDoor0123->MakeInvincible();
|
||||
var StoneDoor0125 = CreateObject(StoneDoor, 1092, 1151);
|
||||
var StoneDoor0125 = CreateObject(StoneDoor, 564, 455);
|
||||
StoneDoor0125->SetComDir(COMD_Down);
|
||||
StoneDoor0125->MakeInvincible();
|
||||
var StoneDoor0127 = CreateObject(StoneDoor, 564, 455);
|
||||
var StoneDoor0127 = CreateObject(StoneDoor, 843, 735);
|
||||
StoneDoor0127->SetComDir(COMD_Down);
|
||||
StoneDoor0127->MakeInvincible();
|
||||
var StoneDoor0129 = CreateObject(StoneDoor, 843, 735);
|
||||
var StoneDoor0129 = CreateObject(StoneDoor, 1058, 719);
|
||||
StoneDoor0129->SetComDir(COMD_Down);
|
||||
StoneDoor0129->MakeInvincible();
|
||||
var StoneDoor0131 = CreateObject(StoneDoor, 1058, 719);
|
||||
var StoneDoor0131 = CreateObject(StoneDoor, 1092, 1047);
|
||||
StoneDoor0131->SetComDir(COMD_Down);
|
||||
StoneDoor0131->MakeInvincible();
|
||||
var StoneDoor0133 = CreateObject(StoneDoor, 1092, 1047);
|
||||
var StoneDoor0133 = CreateObject(StoneDoor, 1892, 951);
|
||||
StoneDoor0133->SetComDir(COMD_Down);
|
||||
StoneDoor0133->MakeInvincible();
|
||||
var StoneDoor0135 = CreateObject(StoneDoor, 1892, 951);
|
||||
var StoneDoor0135 = CreateObject(StoneDoor, 813, 735);
|
||||
StoneDoor0135->SetComDir(COMD_Down);
|
||||
StoneDoor0135->MakeInvincible();
|
||||
var StoneDoor0137 = CreateObject(StoneDoor, 813, 735);
|
||||
var StoneDoor0137 = CreateObject(StoneDoor, 781, 735);
|
||||
StoneDoor0137->SetComDir(COMD_Down);
|
||||
StoneDoor0137->MakeInvincible();
|
||||
var StoneDoor0139 = CreateObject(StoneDoor, 781, 735);
|
||||
StoneDoor0139->SetComDir(COMD_Down);
|
||||
StoneDoor0139->SetClrModulation(0xffa0a0a0);
|
||||
var StoneDoor0140 = CreateObject(StoneDoor, 692, 767);
|
||||
StoneDoor0137->SetClrModulation(0xffa0a0a0);
|
||||
var StoneDoor0138 = CreateObject(StoneDoor, 692, 767);
|
||||
StoneDoor0138->SetComDir(COMD_Down);
|
||||
StoneDoor0138->MakeInvincible();
|
||||
var StoneDoor0140 = CreateObject(StoneDoor, 684, 351);
|
||||
StoneDoor0140->SetComDir(COMD_Down);
|
||||
StoneDoor0140->MakeInvincible();
|
||||
var StoneDoor0142 = CreateObject(StoneDoor, 684, 350);
|
||||
StoneDoor0142->SetComDir(COMD_Down);
|
||||
StoneDoor0142->MakeInvincible();
|
||||
|
||||
var SpinWheel0144 = CreateObject(SpinWheel, 589, 457);
|
||||
SpinWheel0144->SetMeshMaterial("SpinWheelGearRed", 0);
|
||||
SpinWheel0144->SetStoneDoor(StoneDoor0123);
|
||||
var SpinWheel0145 = CreateObject(SpinWheel, 611, 456);
|
||||
SpinWheel0145->SetMeshMaterial("SpinWheelGearBlue", 0);
|
||||
SpinWheel0145->SetStoneDoor(StoneDoor0125);
|
||||
var SpinWheel0146 = CreateObject(SpinWheel, 619, 410);
|
||||
SpinWheel0146->SetMeshMaterial("SpinWheelBaseAlt", 1);
|
||||
SpinWheel0146->SetStoneDoor(StoneDoor0127);
|
||||
var SpinWheel0147 = CreateObject(SpinWheel, 1223, 1553);
|
||||
SpinWheel0147->SetStoneDoor(StoneDoor0131);
|
||||
var SpinWheel0148 = CreateObject(SpinWheel, 1117, 1048);
|
||||
SpinWheel0148->SetStoneDoor(StoneDoor0133);
|
||||
var SpinWheel0149 = CreateObject(SpinWheel, 2761, 690);
|
||||
var SpinWheel0142 = CreateObject(SpinWheel, 589, 457);
|
||||
SpinWheel0142->SetMeshMaterial("SpinWheelGearRed", 0);
|
||||
SpinWheel0142->SetStoneDoor(StoneDoor0121);
|
||||
var SpinWheel0143 = CreateObject(SpinWheel, 611, 456);
|
||||
SpinWheel0143->SetMeshMaterial("SpinWheelGearBlue", 0);
|
||||
SpinWheel0143->SetStoneDoor(StoneDoor0123);
|
||||
var SpinWheel0144 = CreateObject(SpinWheel, 619, 410);
|
||||
SpinWheel0144->SetMeshMaterial("SpinWheelBaseAlt", 1);
|
||||
SpinWheel0144->SetStoneDoor(StoneDoor0125);
|
||||
var SpinWheel0145 = CreateObject(SpinWheel, 1223, 1553);
|
||||
SpinWheel0145->SetStoneDoor(StoneDoor0129);
|
||||
var SpinWheel0146 = CreateObject(SpinWheel, 1117, 1048);
|
||||
SpinWheel0146->SetStoneDoor(StoneDoor0131);
|
||||
var SpinWheel0147 = CreateObject(SpinWheel, 2761, 690);
|
||||
SpinWheel0147->SetMeshMaterial("SpinWheelBaseAlt", 1);
|
||||
SpinWheel0147->SetStoneDoor(StoneDoor0135);
|
||||
var SpinWheel0148 = CreateObject(SpinWheel, 1850, 1463);
|
||||
SpinWheel0148->SetMeshMaterial("SpinWheelGearRed", 0);
|
||||
SpinWheel0148->SetMeshMaterial("SpinWheelBaseAlt", 1);
|
||||
SpinWheel0148->SetStoneDoor(StoneDoor0127);
|
||||
var SpinWheel0149 = CreateObject(SpinWheel, 2793, 1521);
|
||||
SpinWheel0149->SetMeshMaterial("SpinWheelGearRed", 0);
|
||||
SpinWheel0149->SetMeshMaterial("SpinWheelBaseAlt", 1);
|
||||
SpinWheel0149->SetStoneDoor(StoneDoor0137);
|
||||
var SpinWheel0150 = CreateObject(SpinWheel, 1850, 1463);
|
||||
SpinWheel0150->SetMeshMaterial("SpinWheelGearRed", 0);
|
||||
SpinWheel0150->SetMeshMaterial("SpinWheelBaseAlt", 1);
|
||||
SpinWheel0150->SetStoneDoor(StoneDoor0129);
|
||||
var SpinWheel0151 = CreateObject(SpinWheel, 2793, 1521);
|
||||
SpinWheel0151->SetMeshMaterial("SpinWheelGearRed", 0);
|
||||
SpinWheel0149->SetStoneDoor(StoneDoor0133);
|
||||
var SpinWheel0150 = CreateObject(SpinWheel, 830, 735);
|
||||
SpinWheel0150->SetStoneDoor(StoneDoor0138);
|
||||
var SpinWheel0151 = CreateObject(SpinWheel, 703, 352);
|
||||
SpinWheel0151->SetMeshMaterial("SpinWheelBaseAlt", 1);
|
||||
SpinWheel0151->SetStoneDoor(StoneDoor0135);
|
||||
var SpinWheel0152 = CreateObject(SpinWheel, 830, 735);
|
||||
SpinWheel0152->SetStoneDoor(StoneDoor0140);
|
||||
var SpinWheel0153 = CreateObject(SpinWheel, 703, 352);
|
||||
SpinWheel0153->SetMeshMaterial("SpinWheelBaseAlt", 1);
|
||||
SpinWheel0153->SetStoneDoor(StoneDoor0142);
|
||||
SpinWheel0151->SetStoneDoor(StoneDoor0140);
|
||||
|
||||
CreateObject(Pump, 1027, 1152);
|
||||
|
||||
CreateObject(Sawmill, 1259, 1047);
|
||||
|
||||
var ToolsWorkshop0158 = CreateObject(ToolsWorkshop, 1169, 903);
|
||||
var ToolsWorkshop0156 = CreateObject(ToolsWorkshop, 1169, 903);
|
||||
|
||||
var Column0160 = CreateObject(Column, 779, 488);
|
||||
Column0160->SetR(180);
|
||||
Column0160->SetClrModulation(0xffffd0d0);
|
||||
Column0160->SetMeshMaterial("AncientColumn", 0);
|
||||
Column0160->SetPosition(779, 488);
|
||||
var Column0161 = CreateObject(Column, 1419, 217);
|
||||
Column0161->SetMeshMaterial("AncientColumn", 0);
|
||||
var Column0158 = CreateObject(Column, 779, 488);
|
||||
Column0158->SetR(180);
|
||||
Column0158->SetClrModulation(0xffffd0d0);
|
||||
Column0158->SetMeshMaterial("AncientColumn", 0);
|
||||
Column0158->SetPosition(779, 488);
|
||||
var Column0159 = CreateObject(Column, 1419, 217);
|
||||
Column0159->SetMeshMaterial("AncientColumn", 0);
|
||||
CreateObject(Column, 1386, 616);
|
||||
|
||||
CreateObject(Ruin_Windmill, 1672, 377);
|
||||
CreateObject(Ruin_Windmill, 1678, 375);
|
||||
|
||||
CreateObject(Ruin_WoodenCabin, 1199, 1046);
|
||||
|
||||
var Idol0165 = CreateObject(Idol, 1045, 721);
|
||||
Idol0165->SetMeshMaterial("IdolGrayColor", 0);
|
||||
var Idol0163 = CreateObject(Idol, 1045, 721);
|
||||
Idol0163->SetMeshMaterial("IdolGrayColor", 0);
|
||||
|
||||
var LotsOfCoins0166 = CreateObject(LotsOfCoins, 805, 592);
|
||||
LotsOfCoins0166.Plane = 200;
|
||||
var Flagpole0165 = CreateObject(Flagpole, 210, 1185);
|
||||
Flagpole0165->SetCategory(C4D_StaticBack);
|
||||
Flagpole0165->SetColor(0xfffcf41c);
|
||||
|
||||
var Idol0167 = CreateObject(Idol, 824, 583);
|
||||
Idol0167->SetR(-4);
|
||||
Idol0167.Plane = 220;
|
||||
Idol0167->SetPosition(824, 568);
|
||||
var LotsOfCoins0164 = CreateObject(LotsOfCoins, 805, 592);
|
||||
LotsOfCoins0164.Plane = 200;
|
||||
|
||||
var Lorry0168 = CreateObject(Lorry, 200, 1183);
|
||||
var Lorry0170 = CreateObject(Lorry, 708, 1407);
|
||||
Lorry0170->SetMeshMaterial("RuinedLorry", 0);
|
||||
var Idol0230 = CreateObject(Idol, 824, 583);
|
||||
Idol0230->SetR(-4);
|
||||
Idol0230.Plane = 220;
|
||||
Idol0230->SetPosition(824, 568);
|
||||
|
||||
var Catapult0172 = CreateObject(Catapult, 1714, 951);
|
||||
Catapult0172->SetRDir(-2);
|
||||
var Lorry0231 = CreateObject(Lorry, 200, 1183);
|
||||
var Lorry0233 = CreateObject(Lorry, 708, 1407);
|
||||
Lorry0233->SetMeshMaterial("RuinedLorry", 0);
|
||||
|
||||
var Catapult0235 = CreateObject(Catapult, 1714, 951);
|
||||
Catapult0235->SetRDir(2);
|
||||
|
||||
CreateObject(StrawMan, 1924, 439);
|
||||
CreateObject(StrawMan, 2642, 705);
|
||||
|
||||
var Clonk0175 = CreateObject(Clonk, 316, 430);
|
||||
Clonk0175->SetColor(0xff);
|
||||
S2AI->AddAI(Clonk0175);
|
||||
S2AI->SetHome(Clonk0175, 315, 422, DIR_Left);
|
||||
S2AI->SetGuardRange(Clonk0175, 296, 322, 350, 140);
|
||||
S2AI->SetEncounterCB(Clonk0175, "EncounterCastle");
|
||||
Clonk0175->SetDir(DIR_Left);
|
||||
var Clonk0182 = CreateObject(Clonk, 501, 455);
|
||||
Clonk0182->SetDir(DIR_Right);
|
||||
Clonk0182->SetColor(0xff);
|
||||
S2AI->AddAI(Clonk0182);
|
||||
S2AI->SetHome(Clonk0182, 502, 445, DIR_Right);
|
||||
S2AI->SetGuardRange(Clonk0182, 460, 300, 200, 160);
|
||||
S2AI->SetMaxAggroDistance(Clonk0182, 60);
|
||||
var Clonk0189 = CreateObject(Clonk, 534, 454);
|
||||
Clonk0189->SetDir(DIR_Right);
|
||||
Clonk0189->SetColor(0xff);
|
||||
S2AI->AddAI(Clonk0189);
|
||||
S2AI->SetHome(Clonk0189, 534, 446, DIR_Right);
|
||||
S2AI->SetGuardRange(Clonk0189, 460, 300, 200, 160);
|
||||
S2AI->SetMaxAggroDistance(Clonk0189, 60);
|
||||
var Clonk0196 = CreateObject(Clonk, 671, 638);
|
||||
Clonk0196->SetDir(DIR_Right);
|
||||
Clonk0196->SetCon(150);
|
||||
Clonk0196->SetColor(0xffffa000);
|
||||
S2AI->AddAI(Clonk0196);
|
||||
S2AI->SetHome(Clonk0196, 671, 629, DIR_Right);
|
||||
S2AI->SetGuardRange(Clonk0196, 580, 480, 320, 175);
|
||||
S2AI->SetEncounterCB(Clonk0196, "EncounterFinal");
|
||||
var Clonk0238 = CreateObject(Clonk, 316, 430);
|
||||
Clonk0238->SetColor(0xff);
|
||||
S2AI->AddAI(Clonk0238);
|
||||
S2AI->SetHome(Clonk0238, 315, 422, DIR_Left);
|
||||
S2AI->SetGuardRange(Clonk0238, 296, 322, 350, 140);
|
||||
S2AI->SetEncounterCB(Clonk0238, "EncounterCastle");
|
||||
Clonk0238->SetDir(DIR_Left);
|
||||
var Clonk0245 = CreateObject(Clonk, 501, 455);
|
||||
Clonk0245->SetDir(DIR_Right);
|
||||
Clonk0245->SetColor(0xff);
|
||||
S2AI->AddAI(Clonk0245);
|
||||
S2AI->SetHome(Clonk0245, 502, 445, DIR_Right);
|
||||
S2AI->SetGuardRange(Clonk0245, 460, 300, 200, 160);
|
||||
S2AI->SetMaxAggroDistance(Clonk0245, 60);
|
||||
var Clonk0252 = CreateObject(Clonk, 534, 454);
|
||||
Clonk0252->SetDir(DIR_Right);
|
||||
Clonk0252->SetColor(0xff);
|
||||
S2AI->AddAI(Clonk0252);
|
||||
S2AI->SetHome(Clonk0252, 534, 446, DIR_Right);
|
||||
S2AI->SetGuardRange(Clonk0252, 460, 300, 200, 160);
|
||||
S2AI->SetMaxAggroDistance(Clonk0252, 60);
|
||||
var Clonk0259 = CreateObject(Clonk, 671, 638);
|
||||
Clonk0259->SetDir(DIR_Right);
|
||||
Clonk0259->SetCon(150);
|
||||
Clonk0259->SetColor(0xffffa000);
|
||||
S2AI->AddAI(Clonk0259);
|
||||
S2AI->SetHome(Clonk0259, 671, 629, DIR_Right);
|
||||
S2AI->SetGuardRange(Clonk0259, 580, 480, 320, 175);
|
||||
S2AI->SetEncounterCB(Clonk0259, "EncounterFinal");
|
||||
npc_dagobert = CreateObject(Clonk, 369, 1143);
|
||||
npc_dagobert->SetColor(0xffa000);
|
||||
npc_dagobert->SetName("Scrooge");
|
||||
npc_dagobert.StaticSaveVar = "npc_dagobert";
|
||||
npc_dagobert->MakeInvincible();
|
||||
npc_dagobert->SetDir(DIR_Left);
|
||||
var Clonk0273 = CreateObject(Clonk, 1720, 375);
|
||||
Clonk0273->SetDir(DIR_Right);
|
||||
Clonk0273->SetColor(0x808080);
|
||||
Clonk0273->SetName("Otto");
|
||||
Clonk0273->SetSkin(2);
|
||||
var Clonk0280 = CreateObject(Clonk, 1868, 950);
|
||||
Clonk0280->SetColor(0xff0000);
|
||||
Clonk0280->SetName("Donald");
|
||||
Clonk0280->SetDir(DIR_Left);
|
||||
var Clonk0286 = CreateObject(Clonk, 676, 942);
|
||||
Clonk0286->SetDir(DIR_Right);
|
||||
Clonk0286->SetColor(0x802000);
|
||||
Clonk0286->SetName("Jane");
|
||||
Clonk0286->SetSkin(1);
|
||||
npc_tarzan = CreateObject(Clonk, 751, 875);
|
||||
npc_tarzan->SetXDir(3);
|
||||
npc_tarzan->SetYDir(-1);
|
||||
npc_tarzan->SetColor(0x402000);
|
||||
npc_tarzan->SetName("Tarzan");
|
||||
npc_tarzan.StaticSaveVar = "npc_tarzan";
|
||||
npc_tarzan->SetDir(DIR_Left);
|
||||
var Clonk0299 = CreateObject(Clonk, 498, 967);
|
||||
Clonk0299->SetColor(0x20ffff);
|
||||
Clonk0299->SetName("Sophie");
|
||||
Clonk0299->SetSkin(3);
|
||||
Clonk0299->SetDir(DIR_Left);
|
||||
var Clonk0306 = CreateObject(Clonk, 853, 735);
|
||||
Clonk0306->SetDir(DIR_Right);
|
||||
Clonk0306->SetColor(0x6000);
|
||||
Clonk0306->SetName("Riku");
|
||||
Clonk0306->SetSkin(2);
|
||||
var Clonk0313 = CreateObject(Clonk, 1098, 1150);
|
||||
Clonk0313->SetDir(DIR_Right);
|
||||
Clonk0313->SetColor(0x800000);
|
||||
Clonk0313->SetName("Ann");
|
||||
Clonk0313->SetSkin(3);
|
||||
|
||||
npc_dagobert->SetDialogue("Dagobert",true);
|
||||
Clonk0273->SetDialogue("Otto",true);
|
||||
|
||||
var GrappleBow0335 = npc_tarzan->CreateContents(GrappleBow);
|
||||
var GrappleBow0333 = npc_tarzan->CreateContents(GrappleBow);
|
||||
|
||||
npc_tarzan->SetDialogue("Tarzan",false);
|
||||
Clonk0286->SetDialogue("Jane",true);
|
||||
Clonk0280->SetDialogue("Donald",true);
|
||||
|
||||
var TeleGlove0325 = Clonk0299->CreateContents(TeleGlove);
|
||||
|
||||
Clonk0299->SetDialogue("Sophie",true);
|
||||
Clonk0306->SetDialogue("Riku",true);
|
||||
|
||||
var Pickaxe0320 = Clonk0313->CreateContents(Pickaxe);
|
||||
|
||||
Clonk0313->SetDialogue("Ann",true);
|
||||
|
||||
CreateObject(Skull, 53, 1138);
|
||||
|
||||
var Bone0204 = CreateObject(Bone, 35, 1135);
|
||||
Bone0204->SetR(-45);
|
||||
Bone0204->SetPosition(35, 1135);
|
||||
CreateObject(Bone, 46, 1138);
|
||||
var Bone0344 = CreateObject(Bone, 25, 1141);
|
||||
Bone0344->SetR(-69);
|
||||
Bone0344->SetPosition(25, 1139);
|
||||
var Bone0345 = CreateObject(Bone, 48, 1135);
|
||||
Bone0345->SetR(-51);
|
||||
Bone0345->SetPosition(48, 1135);
|
||||
var Bone0346 = CreateObject(Bone, 472, 963);
|
||||
Bone0346->SetR(-52);
|
||||
Bone0346->SetRDir(-7);
|
||||
Bone0346->SetPosition(472, 962);
|
||||
var Bone0347 = CreateObject(Bone, 488, 962);
|
||||
Bone0347->SetR(-51);
|
||||
Bone0347->SetPosition(488, 962);
|
||||
var Bone0348 = CreateObject(Bone, 479, 962);
|
||||
Bone0348->SetR(-51);
|
||||
Bone0348->SetPosition(479, 962);
|
||||
var Bone0349 = CreateObject(Bone, 464, 963);
|
||||
Bone0349->SetR(-51);
|
||||
Bone0349->SetPosition(464, 963);
|
||||
|
||||
Lorry0168->CreateContents(Loam);
|
||||
Lorry0168->CreateContents(Loam);
|
||||
Lorry0168->CreateContents(Loam);
|
||||
Lorry0168->CreateContents(Loam);
|
||||
Lorry0231->CreateContents(Loam);
|
||||
Lorry0231->CreateContents(Loam);
|
||||
Lorry0231->CreateContents(Loam);
|
||||
Lorry0231->CreateContents(Loam);
|
||||
CreateObject(Loam, 153, 1235);
|
||||
CreateObject(Loam, 357, 1320);
|
||||
CreateObject(Loam, 265, 1454);
|
||||
|
@ -301,173 +381,175 @@ func InitializeObjects()
|
|||
CreateObject(Loam, 1578, 527);
|
||||
CreateObject(Loam, 1746, 459);
|
||||
|
||||
var Metal0228 = CreateObject(Metal, 1922, 978);
|
||||
Metal0228->SetR(20);
|
||||
Metal0228->SetPosition(1922, 976);
|
||||
var Metal0372 = CreateObject(Metal, 1922, 978);
|
||||
Metal0372->SetR(20);
|
||||
Metal0372->SetPosition(1922, 976);
|
||||
|
||||
var Nugget0229 = CreateObject(Nugget, 812, 590);
|
||||
Nugget0229->SetClrModulation(0xffffd0a0);
|
||||
var Nugget0373 = CreateObject(Nugget, 812, 590);
|
||||
Nugget0373->SetClrModulation(0xffffd0a0);
|
||||
CreateObject(Nugget, 869, 583);
|
||||
var Nugget0231 = CreateObject(Nugget, 853, 584);
|
||||
Nugget0231->SetClrModulation(0xffffd0a0);
|
||||
var Nugget0232 = CreateObject(Nugget, 823, 584);
|
||||
Nugget0232->SetClrModulation(0xffffd0a0);
|
||||
var Nugget0375 = CreateObject(Nugget, 853, 584);
|
||||
Nugget0375->SetClrModulation(0xffffd0a0);
|
||||
var Nugget0376 = CreateObject(Nugget, 823, 584);
|
||||
Nugget0376->SetClrModulation(0xffffd0a0);
|
||||
|
||||
Chest0108->CreateContents(GoldBar);
|
||||
Chest0112->CreateContents(GoldBar);
|
||||
Chest0111->CreateContents(GoldBar);
|
||||
Chest0106->CreateContents(GoldBar);
|
||||
Chest0110->CreateContents(GoldBar);
|
||||
Lorry0170->CreateContents(GoldBar);
|
||||
Chest0109->CreateContents(GoldBar);
|
||||
Chest0108->CreateContents(GoldBar);
|
||||
Lorry0233->CreateContents(GoldBar);
|
||||
Chest0107->CreateContents(GoldBar);
|
||||
Chest0112->CreateContents(GoldBar);
|
||||
Chest0113->CreateContents(GoldBar);
|
||||
Chest0114->CreateContents(GoldBar);
|
||||
Chest0115->CreateContents(GoldBar);
|
||||
Chest0116->CreateContents(GoldBar);
|
||||
var GoldBar0242 = Chest0009->CreateContents(GoldBar);
|
||||
GoldBar0242->SetR(-1);
|
||||
Chest0119->CreateContents(GoldBar);
|
||||
var GoldBar0244 = Chest0118->CreateContents(GoldBar);
|
||||
GoldBar0244->SetR(-97);
|
||||
var GoldBar0245 = Chest0121->CreateContents(GoldBar);
|
||||
GoldBar0245->SetClrModulation(0xffffd0a0);
|
||||
GoldBar0245->SetR(-29);
|
||||
var GoldBar0246 = CreateObject(GoldBar, 880, 542);
|
||||
GoldBar0246->SetR(-29);
|
||||
GoldBar0246->SetClrModulation(0xffffd0a0);
|
||||
GoldBar0246->SetPosition(880, 540);
|
||||
ToolsWorkshop0158->CreateContents(GoldBar);
|
||||
var GoldBar0386 = Chest0009->CreateContents(GoldBar);
|
||||
GoldBar0386->SetR(-1);
|
||||
Chest0117->CreateContents(GoldBar);
|
||||
var GoldBar0388 = Chest0116->CreateContents(GoldBar);
|
||||
GoldBar0388->SetR(-97);
|
||||
var GoldBar0389 = Chest0119->CreateContents(GoldBar);
|
||||
GoldBar0389->SetClrModulation(0xffffd0a0);
|
||||
GoldBar0389->SetR(-29);
|
||||
var GoldBar0390 = CreateObject(GoldBar, 880, 542);
|
||||
GoldBar0390->SetR(-29);
|
||||
GoldBar0390->SetClrModulation(0xffffd0a0);
|
||||
GoldBar0390->SetPosition(880, 540);
|
||||
ToolsWorkshop0156->CreateContents(GoldBar);
|
||||
CreateObject(GoldBar, 72, 1463);
|
||||
CreateObject(GoldBar, 2746, 736);
|
||||
CreateObject(GoldBar, 2507, 1262);
|
||||
Chest0122->CreateContents(GoldBar);
|
||||
var GoldBar0252 = CreateObject(GoldBar, 972, 1280);
|
||||
GoldBar0252->SetR(55);
|
||||
GoldBar0252->SetPosition(972, 1277);
|
||||
var GoldBar0394 = CreateObject(GoldBar, 2507, 1262);
|
||||
GoldBar0394->SetR(-6);
|
||||
GoldBar0394->SetPosition(2507, 1262);
|
||||
Chest0120->CreateContents(GoldBar);
|
||||
var GoldBar0396 = CreateObject(GoldBar, 972, 1280);
|
||||
GoldBar0396->SetR(55);
|
||||
GoldBar0396->SetPosition(972, 1277);
|
||||
|
||||
CreateObject(Ruby, 864, 585);
|
||||
CreateObject(Ruby, 806, 587);
|
||||
CreateObject(Ruby, 849, 581);
|
||||
CreateObject(Ruby, 849, 582);
|
||||
CreateObject(Ruby, 856, 588);
|
||||
|
||||
var Amethyst0261 = CreateObject(Amethyst, 793, 587);
|
||||
Amethyst0261->SetR(21);
|
||||
Amethyst0261->SetPosition(793, 583);
|
||||
var Amethyst0405 = CreateObject(Amethyst, 793, 588);
|
||||
Amethyst0405->SetR(22);
|
||||
Amethyst0405->SetPosition(793, 584);
|
||||
CreateObject(Amethyst, 885, 561);
|
||||
CreateObject(Amethyst, 828, 585);
|
||||
|
||||
Lorry0168->CreateContents(Dynamite);
|
||||
Lorry0168->CreateContents(Dynamite);
|
||||
Chest0109->CreateContents(Dynamite);
|
||||
Chest0109->CreateContents(Dynamite);
|
||||
Chest0109->CreateContents(Dynamite);
|
||||
Lorry0231->CreateContents(Dynamite);
|
||||
Lorry0231->CreateContents(Dynamite);
|
||||
Chest0107->CreateContents(Dynamite);
|
||||
Chest0107->CreateContents(Dynamite);
|
||||
Chest0107->CreateContents(Dynamite);
|
||||
CreateObject(Dynamite, 1046, 722);
|
||||
Chest0106->CreateContents(Dynamite);
|
||||
Chest0105->CreateContents(Dynamite);
|
||||
Chest0106->CreateContents(Dynamite);
|
||||
Chest0105->CreateContents(Dynamite);
|
||||
Chest0104->CreateContents(Dynamite);
|
||||
Chest0103->CreateContents(Dynamite);
|
||||
Chest0111->CreateContents(Dynamite);
|
||||
Chest0111->CreateContents(Dynamite);
|
||||
Chest0111->CreateContents(Dynamite);
|
||||
Chest0114->CreateContents(Dynamite);
|
||||
Chest0114->CreateContents(Dynamite);
|
||||
Chest0114->CreateContents(Dynamite);
|
||||
Chest0104->CreateContents(Dynamite);
|
||||
Chest0103->CreateContents(Dynamite);
|
||||
Chest0101->CreateContents(Dynamite);
|
||||
Chest0109->CreateContents(Dynamite);
|
||||
Chest0109->CreateContents(Dynamite);
|
||||
Chest0109->CreateContents(Dynamite);
|
||||
Chest0112->CreateContents(Dynamite);
|
||||
Chest0112->CreateContents(Dynamite);
|
||||
Chest0112->CreateContents(Dynamite);
|
||||
|
||||
var Bow0284 = Clonk0175->CreateContents(Bow);
|
||||
var Bow0434 = Clonk0238->CreateContents(Bow);
|
||||
|
||||
var Arrow0285 = Bow0284->CreateContents(Arrow);
|
||||
Arrow0285->SetR(90);
|
||||
var Arrow0286 = Clonk0175->CreateContents(Arrow);
|
||||
Arrow0286->SetR(90);
|
||||
var Arrow0287 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0287->SetR(90);
|
||||
Arrow0287->SetPosition(313, 431);
|
||||
var Arrow0288 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0288->SetR(90);
|
||||
Arrow0288->SetPosition(313, 431);
|
||||
var Arrow0289 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0289->SetR(90);
|
||||
Arrow0289->SetPosition(313, 431);
|
||||
var Arrow0290 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0290->SetR(90);
|
||||
Arrow0290->SetPosition(313, 431);
|
||||
var Arrow0291 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0291->SetR(90);
|
||||
Arrow0291->SetPosition(313, 431);
|
||||
var Arrow0292 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0292->SetR(90);
|
||||
Arrow0292->SetPosition(313, 431);
|
||||
var Arrow0293 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0293->SetR(90);
|
||||
Arrow0293->SetPosition(313, 431);
|
||||
var Arrow0294 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0294->SetR(90);
|
||||
Arrow0294->SetPosition(313, 431);
|
||||
var Arrow0295 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0295->SetR(90);
|
||||
Arrow0295->SetPosition(313, 431);
|
||||
var Arrow0435 = Bow0434->CreateContents(Arrow);
|
||||
Arrow0435->SetR(90);
|
||||
var Arrow0436 = Clonk0238->CreateContents(Arrow);
|
||||
Arrow0436->SetR(90);
|
||||
var Arrow0437 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0437->SetR(90);
|
||||
Arrow0437->SetPosition(313, 431);
|
||||
var Arrow0438 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0438->SetR(90);
|
||||
Arrow0438->SetPosition(313, 431);
|
||||
var Arrow0439 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0439->SetR(90);
|
||||
Arrow0439->SetPosition(313, 431);
|
||||
var Arrow0440 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0440->SetR(90);
|
||||
Arrow0440->SetPosition(313, 431);
|
||||
var Arrow0441 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0441->SetR(90);
|
||||
Arrow0441->SetPosition(313, 431);
|
||||
var Arrow0442 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0442->SetR(90);
|
||||
Arrow0442->SetPosition(313, 431);
|
||||
var Arrow0443 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0443->SetR(90);
|
||||
Arrow0443->SetPosition(313, 431);
|
||||
var Arrow0444 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0444->SetR(90);
|
||||
Arrow0444->SetPosition(313, 431);
|
||||
var Arrow0445 = CreateObject(Arrow, 313, 431);
|
||||
Arrow0445->SetR(90);
|
||||
Arrow0445->SetPosition(313, 431);
|
||||
|
||||
Chest0107->CreateContents(Bread);
|
||||
Chest0107->CreateContents(Bread);
|
||||
Lorry0170->CreateContents(Bread);
|
||||
Lorry0170->CreateContents(Bread);
|
||||
Lorry0170->CreateContents(Bread);
|
||||
Chest0105->CreateContents(Bread);
|
||||
Chest0105->CreateContents(Bread);
|
||||
Lorry0233->CreateContents(Bread);
|
||||
Lorry0233->CreateContents(Bread);
|
||||
Lorry0233->CreateContents(Bread);
|
||||
|
||||
Chest0107->CreateContents(DynamiteBox);
|
||||
Chest0107->CreateContents(DynamiteBox);
|
||||
Chest0118->CreateContents(DynamiteBox);
|
||||
Chest0118->CreateContents(DynamiteBox);
|
||||
Chest0105->CreateContents(DynamiteBox);
|
||||
Chest0105->CreateContents(DynamiteBox);
|
||||
Chest0116->CreateContents(DynamiteBox);
|
||||
Chest0116->CreateContents(DynamiteBox);
|
||||
Chest0117->CreateContents(DynamiteBox);
|
||||
Chest0117->CreateContents(DynamiteBox);
|
||||
Chest0120->CreateContents(DynamiteBox);
|
||||
Chest0113->CreateContents(DynamiteBox);
|
||||
Chest0119->CreateContents(DynamiteBox);
|
||||
Chest0119->CreateContents(DynamiteBox);
|
||||
Chest0122->CreateContents(DynamiteBox);
|
||||
Chest0115->CreateContents(DynamiteBox);
|
||||
Chest0121->CreateContents(DynamiteBox);
|
||||
|
||||
Clonk0189->CreateContents(Sword);
|
||||
Clonk0182->CreateContents(Sword);
|
||||
Chest0109->CreateContents(Sword);
|
||||
Clonk0196->CreateContents(Sword);
|
||||
Clonk0196->CreateContents(Sword);
|
||||
Clonk0252->CreateContents(Sword);
|
||||
Clonk0245->CreateContents(Sword);
|
||||
Chest0107->CreateContents(Sword);
|
||||
Clonk0259->CreateContents(Sword);
|
||||
Clonk0259->CreateContents(Sword);
|
||||
|
||||
var Seaweed0315 = CreateObject(Seaweed, 2494, 1263);
|
||||
Seaweed0315->SetPhase(55);
|
||||
var Seaweed0318 = CreateObject(Seaweed, 2508, 1263);
|
||||
Seaweed0318->SetPhase(47);
|
||||
var Seaweed0321 = CreateObject(Seaweed, 2520, 1263);
|
||||
Seaweed0321->SetPhase(24);
|
||||
var Seaweed0324 = CreateObject(Seaweed, 2508, 1263);
|
||||
Seaweed0324->SetPhase(24);
|
||||
var Seaweed0327 = CreateObject(Seaweed, 2503, 1263);
|
||||
Seaweed0327->SetPhase(50);
|
||||
var Seaweed0330 = CreateObject(Seaweed, 2526, 1262);
|
||||
Seaweed0330->SetPhase(50);
|
||||
var Seaweed0333 = CreateObject(Seaweed, 2514, 1262);
|
||||
Seaweed0333->SetPhase(50);
|
||||
var Seaweed0336 = CreateObject(Seaweed, 2499, 1263);
|
||||
Seaweed0336->SetPhase(50);
|
||||
var Seaweed0339 = CreateObject(Seaweed, 2663, 1278);
|
||||
Seaweed0339->SetPhase(53);
|
||||
var Seaweed0342 = CreateObject(Seaweed, 2769, 1272);
|
||||
Seaweed0342->SetPhase(53);
|
||||
var Seaweed0345 = CreateObject(Seaweed, 2751, 1279);
|
||||
Seaweed0345->SetPhase(53);
|
||||
var Seaweed0348 = CreateObject(Seaweed, 2762, 1271);
|
||||
Seaweed0348->SetPhase(53);
|
||||
var Seaweed0351 = CreateObject(Seaweed, 2775, 1279);
|
||||
Seaweed0351->SetPhase(53);
|
||||
var Seaweed0354 = CreateObject(Seaweed, 2762, 1271);
|
||||
Seaweed0354->SetPhase(53);
|
||||
var Seaweed0357 = CreateObject(Seaweed, 2661, 1278);
|
||||
Seaweed0357->SetPhase(53);
|
||||
var Seaweed0360 = CreateObject(Seaweed, 2416, 1245);
|
||||
Seaweed0360->SetPhase(13);
|
||||
var Seaweed0363 = CreateObject(Seaweed, 2395, 1239);
|
||||
Seaweed0363->SetPhase(13);
|
||||
var Seaweed0366 = CreateObject(Seaweed, 2396, 1239);
|
||||
Seaweed0366->SetPhase(13);
|
||||
var Seaweed0369 = CreateObject(Seaweed, 2332, 1145);
|
||||
Seaweed0369->SetPhase(13);
|
||||
var Seaweed0372 = CreateObject(Seaweed, 2407, 1246);
|
||||
Seaweed0372->SetPhase(13);
|
||||
var Seaweed0465 = CreateObject(Seaweed, 2494, 1263);
|
||||
Seaweed0465->SetPhase(41);
|
||||
var Seaweed0468 = CreateObject(Seaweed, 2508, 1263);
|
||||
Seaweed0468->SetPhase(33);
|
||||
var Seaweed0471 = CreateObject(Seaweed, 2520, 1263);
|
||||
Seaweed0471->SetPhase(10);
|
||||
var Seaweed0474 = CreateObject(Seaweed, 2508, 1263);
|
||||
Seaweed0474->SetPhase(10);
|
||||
var Seaweed0477 = CreateObject(Seaweed, 2503, 1263);
|
||||
Seaweed0477->SetPhase(36);
|
||||
var Seaweed0480 = CreateObject(Seaweed, 2526, 1262);
|
||||
Seaweed0480->SetPhase(36);
|
||||
var Seaweed0483 = CreateObject(Seaweed, 2516, 1263);
|
||||
Seaweed0483->SetPhase(36);
|
||||
var Seaweed0486 = CreateObject(Seaweed, 2499, 1263);
|
||||
Seaweed0486->SetPhase(36);
|
||||
var Seaweed0489 = CreateObject(Seaweed, 2663, 1278);
|
||||
Seaweed0489->SetPhase(39);
|
||||
var Seaweed0492 = CreateObject(Seaweed, 2769, 1272);
|
||||
Seaweed0492->SetPhase(39);
|
||||
var Seaweed0495 = CreateObject(Seaweed, 2751, 1279);
|
||||
Seaweed0495->SetPhase(39);
|
||||
var Seaweed0498 = CreateObject(Seaweed, 2762, 1271);
|
||||
Seaweed0498->SetPhase(39);
|
||||
var Seaweed0501 = CreateObject(Seaweed, 2775, 1279);
|
||||
Seaweed0501->SetPhase(39);
|
||||
var Seaweed0504 = CreateObject(Seaweed, 2762, 1271);
|
||||
Seaweed0504->SetPhase(39);
|
||||
var Seaweed0507 = CreateObject(Seaweed, 2659, 1279);
|
||||
Seaweed0507->SetPhase(39);
|
||||
var Seaweed0510 = CreateObject(Seaweed, 2416, 1245);
|
||||
Seaweed0510->SetPhase(77);
|
||||
var Seaweed0513 = CreateObject(Seaweed, 2395, 1239);
|
||||
Seaweed0513->SetPhase(77);
|
||||
var Seaweed0516 = CreateObject(Seaweed, 2396, 1239);
|
||||
Seaweed0516->SetPhase(77);
|
||||
var Seaweed0519 = CreateObject(Seaweed, 2332, 1145);
|
||||
Seaweed0519->SetPhase(77);
|
||||
var Seaweed0522 = CreateObject(Seaweed, 2407, 1246);
|
||||
Seaweed0522->SetPhase(77);
|
||||
|
||||
CreateObject(Mushroom, 1580, 760);
|
||||
CreateObject(Mushroom, 1613, 776);
|
||||
|
@ -480,44 +562,50 @@ func InitializeObjects()
|
|||
|
||||
CreateObject(Balloon, 491, 383);
|
||||
|
||||
var Barrel0408 = CreateObject(Barrel, 623, 456);
|
||||
Barrel0408->SetColor(0xff000000);
|
||||
var Barrel0558 = CreateObject(Barrel, 623, 456);
|
||||
Barrel0558->SetColor(0xff000000);
|
||||
|
||||
CreateObject(Sproutberry, 1823, 488);
|
||||
CreateObject(Sproutberry, 1823, 488);
|
||||
CreateObject(Sproutberry, 1823, 488);
|
||||
|
||||
var LotsOfCoins0413 = CreateObject(LotsOfCoins, 838, 592);
|
||||
LotsOfCoins0413.Plane = 500;
|
||||
var Boompack0563 = CreateObject(Boompack, 543, 383);
|
||||
Boompack0563->SetColor(0xff);
|
||||
var Boompack0564 = CreateObject(Boompack, 548, 384);
|
||||
Boompack0564->SetColor(0xff);
|
||||
var Boompack0565 = CreateObject(Boompack, 1948, 713);
|
||||
Boompack0565->SetColor(0xff);
|
||||
var Boompack0566 = CreateObject(Boompack, 1944, 487);
|
||||
Boompack0566->SetR(135);
|
||||
Boompack0566->SetColor(0xff);
|
||||
Boompack0566->SetPosition(1944, 483);
|
||||
|
||||
var Boompack0448 = CreateObject(Boompack, 543, 383);
|
||||
Boompack0448->SetColor(0xff);
|
||||
var Boompack0468 = CreateObject(Boompack, 548, 384);
|
||||
Boompack0468->SetColor(0xff);
|
||||
var Boompack0470 = CreateObject(Boompack, 1948, 713);
|
||||
Boompack0470->SetColor(0xff);
|
||||
var Boompack0471 = CreateObject(Boompack, 1944, 487);
|
||||
Boompack0471->SetR(135);
|
||||
Boompack0471->SetColor(0xff);
|
||||
Boompack0471->SetPosition(1944, 483);
|
||||
g_golden_shovel = CreateObject(Shovel, 1841, 1011);
|
||||
g_golden_shovel->SetMeshMaterial("GoldenShovel", 0);
|
||||
g_golden_shovel.StaticSaveVar = "g_golden_shovel";
|
||||
|
||||
var GemOfPower0414 = CreateObject(GemOfPower, 825, 572);
|
||||
GemOfPower0414->SetCategory(C4D_StaticBack);
|
||||
CreateObject(Pipe, 1838, 1016);
|
||||
|
||||
CreateObject(Firestone, 564, 1135);
|
||||
CreateObject(Firestone, 552, 1135);
|
||||
CreateObject(Firestone, 562, 1135);
|
||||
CreateObject(Firestone, 571, 1135);
|
||||
CreateObject(Firestone, 567, 1135);
|
||||
CreateObject(Firestone, 558, 1135);
|
||||
CreateObject(Firestone, 546, 1135);
|
||||
CreateObject(Firestone, 560, 1135);
|
||||
CreateObject(Firestone, 546, 1135);
|
||||
CreateObject(Firestone, 546, 1135);
|
||||
CreateObject(Firestone, 555, 1135);
|
||||
CreateObject(Firestone, 562, 1135);
|
||||
CreateObject(Firestone, 550, 1135);
|
||||
CreateObject(Firestone, 552, 1135);
|
||||
var LotsOfCoins0567 = CreateObject(LotsOfCoins, 838, 592);
|
||||
LotsOfCoins0567.Plane = 500;
|
||||
|
||||
var GemOfPower0575 = CreateObject(GemOfPower, 825, 572);
|
||||
GemOfPower0575->SetCategory(C4D_StaticBack);
|
||||
|
||||
CreateObject(Firestone, 564, 1136);
|
||||
CreateObject(Firestone, 552, 1136);
|
||||
CreateObject(Firestone, 562, 1136);
|
||||
CreateObject(Firestone, 571, 1136);
|
||||
CreateObject(Firestone, 567, 1136);
|
||||
CreateObject(Firestone, 558, 1136);
|
||||
CreateObject(Firestone, 546, 1136);
|
||||
CreateObject(Firestone, 560, 1136);
|
||||
CreateObject(Firestone, 546, 1136);
|
||||
CreateObject(Firestone, 546, 1136);
|
||||
CreateObject(Firestone, 555, 1136);
|
||||
CreateObject(Firestone, 562, 1136);
|
||||
CreateObject(Firestone, 550, 1136);
|
||||
CreateObject(Firestone, 552, 1136);
|
||||
CreateObject(Firestone, 342, 1225);
|
||||
CreateObject(Firestone, 166, 1261);
|
||||
CreateObject(Firestone, 234, 1424);
|
||||
|
@ -536,5 +624,6 @@ func InitializeObjects()
|
|||
CreateObject(Firestone, 2161, 943);
|
||||
CreateObject(Firestone, 2073, 862);
|
||||
CreateObject(Firestone, 2064, 852);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
/**
|
||||
Treasure Hunt
|
||||
Find the treasure and sell it
|
||||
Find the treasure and swap it for a barrel of oil
|
||||
|
||||
@authors Sven2
|
||||
*/
|
||||
|
||||
static g_is_initialized; // set after first player join
|
||||
static g_max_player_num; // max number of players that were ever joined
|
||||
static g_plr_inventory; // array indexed by players: Array containing inventory of Clonk jsut before it died
|
||||
static g_plr_inventory; // array indexed by players: Array containing inventory of Clonk just before it died
|
||||
|
||||
static npc_pyrit, npc_dagobert, npc_tarzan;
|
||||
static g_got_gem_task, g_got_oil, g_goal, g_treasure_collected;
|
||||
|
||||
func Initialize()
|
||||
{
|
||||
|
@ -17,18 +20,10 @@ func Initialize()
|
|||
|
||||
func DoInit(int first_player)
|
||||
{
|
||||
CreateObject(Flagpole, 210,1185, first_player);
|
||||
var flagpole = CreateObject(Flagpole, 210,1185, first_player);
|
||||
ClearFreeRect(530,1135, 50,2);
|
||||
// Intro. Show message twice for longer duration.
|
||||
Schedule(nil, Format("GameCall(%v, %d)", "DoIntroMessage", first_player), 50, 1);
|
||||
Schedule(nil, Format("GameCall(%v, %d)", "DoIntroMessage", first_player), 100, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
func DoIntroMessage(int first_player)
|
||||
{
|
||||
var talker = GetCursor(first_player);
|
||||
if (talker) DialogueSimple->MessageBoxAll("$MsgIntro1$", talker, false);
|
||||
// Start Intro.
|
||||
StartSequence("Intro", 0, flagpole);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -111,13 +106,13 @@ global func FxIntRememberInventoryStop(object clonk, fx, int reason, bool temp)
|
|||
|
||||
func EncounterCastle(object enemy, object player)
|
||||
{
|
||||
DialogueSimple->MessageBoxAll("$MsgEncounterCastle$", enemy);
|
||||
Dialogue->MessageBoxAll("$MsgEncounterCastle$", enemy, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
func EncounterFinal(object enemy, object player)
|
||||
{
|
||||
DialogueSimple->MessageBoxAll("$MsgEncounterFinal$", enemy);
|
||||
Dialogue->MessageBoxAll("$MsgEncounterFinal$", enemy, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -126,25 +121,47 @@ func EncounterFinal(object enemy, object player)
|
|||
|
||||
func OnTreasureCollected(object treasure)
|
||||
{
|
||||
DialogueSimple->MessageBoxAll("$MsgTreasureCollected$", treasure->Contained());
|
||||
g_treasure_collected = true;
|
||||
Dialogue->MessageBoxAll("$MsgTreasureCollected$", treasure->Contained(), true);
|
||||
// Dagobert has something new to say now
|
||||
if (npc_dagobert)
|
||||
{
|
||||
var dlg = Dialogue->FindByTarget(npc_dagobert);
|
||||
if (dlg) dlg->AddAttention();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
func OnPlaneLoaded(object plane, object oil)
|
||||
{
|
||||
if (!plane || !oil) return false; // disappeared in that one frame?
|
||||
oil->Enter(plane);
|
||||
g_goal->OnOilDelivered();
|
||||
return StartSequence("Outro", 0, plane);
|
||||
}
|
||||
|
||||
static g_num_goldbars;
|
||||
static const MAX_GOLD_BARS = 20;
|
||||
|
||||
func OnGoldBarCollected(object collecter)
|
||||
func OnGoldBarCollected(object collector)
|
||||
{
|
||||
++g_num_goldbars;
|
||||
UpdateLeagueScores();
|
||||
DialogueSimple->MessageBoxAll(Format("$MsgGoldBarCollected$", g_num_goldbars, MAX_GOLD_BARS), collecter);
|
||||
Dialogue->MessageBoxAll(Format("$MsgGoldBarCollected$", g_num_goldbars, MAX_GOLD_BARS), collector, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
public func OnGoalsFulfilled()
|
||||
{
|
||||
GainMissionAccess("S2Treasure");
|
||||
UpdateLeagueScores();
|
||||
// Return true to force goal rule to not call GameOver() yet, as it will be done by outro sequence
|
||||
return true;
|
||||
}
|
||||
|
||||
func OnGameOver()
|
||||
{
|
||||
GainMissionAccess("S2Treasure");
|
||||
// Treasure was collected!
|
||||
// In case gems are collected after game end.
|
||||
UpdateLeagueScores();
|
||||
return true;
|
||||
}
|
||||
|
@ -152,8 +169,7 @@ func OnGameOver()
|
|||
func UpdateLeagueScores()
|
||||
{
|
||||
// +50 for finishing and +5 for every gold bar
|
||||
var goal = FindObject(Find_ID(Goal_TreasureHunt));
|
||||
var goal_finished = (goal && goal->IsFulfilled());
|
||||
var goal_finished = (g_goal && g_goal->IsFulfilled());
|
||||
return SetLeagueProgressScore(g_num_goldbars, g_num_goldbars * 5 + goal_finished * 50);
|
||||
}
|
||||
|
||||
|
@ -165,7 +181,7 @@ func OnInvincibleDamage(object damaged_target)
|
|||
var observer = damaged_target->FindObject(Find_ID(Clonk), Find_OCF(OCF_Alive), damaged_target->Sort_Distance());
|
||||
if (observer)
|
||||
{
|
||||
DialogueSimple->MessageBoxAll("$MsgStoneDoorNoDamage$", observer);
|
||||
Dialogue->MessageBoxAll("$MsgStoneDoorNoDamage$", observer, true);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
MsgIntro1=Okay, das Juwel der Macht muss hier irgendwo in der Höhle sein. Das Gebiet scheint schwer passierbar. Vielleicht sollten wir uns erst einmal nach Werkzeugen umsehen.
|
||||
MsgEncounterCastle=Ein Eindringling! Schnappt ihn!
|
||||
MsgEncounterFinal=Nein nein, der Schatz gehört NUR MIR!
|
||||
MsgTreasureCollected=Sehr gut! Nun muss der Schatz nur noch zurück zur Flagge.
|
||||
MsgTreasureCollected=Sehr gut! Nun muss der Schatz nur noch zurück zu Dagobert.
|
||||
MsgGoldBarCollected=Ich habe einen Goldbarren gefunden! (%d/%d)
|
||||
MsgStoneDoorNoDamage=Diese Steintür ist zu stabil. Ich sollte einen Schalter suchen.
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
MsgIntro1=OK, let's go and search for the Gem of Power. The terrain is rough, so we might need to look out for some tools first.
|
||||
MsgEncounterCastle=Look out, an intruder! Catch him!
|
||||
MsgEncounterFinal=The treasure is MINE ALONE!
|
||||
MsgTreasureCollected=Excellent! Now we need to bring the treasure back to the flag.
|
||||
MsgTreasureCollected=Excellent! Now we need to bring the treasure back to Dagobert.
|
||||
MsgGoldBarCollected=I've found a gold bar! (%d/%d)
|
||||
MsgStoneDoorNoDamage=This stone door is too resilient. I should search for a switch.
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
#appendto Dialogue
|
||||
|
||||
/* Ann dialogue */
|
||||
|
||||
func Dlg_Ann_1(object clonk)
|
||||
{
|
||||
MessageBox("$Ann1$", clonk, dlg_target); // me stuck
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Ann_2(object clonk)
|
||||
{
|
||||
MessageBox("$Ann2$", clonk, dlg_target); // switch out of range
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Ann_3(object clonk)
|
||||
{
|
||||
MessageBox("$Ann3$", clonk, clonk); // no way around?
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Ann_4(object clonk)
|
||||
{
|
||||
MessageBox("$Ann4$", clonk, dlg_target); // nope. need pipe.
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Ann_5(object clonk)
|
||||
{
|
||||
MessageBox("$Ann5$", clonk, clonk); // hm i should find pipe
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
|
@ -0,0 +1,189 @@
|
|||
#appendto Dialogue
|
||||
|
||||
/* Dagobert dialogue */
|
||||
|
||||
static g_got_gem_task, g_got_oil, g_goal;
|
||||
|
||||
func Dlg_Dagobert_1(object clonk)
|
||||
{
|
||||
var gem = FindObject(Find_ID(GemOfPower), Find_AtRect(-20,-20,20,20));
|
||||
if (g_got_oil)
|
||||
{
|
||||
MessageBox("$Dagobert1B$", clonk, dlg_target); // beautiful gem
|
||||
SetDialogueProgress(1);
|
||||
StopDialogue();
|
||||
}
|
||||
else if (gem)
|
||||
{
|
||||
gem->Enter(dlg_target);
|
||||
MessageBox("$DagobertGem0$", clonk, clonk); // here is gem
|
||||
SetDialogueProgress(1, "Gem");
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox("$Dagobert1$", clonk, dlg_target); // gold
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_2(object clonk)
|
||||
{
|
||||
var options = [["$DagobertGoldQ$", "#Gold"], ["$DagobertOilQ$", "#Oil"], ["$DagobertCaveQ$", "#Cave"], ["$DagobertBye$", "StopDialogue()"]];
|
||||
MessageBox("", clonk, clonk, nil, false, options);
|
||||
SetDialogueProgress(1);
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Gold1(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertGold1$", clonk, dlg_target); // treasures b plenty
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Gold2(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertGold2$", clonk, clonk); // y u not go?
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Gold3(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertGold3$", clonk, dlg_target); // lava & water
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Gold4(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertGold4$", clonk, clonk); // dive?
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Gold5(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertGold5$", clonk, dlg_target); // can't
|
||||
SetDialogueProgress(2);
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Oil1(object clonk)
|
||||
{
|
||||
if (g_got_oil)
|
||||
{
|
||||
MessageBox("$DagobertOil1B$", clonk, dlg_target); // oil for gem
|
||||
SetDialogueProgress(2);
|
||||
}
|
||||
else if (g_got_gem_task)
|
||||
{
|
||||
MessageBox("$DagobertOil1C$", clonk, dlg_target); // u already got oil
|
||||
SetDialogueProgress(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox("$DagobertOil1$", clonk, dlg_target); // oil not allowed
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Oil2(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertOil2$", clonk, clonk); // i'll kill harx
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Oil3(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertOil3$", clonk, dlg_target); // good. i'll help
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Oil4(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertOil4$", clonk, dlg_target); // hidden treasure
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Oil5(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertOil5$", clonk, dlg_target); // gem of power
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Oil6(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertOil6$", clonk, dlg_target); // gem i want
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Oil7(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertOil7$", clonk, clonk); // ok
|
||||
g_got_gem_task = true;
|
||||
if (g_goal) g_goal->OnGotGemTask();
|
||||
SetDialogueProgress(2);
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Cave1(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertCave1$", clonk, dlg_target); // lava blocks entry. water below
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Cave2(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertCave2$", clonk, dlg_target); // reroute water
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Cave3(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertCave3$", clonk, clonk); // whats inside?
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Cave4(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertCave4$", clonk, dlg_target); // rough terrain
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Cave5(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertCave5$", clonk, dlg_target); // u might find tools
|
||||
SetDialogueProgress(2);
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Gem1(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertGem1$", clonk, dlg_target); // incredible
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Gem2(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertGem2$", clonk, dlg_target); // take oil
|
||||
var barrel = CreateObject(MetalBarrel);
|
||||
if (barrel)
|
||||
{
|
||||
barrel->SetXDir(-15);
|
||||
barrel->SetYDir(-20);
|
||||
}
|
||||
g_got_oil = true;
|
||||
if (g_goal) g_goal->OnTreasureSold();
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Gem3(object clonk)
|
||||
{
|
||||
MessageBox("$DagobertGem3$", clonk, dlg_target); // thanks
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
||||
|
||||
func Dlg_Dagobert_Init(object clonk)
|
||||
{
|
||||
// Localized name
|
||||
clonk->SetName("$DagobertName$");
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
#appendto Dialogue
|
||||
|
||||
/* Donald dialogue */
|
||||
|
||||
static g_golden_shovel;
|
||||
|
||||
func Dlg_Donald_1(object clonk)
|
||||
{
|
||||
if (g_golden_shovel)
|
||||
{
|
||||
if (g_golden_shovel->Contained() == dlg_target) return CallDialogue(clonk, 2, "Shovel");
|
||||
if (ObjectDistance(g_golden_shovel) < 20) return CallDialogue(clonk, 1, "Shovel");
|
||||
}
|
||||
MessageBox("$Donald1$", clonk, dlg_target); // plz help. tools in acid
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Donald_2(object clonk)
|
||||
{
|
||||
MessageBox("$Donald2$", clonk, clonk); // poor u
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Donald_3(object clonk)
|
||||
{
|
||||
MessageBox("$Donald3$", clonk, dlg_target); // it was unique tools
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Donald_4(object clonk)
|
||||
{
|
||||
MessageBox("$Donald4$", clonk, clonk); // i'll look
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
||||
|
||||
func Dlg_Donald_Shovel1(object clonk)
|
||||
{
|
||||
g_golden_shovel->Enter(dlg_target);
|
||||
MessageBox("$DonaldShovel1$", clonk, clonk); // here is shovel
|
||||
}
|
||||
|
||||
func Dlg_Donald_Shovel2(object clonk)
|
||||
{
|
||||
MessageBox("$DonaldShovel2$", clonk, dlg_target); // thanks 4 shovel
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
#appendto Dialogue
|
||||
|
||||
/* Jane dialogue */
|
||||
|
||||
static npc_tarzan;
|
||||
|
||||
func Dlg_Jane_1(object clonk)
|
||||
{
|
||||
var msg = "$Jane1$"; // he's swinging all day instead of looking 4 gold
|
||||
if (!npc_tarzan || !npc_tarzan->GetAlive()) msg = "$Jane1B$"; // he's dead instead of looking 4 gold
|
||||
MessageBox(msg, clonk, dlg_target);
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Jane_2(object clonk)
|
||||
{
|
||||
MessageBox("$Jane2$", clonk, clonk); // i want rope 2
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Jane_3(object clonk)
|
||||
{
|
||||
MessageBox("$Jane3$", clonk, dlg_target); // look chest
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Jane_4(object clonk)
|
||||
{
|
||||
MessageBox("$Jane4$", clonk, dlg_target); // u can carry 2
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Jane_5(object clonk)
|
||||
{
|
||||
MessageBox("$Jane5$", clonk, dlg_target); // take all plz
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#appendto Dialogue
|
||||
|
||||
/* Otto dialogue */
|
||||
|
||||
func Dlg_Otto_1(object clonk)
|
||||
{
|
||||
MessageBox("$Otto1$", clonk, dlg_target); // luv it here
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Otto_2(object clonk)
|
||||
{
|
||||
MessageBox("$Otto2$", clonk, dlg_target); // look @ that island
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
|
@ -0,0 +1,137 @@
|
|||
#appendto Dialogue
|
||||
|
||||
/* Pyrit dialogue */
|
||||
|
||||
static g_got_gem_task, g_got_oil;
|
||||
|
||||
func Dlg_Pyrit_1(object clonk)
|
||||
{
|
||||
var msg = "$Pyrit1$"; // almost done. oil found?
|
||||
if (!GetEffect("PyritHammering", dlg_target)) msg = "$Pyrit1B$"; // done. oil found?
|
||||
MessageBox(msg, clonk, dlg_target);
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Pyrit_2(object clonk)
|
||||
{
|
||||
if (g_got_oil)
|
||||
{
|
||||
MessageBox("$PyritQBarrel$", clonk, clonk); // ye. what now?
|
||||
this.pyrit_answer = "$PyritABarrel$"; // bring to plane
|
||||
}
|
||||
else if (g_got_gem_task)
|
||||
{
|
||||
MessageBox("$PyritQGem$", clonk, clonk); // where gem?
|
||||
this.pyrit_answer = "$PyritAGem$"; // look in caves
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox("$PyritQSearch$", clonk, clonk); // where oil?
|
||||
this.pyrit_answer = "$PyritASearch$"; // ask around
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Pyrit_3(object clonk)
|
||||
{
|
||||
MessageBox(this.pyrit_answer, clonk, dlg_target);
|
||||
SetDialogueProgress(1);
|
||||
StopDialogue();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// Generic call on every dlg message of Pyrit
|
||||
func Dlg_Pyrit(object clonk)
|
||||
{
|
||||
// Stop walking.
|
||||
if (dlg_target->GetCommand())
|
||||
{
|
||||
|
||||
this.was_walk_interrupted = true;
|
||||
dlg_target->SetCommand("None");
|
||||
dlg_target->SetComDir(COMD_Stop);
|
||||
dlg_target->SetXDir();
|
||||
}
|
||||
// Yield animation
|
||||
if (this.anim) dlg_target->StopAnimation(this.anim);
|
||||
this.anim = 0;
|
||||
this.anim_continue_frame = FrameCounter() + 50;
|
||||
return false; // do call specific functions
|
||||
}
|
||||
|
||||
|
||||
/* NPC animations */
|
||||
|
||||
static const Pyrit_Hammer_SwingTime = 40;
|
||||
|
||||
func Dlg_Pyrit_StartHammering(object clonk)
|
||||
{
|
||||
// Hammers
|
||||
clonk->CreateContents(Hammer);
|
||||
clonk->CreateContents(Hammer);
|
||||
// Clonk moves slowly.
|
||||
clonk.ActMap = { Prototype = Clonk.ActMap, Walk = { Prototype = Clonk.ActMap.Walk } };
|
||||
clonk.ActMap.Walk.Speed /= 3;
|
||||
clonk->SetAction("Walk");
|
||||
// Hammering animation
|
||||
AddEffect("PyritHammering", clonk, 1, Pyrit_Hammer_SwingTime+5, this);
|
||||
return true;
|
||||
}
|
||||
|
||||
func FxPyritHammeringTimer(object c, proplist fx, int time)
|
||||
{
|
||||
var fc = FrameCounter();
|
||||
if (fc < this.anim_continue_frame || c.has_sequence) return FX_OK;
|
||||
this.anim = 0;
|
||||
if (!fx.plane) if (!(fx.plane = FindObject(Find_ID(Plane), Sort_Distance()))) return FX_OK;
|
||||
// After a while, the plane is finished. Prefer to finish while no players are nearby.
|
||||
if ((fc > 11500 && !ObjectCount(Find_ID(Clonk), Find_InRect(-300,-200,600,400), Find_Not(Find_Owner(NO_OWNER)))) || fc > 24000)
|
||||
{
|
||||
fx.plane->SetMeshMaterial(Plane->GetMeshMaterial());
|
||||
fx.plane->SetR(90);
|
||||
fx.plane.MeshTransformation=Plane.MeshTransformation;
|
||||
return FX_Execute_Kill;
|
||||
}
|
||||
if ((!Random(20)) || this.was_walk_interrupted)
|
||||
{
|
||||
// Move between two places (only if players are joined so Pyrit stays in place for object saving)
|
||||
var new_pos = [fx.plane->GetX()-24, fx.plane->GetX()+26][c->GetX() < fx.plane->GetX()];
|
||||
c->SetCommand("MoveTo", nil, new_pos, fx.plane->GetY());
|
||||
this.anim_continue_frame = FrameCounter() + 50;
|
||||
this.was_walk_interrupted = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ensure proper direction
|
||||
if ((c->GetDir()==DIR_Right) != (c->GetX() < fx.plane->GetX())) { c->SetDir(!c->GetDir()); return FX_OK; }
|
||||
// No movement: Swing hammer
|
||||
var anim_idx = Random(4);
|
||||
var anim_name = ["SwordSlash1.L", "SwordSlash1.R", "SwordSlash2.L", "SwordSlash2.R"][anim_idx];
|
||||
var anim_len = c->GetAnimationLength(anim_name);
|
||||
this.anim = c->PlayAnimation(anim_name, 10, Anim_Linear(0,0,anim_len, Pyrit_Hammer_SwingTime, ANIM_Remove), Anim_Const(1000));
|
||||
// Schedule effect when hammer hits object
|
||||
var hit_delay = [50,50,30,30][anim_idx] * Pyrit_Hammer_SwingTime / 100;
|
||||
ScheduleCall(c, Dialogue.Pyrit_HitFx, hit_delay, 1);
|
||||
}
|
||||
return FX_OK;
|
||||
}
|
||||
|
||||
func Pyrit_HitFx()
|
||||
{
|
||||
var x = (GetDir()*2-1) * 14;
|
||||
var y = 4;
|
||||
CreateParticle("StarSpark", x*9/10,y*9/10, PV_Random(-20, 20), PV_Random(-20, 20), PV_Random(10, 20), Particles_Glimmer(), 10);
|
||||
Sound("Clang?");
|
||||
return true;
|
||||
}
|
||||
|
||||
func FxPyritHammeringStop(object c, proplist fx, int reason, bool temp)
|
||||
{
|
||||
if (!temp && this.anim)
|
||||
{
|
||||
c->StopAnimation(this.anim);
|
||||
this.anim = 0;
|
||||
}
|
||||
return FX_OK;
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
#appendto Dialogue
|
||||
|
||||
/* Riku dialogue */
|
||||
|
||||
static g_got_gem_task, g_treasure_collected;
|
||||
|
||||
func Dlg_Riku_1(object clonk)
|
||||
{
|
||||
if (g_treasure_collected) return CallDialogue(clonk, 1, "Gem");
|
||||
MessageBox("$Riku1$", clonk, dlg_target); // looking 4 gold?
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Riku_2(object clonk)
|
||||
{
|
||||
// This is unlikely, but possible: Player entered the caves without speaking to Dagobert
|
||||
if (!g_got_gem_task) return CallDialogue(clonk, 1, "Oil");
|
||||
MessageBox("$Riku2$", clonk, clonk); // looking 4 gem
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Riku_3(object clonk)
|
||||
{
|
||||
MessageBox("$Riku3$", clonk, dlg_target); // look in treasure chamber
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Riku_4(object clonk)
|
||||
{
|
||||
MessageBox("$Riku4$", clonk, clonk); // how 2 open door?
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Riku_5(object clonk)
|
||||
{
|
||||
MessageBox("$Riku5$", clonk, dlg_target); // switches hidden in cave
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Riku_6(object clonk)
|
||||
{
|
||||
MessageBox("$Riku6$", clonk, clonk); // u search
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Riku_7(object clonk)
|
||||
{
|
||||
MessageBox("$Riku7$", clonk, dlg_target); // no u do
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Riku_8(object clonk)
|
||||
{
|
||||
MessageBox("$Riku3$", clonk, clonk); // ok
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
||||
|
||||
func Dlg_Riku_Oil1(object clonk)
|
||||
{
|
||||
MessageBox("$RikuOil1$", clonk, clonk); // looking 4 oil
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Riku_Oil2(object clonk)
|
||||
{
|
||||
MessageBox("$RikuOil2$", clonk, dlg_target); // ask dagobert
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
||||
|
||||
func Dlg_Riku_Gem1(object clonk)
|
||||
{
|
||||
MessageBox("$RikuGem1$", clonk, clonk); // i found gem
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Riku_Gem2(object clonk)
|
||||
{
|
||||
MessageBox("$RikuGem2$", clonk, dlg_target); // k i keep rest
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
|
@ -0,0 +1,134 @@
|
|||
#appendto Dialogue
|
||||
|
||||
/* Sophie1=Teeheehe. Look how it levitates!
|
||||
Sophie2=Are you a magician?
|
||||
Sophie3=Nope, it's tele gloves. I've found them in the chest beside me.
|
||||
Sophie4=There's more of them! Just try them out. Press and hold near a lose item to move it.
|
||||
SophieSad=Why did you have to take away my playing items? Sophie sad :(
|
||||
*/
|
||||
|
||||
/* Sophie dialogue */
|
||||
|
||||
func Dlg_Sophie_1(object clonk)
|
||||
{
|
||||
if (!GetEffect("SophieTeleCheck", dlg_target) || !Sophie_FindBone())
|
||||
{
|
||||
MessageBox("$SophieSad$", clonk, dlg_target); // sophie sad
|
||||
SetDialogueProgress(1);
|
||||
StopDialogue();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox("$Sophie1$", clonk, dlg_target); // look tele!
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Sophie_2(object clonk)
|
||||
{
|
||||
MessageBox("$Sophie2$", clonk, clonk); // magic?
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Sophie_3(object clonk)
|
||||
{
|
||||
MessageBox("$Sophie3$", clonk, dlg_target); // nope tele
|
||||
return true;
|
||||
}
|
||||
|
||||
func Dlg_Sophie_4(object clonk)
|
||||
{
|
||||
MessageBox("$Sophie4$", clonk, dlg_target); // get 1 from the box!
|
||||
SetDialogueProgress(1);
|
||||
StopDialogue();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// Generic call on every dlg message of Sophie
|
||||
func Dlg_Sophie(object clonk)
|
||||
{
|
||||
// Yield pickup of new items; stop item movement
|
||||
this.anim_continue_frame = FrameCounter() + 50;
|
||||
return false; // do call specific functions
|
||||
}
|
||||
|
||||
|
||||
/* NPC animations */
|
||||
|
||||
func Dlg_Sophie_Init(object clonk)
|
||||
{
|
||||
// Check timer to see if we can use tele glove
|
||||
var fx = AddEffect("SophieTeleCheck", clonk, 1, 60, this);
|
||||
fx.glove = clonk->FindContents(TeleGlove);
|
||||
fx.wait_time = 100;
|
||||
return true;
|
||||
}
|
||||
|
||||
func Sophie_FindBone()
|
||||
{
|
||||
// find bone to fling around with tele glove
|
||||
return FindObject(Find_ID(Bone), Find_InRect(-80,-80,160,160), Find_OCF(OCF_InFree), Find_NoContainer(), Sort_Distance());
|
||||
}
|
||||
|
||||
func FxSophieTeleCheckTimer(object c, proplist fx, int time)
|
||||
{
|
||||
if (!FindObject(Find_ID(Clonk), Find_InRect(-150,-50,240,150), Find_Exclude(c))) return FX_OK; // only if people are watching
|
||||
var fc = FrameCounter();
|
||||
if (fc < this.anim_continue_frame) return FX_OK;
|
||||
if (GetEffect("SophieTeleUse", c)) return FX_OK;
|
||||
var bone = Sophie_FindBone();
|
||||
if (!bone) return FX_OK;
|
||||
if (!fx.glove) return FX_Execute_Kill;
|
||||
if (Random(3) >= fx.wait_time++) return FX_OK; // just after using it, take a short break
|
||||
AddEffect("SophieTeleUse", c, 1, 3, this, nil, fx.glove, bone);
|
||||
fx.wait_time = 0;
|
||||
return FX_OK;
|
||||
}
|
||||
|
||||
func FxSophieTeleUseStart(object c, proplist fx, int temp, object glove, object bone)
|
||||
{
|
||||
if (temp) return FX_OK;
|
||||
fx.glove = glove;
|
||||
fx.bone = bone;
|
||||
fx.x = fx.bone->GetX()-GetX();
|
||||
fx.y = fx.bone->GetY()-GetY() - 5;
|
||||
fx.tx = fx.x;
|
||||
fx.ty = fx.y;
|
||||
fx.glove->ControlUseStart(c, fx.x, fx.y);
|
||||
return FX_OK;
|
||||
}
|
||||
|
||||
func FxSophieTeleUseTimer(object c, proplist fx, int time)
|
||||
{
|
||||
if (!fx.glove || !fx.bone) return FX_Execute_Kill;
|
||||
if (Distance(GetX()+fx.x, GetY()+fx.y, fx.bone->GetX(), fx.bone->GetY()) > 30) return FX_Execute_Kill; // oops - bone dropped
|
||||
if (fx.x>0) c->SetDir(DIR_Right); else c->SetDir(DIR_Left);
|
||||
var fc = FrameCounter();
|
||||
if (fx.bored)
|
||||
{
|
||||
// Got bored of it? Wait for a while to stabilize. Then drop item.
|
||||
if (fc > fx.bored) return FX_Execute_Kill;
|
||||
}
|
||||
else if (time > 20 && fc >= this.anim_continue_frame) // Wait a bit in the beginning. Wait while talking.
|
||||
{
|
||||
if (!Random(30) && Abs(fx.x)>15) fx.bored = fc + 30;
|
||||
// Move to random locations
|
||||
if (fx.tx == fx.x && fx.ty == fx.y)
|
||||
{
|
||||
fx.tx = Random(91)-45;
|
||||
fx.ty = Random(50)-50;
|
||||
}
|
||||
fx.x += BoundBy(fx.tx-fx.x, -3, 3);
|
||||
fx.y += BoundBy(fx.ty-fx.y, -3, 3);
|
||||
}
|
||||
// Keep holding that bone
|
||||
fx.glove->ControlUseHolding(c, fx.x, fx.y);
|
||||
return FX_OK;
|
||||
}
|
||||
|
||||
func FxSophieTeleUseStop(object c, proplist fx, int reason, bool temp)
|
||||
{
|
||||
if (c && fx.glove) fx.glove->ControlUseStop(c, fx.x,fx.y);
|
||||
return FX_OK;
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
#appendto Dialogue
|
||||
|
||||
/* Tarzan dialogue */
|
||||
|
||||
func Dlg_Tarzan_1(object clonk)
|
||||
{
|
||||
// Short dialogue as it should not interfere with the NPC activity
|
||||
MessageBox("$Tarzan1$", clonk, dlg_target); // i'm tarzan
|
||||
SetDialogueProgress(1);
|
||||
return StopDialogue();
|
||||
}
|
||||
|
||||
|
||||
/* NPC animations */
|
||||
|
||||
func Dlg_Tarzan_Init(object clonk)
|
||||
{
|
||||
// Swinging timer
|
||||
var fx = AddEffect("TarzanSwinging", clonk, 1, 7, this);
|
||||
clonk->SetPosition(750,850);
|
||||
fx.bows = FindObjects(Find_ID(GrappleBow), Find_Container(clonk));
|
||||
fx.force_shot = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
func FxTarzanSwingingTimer(object c, proplist fx, int time)
|
||||
{
|
||||
// Wait for animations, etc?
|
||||
var fc = FrameCounter();
|
||||
SetComDir(COMD_Stop);
|
||||
if (fc < fx.wait) return FX_OK;
|
||||
// only if someone is looking
|
||||
if (!fx.force_shot) if (!FindObject(Find_ID(Clonk), Find_InRect(-180,-20,210,90), Find_Not(Find_Owner(NO_OWNER)))) return FX_OK;
|
||||
// Time to switch grappler?
|
||||
if (fc > fx.switch_time)
|
||||
{
|
||||
fx.switch_time = 0;
|
||||
fx.curr_bow = 1 - fx.curr_bow;
|
||||
}
|
||||
// check current grappler
|
||||
fx.bow = fx.bows[fx.curr_bow];
|
||||
if (!fx.bow) return FX_Execute_Kill; // oops. lost our bow.
|
||||
var hook = fx.bow->EnsureHook();
|
||||
if (!hook) return FX_Execute_Kill; // something went terribly wrong
|
||||
if (hook->Contained() == fx.bow)
|
||||
{
|
||||
fx.wait = fc + 40;
|
||||
// The hook is not shot yet - shoot it!
|
||||
// But stay in the middle of the area
|
||||
var shoot_off = BoundBy(670 + Random(130) - GetX(), -50,50);
|
||||
fx.bow->ControlUseStart(c, shoot_off, -50);
|
||||
fx.bow->ControlUseStop(c, shoot_off, -50);
|
||||
fx.switch_time = fc + 70 + Random(40);
|
||||
fx.force_shot = false;
|
||||
return FX_OK;
|
||||
}
|
||||
// Unstick
|
||||
if (GetProcedure() == "SCALE")
|
||||
{
|
||||
SetAction("Jump");
|
||||
if (GetDir()) SetXDir(-5); else SetXDir(5);
|
||||
SetYDir(-10);
|
||||
return FX_OK;
|
||||
}
|
||||
// Turn
|
||||
if (GetXDir() > 0) SetDir(DIR_Right); else SetDir(DIR_Left);
|
||||
// Move along rope
|
||||
var grapple_fx = GetEffect("IntGrappleControl", c);
|
||||
if (!grapple_fx) return FX_OK;
|
||||
grapple_fx.mv_down = grapple_fx.mv_up = grapple_fx.mv_left = grapple_fx.mv_right = 0;
|
||||
var want_dy = 900 - GetY();
|
||||
if (want_dy < 0)
|
||||
{
|
||||
// We sunk too low - climb up
|
||||
grapple_fx.mv_up = 1;
|
||||
fx.switch_time = Max(fx.switch_time, fc + 20); // make sure we continue climbing
|
||||
}
|
||||
else
|
||||
{
|
||||
// No need to climb? Then swing.
|
||||
if (GetXDir() < 0) grapple_fx.mv_left=1; else grapple_fx.mv_right=1;
|
||||
}
|
||||
return FX_OK;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#appendto MetalBarrel
|
||||
|
||||
func Exit(...)
|
||||
{
|
||||
// dropping at plane? then put into plane
|
||||
if (Contained() && Contained()->GetAlive())
|
||||
{
|
||||
var plane = FindObject(Find_ID(Plane), Find_AtPoint());
|
||||
if (plane)
|
||||
{
|
||||
ScheduleCall(nil, Global.GameCall, 1,1, "OnPlaneLoaded", plane, this);
|
||||
}
|
||||
}
|
||||
return inherited(...);
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#appendto Plane
|
||||
|
||||
// plane needs oil
|
||||
public func ContainedUp(object clonk, ...)
|
||||
{
|
||||
if (!FuelCheck(clonk)) return true;
|
||||
return _inherited(clonk, ...);
|
||||
}
|
||||
|
||||
public func ContainedDown(object clonk, ...)
|
||||
{
|
||||
if (!FuelCheck(clonk)) return true;
|
||||
return _inherited(clonk, ...);
|
||||
}
|
||||
|
||||
func FuelCheck(object clonk)
|
||||
{
|
||||
if (!FindContents(MetalBarrel))
|
||||
{
|
||||
Dialogue->MessageBox("$PlaneNoOil$", clonk, clonk);
|
||||
clonk->Sound("WipfWhine");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,180 @@
|
|||
/* Intro sequence */
|
||||
|
||||
#appendto Sequence
|
||||
|
||||
static npc_pyrit, g_goal;
|
||||
|
||||
func Intro_Init(object flagpole)
|
||||
{
|
||||
// Fix plane outside landscape for now
|
||||
this.plane = CreateObject(Plane, 100,-20);
|
||||
this.plane->FaceRight();
|
||||
this.plane->SetR(80);
|
||||
this.plane->SetColor(0xa04000);
|
||||
this.plane_Hit = this.plane.Hit;
|
||||
this.plane.Hit = this.Intro_PlaneHit;
|
||||
this.plane.intro_seq = this;
|
||||
this.plane_cat = this.plane->GetCategory();
|
||||
this.plane->SetCategory(C4D_StaticBack);
|
||||
this.plane->MakeInvincible();
|
||||
|
||||
// Pyrit the pilot
|
||||
this.pilot = npc_pyrit = CreateObject(Clonk, 100, 100, NO_OWNER);
|
||||
this.pilot->MakeInvincible();
|
||||
this.pilot->MakeNonFlammable();
|
||||
this.pilot->SetSkin(2);
|
||||
this.pilot->Enter(this.plane);
|
||||
this.pilot->SetAction("Walk");
|
||||
this.pilot->SetName("Pyrit");
|
||||
this.pilot->SetColor(0xff0000);
|
||||
this.pilot->SetDir(DIR_Left);
|
||||
this.pilot->SetObjectLayer(this.pilot);
|
||||
|
||||
// Pyit has a red hat!
|
||||
this.pilot->AttachMesh(Hat, "skeleton_head", "main", Trans_Translate(0,5500));
|
||||
|
||||
// Dialogue object also used as helper container for clonks
|
||||
this.dialogue = this.pilot->SetDialogue("Pyrit");
|
||||
this.dialogue->SetInteraction(false);
|
||||
|
||||
}
|
||||
|
||||
func Intro_Start(object flagpole)
|
||||
{
|
||||
// Intro starts at flagpole; some time before plane drops
|
||||
this.flagpole = flagpole;
|
||||
SetViewTarget(this.flagpole);
|
||||
|
||||
SetPlayerZoomByViewRange(NO_OWNER, 800,600, PLRZOOM_Set); // zoom out from plane
|
||||
|
||||
return ScheduleNext(80);
|
||||
}
|
||||
|
||||
func Intro_JoinPlayer(int plr)
|
||||
{
|
||||
// Players joining initially start out in plane
|
||||
// Late joiners are placed at flagpole
|
||||
for(var index = 0, crew; crew = GetCrew(plr, index); ++index)
|
||||
{
|
||||
if (this.plane_crashed)
|
||||
crew->SetPosition(this.flagpole->GetX(), this.flagpole->GetY());
|
||||
else
|
||||
crew->Enter(this.dialogue);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
func Intro_1()
|
||||
{
|
||||
// Start plane drop
|
||||
this.plane->SetCategory(this.plane_cat);
|
||||
this.plane->SetPosition(50,840);
|
||||
this.plane->SetXDir(100);
|
||||
this.plane->SetYDir(200);
|
||||
this.plane->SetR(170);
|
||||
return ScheduleNext(10);
|
||||
}
|
||||
|
||||
func Intro_2()
|
||||
{
|
||||
// Plane drop sound when it enters view range
|
||||
if (this.plane->GetY() > 900)
|
||||
Sound("PlaneDrop", true);
|
||||
else
|
||||
ScheduleSame(2);
|
||||
return true;
|
||||
}
|
||||
|
||||
func Intro_PlaneHit()
|
||||
{
|
||||
// Plane hit ground! Continue sequence.
|
||||
Sound("PlaneCrash", true);
|
||||
SetR(-90);
|
||||
var particles = Particles_Smoke(true);
|
||||
particles.Size = PV_Linear(PV_Random(20, 60), PV_Random(50, 100));
|
||||
CreateParticle("Smoke", PV_Random(-30,30), PV_Random(-30,30), PV_Random(-60, 60), PV_Random(-20,0), PV_Random(200, 500), particles, 20);
|
||||
particles.Size = PV_Linear(PV_Random(50, 80), PV_Random(100, 200));
|
||||
CreateParticle("Smoke", PV_Random(-30,30), PV_Random(-30,30), PV_Random(-20, 20), PV_Random(-20,0), PV_Random(100, 200), particles, 20);
|
||||
for (var iplr=0,plr; iplr<GetPlayerCount(C4PT_User); ++iplr)
|
||||
{
|
||||
plr = GetPlayerByIndex(iplr, C4PT_User);
|
||||
var icrew=0,crew;
|
||||
while (crew=GetCrew(plr, icrew++))
|
||||
{
|
||||
crew->Exit(0,-5, 0, Random(1)+1, Random(5)-6);
|
||||
crew->SetAction("Tumble");
|
||||
}
|
||||
}
|
||||
SetMeshMaterial("CrashedAirplane");
|
||||
this.MeshTransformation=Trans_Mul(Trans_Rotate(10,0,2,1), Plane.MeshTransformation);
|
||||
this.Hit = this.intro_seq.plane_Hit;
|
||||
this.intro_seq.plane_crashed = true;
|
||||
this.intro_seq->ScheduleNext(50);
|
||||
return true;
|
||||
}
|
||||
|
||||
func Intro_3()
|
||||
{
|
||||
MessageBox_last_pos = true; // force first message right side of screen
|
||||
MessageBoxAll("$Intro1$", GetHero(), true); // pyrit?
|
||||
return ScheduleNext(50);
|
||||
}
|
||||
|
||||
func Intro_4()
|
||||
{
|
||||
npc_pyrit->Exit();
|
||||
return ScheduleNext(30);
|
||||
}
|
||||
|
||||
func Intro_5()
|
||||
{
|
||||
Dialogue->SetSpeakerDirs(npc_pyrit, GetHero());
|
||||
MessageBoxAll("$Intro2$", GetHero(), true); // y out of fuel?
|
||||
return ScheduleNext(320);
|
||||
}
|
||||
|
||||
func Intro_6()
|
||||
{
|
||||
MessageBoxAll("$Intro3$", npc_pyrit, true); // cuz detour
|
||||
return ScheduleNext(400);
|
||||
}
|
||||
|
||||
func Intro_7()
|
||||
{
|
||||
MessageBoxAll("$Intro4$", GetHero(), true); // ur fault
|
||||
return ScheduleNext(200);
|
||||
}
|
||||
|
||||
func Intro_8()
|
||||
{
|
||||
MessageBoxAll("$Intro5$", GetHero(), true); // what now?
|
||||
return ScheduleNext(200);
|
||||
return Stop();
|
||||
}
|
||||
|
||||
func Intro_9()
|
||||
{
|
||||
MessageBoxAll("$Intro6$", npc_pyrit, true); // u oil, me plane
|
||||
return ScheduleNext(330);
|
||||
}
|
||||
|
||||
func Intro_10()
|
||||
{
|
||||
MessageBoxAll("$Intro7$", GetHero(), true); // ok
|
||||
return ScheduleNext(80);
|
||||
}
|
||||
|
||||
func Intro_11()
|
||||
{
|
||||
return Stop();
|
||||
}
|
||||
|
||||
func Intro_Stop()
|
||||
{
|
||||
this.dialogue->SetInteraction(true);
|
||||
this.dialogue->AddAttention();
|
||||
this.dialogue->Dlg_Pyrit_StartHammering(npc_pyrit);
|
||||
SetPlayerZoomByViewRange(NO_OWNER, 400,300, PLRZOOM_Set);
|
||||
g_goal = CreateObject(Goal_TreasureHunt, 0, 0);
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
/* End sequence */
|
||||
|
||||
#appendto Sequence
|
||||
|
||||
func Outro_Start(object plane)
|
||||
{
|
||||
// Player closest to plane becomes outro protagonist
|
||||
this.plane = plane;
|
||||
GetHero(npc_pyrit);
|
||||
SetPlayerZoomByViewRange(NO_OWNER, 200,100, PLRZOOM_Set | PLRZOOM_LimitMax);
|
||||
SetViewTarget(GetHero());
|
||||
npc_pyrit.has_sequence = true; // Pyrit stops hammering
|
||||
this.plane->SetR(90); // in case Pyrit isn't done yet
|
||||
this.plane.MeshTransformation=Plane.MeshTransformation;
|
||||
var max_unstick = 10;
|
||||
while (this.plane->Stuck() && max_unstick--) this.plane->SetPosition(this.plane->GetX(), this.plane->GetY()-1);
|
||||
return ScheduleNext(5);
|
||||
}
|
||||
|
||||
func Outro_1()
|
||||
{
|
||||
Dialogue->SetSpeakerDirs(GetHero(), npc_pyrit);
|
||||
MessageBoxAll("$Outro1$", npc_pyrit, true); // took u a while
|
||||
return ScheduleNext(200);
|
||||
}
|
||||
|
||||
func Outro_2()
|
||||
{
|
||||
Dialogue->SetSpeakerDirs(GetHero(), npc_pyrit);
|
||||
MessageBoxAll("$Outro2$", GetHero(), true); // plane looks good
|
||||
return ScheduleNext(200);
|
||||
}
|
||||
|
||||
func Outro_3()
|
||||
{
|
||||
MessageBoxAll("$Outro3$", npc_pyrit, true); // let'sgo
|
||||
return ScheduleNext(150);
|
||||
}
|
||||
|
||||
func Outro_4()
|
||||
{
|
||||
// Pyrit enters plane. Rest leaves to make sure Pyrit is pilot.
|
||||
var clonk;
|
||||
while (clonk = this.plane->FindContents(Clonk)) clonk->Exit();
|
||||
npc_pyrit->SetCommand("Enter", this.plane);
|
||||
return ScheduleNext(30);
|
||||
}
|
||||
|
||||
func Outro_5()
|
||||
{
|
||||
if (npc_pyrit->Contained() != this.plane) return ScheduleSame(5);
|
||||
// After Pyrit is inside, rest enters freely
|
||||
this.plane->SetEntrance(true);
|
||||
for (var clonk in this.plane->FindObjects(this.plane->Find_AtRect(-60,-30,120,60), Find_ID(Clonk), Find_Not(Find_Owner(NO_OWNER))))
|
||||
clonk->SetCommand("Enter", this.plane);
|
||||
return ScheduleNext(100);
|
||||
}
|
||||
|
||||
func Outro_6()
|
||||
{
|
||||
this.plane->FaceRight();
|
||||
this.plane->StartFlight(15);
|
||||
return ScheduleNext(100);
|
||||
}
|
||||
|
||||
func Outro_7()
|
||||
{
|
||||
this.plane->ContainedLeft(npc_pyrit);
|
||||
return ScheduleNext(100);
|
||||
}
|
||||
|
||||
func Outro_8()
|
||||
{
|
||||
return Stop();
|
||||
}
|
||||
|
||||
func Outro_Stop()
|
||||
{
|
||||
GameOver();
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
PlaneNoOil=Das Flugzeug braucht noch Treibstoff. Ich muss irgendwo Öl auftreiben.
|
||||
|
||||
Intro1=Autsch. Pyrit!
|
||||
Intro2=Wie kann der Treibstoff leer sein? Du sagtest doch, ein Fass Öl bringt uns locker an unser Ziel und zurück!
|
||||
Intro3=Dachte ich auch. Aber da wusste ich noch nicht, dass ich drei Tage über dem Ozean kreisen und auf einer einsamen Insel suchen müsste.
|
||||
Intro4=Das ist alles deine Schuld. Ich sags ja nur.
|
||||
Intro5=Was können wir nun tun?
|
||||
Intro6=Ich schlage vor du suchst neues Öl und ich repariere derweil das Flugzeug.
|
||||
Intro7=Klingt gut.
|
||||
|
||||
Pyrit1=Ich bin fast fertig. Hast du das Öl schon gefunden?
|
||||
Pyrit1B=Das Flugzeug ist wieder bereit. Hast du das Öl schon gefunden?
|
||||
PyritQBarrel=Was soll ich mit dem Ölfass tun?
|
||||
PyritABarrel=Bringe es zum Flugzeug. D'oh.
|
||||
PyritQSearch=Wo finde ich Öl?
|
||||
PyritASearch=Keine Ahnung. Wie hast du es letztes Mal gefunden? Sieh dich um und frage andere clonks.
|
||||
PyritQGem=Hast du ein Juwel der Macht gesehen?
|
||||
PyritAGem=Ne. Nie gehört. Aber die Höhlen in diesen Bergen sind bekannt für ihre verborgenen Gefahren und Schätze. Vielleicht solltest du dort suchen.
|
||||
PyritQBye=Tschüss
|
||||
|
||||
DagobertName=Dagobert
|
||||
Dagobert1=Gold...gold...gold...
|
||||
Dagobert1B=Welch wunderschoönes Kleinod...
|
||||
DagobertGoldQ=Gold?
|
||||
DagobertGold1=Es ist ein Hammer! Der Berg ist voll versteckter Schätze, aber ich kann nicht rein.
|
||||
DagobertGold2=Was ist das Problem?
|
||||
DagobertGold3=Der Haupteingang ist mit Lava geflutet. Es gibt andere Eingänge weiter unten, aber die sind wiederum mit Wasser vollgelaufen.
|
||||
DagobertGold4=Könntest du dort nicht durch tauchen?
|
||||
DagobertGold5=Würde ich gerne, aber meine Arthritis...
|
||||
DagobertOilQ=Ich brauche Öl
|
||||
DagobertOil1=Wer braucht das nicht? Aber du weißt vielleicht, dass König Harx es nicht erlaubt.
|
||||
DagobertOil1B=Bringe mir das Juwel und ich gebe dir Öl.
|
||||
DagobertOil1C=Ich habe dir bereits mein gesamtes Öl gegeben.
|
||||
DagobertOil2=Zum Teufel mit Harx. Ich bin auf einer Mission, ihn zu töten.
|
||||
DagobertOil3=Den König töten. Nun, das kann ich nur unterstützen. Vielleicht helfe ich dir. Aber nicht umsonst...
|
||||
DagobertOil4=Die Leute reden von einer Kammer tief im Inneren dieses Berges. Sie soll unglaubliche Mengen an Gold enthalten.
|
||||
DagobertOil5=In dieser Kammer - falls es sie überhaupt gibt - liegt auch das Juwel der Macht{{GemOfPower}}. Es ist ein unscheinbarer, kleiner Edelstein der grün und blau leuchtet.
|
||||
DagobertOil6=Ich interessiere mich aus persönlichen Gründen für dieses Kleinod. Wenn du es mir bringst, verrate ich dir, wo du Öl finden kannst. Und du kannst den Rest des Schatzes behalten!
|
||||
DagobertOil7=Klingt fair. Ich werde nach dem Edelstein suchen.
|
||||
DagobertCaveQ=Wie komme ich in die Höhle?
|
||||
DagobertCave1=Der Haupteingang ist von Lava blockiert. Dort vorbei zu kommen, könnte schwierig sein. Es gibt allerdings Nebeneingänge unterhalb.
|
||||
DagobertCave2=Wenn du das Wasser irgendwie lostwirst, könntest du dort herein kommen.
|
||||
DagobertCave3=Weißt du, was ich in der Höhle vorfinden werde?
|
||||
DagobertCave4=Die Höhlen sind rauhes Terrain und viele Forscher sind schon darin verloren gegangen.
|
||||
DagobertCave5=Einige von ihnen waren jedoch recht erfinderisch. Sie könnten nützliche Werkzeuge zurück gelassen haben, die du auf deiner Mission gebrauchen kannst.
|
||||
DagobertGem0=Schau her Dagobert, ich habe deinen Edelstein gefunden.
|
||||
DagobertGem1=Unglaublich, es gibt ihn also wirklich! Sieh nur diese Reinheit. Diese unbefleckte Schönheit. Er wird bei mir in guten Händen sein.
|
||||
DagobertGem2=Hier, nimm dieses Ölfass.
|
||||
DagobertGem3=Oh, danke.
|
||||
DagobertBye=Lebe wohl
|
||||
|
||||
Outro1=Endlich hast du das Öl. Hat ja eine Weile gedauert.
|
||||
Outro2=Ja. Dein Job, ein wenig auf das Flugzeug zu hämmern, war etwas einfacher.
|
||||
Outro3=Lasst uns keine Zeit verlieren. Nächster Halt: Das Schloss von Hörx!
|
||||
|
||||
Riku1=Hallo Fortscherkollege. Suchst du das Gold?
|
||||
Riku2=Fast. Ich suche das Juwel der Macht.
|
||||
Riku3=Ach das. Das ist vermutlich auch in der Schatzkammer, die sich hinter diesen verschlossenen Toren verbirgt.
|
||||
Riku4=Weißt du, wie man sie auf kriegt?
|
||||
Riku5=Ich glaube, sie werden von Schaltern kontrolliert, die irgendwo hier in den Höhlen versteckt sind.
|
||||
Riku6=Warum suchst du dann nicht die Schalter?
|
||||
Riku7=Warum sollte ich? Ich warte einfach hier und gehe dann rein, wenn jemand anderes die Arbeit für mich erledigt hat!
|
||||
Riku8=Hmpf. Dann muss ich wohl selber suchen.
|
||||
RikuOil1=Fast. Ich suche nach Öl.
|
||||
RikuOil2=Hm, Öl. Hast du Dagobert draußen mal gefragt? Er könnte etwas haben.
|
||||
RikuGem1=Hey Riku. Ich habe das Juwel gefunden.
|
||||
RikuGem2=Das ist cool! Ich bleibe dann hier und bewache den Rest des Schatzes.
|
||||
|
||||
Sophie1=Teeheehe. Schau, es schwebt!
|
||||
Sophie2=Bist du eine Zauberin?
|
||||
Sophie3=Nee. Das ist ein Telehandschuh. Ich habe ihn in der Kiste hier neben mir gefunden.
|
||||
Sophie4=Dort sind noch mehr! Probiere sie mal aus. Einfach mit der Maus neben einen der Gegenstände zeigen und die Taste gedrückt halten um es zu bewegen.
|
||||
SophieSad=Warum hast du mir mein Spielzeug weggenommen? Das ist gemein :(
|
||||
|
||||
Jane1=Er sollte nach Schätzen suchen. Stattdessen schwingt er einfach nur den ganzen Tag am Seil hin und her.
|
||||
Jane1B=Er sollte nach Schätzen suchen. Stattdessen schwang er einfach nur den ganzen Tag am Seil hin und her. Nun ist er tot. Typisch!
|
||||
Jane2=Cool! Kriege ich auch so ein Seil?
|
||||
Jane3=Es liegen noch Enterhaken in den Kisten hier. Nimm ihn einfach in die Hand und drücke die Richtung, die du schießen willst. Drücke noch einmal, um wieder loszulassen.
|
||||
Jane4=Du kannst sogar zwei in jeder Hand einen Enterhaken tragen. Wenn du den zweiten schießt, löst sich der erste automatisch.
|
||||
Jane5=Bitte nimm die Enterhaken alle mit! Ich hab diese Schwingerei satt.
|
||||
|
||||
Tarzan1=Schau her, ich bin Tarzan!
|
||||
|
||||
Ann1=Verdammt! Ich stecke fest.
|
||||
Ann2=Ich weiß, dass dort ein Schalter unter dem Lavasee rechts ist. Aber ich komme nicht heran.
|
||||
Ann3=Gibt es keinen Weg außen herum?
|
||||
Ann4=Es ist alles aus solidem Granit. Ich habe hier sogar eine Pumpe gebaut, um die Lava los zu werden. Aber ich habe kein Rohr, das der Hitze der Lava widerstehen könnte.
|
||||
Ann5=Hm. Vielleicht finde ja irgendwo ein Rohr.
|
||||
|
||||
Donald1=Oh, ein Höhlenforscher. Bitte hilf mir! Ich habe meine ganzen Werkzeuge dort unten im Säuresee verloren.
|
||||
Donald2=Das tut mir ja Leid. Kannst du dir nicht neue Werkzeuge besorgen?
|
||||
Donald3=Das Rohr ist mir egal. Aber die goldene Schaufel ist ein unersetzbares Andenken. Ich habe sie von meinem Ur-ur-urgroßclonk geerbt!
|
||||
Donald4=Ach, eine Leitung liegt dort auch sagst du? Vielleicht sollte ich versuchen, dort heran zu kommen.
|
||||
DonaldShovel1=Hier ist deine Schaufel.
|
||||
DonaldShovel2=Vielen Dank! Ich stehe auf Ewig in deiner Schuld.
|
||||
|
||||
Otto1=Ich liebe diesen einsamen Ort. Er ist so friedlich.
|
||||
Otto2=Schau nur diese Aussicht. Dort hinten im Osten ist sogar eine schwebende Insel über dem See. Ich frage mich, was dort wohl drauf ist.
|
|
@ -0,0 +1,98 @@
|
|||
PlaneNoOil=The plane needs fuel. I must find oil somewhere.
|
||||
|
||||
Intro1=Ouch. Pyrit!
|
||||
Intro2=How can we be out of fuel? You said one barrel would get us to our goal and back easily!
|
||||
Intro3=Yeah, but I didn't plan for having to search you for three days and picking you up on a lonely island in the ocean.
|
||||
Intro4=It's all your fault. Just saying.
|
||||
Intro5=What shall we do now?
|
||||
Intro6=I suggest you go and find new oil. Meanwhile, I will repair the plane.
|
||||
Intro7=Sounds good.
|
||||
|
||||
Pyrit1=I'm almost done. Have you found the oil yet?
|
||||
Pyrit1B=The plane is ready again. Have you found the oil yet?
|
||||
PyritQBarrel=What do I do with the barrel?
|
||||
PyritABarrel=Just bring it to the plane. D'oh.
|
||||
PyritQSearch=Where can I find oil?
|
||||
PyritASearch=I don't know. How did you find it last time? Just look and ask around I guess.
|
||||
PyritQGem=Have you seen a Gem of Power?
|
||||
PyritAGem=No. I've never heard of such a thing. But the caves of these mountains are well known for their hidden dangers and treasures. Maybe you should look inside.
|
||||
PyritQBye=Bye
|
||||
|
||||
DagobertName=Scrooge
|
||||
Dagobert1=Gold...gold...gold...
|
||||
Dagobert1B=Such a beautiful gem...
|
||||
DagobertGoldQ=Gold?
|
||||
DagobertGold1=It's a shame! This mountain is full of hidden treasures, but I can't get inside.
|
||||
DagobertGold2=What's the problem?
|
||||
DagobertGold3=The main entrance to the caves is flooded by lava. There are some other entrances, but they're flooded by water.
|
||||
DagobertGold4=Couldn't you dive through there.
|
||||
DagobertGold5=I would love to. But my arthritis...
|
||||
DagobertOilQ=I need oil
|
||||
DagobertOil1=Who doesn't? But you know, king Harx won't allow it.
|
||||
DagobertOil1B=Bring me the gem and I will give you oil.
|
||||
DagobertOil1C=I've already given you all the oil I have.
|
||||
DagobertOil2=Screw Harx. I'm on a mission to kill him.
|
||||
DagobertOil3=Killing the king. Very well, that's a mission I can approve of. Maybe I can help you. But not for free...
|
||||
DagobertOil4=People talk about a hidden chamber deep within this mountain, which contains unimaginable amounts of gold.
|
||||
DagobertOil5=In this chamber, there is also the Gem of Power{{GemOfPower}} - an inconspicuous little gem shining in green and teal color.
|
||||
DagobertOil6=I'm interested in this little gem for personal reasons. If you bring me this little jewel, I will tell you where you can find oil. You can keep the rest of the treasure.
|
||||
DagobertOil7=Sounds fair. I will look for this gem.
|
||||
DagobertCaveQ=How can I enter the cave?
|
||||
DagobertCave1=The main entrance is blocked by lava. That might be hard to pass. However, there are side entrances you might be able to access below.
|
||||
DagobertCave2=If you can reroute the water somehow, you might be able to get in.
|
||||
DagobertCave3=Do you know what I will find inside the caves?
|
||||
DagobertCave4=The caves are rough terrain and many explorers have been lost already.
|
||||
DagobertCave5=However, some of these explorers are quite ingenious. They might have left behind some useful tools you could use on your mission.
|
||||
DagobertGem0=Look Scrooge, I have found your gem.
|
||||
DagobertGem1=Incredible! Look at its purity. Its immaculate beauty. It will be in good hands.
|
||||
DagobertGem2=Here, just take this oil barrel I had secretly tucked away in my underpants.
|
||||
DagobertGem3=Oh, thanks a lot.
|
||||
DagobertBye=Bye
|
||||
|
||||
Outro1=Finally you got that oil. That took you a while.
|
||||
Outro2=Yeah. Your job hammering on the plane was a bit easier.
|
||||
Outro3=Let's not waste any more time. Next stop: Harx' castle!
|
||||
|
||||
Riku1=Hello fellow Explorer. Are you looking for gold?
|
||||
Riku2=Almost. I'm looking for the Gem of Power.
|
||||
Riku3=Oh, that one. It's probably in the treasure chamber, whch is locked behind these doors.
|
||||
Riku4=Do you know how to open them?
|
||||
Riku5=I think they are controlled by switches hidden somewhere in these caves.
|
||||
Riku6=Why don't you go search these switches then?
|
||||
Riku7=Why would I? I'll just enter the treasure chamber when someone else has done the work for me!
|
||||
Riku8=Hmpf. I guess I'll have to search then.
|
||||
RikuOil1=Almost. I'm looking for oil.
|
||||
RikuOil2=Hm, oil. Did you ask Dagobert outside this mountain? He might have an idea.
|
||||
RikuGem1=Hey Riku, I've found the gem.
|
||||
RikuGem2=That's cool bro! I'll stay here and keep the rest of the treasure then.
|
||||
|
||||
Sophie1=Teeheehe. Look how it levitates!
|
||||
Sophie2=Are you a magician?
|
||||
Sophie3=Nope, it's tele gloves. I've found them in the chest beside me.
|
||||
Sophie4=There's more of them! Just try them out. Press and hold near a lose item to move it.
|
||||
SophieSad=Why did you have to take away my playing items? Sophie sad :(
|
||||
|
||||
Jane1=He's supposed to search for treasures. But he's just swinging his rope all day.
|
||||
Jane1B=He was supposed to search for treasures. Instead, he was just swinging his rope all day. And now he's dead. Typical.
|
||||
Jane2=Cool! Can I have a rope too?
|
||||
Jane3=There's extra grappler bows in the chest. Just put it into your hand and click in the direction you want to shoot. Click again to let go.
|
||||
Jane4=You can even carry two and have one in each hand. Then when you shoot the second, the first one will automatically retreat.
|
||||
Jane5=Please take all the bows. I'm sick of this swinging.
|
||||
|
||||
Tarzan1=Look, I am Tarzan!
|
||||
|
||||
Ann1=Damn I'm stuck.
|
||||
Ann2=I know there's a switch below this lava lake on the right. But I cannot get there.
|
||||
Ann3=Is there no way around it?
|
||||
Ann4=It's all solid granite. I even built a pump to get rid of the lava, but I do not have a pipe that could resist the heat of the lava.
|
||||
Ann5=Hm. Maybe I can find a pipe somewhere.
|
||||
|
||||
Donald1=Oh, fellow explorer, please help me! I've lost all my stuff in this acid lake.
|
||||
Donald2=Oh, I'm sorry to hear that. Can't you get new tools?
|
||||
Donald3=The pipes I don't care for. But the shovel is my golden shovel I've inherited from my grand-grand-grandparent! It's irreplacable.
|
||||
Donald4=Oh, a pipe you said? Hm, maybe I can try to rescue these tools.
|
||||
DonaldShovel1=Here is your shovel.
|
||||
DonaldShovel2=Thank you so much! I will be in your debt forever.
|
||||
|
||||
Otto1=I love this lonely place. It's so peaceful.
|
||||
Otto2=Look at the great view. There is a sky island floating above the lake to the east. I wonder what's on there.
|
|
@ -2,4 +2,4 @@
|
|||
id=Goal_TreasureHunt
|
||||
Version=5,2,0,1
|
||||
Category=C4D_StaticBack|C4D_Goal
|
||||
Picture=0,0,128,128
|
||||
Picture=0,0,64,64
|
||||
|
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 9.4 KiB |
After Width: | Height: | Size: 11 KiB |
|
@ -8,29 +8,32 @@
|
|||
|
||||
#include Library_Goal
|
||||
|
||||
local is_fulfilled;
|
||||
local has_gem_task, got_oil, is_fulfilled;
|
||||
|
||||
public func IsFulfilled() { return is_fulfilled; }
|
||||
|
||||
public func OnTreasureSold() { is_fulfilled = true; }
|
||||
public func OnGotGemTask() { SetGraphics("Hunt"); SetName("$Name2$"); return has_gem_task = true; }
|
||||
public func OnTreasureSold() { SetGraphics(nil); SetName("$Name$"); return got_oil = true; }
|
||||
public func OnOilDelivered() { return is_fulfilled = true; }
|
||||
|
||||
public func GetDescription(int plr)
|
||||
{
|
||||
var message;
|
||||
if (IsFulfilled())
|
||||
message = "$MsgGoalFulfilled$";
|
||||
if (is_fulfilled)
|
||||
return "$MsgGoalFulfilled$";
|
||||
else if (got_oil)
|
||||
return "$MsgGotOil$";
|
||||
else if (has_gem_task)
|
||||
return "$MsgGoalUnFulfilled$";
|
||||
else
|
||||
message = "$MsgGoalUnFulfilled$";
|
||||
return message;
|
||||
return "$MsgGoalOil$";
|
||||
}
|
||||
|
||||
public func Activate(int byplr)
|
||||
{
|
||||
if (IsFulfilled())
|
||||
ToggleGoalMessage(Format("$MsgGoalFulfilled$|$MsgSideGoal$", g_num_goldbars, MAX_GOLD_BARS), byplr);
|
||||
else
|
||||
ToggleGoalMessage(Format("$MsgGoalUnFulfilled$|$MsgSideGoal$", g_num_goldbars, MAX_GOLD_BARS), byplr);
|
||||
return;
|
||||
var desc = GetDescription(byplr);
|
||||
if (has_gem_task) desc = Format("%s|%s", desc, Format("$MsgSideGoal$", g_num_goldbars, MAX_GOLD_BARS));
|
||||
ToggleGoalMessage(desc, byplr);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Shows or hides a message window with information.
|
||||
|
@ -50,12 +53,7 @@ private func ToggleGoalMessage(string msg, int plr)
|
|||
}
|
||||
|
||||
protected func FxGoalMessageStart() {}
|
||||
|
||||
|
||||
public func GetShortDescription(int plr)
|
||||
{
|
||||
return Name;
|
||||
}
|
||||
public func GetShortDescription(int plr) {}
|
||||
|
||||
/*-- Proplist --*/
|
||||
local Name = "$Name$";
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
Name=Ölsuche
|
||||
Name=Schatzsuche
|
||||
MsgSideGoal=Sekundärziel: %d von %d Goldbarren gefunden.
|
||||
MsgGoalFulfilled=Schatz gefunden und verkauft :-)
|
||||
MsgGoalUnFulfilled=Schatz noch nicht gefunden und verkauft :-(
|
||||
MsgGoalOil=Finde ein neues Ölfass.
|
||||
MsgGotOil=Bringe das Ölfass zum Flugzeug.
|
|
@ -1,4 +1,7 @@
|
|||
Name=Treasure hunt
|
||||
Name=Oil hunt
|
||||
Name2=Treasure hunt
|
||||
MsgSideGoal=Side goal: %d of %d gold bars found.
|
||||
MsgGoalFulfilled=Treasure found and sold.
|
||||
MsgGoalUnFulfilled=Treasure not yet found and sold yet.
|
||||
MsgGoalOil=Find a new oil barrel.
|
||||
MsgGotOil=Bring the oil barrel to the plane.
|