Jump to content

I don't know how to set up my doom mod? Also how do you add custom enemies?


PZER

Recommended Posts

ObsidianRavager.zip is an actor (monster) done with ZSCRIPT and thus GZDoom specific.

zip.zip is a pwad done for DOOM/BOOM format and thus not compatible with the actor.

 

Solution:

Convert your pwad to GZDoom format, either Doom in Hexen format (DiHF) or Universal Doom Map Format (UDMF).

Add the actor to the convertedpwad.

Add a MAPINFO definition with a DoomEDnums block to specify a Thing Type number.

 

Search Doomworld for convert to GZDoom

Visit the ZDoom Wiki and search MAPINFO and UDMF

 

You probably will have a few additional questions.

 

 

Edited by Kappes Buur

Share this post


Link to post

Should I make a decorate file? Or should I copy everything in the file and paste it over?

Edited by PZER

Share this post


Link to post

This is what I got for MAPINFO:

DoomEDnums
{
    32001
}class ObsidianRavager : Actor
{
    bool CanCastTrap;
    Default
    {
        Health 2000;
        Radius 24;
        Height 96;
        Mass 1000;
        Speed 14;
        PainChance 40;
        Monster;
        Scale 0.7;
        MeleeRange 84;
        +FLOORCLIP;
        +MISSILEMORE;
        +MISSILEEVENMORE;
        +DONTGIB;
        +NOBLOODDECALS;
        BloodType "ObsidianChunk";
        SeeSound "Obsidian/Alert";
        PainSound "Obsidian/Pain";
        DeathSound "Obsidian/Death";
        ActiveSound "Obsidian/Idle";
        Obituary "%o was killed by an Obsidian Ravager.";
        HitObituary "%o was killed by an Obsidian Ravager.";
        Tag "Obsidian Ravager";
    }
    States
    {
    Spawn:
        VSTL IJK 10 A_Look;
        Loop;
    See:
        VSTL ABCDEFGH 7 A_Chase;
        Loop;
    Melee:
        VSTL L 1 A_FaceTarget;
        VSTL L 1 A_PlaySound("Obsidian/Swipe");
        VSTL L 4 A_FaceTarget;
        VSTL M 6 A_FaceTarget; 
        VSTL NNN 2
        {
            A_FaceTarget();
            A_Recoil(-3);
        }
        VSTL O 12 A_CustomMeleeAttack(random(10, 15) * 7, "Obsidian/Melee");
        VSTL P 10;
        Goto See;
    Missile:
        TNT1 A 0
        {
            if (CanCastTrap==true && random(1,3)==1)
            {
                CanCastTrap = false;
                SetStateLabel("CastTrap");
            }
        }
        VSTL QR 5 A_FaceTarget;
        VSTL S 10 A_PlaySound("Obsidian/Attack");
        VSTL T 5 A_FaceTarget;
        TNT1 A 0
        {
            if (random(1,2)==1) SetStateLabel("Missile1");
        }
        Goto Missile2;
    CastTrap:
        VSTL R 10 A_FaceTarget;
        VSTL P 10 A_SpawnProjectile("TrapAttack");
        Goto See;
    Missile1:
        VSTL U 8
            {
            if(target)
                {
                int Dist = Distance3D(target);
                int zDiff = (self.pos.z - target.pos.z);
                if ((Dist < 250) || (zDiff < 0)) A_SpawnProjectile("ChaosBallNoGrav",59,0,0);
                else if (Dist < 400) A_SpawnProjectile("ChaosBall",59,0,0,CMF_OFFSETPITCH,Dist*-0.01);
                else if (Dist > 1000) A_SpawnProjectile("ChaosBall",59,0,0,CMF_OFFSETPITCH,-18);
                else A_SpawnProjectile("ChaosBall",59,0,0,CMF_OFFSETPITCH,Dist*-0.018);
                }
            A_Playsound("Obsidian/Missile");
            CanCastTrap = true;
            }
        VSTL V 8;
        Goto See;
    Missile2:
        VSTL U 8
            {
            if(target)
                {
                int Dist = Distance3D(target);
                int zDiff = (self.pos.z - target.pos.z);
                if ((Dist < 250) || (zDiff < 0)) 
                    {
                    A_SpawnProjectile("ChaosBarrageNoGrav",59,0,random(-14,-18));
                    A_SpawnProjectile("ChaosBarrageNoGrav",59,0,random(14,18));
                    A_SpawnProjectile("ChaosBarrageNoGrav",59,0,random(-8,-12));
                    A_SpawnProjectile("ChaosBarrageNoGrav",59,0,random(8,12));
                    A_SpawnProjectile("ChaosBarrageNoGrav",59,0,random(-2,-6));
                    A_SpawnProjectile("ChaosBarrageNoGrav",59,0,random(2,6));
                    }
                else if (Dist < 400)
                    {
                    A_SpawnProjectile("ChaosBarrage",59,0,random(-14,-18),CMF_OFFSETPITCH,(Dist*-0.01));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(14,18),CMF_OFFSETPITCH,(Dist*-0.01));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(-8,-12),CMF_OFFSETPITCH,(Dist*-0.01));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(8,12),CMF_OFFSETPITCH,(Dist*-0.01));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(-2,-6),CMF_OFFSETPITCH,(Dist*-0.01));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(2,6),CMF_OFFSETPITCH,(Dist*-0.01));
                    }
                else if (Dist > 1000)
                    {
                    A_SpawnProjectile("ChaosBarrage",59,0,random(-14,-18),CMF_OFFSETPITCH,-18);
                    A_SpawnProjectile("ChaosBarrage",59,0,random(14,18),CMF_OFFSETPITCH,-18);
                    A_SpawnProjectile("ChaosBarrage",59,0,random(-8,-12),CMF_OFFSETPITCH,-18);
                    A_SpawnProjectile("ChaosBarrage",59,0,random(8,12),CMF_OFFSETPITCH,-18);
                    A_SpawnProjectile("ChaosBarrage",59,0,random(-2,-6),CMF_OFFSETPITCH,-18);
                    A_SpawnProjectile("ChaosBarrage",59,0,random(2,6),CMF_OFFSETPITCH,-18);
                    }
                else 
                    {
                    A_SpawnProjectile("ChaosBarrage",59,0,random(-14,-18),CMF_OFFSETPITCH,(Dist*-0.018));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(14,18),CMF_OFFSETPITCH,(Dist*-0.018));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(-8,-12),CMF_OFFSETPITCH,(Dist*-0.018));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(8,12),CMF_OFFSETPITCH,(Dist*-0.018));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(-2,-6),CMF_OFFSETPITCH,(Dist*-0.018));
                    A_SpawnProjectile("ChaosBarrage",59,0,random(2,6),CMF_OFFSETPITCH,(Dist*-0.018));
                    }
                A_Playsound("Obsidian/Missile");
                CanCastTrap = true;
                }
            }
        VSTL V 8;
        Goto See;
    Pain:
        VSTL W  4;
        VSTL X  4 A_Pain;
        VSTL YZ 4;
        Goto See;
    Death:
        VSTK A 8;
        VSTK B 8 A_Scream;
        VSTK C 8;
        VSTK D 8 A_NoBlocking;
        VSTK E 8;
        VSTK F -1;
        Stop;
    Raise:
        VSTL F 8;
        VSTL EDCBA 8;
        Goto See;
    }
}

Class ChaosBall : Actor
{
    Default
    {
        Radius 5;
        Height 5;
        Speed 12;
        DamageFunction (random(10,12) * 6);
        Translation "112:127=176:191";
        Scale 1.4;
        Projectile;
        Gravity 0.2;
        -NOGRAVITY;
        +SEEKERMISSILE;
        +RANDOMIZE;
        DeathSound "Obsidian/Impact";
        Decal "ChaosBallScorch";
    }
    States
    {
    Spawn:
        BAL7 AAABBBAAABBB 2 BRIGHT A_SpawnItemEx("ChaosBallTrail", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS);
        TNT1 A 0 BRIGHT A_NoGravity;
        TNT1 A 0 BRIGHT A_SeekerMissile(2, 3);
        loop;
    Death:
        BAL7 C 0 BRIGHT A_NoGravity;
        BAL7 CDE 6 BRIGHT;
        stop;
    }
}

Class ChaosBallNoGrav : ChaosBall
{
    Default
    {
        +NOGRAVITY;
    }
}

Class ChaosBarrage : ChaosBall
{
    Default
    {
        Radius 2;
        Height 2;
        DamageFunction (random(10,12) * 2);
        Scale 0.5;
        Decal "ChaosBarrageScorch";
    }
    States
    {
    Spawn:
        BAL7 AAAAAABBBBBBAAAAAABBBBBB 1 BRIGHT A_SpawnItemEx("ChaosBarrageTrail", -5, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS);
        TNT1 A 0 BRIGHT A_NoGravity;
        TNT1 A 0 BRIGHT A_SeekerMissile(1, 2);
        Goto See;
    See:
        BAL7 AAAAAA 1 BRIGHT A_SpawnItemEx("ChaosBarrageTrail", -5, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS);
        TNT1 A 0 BRIGHT A_SeekerMissile(1, 2);
        BAL7 BBBBBB 1 BRIGHT A_SpawnItemEx("ChaosBarrageTrail", -5, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS);
        TNT1 A 0 BRIGHT A_SeekerMissile(1, 2);
        loop;
    }
}

Class ChaosBarrageNoGrav : ChaosBarrage
{
    Default
    {
        +NOGRAVITY;
    }
}

Class ChaosBallTrail : Actor
{

    Default
    {
        RenderStyle "Translucent";
        Alpha 0.5;
        +NOGRAVITY;
        +RANDOMIZE;
    }
    States
    {
    Spawn:
        BAL7 AB 4 BRIGHT A_FadeOut(0.15);
        loop;
    }
}

Class ChaosBarrageTrail : ChaosBallTrail
{

    Default
    {
        Scale 0.3;
    }
    States
    {
    Spawn:
        BAL7 AB 4 BRIGHT A_FadeOut(0.2);
        loop;
    }
}

Class ObsidianChunk : Actor
{
    Default
    {
        Scale 0.3;
        Gravity 0.5;
        +NOBLOCKMAP;
        +NOTELEPORT;
    }
    States
    {
    Spawn:
        VOBC ABCDEFGH 4;
        stop;
    }
}

Class TrapAttack : Actor
{
    bool trapped;
    Default
    {
        Radius 5;
        Height 5;
        Speed 256;
        Damage 0;
        Projectile;
        +SEEKERMISSILE;
    }
//spawn obsidian trap
    override void PostBeginPlay()
    {
        super.PostBeginPlay();
    }
    override int SpecialMissileHit(actor victim)
    {
        if (victim && target && (victim != target))
        {
            if (trapped != 1)
            {
                victim.A_Playsound("Obsidian/TrapSpawn");
                victim.A_SpawnItemEx("ObsidianTrap1", 16, -32, -32, 0, 0, 0, 0);
                victim.A_SpawnItemEx("ObsidianTrap2", 32, -16, -32, 0, 0, 0, 0); 
                victim.A_SpawnItemEx("ObsidianTrap3", 32, 16, -32, 0, 0, 0, 0); 
                victim.A_SpawnItemEx("ObsidianTrap4", 16, 32, -32, 0, 0, 0, 0); 
                victim.A_SpawnItemEx("ObsidianTrap1", -16, 32, -32, 0, 0, 0, 0); 
                victim.A_SpawnItemEx("ObsidianTrap2", -32, 16, -32, 0, 0, 0, 0); 
                victim.A_SpawnItemEx("ObsidianTrap3", -32, -16, -32, 0, 0, 0, 0); 
                victim.A_SpawnItemEx("ObsidianTrap4", -16, -32, -32, 0, 0, 0, 0); 
                trapped = 1;
            }
        }
        return 1;
    }
    States
    {
    Spawn:
        TNT1 A 1 A_SeekerMissile(90, 90);
        loop;
    Death:
        TNT1 A 0; 
        stop;
    }
}

Class ObsidianTrap1 : ThrustFloorUp
{
    Default
    {
        Scale 0.4;
        Radius 6;
        Height 52;
        DeathSound "Obsidian/TrapDeath";
        Health 30;
        +NOTELEPORT;
        +SOLID;
        +SHOOTABLE;
        +DONTTHRUST;
        +NOBLOODDECALS;
        BloodType "ObsidianChunk";
    }
    States
    {
    Spawn:
        VOT1 ABC 2;
        Goto See;
    See:
        VOT1 DDDD 32;
        Goto Death;
    Death:
        VOT1 C 3 A_Scream;
        VOT1 BA 3 A_ParticleDust();
        TNT1 A 0;
        stop;
    }
}
Class ObsidianTrap2 : ObsidianTrap1
{
    States
    {
    Spawn:
        VOT2 ABC 2;
        Goto See;
    See:
        VOT2 DDDD 32;
        Goto Death;
    Death:
        VOT2 C 3 A_Scream;
        VOT2 BA 3 A_ParticleDust();
        TNT1 A 0;
        stop;
    }
}
Class ObsidianTrap3 : ObsidianTrap1
{
    States
    {
    Spawn:
        VOT3 ABC 2;
        Goto See;
    See:
        VOT3 DDDD 32;
        Goto Death;
    Death:
        VOT3 C 3 A_Scream;
        VOT3 BA 3 A_ParticleDust();
        TNT1 A 0;
        stop;
    }
}
Class ObsidianTrap4 : ObsidianTrap1
{
    States
    {
    Spawn:
        VOT4 ABC 2;
        Goto See;
    See:
        VOT4 DDDD 32;
        Goto Death;
    Death:
        VOT4 C 3 A_Scream;
        VOT4 BA 3 A_ParticleDust();
        TNT1 A 0;
        stop;
    }
}

Extend Class ObsidianTrap1
{
void A_ParticleDust()
    {
        A_SpawnParticle("black",SPF_RELATIVE,70,50,0,0,0,0,0,0,0.5,0,0,0,0.5,-1,3);
    }
}

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...