TheHambourgeois Posted July 10, 2020 (edited) 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 July 10, 2020 by TheHambourgeois fixed my main problem 0 Quote Share this post Link to post
Altazimuth Posted July 10, 2020 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. 0 Quote Share this post Link to post
TheHambourgeois Posted July 11, 2020 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? 1 Quote Share this post Link to post
Altazimuth Posted July 11, 2020 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. 0 Quote Share this post Link to post
TheHambourgeois Posted July 12, 2020 (edited) 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 July 12, 2020 by TheHambourgeois Clarity and accuracy of terms 0 Quote Share this post Link to post
Altazimuth Posted July 12, 2020 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. 0 Quote Share this post Link to post
TheHambourgeois Posted July 16, 2020 (edited) 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 July 16, 2020 by TheHambourgeois once again i have solved my original problem between posting it and getting a response lol 0 Quote Share this post Link to post
Altazimuth Posted July 16, 2020 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. 0 Quote Share this post Link to post
TheHambourgeois Posted July 16, 2020 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 1 Quote Share this post Link to post
TheHambourgeois Posted July 16, 2020 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? 0 Quote Share this post Link to post
Altazimuth Posted July 16, 2020 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. 0 Quote Share this post Link to post
TheHambourgeois Posted July 16, 2020 (edited) 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 Edited July 17, 2020 by TheHambourgeois 2 Quote Share this post Link to post
TheHambourgeois Posted July 17, 2020 (edited) 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 July 17, 2020 by TheHambourgeois further science discussed 0 Quote Share this post Link to post
TheHambourgeois Posted July 21, 2020 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? 0 Quote Share this post Link to post
Altazimuth Posted August 3, 2020 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. 0 Quote Share this post Link to post
TheHambourgeois Posted August 3, 2020 (edited) 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 Edited August 3, 2020 by TheHambourgeois adding a sidenote 0 Quote Share this post Link to post
Altazimuth Posted August 3, 2020 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? 0 Quote Share this post Link to post
TheHambourgeois Posted August 3, 2020 (edited) 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 Edited August 3, 2020 by TheHambourgeois 0 Quote Share this post Link to post
Altazimuth Posted August 3, 2020 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. 0 Quote Share this post Link to post
TheHambourgeois Posted August 3, 2020 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 1 Quote Share this post Link to post
Altazimuth Posted August 4, 2020 (edited) 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. Edited August 4, 2020 by Altazimuth 0 Quote Share this post Link to post
TheHambourgeois Posted August 4, 2020 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? 0 Quote Share this post Link to post
Altazimuth Posted August 4, 2020 (edited) 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 August 4, 2020 by Altazimuth 0 Quote Share this post Link to post
TheHambourgeois Posted August 5, 2020 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 0 Quote Share this post Link to post
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.