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

EDF format

Recommended Posts

I made an example of what I think the EDF format should look like, sadly, Quasar has decided on (IMO) a more complicated format. I'm hoping with enough support, he might change his mind. Take a look :

Thing-Imp[##] (note : ## is the Imp's thingnumber)
----------
Health=10;
Speed=5;
Damage_Standard=15; (this ammount is the average ammount of damage its fireball does)
Damage_Melee=15; (ammount of damage the scratch does)
Damage_Multi=7; (this ammount is the number added to the regular damage ammount at random, IE. 15 + 4 or 15 + 1)
Death_Snd1=dsimpdie1; (yeah, I don't know the imp death sound name but whatever, it's just an example)
Death_Snd2=dsimpdie2; (btw, you can define as many death sounds as you want, if none are provided then it makes no sound)
Damage_Melee_Mutli=8; (see above)
Range_Attack=Imp_Fireball; (or) ##; (## is the Imp Fireball thingnumber)
Melee_Attack=Imp_Scratch;
Animations :

****ANIMATIONS LIST (like dssarge## or whatever the Imp graphics are called)***

Thing-Health_Potion[##]
--------------------
Type=pickup; (types are pickup, powerup (which has a duration) and inventory (adds to your inventory)
Benefit=health_+#; (number is how much health is gives you, in this case, 1)
Pickup_Msg=You got a health potion;
Pickup_Snd=dspickup; (I dunno the actual sound name though, but this lets you choose a pickup sound)
Max_Benefit=Health_##; (in this case, it stops at 200% health)
Animations :


***ANIMATIONS LIST***

Thing-Green_Armor[##]
-------------------
Type=pickup;
Benefit=Armor_+# (number is how much armor you get, in this case, 100)
Pickup_Snd=dspickup;
Pickup_Msg=You got Security Armor;
Max_Benefit=Armor_## (the number is the max armor it gives, IE, if you have 50 armor it will not exceed 100, but if you have 120 armor, you cannot pick this item up)
Animations :

***ANIMATIONS LIST***

Thing-Portable_Medkit[##] (this is an example of an inventory item, ## needs to be defined so a user can place it in a map)
------------------
Type=Inventory;
Benefit=Heal_Full;
Pickup_Snd=dsmedkit; (sound must be in the wad, if not, it just uses dspickup)
Max_Benefit=health_##; (number is max health it can heal)
Special=Save_Unused; (example would be you have 50% health, full medkit, you use it and it heals you to 100% and saves the unused 50%)
Pickup_Msg=You got a portable medkit;
Use=Manual; (other is automatic)
Animations :

***ANIMATIONS LIST***

Thing-Megasphere[##]
-----------------
Type=pickup;
Benefit=Heal_Max, Armor_Max;
Max_Benefit=Health_##, Armor_## (you know the drill)
Pickup_Msg=You got a Megasphere;
Pickup_Snd=dspowerup; (I dunno the actual sound name but whatever)
Animations :

***ANIMATIONS LIST***

Thing-Berserk_Pack[##]
-------------------
Type=powerup;
Duration=one_level; (you could also put a number here for how many seconds it would last or "death" which means you keep it until you die)
Benefit=Heal_Full, Berserk_Punch; (heal full = 100%, heal max = 200%)
Pickup_Msg=You got a berserk pack;
Pickup_Snd=dspowerup;
Screen_Special=red; (other screen specials are green and negative, negative being the invulnerability screen thing)
Max_Benefit=Health_##; (you know the drill)
Animations :

***ANIMATIONS LIST***

Thing-Barrel[##]
--------------
Type=decor_shoot; (other type is decor_norm which are decorations that cannot be shot)
Special=solid;
Health=##;
Death_Snd=dsexplosion; (remember Quas, these are example sound names, I dunno the actual sound names so just replace the real sound names with my examples)
Animations :

***ANIMATIONS LIST***

Thing-Backpack[##]
----------------
Type=powerup;
Duration=death;
Benefit=Max_Bull_##, Max_Shell_##, Max_Rocket_##, Max_Cell_##; (of course you could define new ammo types, I'll get to that later)
Pickup_Snd=dspowerup;
Pickup_Msg=You got a backpack full of ammo!;
Animations :

***ANIMATIONS LIST***

Weapon-Pistol[##] (the Pistol doesn't have a map number, but a person could define one)
--------------
Type=Bullet; (other types are Projectile and Projectile_Spread which is the BFG 2704)
Ammo_Type=bullets;
Ammo_Per_Shot=1;
Damage=5; (of course, this number could be changed)
Shotcount=1;
Damage_Multi=5;
Shot_Snd=dspistol;
Spread_Verticle=##; (how far up it may fire, this is random of course)
Spread_Horizontal=##;
Animations :

***ANIMATIONS LIST***

Weapon-BFG_2704[##] (the BFG 2704 doesn't have a map number because it is selected using the weapons menu)
---------------
Type=Projectile_Spread;
Ammo=Cells;
Ammo_Per_Shot=1;
Shotcount=40;
Damage=25; (this is per projectile, IE one of the fireballs does 25 on average, of course, with Damage_Mutli, they have random damage ammounts)
Damage_Mutli=25;
Shot_Snd=dsbfg;
Spread_Verticle=##;
Spread_Horizontal=##;
Projectile_Type=BFG_2704_Projectile;
Projectile_Special=bounce (this means they bounce off the ground and ceiling)
, nograv (means that it flies, not drops to the ground);
Animations :

***ANIMATIONS LIST***

Ammo-Rocket_Small[##]
------------------
Type=pickup;
Benefit=Rocket_## (yeah, you know what ## means by now)
Max_Benefit=Rocket_##, Backpack_## (backpack ## means how much you can go to when you have a backpack)
Pickup_Snd=dspickup;
Animations :

***ANIMATIONS LIST***

// this means comment, so it doesn't read it

**
multi
line
comment
thingy
**

Episode=Knee_Deep_In_The_Dead
------------------------------
Game=Ultimate_Doom; (other games are of course, Doom2, Heretic and Final Doom, Final Doom I will get into later)
Iwad=Doom.wad;
Maps :
Map1=Hanger;
Map2=Toxin_Refinery;
Map3=blah;
Map4=blah;
Map5=blah;
Map6=blah;
Map7=blah;
Map8=blah;
Map9=blah;
Inter_Screen=dskneedeep; (or whatever the real lumpname for the Knee Deep intermission screen is)
End_Backround=dskneedeepend; (this is the backround for the ending text thing)
End_Text :

You have beaten the big badasses and cleard out the moonbase\\ (\\ means line break, basically, where the text goes to a new line)
blah blah blah\\
blah blah blah\\
blah blah blah\\
blah\\
\\
\\
blah;

Menu_Episode_List (this is like selecting an episode in Ultimate Doom and Heretic)
-------------------
Game=Final_Doom;
Iwad=tnt.wad, plutonia.wad
Episode_1=TNT : Evilution;
Episode_2=The Plutonia Expirement;
(of course, this requires both TNT.wad and Plutonia.wad to be in the same diretory)

Game_Menu_List (this is only used if you have all the IWADS in one dir)
----------------
Game=All;
Iwad=doom.wad, heretic.wad, doom2.wad, tnt.wad, plutonia.wad, freedoom.wad)
Game_One=Doom_Ep_List; (this means if you select "DooM" from the list it takes you to the episode list)
Game_Two=Doom2;
Game_Three=Heretic_Ep_List; (see Doom_Ep_List example)
Game_Four=Final_Doom_Ep_List; (when you select this it shows TNT : Evilution and Plutonia Expirement)
Game_Five=Freedoom;

Yeah, so, that pretty much covers it, there are some other things I would have liked to do with this but it would have taken a lot longer.

-Bigbadgangsta

Share this post


Link to post
bigbadgangsta said:

It's just an example, asstard.

SO WHY DID YOU PUT 10???

Joking dude. Well, hopefully Quasar elects for this format unless his way is still easy to understand. Meh. Well if EDF lives upto itself then Eternity will be my port of choice. For editing. Now i'll learn Small and i'll be right.

Share this post


Link to post
bigbadgangsta said:

It's just an example, asstard.

the speed you made is also REALLY SLOW.

Share this post


Link to post

First off BBG, if anything, your proposed format is more complicated than the one I intend to use, which you have not even seen, chiefly because you use no clear section or statement delimiters. When there's no section delimiters you need to constantly call complicated look-ahead code, plus to me it looks less clean syntactically.

What EDF will probably look like is something like a DeHackEd thing entry but more like C -- something similar to this:

For a user-defined thing type:

user_thing_type 1
{
doomednum = 5004;
flags = MF_SPECIAL | MF_COUNTITEM;
typename = "GoldenGoblet";
bonuses = BACKPACK | MEGASPHERE;
pickupmsg = "You got the Golden Goblet!";
}

All non-present fields would default. Notice that there are some new fields, of course. These are fields I intend to add, some of which will even be overridable for specific things via ExtraData -- like the per-thing pickup bonus we discussed in an earlier thread.

I have absolutely no intent, nor have I ever had any, to allow customized menus or episodes through EDF. I've already told you that this will be done through Small, and it will be much more flexible there, because that will even allow dynamic menus that can change at run-time.

Just because DDF has something doesn't mean I have any intent to do it as well. EDF will be for things, frames, and weapons, and that is all. Anything else will defer to Small, as it is much more powerful and flexible. Small will not be much harder to learn than a language it would take to allow proper support for custom menus in EDF.

Also, I keep telling you that an IWAD menu isn't going to work, not a graphical one at least. DOOM cannot switch IWADs at run-time. To do so would require a major rewrite of everything that is called at any point from D_DoomMain so that it becomes recallable. There are many one-time operations performed at startup that are not currently repeatable, and one of them is constructing the IWAD's directory. In case you never noticed, Eternity has an addwad but not a removewad command. "removewad" would require something VERY impractical -- it would require that every copy of a lump is kept in memory, and not simply the latest loaded copy of that lump. Once you "removewad"'ed, you'd have to expect the old lumps to resurface. There is currently no mechanism for this. Multiple caching would increase DOOM's memory usage by, in the case of a TC, 2 times. That's wholly unacceptable.

Also, some of the features you're asking for implicitly here are frivilous in my opinion, or would be highly problematic. For instance, specifying every single sprite frame and/or rotation in the thing type? There's no need for it, and it would be totally out of whack. Frame information belongs in the frames, for one thing, not on things. Also, it would be very arduous to expect the user to list out all those sprite frames for every thing they want to use.

Share this post


Link to post
Quasar said:

Also, I keep telling you that an IWAD menu isn't going to work, not a graphical one at least


Eh? This is the first time I have mentioned something like that, I know that for a fact.

user_thing_type 1
{
doomednum = 5004;
flags = MF_SPECIAL | MF_COUNTITEM;
typename = "GoldenGoblet";
bonuses = BACKPACK | MEGASPHERE;
pickupmsg = "You got the Golden Goblet!";
}


Me = 0wn3d

Share this post


Link to post
Quasar said:

EDF will be for things, frames, and weapons, and that is all.

does that include monster attacks, eg. imp fireball?

Share this post


Link to post

I'm not sure what you mean. You'll be able to put code pointers into frames directly with EDF, but you won't be able to combine them like flags as EDF does. I'm not really sure how they pull that off, but I can tell you it would destroy demo compatibility in Eternity.

What Eternity is doing and will continue to do in the future, however, is provide the following two paths for totally custom attacks:

1) Parameterized codepointers. This is a growing set of codepointers that take up to 5 different user-supplied values in the frame structure as arguments. This is the feature behind codepointers like CustomPlayerMelee and FireCustomBullets. Almost all the codepointers I'm adding to support Heretic items are also parameterized, and can work with DOOM things just as well. A prime example, and one I have not talked about anywhere yet, is the new A_HticDrop codepointer that allows you to provide up to two items that are dropped at random by a creature, and the basic probability (out of 255) that the creature will drop that item. This codepointer is very flexible because it allows you to provide only one item or two, and it will allow you to make the creature either drop the thing at random by using a value for probability less than 255, or always by using 255 itself (255/255 = 100% chance).

2) Scripted "codepointers" -- the range of what will be possible using the StartScript and PlayerStartScript codepointers will be virtually limitless. Understandably, scripts called by this codepointer will be able to do anything that is otherwise valid during level game play. Need a monster to end the level? Have it call the ExitLevel() function. Want a monster with three attack states instead of just two? Use the upcoming SetState function to transfer to a third attack at random. Want to spawn 5 different random fireballs? Easy. Want to open 3 doors, close 2 others, start 8 lifts moving up and down, fade the light of every sector in the level by 20 units, and change the sky texture to something cloudier looking? Why the hell not? Provided I get Small native functions to support all of those things, which eventually I will ;)

So, between parameterized pointers and scripting, I don't think there's much value left in the DDF flag approach to attacks aside from it being a bit faster to use, perhaps.

Share this post


Link to post

I get you. This all sounds awesome.

But I am pndering one point - when you refer to a 'frame' do you mean say the pain frame of a chaingunner? Or something else? I am not experienced in stuff like this and Dehacked so I don't know...

Share this post


Link to post

Yes, exactly. Everything that map objects do in DOOM is frame-linked. Frames tell what sprite and sprite frame to use, how long to display it, whether or not its fullbright, the action function (called a codepointer in DeHackEd) to run, and, in Eternity, 5 possible parameters to the codepointer and a particle event index.

I'll be making all of these fields accessible in a clean manner in EDF. And EDF, unlike DeHackEd, will be able to make "user frames," frames which are dynamically allocated at run-time. This effectively removes the frame limitation, although what you can do with user frames may be a bit more limited than static frames -- time will tell.

Share this post


Link to post

Remember what I said, Quasar is teh Man!!!... :P
I just like to see the port "done" soon. Maybe you could wait with all these leet mapping features?... :)

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
×