Ghost Ship and Hermit Behaviors.

Posts 1–14 of 14 · Page 1 of 1
Ghost Ship and Hermit Behaviors.
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..

 
Screenshot


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)XmlDatas.IdToType["Tree Jungle"];
        static readonly byte Water = (byte)XmlDatas.IdToType["GhostWater"];
        static readonly byte Sand = (byte)XmlDatas.IdToType["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);
          
       }
        

    }
}
Gship_mpgh.net.rar5 KB · 90 downloads Clean
Hermit_mpgh.net.rar5 KB · 96 downloads Clean
Hermit Screenshot.png187 KB · 21 downloads
Really nice, will definitely put that into my server another time
Plolz where have you been in the last year. Haven't seen you in forever.
I think I was hiding in a cave... under a rock... playing league with my friends..
Quote Originally Posted by pLolz View Post
I think I was hiding in a cave... under a rock... playing league with my friends..
It's nice to see you back.
Ah pLolz finally returns.

I will ask you politely to make the Puppet Masters Theater Behavior because it seems like you have a lot of time to do it
Quote Originally Posted by Ahl View Post
Ah pLolz finally returns.

I will ask you politely to make the Puppet Masters Theater Behavior because it seems like you have a lot of time to do it
Ergh... It doesn't feel like it needs a lot of time. The behaviors of the minnions are REALLY easy to do. the final boss seems like just spamming spiralattack in some specific order. and some chargin and attacking... Doesn't seem like hard work to me.. it's probably gonna take 1 hour or 2 . But I still need to fix my problem with the new added stuff doe :s I can't do it If I can't see anything right ^_^. I'm not gonna make the map doe.. I need that from someone.
Quote Originally Posted by pLolz View Post
Ergh... It doesn't feel like it needs a lot of time. The behaviors of the minnions are REALLY easy to do. the final boss seems like just spamming spiralattack in some specific order. and some chargin and attacking... Doesn't seem like hard work to me.. it's probably gonna take 1 hour or 2 . But I still need to fix my problem with the new added stuff doe :s I can't do it If I can't see anything right ^_^. I'm not gonna make the map doe.. I need that from someone.
Well they would need to make like 5 maps at least because in Prod, everytime you go into the dungeon, it is a different layout. Never the same like the Abyss.

This would need randomized dungeons as well but that isn't hard to add in
Quote Originally Posted by Ahl View Post
Well they would need to make like 5 maps at least because in Prod, everytime you go into the dungeon, it is a different layout. Never the same like the Abyss.

This would need randomized dungeons as well but that isn't hard to add in
Since I've been missing. Do we have randomized dungeons ? If so... nice.. The 5 map thing can be managed. Just like battle arenas
Quote Originally Posted by pLolz View Post
Since I've been missing. Do we have randomized dungeons ? If so... nice.. The 5 map thing can be managed. Just like battle arenas
We have had this for ages. It isn't had to make anyways. There should be a tutorial on this but if not, check doomed realms source for it
Quote Originally Posted by Ahl View Post
We have had this for ages. It isn't had to make anyways. There should be a tutorial on this but if not, check doomed realms source for it
What kind of randomization are you talking about? Curious because abyss on production has a random layout every time. Are you talking about having multiple premade maps that are chosen at random? If so, I wouldn't really call that randomized. If not, looks like I need to look into this and save me some time tackling that problem.
Quote Originally Posted by nilly View Post
What kind of randomization are you talking about? Curious because abyss on production has a random layout every time. Are you talking about having multiple premade maps that are chosen at random? If so, I wouldn't really call that randomized. If not, looks like I need to look into this and save me some time tackling that problem.
Most of Prod's dungeons use PRDG or PDG - (Procedural Random Dungeon Generation) or (Procedural Dungeon Generation).

How they do it?
Well it's a 3 pass system that happens almost instantaniously...

Pass 1: They generate floorings for the entire dungeon. Spawn and Boss rooms are unique shapes so they go first, All other middle rooms are generated right after.

Pass 2: This is where all the walls are constructed as well as blocksight is initiated (most likely just built into the wall system)

Pass 3: In the third pass they place out all the regions and Cowardice Portal as well as the Enemy spawners are placed with a system to make sure you don't have mixed enemies... Like -- 1 Brown Slime - 1 Blue Golem and a few skeletons... They make sure that a group of enemies spawn at the same time by placing down one Enemy region per room and then sending an array of information to each of them using a randomized system to do so.
Quote Originally Posted by Kithio View Post
Most of Prod's dungeons use PRDG or PDG - (Procedural Random Dungeon Generation) or (Procedural Dungeon Generation).

How they do it?
Well it's a 3 pass system that happens almost instantaniously...

Pass 1: They generate floorings for the entire dungeon. Spawn and Boss rooms are unique shapes so they go first, All other middle rooms are generated right after.

Pass 2: This is where all the walls are constructed as well as blocksight is initiated (most likely just built into the wall system)

Pass 3: In the third pass they place out all the regions and Cowardice Portal as well as the Enemy spawners are placed with a system to make sure you don't have mixed enemies... Like -- 1 Brown Slime - 1 Blue Golem and a few skeletons... They make sure that a group of enemies spawn at the same time by placing down one Enemy region per room and then sending an array of information to each of them using a randomized system to do so.
I didn't really research the whole prdg but my idea was to make a puzzle piece matcher if you would. So one would create many separate "maps" that contain just one room for a particular dungeon. Then just write code to match up the entrances and exits of the rooms.

Maps like abyss might be a little hard to do with a simplistic approach such as this one, I'll know for sure later when I examine multiple abyss layouts and see if I can spot patterns. The floor of abyss is pretty interesting and the only way I can think to achieve that is to make randomly generated flooring / walls as you suggest. But if you take mad lab for instance, many of the rooms look "standardized" as if they came from a predefined layout. On such maps a simple puzzle piece matcher should work.

Supposedly we already have this feature in available sources. They use 3 pass prdg?
Quote Originally Posted by nilly View Post
I didn't really research the whole prdg but my idea was to make a puzzle piece matcher if you would. So one would create many separate "maps" that contain just one room for a particular dungeon. Then just write code to match up the entrances and exits of the rooms.

Maps like abyss might be a little hard to do with a simplistic approach such as this one, I'll know for sure later when I examine multiple abyss layouts and see if I can spot patterns. The floor of abyss is pretty interesting and the only way I can think to achieve that is to make randomly generated flooring / walls as you suggest. But if you take mad lab for instance, many of the rooms look "standardized" as if they came from a predefined layout. On such maps a simple puzzle piece matcher should work.

Supposedly we already have this feature in available sources. They use 3 pass prdg?
3 Pass PRDG is the most common type of random generation systems because it's the most simplistic and it works perfectly

As you said about Abyss - Yes, it's not as easy to do because what the abyss has is a Mask that generates Lava ontop of it with a thickness of 3-5

Explanation about 3 Pass with Masking:

As you know the First Pass creates the floors across the dungeon. With Masking you draw a seperate layer ontop of the map that is on a curve, (Starts on the top and curves to the sides (Left or Right - Never both) and then everything that mask touches because a Lava Tile - Then in the 2nd pass when it adds in all the walls it also adds the Masking Tiles (Pathways across lava to make sure all paths are still possible to take). Then the 3rd tile just does the exact same as the normal system without masking. That's the simplest way to mimic Abysses, The Treasure Room is a different story because it's usually placed during Pass 1 right before the masking is done if there is one placed on the map. Or it is integrated into the Masking generation to make sure it doesn't take too big of a hit with Lava Tiles considering it's creating it's own tiles.

Normally all extra presets would be added during Pass 1 or 2 but I think in this case with the Treasure Room it's either added on Pass 1 before Masking (Pass 1b) or during Pass 3 (generation of enemies and regions) in order to keep the layout. As the Treasure Room is a SetPiece that gets set down on the map where a room has a dead end towards the top usually. Meaning it will always be on the northern side of the map.

My opinion on handling Treasure Room:
I'd say - In order to keep the Treasure Room secure from the Masking system it'd be done in Pass 2 or Pass 3 so that it doesn't have any Lava Tiles inside of it when it's created.
Posts 1–14 of 14 · Page 1 of 1
This thread is closed for replies.

Similar Threads

Talk with us