Skip to content

Commit

Permalink
Small Brax extensions
Browse files Browse the repository at this point in the history
Added a room to include the new daemon helmet, as an endboss a new
giantdaemonskel.

Need some work on the raising fence (necarea6.kod)
  • Loading branch information
tyras2 committed Jan 24, 2017
1 parent d3ec780 commit ebaf8c9
Show file tree
Hide file tree
Showing 17 changed files with 376 additions and 8 deletions.
5 changes: 4 additions & 1 deletion kod/include/blakston.khd
Original file line number Diff line number Diff line change
Expand Up @@ -773,7 +773,8 @@
RID_NECROAREA3B = 832
RID_BRAX_BUILDING2 = 832
RID_BRAX_ARENA = 833
RID_BRAX_END = 833
RID_NECROAREA6 = 834
RID_BRAX_END = 834

RID_BOURGEOIS = 850
RID_CASTLE2A = 850
Expand Down Expand Up @@ -1782,6 +1783,8 @@
TID_XEO_HOLY = 71
TID_XEO_NERU = 72
TID_XEO_ILL = 73

TID_SKELETON5 = 74

// English articles

Expand Down
113 changes: 113 additions & 0 deletions kod/object/active/holder/nomoveon/battler/monster/skel/gdaemskel.kod
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
// Meridian 59, Copyright 1994-2012 Andrew Kirmse and Chris Kirmse.
// All rights reserved.
//
// This software is distributed under a license that is described in
// the LICENSE file that accompanies it.
//
// Meridian is a registered trademark.


////////////////////////////////////////////////////////////////////////////////
GiantDaemonSkeleton is Skeleton

constants:

include blakston.khd

DEMENTIA_CHANCE = 20

resources:

include gdaemskel.lkod

GiantDaemonSkeleton_koc_name_rsc = "gikochaleoc"
GiantDaemonSkeleton_name_rsc = "giant daemon skeleton"
GiantDaemonSkeleton_icon_rsc = gskelbody.bgf
GiantDaemonSkeleton_desc_rsc = \
"The sight alone of this abomination of nature is often enough to "
"paralyze a human. You shudder to think what dark ritual brought "
"this creature into being."

GiantDaemonSkeleton_head = gskelhed4.bgf
GiantDaemonSkeleton_dead_icon_rsc = skelX.bgf
GiantDaemonSkeleton_dead_name_rsc = "pile of bones"

GiantDaemonSkeleton_sound_miss = skl4_atk.ogg
GiantDaemonSkeleton_sound_death = skl4_die.ogg
GiantDaemonSkeleton_sound_aware = skl4_awr.ogg

classvars:

vrKocName = GiantDaemonSkeleton_koc_name_rsc
vrName = GiantDaemonSkeleton_name_rsc
vrIcon = GiantDaemonSkeleton_icon_rsc
vrDesc = GiantDaemonSkeleton_desc_rsc
vrDead_icon = GiantDaemonSkeleton_dead_icon_rsc
vrDead_name = GiantDaemonSkeleton_dead_name_rsc

viTreasure_type = TID_SKELETON5
viSpeed = SPEED_FAST
viAttack_type = ATCK_WEAP_THRUST
viAttributes = 0
viLevel = 150
viDifficulty = 9
viVisionDistance = 20
// Attack range of 192, or 3 row/col.
viAttackRange = 192
viKarma = -100
viDefault_behavior = \
AI_FIGHT_AGGRESSIVE | AI_FIGHT_HYPERAGGRESSIVE \
| AI_FIGHT_SWITCHALOT | AI_MOVE_FLEE_FRIGHTENERS
viCashmin = 2589
viCashmax = 4225
vrSound_miss = DaemonSkeleton_sound_miss
vrSound_aware = DaemonSkeleton_sound_aware
vrSound_death = DaemonSkeleton_sound_death

vrHeadIcon = GiantDaemonSkeleton_head

properties:

piAnimation = ANIM_NONE

messages:

SetResistances()
{
plResistances = [ [ATCK_WEAP_PIERCE, 70 ],
[ATCK_WEAP_THRUST, 70 ],
[-ATCK_SPELL_UNHOLY, 70 ],
[-ATCK_SPELL_SHOCK, 70 ],
[-ATCK_SPELL_FIRE, 70 ],
[-ATCK_SPELL_COLD, -10 ],
[-ATCK_SPELL_HOLY, -20 ],
[ATCK_WEAP_BLUDGEON, -20 ]
];

return;
}

HitSideEffect(what = $, who = $)
{
local oSpell;

oSpell = Send(SYS,@FindSpellByNum,#num=SID_DEMENT);
if NOT Send(what,@IsEnchanted,#what=oSpell)
AND Random(1,DEMENTIA_CHANCE) = 1
{
if who <> $
{
Send(oSpell,@CastSpell,#who=who,#lTargets=[what],#iSpellPower=15,
#bItemCast=TRUE);
}
else
{
Send(oSpell,@DoSpell,#what=self,#oTarget=what,#iSpellPower=15);
}
}

return;
}

end
////////////////////////////////////////////////////////////////////////////////
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
GiantDaemonSkeleton_koc_name_rsc = de "gikochaleoc"
GiantDaemonSkeleton_name_rsc = de "Das Riesen D�monenskelett"
GiantDaemonSkeleton_desc_rsc = de \
"Allein der Anblick dieser Abnormalit�t der Natur ist oft genug umeinen "
"Menschen erstarren zu lassen. Du schauderst, als Du daran denkst,was "
"f�r ein dunkles Ritual diese Abnormalit�t zum Leben erweckt hat!"
GiantDaemonSkeleton_dead_name_rsc = de "Ein gro�er Knochenhaufen"
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
!include $(TOPDIR)\common.mak

DEPEND = ..\skel.bof
BOFS = batrskel.bof daemskel.bof tuskskel.bof
BOFS = batrskel.bof daemskel.bof tuskskel.bof gdaemskel.bof


!include $(KODDIR)\kod.mak
2 changes: 1 addition & 1 deletion kod/object/active/holder/room/monsroom/makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ BOFS = badland1.bof a5.bof a6.bof c4.bof c6.bof castle1b.bof d4.bof d5.bof \
necarea3.bof necare3a.bof necare3b.bof necarea4.bof necarea5.bof \
marcryp1.bof marcryp2.bof marcry3a.bof castle2b.bof castle2c.bof \
throne2.bof survivalroom.bof castle1d.bof tossecret.bof farolwest.bof \
razaforest.bof oldtown.bof
razaforest.bof oldtown.bof necarea6.bof

# g7.bof h8.bof i2.bof i4.bof i5.bof \
# j4.bof j5.bof j6.bof j7.bof j8.bof j9.bof k3.bof \
Expand Down
8 changes: 5 additions & 3 deletions kod/object/active/holder/room/monsroom/necarea3.kod
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,11 @@ messages:

plExits = $;

// Locked gate to the north
plExits = Cons([ 5, 20, ROOM_LOCKED_DOOR, Necropolis3_locked_gate ],plExits);
plExits = Cons([ 5, 21, ROOM_LOCKED_DOOR, Necropolis3_locked_gate ],plExits);
// To Daemon Skeleton
plExits = Cons([ 1, 18, RID_NECROAREA6, 31, 11, ROTATE_NONE ],plExits);
plExits = Cons([ 1, 19, RID_NECROAREA6, 31, 11, ROTATE_NONE ],plExits);
plExits = Cons([ 1, 20, RID_NECROAREA6, 31, 11, ROTATE_NONE ],plExits);


// Southwest abandoned building
plExits = Cons([ 19, 12, ROOM_LOCKED_DOOR, Necropolis3_locked_door ],plExits);
Expand Down
189 changes: 189 additions & 0 deletions kod/object/active/holder/room/monsroom/necarea6.kod
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
// Meridian 59, Copyright 1994-2012 Andrew Kirmse and Chris Kirmse.
// All rights reserved.
//
// This software is distributed under a license that is described in
// the LICENSE file that accompanies it.
//
// Meridian is a registered trademark.


///////////////////////////////////////////////////////////////////////////////////
Necropolis6 is MonsterRoom

constants:

include blakston.khd
include protocol.khd

GIANT_ROW = 6
GIANT_COL = 11

HOUR_MILLI = 900000

FENCE_1 = 1
FENCE_2 = 2
FENCE_3 = 3

resources:

include necarea6.lkod

room_name_Necropolis6 = "Decaying City of Brax II"
room_Necropolis6 = necarea6.roo
Necropolis6_music = nec02.ogg

Necropolis6_loop = necloop4.ogg

Necropolis6_no_rift = "Casting shadow rift here would be pointless."

fence_open_sound = doordown.ogg
fence_close_sound = doorrsup.ogg

classvars:

vrName = room_name_Necropolis6

viTeleport_row = 27
viTeleport_col = 11

viTerrain_type = TERRAIN_NECROPOLIS

properties:

prRoom = room_Necropolis6
piRoom_num = RID_NECROAREA6

piBaseLight = LIGHT_MIN
piOutside_factor = 0

piGen_time = 25000
piGen_percent = 80

piInit_count_min = 7
piInit_count_max = 9

piMonster_count_max = 25

prMusic = Necropolis6_music

ptGiant_gen = $

messages:

CreateStandardExits()
{

plExits = $;

// To NECROAREA 3
plExits = Cons([ 32, 10, RID_NECROAREA3, 2, 19, ROTATE_NONE ],plExits);
plExits = Cons([ 32, 11, RID_NECROAREA3, 2, 19, ROTATE_NONE ],plExits);
plExits = Cons([ 32, 12, RID_NECROAREA3, 2, 19, ROTATE_NONE ],plExits);

// To INSIDE
plExits = Cons([ 22, 10, RID_NECROAREA6, 20, 11, ROTATE_NONE ],plExits);
plExits = Cons([ 22, 11, RID_NECROAREA6, 20, 11, ROTATE_NONE ],plExits);
plExits = Cons([ 22, 12, RID_NECROAREA6, 20, 11, ROTATE_NONE ],plExits);

plExits = Cons([ 21, 10, RID_NECROAREA6, 22, 11, ROTATE_NONE ],plExits);
plExits = Cons([ 21, 11, RID_NECROAREA6, 22, 11, ROTATE_NONE ],plExits);
plExits = Cons([ 21, 12, RID_NECROAREA6, 22, 11, ROTATE_NONE ],plExits);

propagate;
}


ReqSpellCast(who = $, oSpell = $, lItems = $)
{
if IsClass(oSpell,&DeathsDoor)
{
Send(who,@MsgSendUser,#message_rsc=Necropolis6_no_rift);

return FALSE;
}

propagate;
}


Constructed()
{
plMonsters = [ [&DaemonSkeleton, 70], [&TuskedSkeleton, 30] ];
plGenerators = [ [10,9], [10,14], [13,14], [15,9], [17,9], [17,14] ];

plLooping_sounds = [[ Necropolis4_loop, 0, 0, 200, 100 ]];

Send(self,@GiantGenTimer);

propagate;

}


GiantGenTimer()
{
local i,bFound,each_obj;

ptGiant_gen = $;

bFound = FALSE;
foreach i in plActive
{
each_obj = Send(self,@HolderExtractObject,#data=i);
if IsClass(each_obj,&GiantDaemonSkeleton)
{
bFound = TRUE;
}
}

if not bFound
{
Send(self,@NewHold,#what=Create(&GiantDaemonSkeleton),#new_row=GIANT_ROW,#new_col=GIANT_COL);
}

ptGiant_gen = CreateTimer(self,@GiantGenTimer,1*HOUR_MILLI);

return;
}


CreateStandardObjects()
{
Send(self,@NewHold,#what=Create(&OrnamentalObject,#type=OO_NECSLIME),
#new_row=18,#new_col=8,#fine_row=56,#fine_col=0,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&OrnamentalObject,#type=OO_NECSLIME),
#new_row=5,#new_col=14,#fine_row=0,#fine_col=48,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&OrnamentalObject,#type=OO_NECSLIME),
#new_row=20,#new_col=16,#fine_row=56,#fine_col=8,#angle=ANGLE_EAST);

Send(self,@NewHold,#what=Create(&Skull),
#new_row=19,#new_col=8,#fine_row=8,#fine_col=40,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&OrnamentalObject,#type=OO_HALFSKULL),
#new_row=19,#new_col=9,#fine_row=0,#fine_col=8,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&Skull),
#new_row=15,#new_col=12,#fine_row=48,#fine_col=8,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&OrnamentalObject,#type=OO_HALFSKULL),
#new_row=16,#new_col=11,#fine_row=24,#fine_col=0,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&Skull),
#new_row=12,#new_col=13,#fine_row=8,#fine_col=0,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&OrnamentalObject,#type=OO_HALFSKULL),
#new_row=11,#new_col=11,#fine_row=16,#fine_col=40,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&Skull),
#new_row=7,#new_col=10,#fine_row=48,#fine_col=16,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&OrnamentalObject,#type=OO_HALFSKULL),
#new_row=7,#new_col=13,#fine_row=56,#fine_col=0,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&Skull),
#new_row=6,#new_col=10,#fine_row=24,#fine_col=0,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&OrnamentalObject,#type=OO_HALFSKULL),
#new_row=5,#new_col=12,#fine_row=24,#fine_col=24,#angle=ANGLE_EAST);

Send(self,@NewHold,#what=Create(&OrnamentalObject,#type=OO_NECTREE4),
#new_row=27,#new_col=9,#fine_row=0,#fine_col=48,#angle=ANGLE_EAST);
Send(self,@NewHold,#what=Create(&GlowTree),
#new_row=22,#new_col=13,#fine_row=48,#fine_col=48,#angle=ANGLE_EAST);

propagate;
}

end
////////////////////////////////////////////////////////////////////////////////
2 changes: 2 additions & 0 deletions kod/object/active/holder/room/monsroom/necarea6.lkod
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
room_name_Necropolis6 = de "Die verfallende Stadt von Brax II"
Necropolis6_no_rift = de "Hier Schattenriss zu zaubern w�rde nutzlos sein."
2 changes: 1 addition & 1 deletion kod/object/passive/trestype/makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ BOFS = wimptres.bof notres.bof spquent.bof med-tght.bof wmp-medt.bof \
statuet.bof kriipat.bof molluskt.bof shadowbeastt.bof ratktres.bof \
earthelet.bof fireelet.bof iceelet.bof neruelet.bof easterbunnyt.bof \
killerbunnyt.bof xeoairt.bof xeoeartht.bof xeofiret.bof xeowatert.bof \
xeoacidt.bof xeounholyt.bof xeoholyt.bof xeonerut.bof xeoillt.bof
xeoacidt.bof xeounholyt.bof xeoholyt.bof xeonerut.bof xeoillt.bof skel5t.bof

!include $(KODDIR)\kod.mak
Loading

0 comments on commit ebaf8c9

Please sign in to comment.