I already know that the Phoenix source was made public. But I still wanted to share with you these mobs.
Hermit God's setpiece was made by @Lunatis If I remember correctly the rest of it (behaviors and stuff) was made by me..
The Ghost Ship was entirely made by me .. I saw that these were stored on the server..
Edit : Ghost Ship's Vengeful Spirit appears invisible. because in db/data/data34.xml the code
Code:
<Object type="0x0e39" id="Vengeful Spirit">
<Class>Character</Class>
<AnimatedTexture><File>chars16x16rEncounters</File><Index>39</Index></AnimatedTexture>
<HitSound>monster/flaming_skulls_hit</HitSound>
<DeathSound>monster/beholder_death</DeathSound>
<MaxHitPoints>2000</MaxHitPoints>
<XpMult>0</XpMult>
<Enemy/>
<Size>0</Size>
<ShadowSize>80</ShadowSize>
<Z>0.3</Z>
<Flying/>
<Projectile>
<ObjectId>Ghostly Blast</ObjectId>
<Speed>85</Speed>
<Damage>65</Damage>
<Size>100</Size>
<LifetimeMS>600</LifetimeMS>
</Projectile>
</Object>
Has size 0, in addition.xml add this :
Code:
<Object type="0x0e3b" id="Tempest Cloud">
<Enemy/>
<Class>Character</Class>
<Texture><File>invisible</File><Index>0</Index></Texture>
<AltTexture id="1">
<Texture><File>lofiObjBig</File><Index>0x33</Index></Texture>
</AltTexture>
<AltTexture id="2">
<Texture><File>lofiObjBig</File><Index>0x33</Index></Texture>
</AltTexture>
<AltTexture id="3">
<Texture><File>lofiObjBig</File><Index>0x34</Index></Texture>
</AltTexture>
<AltTexture id="4">
<Texture><File>lofiObjBig</File><Index>0x35</Index></Texture>
</AltTexture>
<AltTexture id="5">
<Texture><File>lofiObjBig</File><Index>0x36</Index></Texture>
</AltTexture>
<AltTexture id="6">
<Texture><File>lofiObjBig</File><Index>0x37</Index></Texture>
</AltTexture>
<AltTexture id="7">
<Texture><File>lofiObjBig</File><Index>0x38</Index></Texture>
</AltTexture>
<AltTexture id="8">
<Texture><File>lofiObjBig</File><Index>0x39</Index></Texture>
</AltTexture>
<AltTexture id="9">
<Texture><File>lofiObjBig</File><Index>0x3a</Index></Texture>
</AltTexture>
<HitSound>monster/sprites_hit</HitSound>
<DeathSound>monster/sprites_death</DeathSound>
<Size>100</Size>
<MaxHitPoints>800</MaxHitPoints>
<Defense>15</Defense>
<Flying/>
<Z>0.8</Z>
<Projectile id="0">
<ObjectId>Lightning Bolt</ObjectId>
<Damage>66</Damage>
<Speed>40</Speed>
<Size>80</Size>
<LifetimeMS>600</LifetimeMS>
</Projectile>
</Object>
<Object type="0x0e39" id="Vengeful Spirit">
<Class>Character</Class>
<AnimatedTexture><File>chars16x16rEncounters</File><Index>39</Index></AnimatedTexture>
<HitSound>monster/flaming_skulls_hit</HitSound>
<DeathSound>monster/beholder_death</DeathSound>
<MaxHitPoints>2000</MaxHitPoints>
<XpMult>0</XpMult>
<Enemy/>
<Size>100</Size>
<ShadowSize>80</ShadowSize>
<Z>0.3</Z>
<Flying/>
<Projectile>
<ObjectId>Ghostly Blast</ObjectId>
<Speed>85</Speed>
<Damage>65</Damage>
<Size>100</Size>
<LifetimeMS>600</LifetimeMS>
</Projectile>
</Object>
EDIT : There are some crash issues with Ghost Ship. I'm trying to fix them .
EDIT : Fixed the crashes . Replace everything in setpiece/GhostShip.cs with the code :
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using wServer.logic.loot;
using wServer.realm.entities;
namespace wServer.realm.setpieces
{
class GhostShip : ISetPiece
{
public int Size
{
get { return 50; }
}
static readonly byte Tree = (byte)XmlData*****ToType["Tree Jungle"];
static readonly byte Water = (byte)XmlData*****ToType["GhostWater"];
static readonly byte Sand = (byte)XmlData*****ToType["Ghost Water Beach"];
Random rand = new Random();
public void RenderSetPiece(World world, IntPoint pos)
{
int DarkGrassradiu = 17;
int sandRadius = 17;
int waterRadius = 14;
List<IntPoint> border = new List<IntPoint>();
int[,] o = new int[Size, Size];
int[,] t = new int[Size, Size];
for (int y = 0; y < Size; y++) //Outer
for (int x = 0; x < Size; x++)
{
double dx = x - (Size / 2.0);
double dy = y - (Size / 2.0);
double r = Math.Sqrt(dx * dx + dy * dy);
if (r <= sandRadius)
t[x, y] = 2;
}
for (int y = 0; y < Size; y++) //Water
for (int x = 0; x < Size; x++)
{
double dx = x - (Size / 2.0);
double dy = y - (Size / 2.0);
double r = Math.Sqrt(dx * dx + dy * dy);
if (r <= waterRadius)
{
t[x, y] = 3;
}
}
for (int x = 0; x < Size; x++)
for (int y = 0; y < Size; y++)
{
if (((x > 5 && x < DarkGrassradiu) || (x < Size - 5 && x > Size - DarkGrassradiu) ||
(y > 5 && y < DarkGrassradiu) || (y < Size - 5 && y > Size - DarkGrassradiu)) &&
o[x, y] == 0 && t[x, y] == 1)
{
t[x, y] = 4;
}
}
for (int x = 0; x < Size; x++)
for (int y = 0; y < Size; y++)
{
if (t[x, y] == 1)
{
var tile = world.Map[x + pos.X, y + pos.Y].Clone();
tile.TileId = Tree; tile.ObjType = 0;
world.Obstacles[x + pos.X, y + pos.Y] = 0;
world.Map[x + pos.X, y + pos.Y] = tile;
}
else if (t[x, y] == 2)
{
var tile = world.Map[x + pos.X, y + pos.Y].Clone();
tile.TileId = Sand; tile.ObjType = 0;
world.Obstacles[x + pos.X, y + pos.Y] = 0;
world.Map[x + pos.X, y + pos.Y] = tile;
}
else if (t[x, y] == 3)
{
var tile = world.Map[x + pos.X, y + pos.Y].Clone();
tile.TileId = Water; tile.ObjType = 0;
world.Obstacles[x + pos.X, y + pos.Y] = 0;
world.Map[x + pos.X, y + pos.Y] = tile;
}
else if (t[x, y] == 4)
{
var tile = world.Map[x + pos.X, y + pos.Y].Clone();
tile.ObjType = Tree;
if (tile.ObjId == 0) tile.ObjId = world.GetNextEntityId();
world.Obstacles[x + pos.X, y + pos.Y] = 0;
world.Map[x + pos.X, y + pos.Y] = tile;
}
}
Entity Gship = Entity.Resolve(0x0e37);
Entity Gshipsum = Entity.Resolve(0x0e38);
Gship.Move(pos.X + 24.5f, pos.Y + 24.5f);
world.EnterWorld(Gship);
Gshipsum.Move(pos.X + 25.5f, pos.Y + 25.5f);
world.EnterWorld(Gshipsum);
}
}
}