This may take a bit getting used to, but once you actually learn it's quite easy. I've been doing it for quite a while.
GETTING STARTED:
To do this thing, you're gonna need these things.
-SLADE3
-Zandronum/ZDoom (Obv.)
-DecAssist (although this can be optional as you can input most things manually. It saves some time, however.)
THE OBVIOUS STUFF (only really necessary if you're REALLY new to this)
Step 1:
First, open up Slade3. Make a new WAD.

Step 2:
Make a new LUMP. Name it "DECORATE" (caps not needed, as it does this automatically)

Step 3:
Click on the lump and press the "Edit as Text" button.
Change the "Text Language" below to "ZDoom Decorate".

Step 4:
Open up DecAssist. Right click on the tray icon.
You can use either these two things.

"Select Editor" allows you to let DecAssist add the template which we are going to use automatically to SLADE3.
"Clipboard Mode" allows you to Paste it via CTRL+V or the Paste option on the right click menu.
(TIP: Remember to save often just in case something happens, such as a power outage, or if you accidentally close the program for some reason.)
Step 5:

Once again, right click DecAssist.
Choose the following things that are shown. If you used the "Select Editor" option, it will automatically being typing out everything. If you used the clipboard option, press CTRL+V.
MAKING THE MONSTER A THING:
Step 1:

Change the monster name to your liking. Make sure to give it a number like this at the end. What this does is give it an ID number so you can easily use it in map editors and such.
Step 2:

Feel free to tweak the monster's stats as much as you want.
Step 3:
As shown above, I have given the monster sounds. These are the default Doom zombie grunt noises. If you want to use different default sounds, look here for the names of the sounds in ZDoom's default SNDINFO.
http://zdoom.org/wiki/Predefined_sounds
As this is a more basic tutorial, I'm not gonna go into making custom sounds...
....
Alright, I guess I will.
Step 3.5:
Make a new lump titled "SNDINFO". Below it, make another lump and name it whatever you want.

As you can see, I decided to go ahead and be immature with my naming.
Before you ask, it's one of Duke Nukem's death yells from Duke3D.
In the SNDINFO lump, one again, open the lump as text and change the text language. This time to "ZDoom SNDINFO".
In the SNDINFO lump, you must type two things, seperated by a space.

On the right side, type the name of the lump in which the sound is contained in. On the left will be what you use to identify it as in the monster's coding.
It's a bit easier to retain the same name on both sides, but you can do whatever you want. It could possibly help avoid any conflicts.
Step 4:
NOW we return to the monster itself.
Return back to the DECORATE lump and go to the "states" section, which is seperated by a {.
Below you will see several states, some put as strings as opposed to being actual states (those being the ones labelled with //s).
To explain what each of these mean...
-SPAWN is when the monster is first created. (obviously)
When it's first created, it will stay put and search for anyone who opposes it in it's sight.
Spawn:
PLAY AB 10 A_Look
loop
The letters A and B are the frames of animation shown in the WAD.
Both being the first two parts of the walking animation.
The number represents how many "ticks" it will take for this action to be carried out once it reaches this spot.
Most things that are labelled with A_ are actions for the Actor.
In this case, A_Look tells the monster to look for an enemy target.
It will stand still, and once it finds a threat...
-SEE is when the monster is active and ready to strike.
This doesn't mean that it's his attack state, however. It's just me being witty.
See:
PLAY ABCD 2 A_Chase
loop
A_Chase is the default monster movement. It causes the monster to come towards the enemy.
The "loop" causes the event to... uhh...
If you set it to any of these things, expect it not to work:
(although you should still keep these in mind)
STOP causes the actor to stop existing.
WAIT holds the last action in the state.
GOTO X makes it go to a state specified (that going where the X is).
To make the actor actually attack...
-MISSILE is basically the "Ranged Attack" state.
MELEE is exactly what it says.
We're mainly going to be focusing on MISSILE for this monster, however.
Missile:
PLAY E 2 A_FaceTarget
PLAY F 2 A_CustomMissile("PlasmaBall",29,0,0,0,0)
PLAY E 2 A_FaceTarget
PLAY F 2 A_CustomMissile("PlasmaBall",29,0,0,0,0)
PLAY E 2 A_FaceTarget
goto see
A_FaceTarget makes the monster aim directly at it's opponent when it hits this part of the state.
A_CustomMissile is a way to make the monster fire something you can specify. You can change the height, angle, and X Position (in case you want it to fire off the sides of the marine for some reason).
At the end, place a "GOTO SEE". (caps not necessary).
And finally...
-DEATH is what happens when you pump too many bullets into the monster.
There is a variant (XDEATH) for gibbing, but we won't be focusing on it on this tutorial.
Death:
PLAY H 8 A_NoBlocking
PLAY I 8 A_Scream
PLAY J 8
PLAY K 8
PLAY L 8
PLAY M 8
wait
A_NoBlocking allows you to be able to pass through the monster as it dies.
A_Scream plays the death sound that you specified above.
And add a wait at the end and the body will remain on the ground at the last frame.
Poor, poor evil marine.
Place 2 }'s at the bottom (descending, like
}
}
and you'll be done!
There are a few things that I haven't touched upon, such as Pain States and Melee, but you can learn about these at the ZDoom Wiki.
Thanks for reading, and hope you learned something!