Source Doom 3DO porta je sada javno dostupan

Source Doom 3DO porta je sada javno dostupan

offline
  • Lead Developer ⠀ ⠀⠀⠀⠀⠀⠀ Go 5 Creative
  • Pridružio: 14 Feb 2008
  • Poruke: 12256

Uz njega dolazi i interesantna priča ;

Citat:The complete archive for DOOM for the 3DO
Yes, this is the infamous port of DOOM for the 3DO. Firstly, this was the product of ten intense weeks of work due to the fact that I was misled about the state of the port when I was offered the project. I was told that there was a version in existance with new levels, weapons and features and it only needed "polishing" and optimization to hit the market. After numerous requests for this version, I found out that there was no such thing and that Art Data Interactive was under the false impression that all anyone needed to do to port a game from one platform to another was just to compile the code and adding weapons was as simple as dropping in the art.

Uh... No...

My friends at 3DO were begging for DOOM to be on their platform and with christmas 1995 coming soon (I took this job in August of 1995, with a mid October golden master date), I literally lived in my office, only taking breaks to take a nap and got this port completed.

Shortcuts made...
I had no time to port the music driver, so I had a band that Art Data hired to redo the music so all I needed to do is call a streaming audio function to play the music. This turned out to be an excellent call because while the graphics were lackluster, the music got rave reviews.

3DO's operating system was designed around running an app and purging, there was numerous bugs caused by memory leaks. So when I wanted to load the Logicware and id software logos on startup, the 3DO leaked the memory so to solve that, I created two apps, one to draw the 3do logo and the other to show the logicware logo. After they executed, they were purged from memory and the main game could run without loss of memory.

There was a Electronic Arts logo movie in the data, because there was a time that EA was going to be distributing the game, however the deal fell through.

The verticle walls were drawn with strips using the cell engine. However, the cell engine can't handle 3D perspective so the floors and ceilings were drawn with software rendering. I simply ran out of time to translate the code to use the cell engine because the implementation I had caused texture tearing.

I had to write my own string.h ANSI C library because the one 3DO supplied with their compiler had bugs! string.h??? How can you screw that up!?!?! They did! I spent a day writing all of the functions I needed in ARM 6 assembly.

This game used Burgerlib 2. My first "C" version of Burgerlib because Burgerlib was originally written in 65816 for the SNES and the Apple IIgs. If you check out Burgerlib 5 (The current version, also on github), you'd notice that some code is still in use.

I hope that everyone who looks at this code, learns something from it, and I'd be happy to answer questions about the hell I went through to make this game. I only wished I had more time to actually polish this back in 1995 so instead of being the worst port of DOOM, it would have been the best one.

And one more thing...
The intellectual property of DOOM is the exclusive property of ZeniMax. No transfer of the intellectual property of DOOM or any transfer of the ownership of the sounds, art or other game assets are given nor implied. If anyone wishes to release a version of DOOM 3DO commercially, contact ZeniMax for a license.

The source code... Go for it.

Rebecca Ann Heineman

Olde Skuul

Seattle, WA


GitHub : https://github.com/Olde-Skuul/doom3do

Neki delovi koda :

static Word CheckMissileRange(mobj_t *actor) {    Fixed dist;    mobj_t *pl;    if ( !(actor->flags & MF_SEETARGET) ) {   /* Are you seen? */       return FALSE;         /* Nope, don't fire! */    }    /* The target just hit the enemy, so fight back! */    if (actor->flags & MF_JUSTHIT) {      /* Took damage? */       actor->flags &= ~MF_JUSTHIT;      /* Clear the flag */       return TRUE;            /* Fire back */    }    if (actor->reactiontime) {      /* Still waking up? */       return FALSE;      /* Don't attack yet */    }    pl = actor->target;      /* Get local */    dist = (GetApproxDistance(actor->x-pl->x,actor->y-pl->y)>>FRACBITS)-64;    if (!actor->InfoPtr->meleestate) {   /* No hand-to-hand combat mode? */       dist -= 128;      /* No melee attack, so fire more often */    }    if (actor->InfoPtr == &mobjinfo[MT_SKULL]) {   /* Is it a skull? */       dist >>= 1;         /* Halve the distance for attack */    }    if (dist >= 201) {      /* 200 units? */       dist = 200;         /* Set the maximum */    }    if ((int)GetRandom(255)<dist) {   /* Random chance for attack */       return FALSE;      /* No attack */    }    return TRUE;         /* Attack! */ }

void G_InitNew(skill_t skill,Word map) {    Randomize();      /* Reset the random number generator */    gamemap = map;    gameskill = skill; /* Force players to be initialized upon first level load */    players.playerstate = PST_REBORN;    players.mo = 0;   /* For net consistancy checks */        DemoRecording = FALSE;      /* No demo in progress */    DemoPlayback = FALSE;    if (skill == sk_nightmare ) {      /* Hack for really BAD monsters */       states[S_SARG_ATK1].Time = 2*4;   /* Speed up the demons */       states[S_SARG_ATK2].Time = 2*4;       states[S_SARG_ATK3].Time = 2*4;       mobjinfo[MT_SERGEANT].Speed = 15;       mobjinfo[MT_SHADOWS].Speed = 15;       mobjinfo[MT_BRUISERSHOT].Speed = 40;   /* Baron of hell */       mobjinfo[MT_HEADSHOT].Speed = 40;      /* Cacodemon */       mobjinfo[MT_TROOPSHOT].Speed = 40;    } else {       states[S_SARG_ATK1].Time = 4*4;      /* Set everyone back to normal */       states[S_SARG_ATK2].Time = 4*4;       states[S_SARG_ATK3].Time = 4*4;       mobjinfo[MT_SERGEANT].Speed = 8;       mobjinfo[MT_SHADOWS].Speed = 8;       mobjinfo[MT_BRUISERSHOT].Speed = 30;       mobjinfo[MT_HEADSHOT].Speed = 20;       mobjinfo[MT_TROOPSHOT].Speed = 20;    } }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 548 korisnika na forumu :: 12 registrovanih, 0 sakrivenih i 536 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 4channer, bato3, bulovic, danilopu2, ibssa, ILGromovnik, mgaji21, miljannis, Neo BetOnBit, wizzardone, yrraf, 187