team-eternity / eternity

The Eternity Engine
http://eternity.youfailit.net/wiki/Main_Page
GNU General Public License v3.0
230 stars 36 forks source link

Add back support for Caverns of Darkness #305

Open ioan-chera opened 5 years ago

ioan-chera commented 5 years ago

Good news. Joel Murdoch has posted his source of Caverns of Darkness. https://www.doomworld.com/forum/topic/104623-hypothetically-speaking-could-an-addon-make-cod-eternity-compatible/?tab=comments#comment-1991608

We can use this information to add support to Eternity.

I've safekept a copy of his source code here too: https://www.dropbox.com/s/2ju18kdxgx4e1gx/cod10src.zip?dl=0

Altazimuth commented 5 years ago

We need to figure out what's different between this and EE of the time, so we can get the exact changes made and port those specifically.

Altazimuth commented 5 years ago

Special changes: Sector:

      // joel: new player nuke sector
        case 18:
          P_DamageMobj(player->mo, NULL, NULL, 10000);
              break;

      // joel: healing sector
            case 19:
              if (!(leveltime&0x1f))
                P_GiveBody(player,1);
              break;

Line:

    case 274: // joel
    if (EV_LightRaise15(line))
          line->special = 0;
      break;

    case 275:
    if (EV_LightLower15 (line))
          line->special = 0;
      break;

The top here was changed to the below:

    case 275:  // console command (1sided)
      if(side) break;

    case 274:  // console command (2sided)
      t_trigger = thing;
      T_RunScript(line->tag);
      line->special = 0;        // clear trigger
      break;
// joel - make next two 900 lines to prevent conflict with eternity
    case 975:  // console command (1sided)
      if(side) break;

    case 974:  // console command (2sided)
      t_trigger = thing;
      T_RunScript(line->tag);
      line->special = 0;        // clear trigger
      break;
Altazimuth commented 5 years ago

info.c needs to be sorted out, but its changes are significantly more extensive. It's worth noting some diff "changes" might be red herrings, and just be stuff that changed naturally between beta 5 and the full release. I'll try make a shortlist here of new stuff.

Four new sprites seemingly:

  "RCK1",
  "TRE3", // joel: new COD objects
  "CROS", // joel: cross stuff
  "CRSS",

Five new codepointers, which could be an issue unless we wanna wait for me to finish Aeon:

void A_Cross();           // joel: Holy Cross
void A_CCyberAttack3();   // joel: new Cyberdemon third attack
void A_CVileAttack();     // joel: new Archvile attack
void A_AmbSound();        // joel: ambient sound routine
// joel: legion action functions
void A_Legion();

Commander Keen is made to have no painsound and no deathsound.

There's a buttload of new mobjinfo entries and states entries.

haleyjd commented 4 years ago

Could always add those as native actions if they're simple enough. Of course you'd want to rewrite them to utilize EDF properly. Up to you guys really.

ioan-chera commented 3 years ago

This seems to be a work in progress now:

  1. https://www.doomworld.com/forum/topic/120264-caverns-of-darkness-20/
  2. https://www.doomworld.com/forum/topic/104623-hypothetically-speaking-could-an-addon-make-cod-eternity-compatible/

If we have CoD updated by itself to work with Eternity, this case should be closed.