Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
TheHambourgeois

Hambourgeois' EDF Editing Questions

Recommended Posts

Howdy all, I am interested in making something in eternity since I have a bit of extra free time due to coronavirus, but I am not familiar with anything beyond the simplest dehacked editing and I am armed with only ~3 college courses of computer programming knowledge from a decade ago. Anyway, I'm probably gonna be asking a bunch of stupid questions in here but I can take it to the IRC or this can be moved to the Doom Editing subforum if that's preferred (honestly not sure what the best place for this is).

e: I ended up completely fixing what my original post was going to be about so I'm gonna go with one that will impact stuff downstream instead.

Is it possible in eternity to have on hit effects like vampirism or giving ammo? One of the weapon ideas I have is predicated one another weaker weapon generating ammo for it. Is it possible to give ammo as a consequence of a successful hit? I've tried looking on the wiki for something that'd work and if there's something on there that would allow it I have not found it yet.

Edited by TheHambourgeois : fixed my main problem

Share this post


Link to post
3 hours ago, TheHambourgeois said:

Is it possible in eternity to have on hit effects like vampirism or giving ammo?

Not currently, that I can see. I'm trying to think how you'd pull something like that off without Aeon and without super-specific new codepointers... not exactly sure right now.

Share this post


Link to post

This might be inelegant, but maybe defining a pufftype that  the relevant ammo pickup when an object with blood is hit with the weapon?
Like:
 

pufftype AmmoGivingPuff
{
  thingtype       BulletPuff
  hitpufftype     TheAmmoDrop
  nobloodpufftype BulletPuff
}


and if I'm reading the TARGETSHOOTER flag correctly could I make a projectile thing that targets the player and has a pickupeffect?

Share this post


Link to post

Puffs with TARGETSHOOTER was one of the things I considered and could be possible to extend appropriately, though I was admittedly tired and didn't give due dilligence to checking if it was reliable and dismissed it. Apologies for that, and good work on picking up the slack where I was unacceptably useless. Another thing I was thinking of is maybe using A_JumpIfTargetInLOS, though that seems like a highly brittle mechanism that falls flat if you use something like a shotgun that may not have all its hits connect.

 

I'll look into this and see what I can do. We'd need something like ZDoom's actor pointers as well as a couple new codepointers (like A_GiveInventory) to make it work with puffs, but it sounds doable. The scenario you're picturing has you defining a new thingtype that calls the new codepointer with the appropriate actor pointer I assume? It seems feasible. Not sure how long I'll take though.

Share this post


Link to post

I need to read the documentation a bit more to see if it'd be possible and if I'm understanding it right, but my interpretation was that the pufftype let's you spawn whatever arbitrary thing, so the lazy way for now is to just make the spawned thing for a blooded hit a straight up pickup

 

E2: I should have read that zdoom entry before posting because I definitely was making the intuitive mistake in interpreting what "target" referred to, which complicates my homing projectile idea

Edited by TheHambourgeois : Clarity and accuracy of terms

Share this post


Link to post

A homing projectile that does this? That should be doable. The target will still be the player, or should be. Tracer will be the enemy.

Share this post


Link to post

Haven't tried to implement the above yet but I ran into a problem while making something simpler also involving custom puffs.

I have this in the relevant text lump for the weapon definition and everything it uses:

#=============#
# Demon Sword #
#=============#

weaponinfo DemonSword : DoomWeapon
{
  selectionorder 6.0

  states
  @"
  Ready:
    DBLG A 1 A_WeaponReady
    loop
  Deselect:
    DBLG A 1 A_Lower
    loop
  Select:
    DBLG A 1 A_Raise
    loop
  Fire:
    DBLG B 2
	DBLG C 2
	DBLG D 2
	DBLG E 2 CustomPlayerMelee (20, 10, 2, punch, punch, 96, SwordPuff)
	DBLG F 2
	DBLG G 3
	DBLG H 3 A_ReFire
	goto Ready
  "@
}

//Demon Sword pickup object
thingtype DemonSword : Mobj, 30002
{
  flags       special
  pickupeffect
  {
    effects GiverSword
	message "You got the Demon Sword!"
	sound   wpnup
  }
  states
  @"
  Spawn:
    WDBL A -1
	stop
  "@
}

//pickup effect
weapongiver GiverSword
{
  weapon DemonSword
}

//blood puff
thingtype BladeBlood 
{
  cflags        NOBLOCKMAP|NOGRAVITY|NOSPLASH

  states
  @"
  Spawn:
    SBLD ABCDEF 3
    stop
  "@
}

//dust puff
thingtype BladePuff
{
  cflags        NOBLOCKMAP|NOGRAVITY|NOSPLASH
  
  states
  @"
  Spawn:
    DUST ABCDE  4
    stop
  "@
}

// full puff definition
pufftype SwordPuff
{
  thingtype       BladePuff
//sound           <name>
//hitsound        <name>
  hitpufftype     BladeBlood
  nobloodpufftype BladePuff
  
  +PUFFONACTORS
}

This is still spawning the normal blood instead of the one I defined. 

Edited by TheHambourgeois : once again i have solved my original problem between posting it and getting a response lol

Share this post


Link to post

I've not forgotten you, sorry. Crazy hectic week trying to keep up w/ everything.

 

1 hour ago, TheHambourgeois said:

once again i have solved my original problem between posting it and getting a response lol

Dude I do this constantly you have no idea it's super embarassing every damn time I do it. It's always within about half a minute of me asking for help, too.

Share this post


Link to post

Well today I learned that eternity does not like null frames in decorate syntax and that hitpufftype and nobloodpufftype call pufftypes and not thingtypes so it wasn't a complete wash

Also, no rush on committing any changes or anything. I am still working since I work at UPS and I am doing a bunch of union organizing so my free time is not very high and besides I have plenty of other resources to make (still got 2 weapons, 3 enemy types, textures, maps, map scripting, etc). I've literally completed 1 7 or 8 level mapset before and it was mapinfo dependent despite being otherwise mapped like a vanilla project so i never actually committed it to the doomworld archive lol

tl;dr: your priority on doing anything specifically for me shouldn't be that high in the grand scheme of things

Share this post


Link to post

K got one that I don't think I am going to solve on my own. I have the following in my monsters definition lump:

//this is gonna have the monsters

#============#
# CyberBaron #
#============#

thingtype Cybruiser : Mobj, 31001
{
  spawnhealth 1200
  seesound    brssit
  painchance  50
  painsound   dmpain
  deathsound  brsdth
  speed       8
  radius      24.0
  height      64.0
  Mass        1200
  activesound dmact
  cflags      SOLID|SHOOTABLE|COUNTKILL|FOOTCLIP|SPACMONSTER|PASSMOBJ
  obituary_normal "was blasted by a cyberbaron"
  
  states
  @"
  Spawn:
    BRUS AB  10 A_Look
	loop
  See:
	BRUS AA  3 A_Chase
	BRUS B   3 A_BabyMetal
	BRUS BCC 3 A_Chase
	BRUS D   3 A_BabyMetal
	BRUS D   3 A_Chase
	loop
  Missile:
    BRUS E  6 A_FaceTarget
	BRUS F 12 A_MissileAttack(CybruiserShot, normal, 0, 0, -1)
	BRUS E 12 A_FaceTarget
	BRUS F 12 A_MissileAttack(CybruiserShot, normal, 0, 0, -1)
	BRUS E 12 A_FaceTarget
	BRUS F 12 A_MissileAttack(CybruiserShot, normal, 0, 0, -1)
	goto See
  Pain:
    BRUS G 2
	BRUS G 2 A_Pain
	goto See
  Death:
    BRUS H   8
	BRUS I   8 A_Scream
    BRUS J   8 A_PlaySoundEx(BAREXP, 5, false, attn_idle)
	BRUS K   8
	BRUS L   8 A_Fall
	BRUS MNO 8
	stop
  Raise:
    BRUS ONMLKJIH
	goto See
  "@
}

thingtype CybruiserShot
{
  seesound   skeatk
  deathsound barexp
  speed      10.0
  radius     11.0
  height      8.0
  damage     10
  cflags      NOBLOCKMAP|NOGRAVITY|DROPOFF|MISSILE|TRANSLUCENT|NOCROSS
  
  states
  @"
  Spawn:
    FATB AB 2 bright
  Death:
    FBXP A  8 bright
	FBXP B  6 bright
	FBXP C  4 bright
	stop
  "@
}

When I type "summon cybruiser" in the console it summons a still-frame of an imp that disappears when I shoot it. So What have I done wrong?

Share this post


Link to post

Are you running with "-edf-show-warnings"? If not put it in the command line and see if there's any complaints in the console window. The most likely explanation is a failure to attach DECORATE states.

Share this post


Link to post

oh shit i didnt even know about that, thanks for the tip

 

e: guess who forgot to define frame lengths for the raise state ಠ_ಠ

 

e the second: Almost ready to start mapping, just got one weapon to go and any textures i wanna use

reggietoupee.png

Edited by TheHambourgeois

Share this post


Link to post

Trying some absolute psycho shit, is there any possible way to make this work? It's currently not spawning the monster from the puff. Relevant EDF:
 

#===========#
# SoulStaff #
#===========#

weaponinfo SoulStaff : DoomWeapon
{
  ammotype       AmmoSoul
  ammouse        0
  
  selectionorder 3.0
  
  states
  @"
  Ready:
    SSTG ABCDEF 4 A_WeaponReady
	loop
  Deselect:
    SSTG A 1 A_Lower
	loop
  Select:
    SSTG A 1 A_Raise
	loop
  Fire:
	SSTG I 3 bright A_PlaySoundEx (StaffShot, 1)
	SSTG H 4 bright A_CustomPlayerMelee(4, 10, 10, chainsaw, null, 384, StaffSmoke)
	SSTG G 3 bright
	SSTG J 4 bright A_Refire
	goto Ready
  "@
}

// fire sound
sound StaffShot
{
  lump          "STFHIT"
  priority      64
  pitchvariance Doom
}

// pickup object
thingtype SoulStaff : Mobj, 30003
{
  flags       special
  pickupeffect
  {
    effects GiverStaff
	message "You got the Soul Staff!"
	sound   wpnup
  }
  states
  @"
  Spawn:
    WSTF A -1
	stop
  "@
}

// pickup effect
weapongiver GiverStaff
{
  weapon SoulStaff
}

// miss puff
thingtype StaffPuff
{
  cflags        NOBLOCKMAP|NOGRAVITY|NOSPLASH
  
  states
  @"
  Spawn:
    SPFF CDEF  4
    stop
  "@
}

/* cut out the stuff for the puff thats just a normal pickup but works */

//why not go HAM with it
thingtype SoulPuff2
{
  cflags        NOBLOCKMAP|NOGRAVITY|NOSPLASH
  
  states
  @"
  Spawn:
    SPFF C    4 A_SpawnEx(SoulDemon, none, 0, 0, 32, 0, 0, 0, 0, 256)
    SPFF DEF  4
    stop
  "@
}

thingtype SoulDemon : Mobj
{
  speed       20.0
  radius      14.0
  height      14.0
  cflags  NOBLOCKMAP|NOGRAVITY|FLOAT|DROPOFF|NOCROSS
  
  states
  @"
  Spawn:
    SPFF AB 4 bright A_Look
	loop
  See:
    SPFF A  0 bright
	goto Missile
  Missile:
    SPFF A 4 bright A_MissileAttack(SoulDemonProjectile, 1, -24, 0, -1)
	SPFF B 4 bright
	goto Death
  Death:
    SPFF CDEF 4 bright
	stop
  "@
}

thingtype SoulDemonProjectile
{
  speed       20.0
  radius      14.0
  height      14.0
  damage      0
  
  cflags    SPECIAL|NOBLOCKMAP|NOGRAVITY|DROPOFF|MISSILE|NOCROSS|SEEKERMISSILE
  
  pickupeffect
  {
    effects SoulAmmoPuff
	message "Absorbed soul essence."
	sound   itemup
  }
  
  states
  @"
  Spawn:
    SPFF A 4 bright A_GenTracer
	SPFF A 0 bright A_SpawnEx(StaffPuff)
	SPFF B 4 bright A_GenTracer
	SPFF B 0 bright A_SpawnEx (StaffPuff)
    loop
  Death:
    SPFF CDEF  4
    stop
  "@
}

//pufftype
pufftype StaffSmoke
{
  thingtype       StaffPuff
//sound           SwordWall
//hitsound        SwordHit
  hitpufftype     StaffSoul
  nobloodpufftype StaffSmoke
  
  +PUFFONACTORS
}

pufftype StaffSoul
{
  thingtype SoulPuff2
}

//ammo definitions
artifact AmmoSoul
{
  artifacttype   Ammo
  maxamount      600
  interhubamount  -1
}

ammoeffect SoulAmmoPuff
{
  ammo       AmmoSoul
  amount     2
  dropamount 2
}


e: unfortunately i think this is a dead end until an appropriate code pointer gets added cause if i manually summon a soul demon with the console it shoots me, dies, and then the projectile hits and plays a grunt noise but no ammo :/
 

Edited by TheHambourgeois : further science discussed

Share this post


Link to post

A_MushroomEx wasn't quite giving me the desired results I wanted, so I am using A_SpawnEx for a ring explosion effect on my BFG replacement. Is there a way to have the spawned projectile not harm the player? I basically made a poor man's wraithverge but as it stands the child projectiles don't home (guessing this is just going to be the case until a relevant codepointer is made so I am less concerned about this) and they harm the player, which i would like to avoid if possible. I'm guessing ThingGroups won't govern it either since it uses A_SpawnEx instead of an attack codepointer?

Share this post


Link to post

Sorry, been off EE a while (still kinda am but I can't continue to since it's just rude to ignore this thread). I'm guessing the explosion effect is using standard codepointers? Which ones are you using? Hopefully a parameter could easily be added to make it so it doesn't harm the owner.

 

Share this post


Link to post

I am using A_SpawnEx for now. Here is my EDF for the projectiles.
 

thingtype SpiritBall
{
  seesound    firsht
  deathsound  firxpl
  speed       20.0
  radius      6.0
  height      8.0
  damage      20
  cflags      NOBLOCKMAP|NOGRAVITY|DROPOFF|MISSILE|NOCROSS|SPACMISSILE
    
  states
  @"
  Spawn:
    SPCH ABABABABABABAB 4 bright A_SpawnEx (StaffPuff) //counters seemed to explode too early or not at all????
  Death:
    SPIR C  1 bright A_Stop
	SPIR C  0 bright A_SpawnEx (CannonSpirit, none, 18, 0, 0, 20, 0, 0, 30, 256)
	SPIR C  0 bright A_SpawnEx (CannonSpirit, none, 18, 0, 0, 20, 0, 0, 90, 256)
	SPIR C  0 bright A_SpawnEx (CannonSpirit, none, 18, 0, 0, 20, 0, 0, 150, 256)
	SPIR C  0 bright A_SpawnEx (CannonSpirit, none, 18, 0, 0, 20, 0, 0, 210, 256)
	SPIR C  0 bright A_SpawnEx (CannonSpirit, none, 18, 0, 0, 20, 0, 0, 270, 256)
	SPIR C  0 bright A_SpawnEx (CannonSpirit, none, 18, 0, 0, 20, 0, 0, 330, 256)
	SPIR C  7 bright
    SPIR D  6 bright
	SPIR E  4 bright
    stop
  "@
}

//projectiles for the ring of death after
thingtype CannonSpirit
{
  seesound   sklatk
  deathsound firxpl
  speed    20.0
  radius   16.0
  height   16.0
  damage   10
  cflags   NOBLOCKMAP|NOGRAVITY|DROPOFF|MISSILE|SEEKERMISSILE|SPACMISSILE|RIP|DRAWSBLOOD
  
  mod      CannonSpiritDmg
  
  states
  @"
  Spawn:
    SPIR ABA 4 bright A_GenTracer
	SPIR A   0 bright A_PlaySoundEx (sklatk, 0)
	SPIR BAB 4 bright A_GenTracer
	loop
  Death:
    SPIR C  8 bright
	SPIR D  6 bright
	SPIR E  4 bright
	stop
  "@
}


I ended up making a damagetype and changing the player thing to take 10% damage from it which works for now but that would mess with multiplayer (probably moot since i do not necessarily expect anyone to use this to play multiplayer)
 

damagetype CannonSpiritDmg
{
  obituary     "got spooked by a cannon spirit."
  obituaryself "scared themself to death."
}

//making this a bit less suicidal to use
thingdelta
{
  name         DoomPlayer
  damagefactor CannonSpiritDmg, 0.1
}


I think if a generic version of the tomed dragon claw from heretic ever gets implemented that would be the obvious way to go but for right now I am working with what I have

e: you'll probably also notice I have the secondary projectiles set up to be seeking projectiles cause I originally intended this to be more or less the wraithverge but that is also not a possibility with the solution ive found
 

Share this post


Link to post

Weird, A_SpawnEx should make spawned projectiles do the usual of making them incapable of colliding with the player, as is standard. Does removing the RIP flag make it no longer harm the player?

Share this post


Link to post

I think they were doing it before I made them ripper projectiles too but I can check. Out of curiosity does the logic for that (non-collision) follow an inheritance chain or will it just make them not collide with the projectile that called them?

e: commented it out and confirm that the projectiles still collide when not ripping

Share this post


Link to post

I forget. I'd imagine it does the simple thing but I'll see... It never sets its target (i.e. the owner) at all. I should probably create a flag for that. I know some ZDoom codepointers have similar flags to set its target as owner, but I forget what they're called. Would be nice to have a similar name for consistentcy's sake between the two.

Share this post


Link to post

well no rush i've still got plenty of mapping to do and I knew eternity had feature gaps when I started working in it so I am comfortable using the workaround that I've found

Share this post


Link to post

OK I made A_SpawnEx behave properly if it's spawning an MF_MISSILE. I dunno what to do about it spawning missiles that should trace though. Maybe a flag passed to the codepointer for it would be good, idk.

Share this post


Link to post

nice i will check it out. i need to play some heretic and see if any of the burst attacks like the iron lich ice ball burst or the powered up claw attack burst auto-aim vertically cause i think that'd be the ticket if so. reading the documentation anyway it seemed like tracer attacks from players use the auto-aim logic to determine what they will seek?

Share this post


Link to post
2 hours ago, TheHambourgeois said:

reading the documentation anyway it seemed like tracer attacks from players use the auto-aim logic to determine what they will seek?

Yes, but for A_SpawnEx if I make tracers work it can't do that. Instead it would have to auto-aim from the projectile itself, given it could be at an angle. In the meantime I think you could use A_SeekerMissile with the flag "look" in its spawn state, then start looping without using A_SeekerMissile after. It's not documented yet but just doing A_SeekerMissile(0, 0, look, 256) on the first frame only should make it try to acquire a tracer on anything within 64 units of it.

Edited by Altazimuth

Share this post


Link to post

oh interesting ill look at implementing that then thanks. my previous post was more forward looking for whenever heretic and hexen get fully implemented which i realize is a big project

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×