[v1.4a] Doom 64: Retribution

How did Doom 64 originally render the laser from the unmaker?

Share this post


Link to post
GoatLord said:

How did Doom 64 originally render the laser from the unmaker?

Basically, when fired it sends out a line of new mobjs at the player's height that spawn in each subsector that the line fired from will cross. Once fired, it connects all these laser "nodes" into a straight beam and gives us the beam we see.

The tech bible explains it better.

For my version, right now I have it so it fires a fast projectile which spawns a shit load of smaller projectiles behind it as it travels to "appear" linked together. It's far from perfect but it's the best Unmaker firing attempt I've seen from all the Doom 64 projects so far.

I'm sure it can be improved more.

Share this post


Link to post

EDIT: Scratch that, figured it out. Lel.

---

Well it seems I've discovered the true pain in the ass, and here I thought it was the Dark Entries Soulsphere puzzle. You probably know what I'm about to say: the switch combinations in Unholy Temple.

I just got to that part during my remake of that map, and I'm kinda stuck. No joke I have no clue how to make it work, yet. The original map's macros re-assign the other lines to other macros which do the same thing, assign more new macro actions. It's like macroception. There has got to be a way to do it without needing to do a bunch of line special setting, but then again that might be the key.

The problem with this part is that it's not just a single possible series, there are 6 possible combinations and only 3 of them end in success, the other 3 end in the wall closing down and spawning Hell Knights and it all resets again. This means I can't simply do what I do on Holding Area and assign a "nextSwitch" type variable and check against that since you can start with 3 different switches and still end up in success.

Share this post


Link to post

#define SWX_FIRST  100    //default values of each switch
#define SWX_SECOND 200    //basically just included for reference
#define SWX_THIRD  400

#define SWX_MOD_FIRST  10  //values each switch is modified by according to the previous
#define SWX_MOD_SECOND 20  //basically just included for reference
#define SWX_MOD_THIRD  40

int value=0;
int mod=0;
int numpressed=0;

Script 1000 (int which) {

  if(numpressed < 3 && numpressed) {
    value += which-mod;
    ++numpressed;
  }
  else if(!numpressed) {
    value += which;
    ++numpressed;
  }

  if(numpressed==3) {
    switch(value) {
      case 650:        //2,3,1
      case 670:        //1,2,3 or 2,1,3
        //do stuff here
        break;
      //...
      case default:
        //Thing_Spawn(...); //spawn hellknights?
    }
  }
  mod = which/10;
}
Call script 1000 for each switch. Each switch should have a first argument of 100, 200, or 400 only. It's on you to figure out which combinations/values you want to use. The script will "remember" which switch was last pressed by the current contents of "value" (if switch #1 with first argument 100 was pressed prior to the current switch, then subtract 10 from the value added by this switch, etc.)

Share this post


Link to post

Mine is... not that short lol. I basically looked at the way Doom 64 did it originally and wrote scripts to do SetLineSpecial changes on the switches depending on which ones you pressed. It's quite long, but it works.

Looking at that script through I'm trying to figure out how it knows which one you pushed. Only thing that comes to mind is that is some arithmetic sorcery where a certain switch will always fall in that number range when the next is pressed, but I haven't tried that code yet.

Share this post


Link to post

The script is aware of which switch has just been pushed because you are literally giving it the value through the first argument when the line is activated. Let us assume that the "leftmost" switch is assigned first argument 100. Whenever script 1000 is run on this line, the script evaluates this to mean which=100 (because it's the first argument the script can accept). The script is aware of the previous switch pressed because its value divided by 10 (so, a multiple of 10) is subtracted from the previous value. On the first switch press, no value is subtracted because there is no previous switch.

EDIT: you can probably simplify the script I posted somehow by evaluating "value" when numpressed==2, and probably have fewer collisions.

An example:

* "value" is 290 at the time the third switch is pressed, meaning the order pressed is 1,2,3 (100 + (200-10) ).
* "value" is 490 at the time the third switch is pressed, meaning the order pressed is 1,3,2 (100 + (400-10) ).
* "value" is 580 at the time the third switch is pressed, meaning the order pressed is 2,3,1 (200 + (400-20) ).

etc. etc. you get the idea.

EDIT EDIT:

Script 1000 (int which) {

  if(numpressed == 2) {

    switch(value) {
      case 290:
      case 490:
      case 580:
        //do stuff for correct combination
        break;
      case default:
        //wrong!
        break;
    }
    //do stuff that always happens regardless of combination here

  }

  else {

    if(!numpressed) {
      value += which;
      mod = which/10;
      ++numpressed;
    }
    else {
      value += which-mod;
      mod = which/10;
      ++numpressed;
    }

  }

}

Share this post


Link to post

You guys are gonna love the Test Facility map, the one where you can see all weapons, ammo, items, monsters and props. Doing some cool stuff on it, one of which is a firing range.

There's a script that will spawn Zombiemen that look like they are holographic and thrust them towards you every second, then when they cross a line close enough to you, they get removed. It would be even cooler if I could script some kind of scoring system for multiple players.

Also did a fully 3D midtexture as a test. Always thought it looked weird in Doom for a midtexture to be meant to be 3D but is flat as can be when you look at it from the side, so I created a 3D one using 3D floors and void space.

Gonna see what other cool stuff I can come up with.

Share this post


Link to post

#define NUMPLAYERS 4

str Score[NUMPLAYERS]={0,0,0,0};

Script 1001 (int howmuch) {
  Score[PlayerNumber()] += howmuch;
}
This should work

Share this post


Link to post

This is a testament to how clever the puzzles in Doom 64 are.

Share this post


Link to post

Remaking the actual TITLEMAP level now to use as the titlemap for the main menu. Got all the cameras working and it looks very good. Follows the path at almost the same speed (needs more tweaking). I will create a new static Cyberdemon that only fires rockets, like the original. After the sequence is done, the camera will be moved to another room where you can see the normal menu graphic as expected, and the music will also change to the main menu's MIDI.

The only thing I'm not sure how I should handle is the marine bots. I don't know how to create bots and have them infight.

Share this post


Link to post

#define BOTS_THINGID  2000
#define OTHERMONSTERS_THINGID  2001
#define CYBERDEMON_THINGID  2002
#define CAMERA_THINGID  2003

Script "ML_MakeBotsFight" OPEN {
  Thing_Hate(BOTS_THINGID, OTHERMONSTERS_THINGID, 0);
  Thing_Hate(BOTS_THINGID, CYBERDEMON_THINGID, 0);
  Thing_Hate(CYBERDEMON_THINGID, CAMERA_THINGID, 0);
}
http://zdoom.org/wiki/Thing_Hate

Assign all marine bots on the map with TID 2000, and assign all other monsters except cybies TID 2001. Cybies get 2002, and the moving camera gets 2003

Share this post


Link to post

New screenshot added, showing fire skies. They are not pre-filtered like the ones in Brutal Doom 64. They are straight up.

I am nearing completion of the first round of all original Doom 64 maps. I have two left to colorize and then I need to finish the TITLEMAP for the main menu and the Test Facility level. Then I will go back through all the maps again, replay them and test them, look for and fix bugs or anything I find. Then, I will have a playable build.

I plan to make some trailers somewhere around next month prior to release in March.

Share this post


Link to post

Awesome news! But what do you mean by "first round of all original Doom 64 maps"?

Share this post


Link to post
JohnnyTheWolf said:

Awesome news! But what do you mean by "first round of all original Doom 64 maps"?

The first finished version of all the maps. My second round through the maps is going to be for additional polish, bug fixing, checking difficulty spawns, you name it. The second round should go quite faster.

But, I know and expect that I won't catch everything. I am prepared to accept bug reports and more when release hits, I have a system for reporting them that I will explain when release gets here that you can use to easily break down what the bug is so I can fix it and get an update out after enough have been reported and fixed.

Another important note about bug reports, everything will be considered a bug report for this project and nothing will be ignored. I myself am personally tired of reporting bugs to developers for other games (like games on Steam) and never getting a response or never seeing it get fixed. That will NOT happen here. I will NOT ignore any potential bug reports.

Anyway, mini-rant over. Just know that post-release support is going to be alive and well here.

Share this post


Link to post
Nevander said:

I myself am personally tired of reporting bugs to developers for other games (like games on Steam) and never getting a response or never seeing it get fixed. That will NOT happen here. I will NOT ignore any potential bug reports.

Anyway, mini-rant over. Just know that post-release support is going to be alive and well here.

I'm a Software Engineer (though oddly enough not really a coder, though that is a rant for another time). I just posted some bug reports over on QuakeOne forums about DarkPlaces only for someone to jump on me and tell me not to report it, because error messages in the log on start-up out of the box don't constitute a bug. And if I think that is a bug, then I must not understand Windows, software or what a DLL is.

You'd think developers would encourage the community to report bugs.

Share this post


Link to post

Lacking any sort of context to that post, what if for example the error is "couldn't find autoexec.cfg"? That's not really a bug at all. Notices in a console about things that failed are not automatically bugs, and sometimes the errors don't even come from the engine itself, such as if you were loading an old/outdated mod, reporting those issues to a port author who didn't even make said mod is just preaching the choir.

Share this post


Link to post
Edward850 said:

Lacking any sort of context to that post, what if for example the error is "couldn't find autoexec.cfg"? That's not really a bug at all. Notices in a console about things that failed are not automatically bugs, and sometimes the errors don't even come from the engine itself, such as if you were loading an old/outdated mod, reporting those issues to a port author who didn't even make said mad is just preaching the choir.

I said it throws errors out of the box (with no mods). And the errors are missing DLLs, as well as saying it can't load font files (even if you're not putting in any files from mods).

So the engine is expecting DLL files that aren't included in the build.

But apparently that bug report won't be passed on to Lord Havok.

As for who I reported it to, I posted it in the Darkplaces Engine Bug Reports thread. With a full log uploaded to pastebin. Lord Havok doesn't list contact info on his site. It appears to be the place to post DP bug reports. Someone there passes on the reports to Lord Havok and he fixes them, but my report doesn't count as a bug.

http://quakeone.com/forums/quake-help/quake-clients/6978-darkplaces-error-reporting-thread.html

Share this post


Link to post
Nevander said:

Oh man... the blue key/Soulsphere puzzle in Dark Entries was the single hardest thing I've done so far. Scripting that was a serious PITA, but I got it to work exactly like the original. You don't even wanna know how long the code is... when this thing comes out in March you can take a look at the SCRIPTS lump yourself and see if you want to have your mind blown.

I mean like, I had to spawn armor bonuses and then assign each one a different special action to execute all different scripts depending on not only which armor bonuses were spawned but also depending on which spot they spawned in. That puzzle was exhausting, but thankfully the rest of that map is simple.

FYI, I will post in here in my thread from time to time like this to give progress updates and things I'm doing/discovered. It's not to bump the thread constantly, I promise. It's to provide constant information and progress updates to those interested. Hope this is not a problem. :)



That puzzle is really unique for sure. This is one of the many reasons I revere D64 so much, it's honestly a forgotten masterpiece it's a brilliant addition to the series. Such a shame that nobody likes it or even knows about it compared to other games.

Share this post


Link to post
t3hPoundcake said:

That puzzle is really unique for sure. This is one of the many reasons I revere D64 so much, it's honestly a forgotten masterpiece it's a brilliant addition to the series. Such a shame that nobody likes it or even knows about it compared to other games.

That's my hopes for this project, to give it the love it deserves on this particular engine. A lot of people enjoy the comfort and ease of using G/ZDoom (personally it's always been my favorite source port), so being able to play a good and faithful version of Doom 64 on this engine is long overdue.

Share this post


Link to post
Fisk said:

http://zdoom.org/wiki/Thing_Hate

Assign all marine bots on the map with TID 2000, and assign all other monsters except cybies TID 2001. Cybies get 2002, and the moving camera gets 2003

Hmmm... can't seem to get the Cyberdemon to hate the camera. The wiki says the thing must have at least 1 health, but cameras don't have health nor is it classified as a living thing. Got any ideas?

EDIT: Got it working. Used a Hate Target and Actor Mover to do it.

Share this post


Link to post

Updated the link to the texture pack. Now has a ton of new switches, some new flipped/mirrored textures, removed the FIREBLU crap that didn't make sense to have, and added some fresh "Doom: The Way Midway Did" textures from Cage. All credit for those goes to him.

Share this post


Link to post
enderandrew said:

I didn't know if you included them when making your pack.

Yes, they are included now.

Also, added screenshot of a monster fighting arena that I am including in the Test Facility map as a way to look at and experiment with monsters. Originally I was going to just put them all in a line and have them respawn when killed, but I came up with an idea for an arena instead which I think is 10x cooler.

Here's how it will work: there is a control room and you can pick which monster will spawn on which side (side A or B) by using a switch that will cycle through a monster array and each time you change, it will show what monster will go on which side so you will always know which two will spawn.

You will be able to choose how many monsters per side will spawn (0 to 12, there are 12 spawn pads per side), as well as whether or not each side should attack the player first or attack (hate) each other first.

Then once you have all that set up, press a switch and voila. War ensues. The only limit is 12 per side (right now).

Want to have 12 Cyberdemons fight 12 Mother Demons? You got it! Want to spawn more of the same or different monsters while the current battle is going on? Change the switch for what monster spawns and hit this switch again!

At any time, you can press another switch which will kill everything in the battlefield so you can begin a fresh battle.

*** Stadium seating included ***

Share this post


Link to post

I like the arena idea. I'll probably make maps for it.

Share this post


Link to post

Here's a screenshot of the control room and the switches to control which monsters will fight and how many for each side.



Who do you think would win? :D

Share this post


Link to post

Yeah I tried it and the Demons got rekt. Completely. Not even a single Cacodemon died. Ever feel bad for Demons? They die so easily, one SSG blast and they are dead. They just never seem to be able to win a fight.

I'm almost done with the Test Facility map finally. Got one last room to make and that's for animated textures. So all in all here's what it's got:

- Armory for seeing and using all weapons and ammo, all of which respawn even in single player mode
- Target range adjacent to the armory for target practice and experimenting with the weapons
- Infirmary where you can get all items and powerups, they also respawn even in single player mode
- Room made just for keys, with doors to test them on
- Fully functional monster arena where you can fight any of Doom 64's monsters, or pit them against each other to see who wins (limit of 12 per side spawned at a time, but you can spawn more just by pressing the switch again although not all will spawn due to being blocked)
- Texture hall where you can see every animated texture, I'll use this mainly for fine tuning the animation tics
- Finally, a room for all the props like torches, gibs, fires, trees, and lamps

Whew.

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