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

Strife in EDGE or ZDoom?

Recommended Posts

Since I've had alot of odd ideas pouring out of the void I call a brain recently, I actually came up with a pretty cool one.

Since EDGE has alot of really cool features and whatnot, and it probably has everything Strife has (if not you can code everything via LINES.DDF or SECTORS.DDF) maybe I could port Strife to EDGE and make EDGE an available source port that supports Strife.

dSTRIFE...

Share this post


Link to post

Vavoom
also supports Strife and it does the job very well.
You want to port Strife to EDGE all by Yourself? Then good luck, You will need it.

Share this post


Link to post

Good luck. I doubt it's worth the effort. Besides, Strife doesn't have that many features. By far the most interesting thing is the dialog system and that has already been done in Vavoom. The code is simple enough that a skilled programmer can add it to any source port he likes. Aside from that the only really interesting things are the weapons (almost completely implemented in ZDoom) and the monsters (mostly implemented in ZDoom and the missing ones will be added in one of the next versions.) Aside from that there isn't really much new. It has an inventory system but that is also implemented by any port that supports Hexen or Heretic.

Anyway, to get to the interesting stuff you have to dig deep into the disassembly code of Strife.exe. Simply guessing the behavior won't work because you will inevitably miss something (Yes, I did some of that so I know what I am talking about.) There are some really nasty linedef types in there. If not 100% correctly implemented they can break the whole game.

BTW, my bet is that ZDoom will be the first source port that has full Strife support!

Share this post


Link to post

I hope so. Never did finish Strife, and now that drive D: got deactivated in the BIOS (and I can't get into it!) it doesn't look like I ever will.

Share this post


Link to post

Can't figure out how to make it run under ZDoom, and under Vavoom most scripts don't work.

But I'll STILL probably do some work under EDGE.

Share this post


Link to post
Nmn said:

Vavoom
also supports Strife and it does the job very well.
You want to port Strife to EDGE all by Yourself? Then good luck, You will need it.


Not well enough. I've bombed out to the desktop more than 10 times before giving up. It seemed to be in the same place too.

Share this post


Link to post
EarthQuake said:

Not well enough. I've bombed out to the desktop more than 10 times before giving up. It seemed to be in the same place too.


Then in that case it's too bad all I have is the demo version of Strife.

Share this post


Link to post
Darkhaven4 said:

Then in that case it's too bad all I have is the demo version of Strife.


The demo is what crashed all the time, then I download Strife and played it, and the same thing happened.
As far as I know, Strife has now been labeled as "abandoned" so there are alot of sites that will let you (legally?) download it.

Share this post


Link to post
Darkhaven4 said:

Then in that case it's too bad all I have is the demo version of Strife.

An advice-If You want to code it to some port You WILL need the full version.
Geee.. didn't know. sorry.

Share this post


Link to post
EarthQuake said:

Not well enough. I've bombed out to the desktop more than 10 times before giving up. It seemed to be in the same place too.




Even though Vavoom supports the dialog system many crucial things are not implemented. For example, many paths open much too early and the Rebels act as normal enemies (which they shouldn't) Yes, you can play the game up to the first point some game progress is handled by some hard coded special function instead of a dialog but I wouldn't call it 'playable'.

Of course the fact that Vavoom is one of the most unstable source ports available doesn't help matters as you already noticed.

Share this post


Link to post

To even think of getting EDGE to support Strife without modifying the source, you need a strife iwad with the textures in Doom format. There's instructions to make such an iwad in the Strife editing package.

Those who are just concerned with editing features are missing the point of Strife's greatness as a whole.

Also SvStrife currently has the most enemies implemented. The last beta I got to try had the Loremaster and Specter A. Since then, the Inquisitor has been implemented.

Share this post


Link to post
Gokuma said:

To even think of getting EDGE to support Strife without modifying the source, you need a strife iwad with the textures in Doom format. There's instructions to make such an iwad in the Strife editing package.

Those who are just concerned with editing features are missing the point of Strife's greatness as a whole.

Also SvStrife currently has the most enemies implemented. The last beta I got to try had the Loremaster and Specter A. Since then, the Inquisitor has been implemented.



But are they implemented correctly? The last version of SvStrife I saw made a lot of guesses about monster behavior that are wrong. Some are subtle and probably won't matter but others will cause problems while playing Strife. (I went through the disassembly of almost all the code pointer stuff so I'm quite sure about it.) The most correct implementation of Strife features I have seen so far is clearly ZDoom. It's obvious that Randy got all the information directly out of disassembling Strife.exe instead of observing the monsters/weapons and guess their behavior. The weapons code and most of the monster code is almost 100% correct with a few omissions related to Strife specific features that are not yet implemented.

Share this post


Link to post
Deathman said:

nothing is perfect I guess.


No, but it can be fixed.
The Stalker, for example works quite differently in Strife. There are no ceiling height checks which prevent it from walking into a sector where the ceiling is higher. One code pointer simply checks whether it still hangs on the ceiling and if not jumps to the land sequence. The two 'unknown' code pointers in it actually look like this:

void A_StalkerSetLook(mobj_t * self)
{
	if (self->flags&MF_NOGRAVITY)
	{
		P_SetMobjState(self, S_STALKER_CEILING);
	}
	else
	{
		P_SetMobjState(self, S_STALKER_FLOOR);
	}
}


void A_StalkerSetChase(mobj_t * self)
{
	if (self->flags&MF_NOGRAVITY)
	{
		if (self->ceilingz - self->height > self->z)
		{
			P_SetMobjState(self, S_STALKER_LAND);	// land
		}
	}
	else
	{	
		P_SetMobjState(self, S_STALKER_CHASE_FLOOR);
	}
}
and its attack uses the following formula:

int damage=(P_Random() & 7) * 2; (yes, it can be zero!)

Share this post


Link to post

Interesting. So simple, yet I've been making it difficult by making some crazy hack in p_map.c for the stalker.

However, since I don't know how to disassemble, the only option is to observe. Its not really difficult to know what they do (thanks to SeHacked) But some minor code pointers like the Stalker chase, is slightly difficult to recreate.


Btw, since I am still on topic, I also wanted to mention that another experimental build of SvStrife will be posted in another day or so. This version will have just about all the enemies, including some bosses like the Programmer,Bishop,Enitity etc. Also I got the sigil completly implented and fully functional, including the lego cheat.

Some levels are also fully playable (excluding that wretched dialog system/hubs)

I know some of them aren't accurate, but pretty darn close imo.

Share this post


Link to post

I'll take a thorough look at it and tell you if something is too far off. The bosses are a bit tricky concerning their special actions. There's some stuff that simply can't be simply observed because some internal variables are being set which influence the outcome of the game later.

I just discovered one extremely crucial inaccuracy. In Strife the Acolytes do not trigger an alert when entering their pain sequence. The special handling for the dagger is different: If an Acolyte in the same sector sees any attack made with the dagger he is alerted by it. Nothing else, especially not turrets are activated by it. For an Acolyte to be alerted the attacked object must also not have the flag 0x8000 (MF_DONTALERT in the following code) set.
This code is called after an attack with the dagger resulted in damage:

void P_DaggerAlert(mobj_t * pmo, mobj_t * linetarget)
{
    sector_t * sec=linetarget->subsector->sector;
    mobj_t * link;

    if (!sec->soundtarget && linetarget->health>0)
    {
        if (linetarget->flags&MF_COUNTKILL && !linetarget->flags&MF_DONTALERT)
		{
			linetarget->target=pmo;
			P_SetMobjState(linetarget, linetarget->info->painstate);
			link=linetarget->sector->thinglist;
			while (link)
			{
				if (link!=linetarget && link!=pmo && link->health>0) 
				{
					if (link->type==ACOLYTE (any type!) && !link->flags&MF_DONTALERT)
					{
						if (P_CheckSight(link, pmo) || P_CheckSight(link, linetarget))
						{
							link->target=pmo;
							P_SetMobjState(link, link->info->seestate);
							S_StartSound(link, link->info->seesound);
							link->flags|=MF_DONTALERT;
						}
					}
				}
				link=link->snext;
			}
		}
    }
}
(No guarantees for 100% correctness, though. Disassembling binary code is an error prone business...)


For the dialog system I recommmend a look at Vavoom's code. It's really simple and can be easily ported back to C but it needs a working inventory system (I don't know whether you already have that.)

It's too bad about the hubs, though. If PrBoom was C++ I could help you out there because I have a simple but working hub system but it requires C++ and can't be easily converted to C (the big problem is Doom's savegame stuff which is totally different from what I use)

Share this post


Link to post

I have the Hexen source, I can always look into that, if not, then SMMU. But there's one thing that I hate is tempering with Doom's save system :P.

I wanted to work on the inventory system after I get everything done (linedefs, things etc). I had no clue that its the dagger causing the alerts. I'll most likey post the next update on this thread along with the source code for anyone to check out. Heck, maybe I'll post it today. But there's still some stuff to fix on the Inqusitor.

Btw, what exactly are you doing to disassembling the exe?

Share this post


Link to post
Deathman said:

I have the Hexen source, I can always look into that, if not, then SMMU.


I wanted to work on the inventory system after I get everything done (linedefs, things etc). I had no clue that its the dagger causing the alerts. I'll most likey post the next update on this thread along with the source code for anyone to check out. Heck, maybe I'll post it today. But there's still some stuff to fix on the Inqusitor.

Btw, what exactly are you doing to disassembling the exe?


Since I have no native DOS debugger I dumped the binary data into a C array, loaded it into the Visual C debugger and copied and pasted it from the debugger's disassembly output to a text file piece by piece. It took me half a day to do that. After that I looked for some easy to recognize code, labeled a few functions with their names so that I could get a reference to the code pointer offsets. After that it wasn't that hard anymore (if you are good at reading compiled assembly code and have thorough knowledge about Doom's code, of course.)

But there's one thing that I hate is tempering with Doom's save system :P.


It's not that bad. Although a standard C++ serialization mechanism makes things considerably easier it still can be done the old way. You might take a look at Hexen's hub system even though that isn't the most efficient implementation. ZDoom's is better but a little too convoluted to be ported back to a PrBoom based source port (which was the main reason I wrote my own when I was experimenting with hubs.)

Share this post


Link to post

I beg to differ, the dagger/punch-knife doesn't trigger alarms, but guns do.

UPDATES

Some NPC's working (Random_Peasant, Rowan, Harris, Medic/Armorer dude)
HUB system in the works
Bow, assault gun, and mini-missile launcher working
Status bar about 25% complete
Inventory system buggy, but working
Radius triggers being implemented

Share this post


Link to post
Darkhaven4 said:

I beg to differ, the dagger/punch-knife doesn't trigger alarms, but guns do.



Correct. If you read my code correctly (which is a literal translation from Strife.exe!) you will see that it only activates acolytes which can *see* (not hear!) an attack made with the dagger! If you want to test it, go to the entrance of the Governor's mansion in the town and stab one of the guards. The other will become active!

Share this post


Link to post

I wouldn't try this, dude. I did it before and it didn't exactly work out...
The dialogue system is hell to work with, and the inventory system can be
kinda messy at times. Also, you've
got the alarms system not being triggered by the punchknife...

Share this post


Link to post

Sorry for this delay, its overtime week and I won't be able to post svstrife today. Its more likely I'll have it posted this Sunday or Monday.

Just to let anyone know, here are the features/stuff implented

-Pop Up bar (weapons) included
-Player accuarcy value included (effects weapons, but angle+accuracy formula may be different from the oringinal. (more likely))
-All enemies except Specture D, E, Macil, Zombie Peasant, will be included
-More improved Stalker thanks to Graf Zahl.
-Sigil fully functional along with the lego cheat.
-Some linedef types converted
-added P_DaggerAlert in A_Punch (doesn't seem to work though)
-all Peasants (added a hack that will allow the player to talk to the peasant, but it kinda sucks)
-MTF options included (ally, and transparent) there's two unknown ones that I have no clue of what they do. For a good example check the peasants in map05 behind macil. Also some multiplayer items have an unknown flag option as well.

also for the spectures, everything works, meaning bullets and missiles will go though them and a missile with the specture flag will hit them.

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
×