System Shock

Исходный код System Shock выложен в открытый доступ под GPL

Исключительно хорошая новость: исходный код культовой игры System Shock (в версии для PowerMac) официально выложен под GNU General Public License v3.0. Игра была выпущена в 1994 году и написана на C.

Как известно, автор оригинальной игры, студия Looking Glass Studios, прекратила свое существование в 2000 году из-за кризиса издателя Eidos Interactive — выходцы из студии в дальнейшем создали новые знаменитые серии Deus Ex и BioShock. Права на серию System Shock выкупила Night Dive Studios, которая в данный момент занимается ремейком оригинала (чья разработка была заморожена месяц назад и релиз был отложен на 2020 год, несмотря на успешный Kickstarter, собравший 1,35 миллиона долларов) и полноценным продолжением System Shock 3, в разработке которого принимает участие автор оригинала, Уоррен Спектор, вернувшийся ради этого в игровую индустрию.

Забрать исходный код можно по ссылке на Github. Для успешной компиляции потребуется PowerMac или его эмулятор (например, SheepShaver), Metrowerks CodeWarrior 10 Tools и игровые данные оригинальной игры.

Как обычно, не обошлось без интересных находок — например, уже нашли отсылку к игровому дизайнеру, работавшему в Looking Glass Studios, Симус Блэкли (Seamus Blackley).

//      *******************HACK*HACK*HACK*HACK*****************************+//      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// uchar   EDMS_Seamus_is_an_asshole[12000];//      *******************HACK*HACK*HACK*HACK*****************************+//      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Предположительно, здесь происходила «спрятанная» аллокация почти 12KB памяти — на тот случай, если ближе к релизу что-либо пойдет не по плану, и срочно потребуется дополнительная память — ведь гораздо быстрее будет раскомментировать одну строку, чем заниматься оптимизацией.

Далее — ещё несколько забавных комментариев, взятых из исходного кода.

// limit framerate while scrolling to avoid flicker?// should really do something real about flicker anyway.#define SCROLL_FRATE 90
// default units per second// in defiance of Rob, I use the number 13.#define MAP_SCROLL_SPEED 13
// why!!!! why at the end, why randomly, hate hate hate// Clear out requestsfor (i=open_track; i < MLIMBS_MAX_CHANNELS -1; i++)
   current_request.pieceID = 255;        // was -1
#define ULTRA_GROSS_JOHN_MILES_HACK#ifdef ULTRA_GROSS_JOHN_MILES_HACK
   {
      #includeif ((dev_info[MIDI_CARD]==GENMIDI)&&(dev_info[DIGI_CARD]==SOUNDBLASTERPRO2)) {
         int mod_loc=dev_info[DIGI_IO];      // loc, the io port to send tooif (mod_loc==-1) mod_loc=0x220;     // i know much secretness of destruction
         outp(mod_loc+4,0x83);     // such that def io is 220, which AIL wont
         outp(mod_loc+5,0xb);      // tell me till later, when we init it
      }                                      // which we are not allowed to do yet
   }
#endif
// wow is this a total mess, goddamn#define is_solid() \
            ((_face_topedge[(me_tiletype(cv->mptr)<<2)]==0xff)|| \
             (me_clearsolid(cv->mptr)&_face_topmask)|| \
             (me_subclip(cv->mptr)&_face_topmask)|| \
             (_face_botedge[(me_tiletype((cv->mptr+y_map_step))<<2)]==0xff)|| \
             (me_clearsolid((cv->mptr+y_map_step))&_face_botmask)|| \
             (me_subclip(cv->mptr+y_map_step)==SUBCLIP_OUT_OF_CONE))// note how pretty this looks till you look at the is_solid macrobool _fr_skip_solid_right_n_back(FrClipVec *cv, fix max_loc, int y_map_step)
{
   if (is_solid()) 
   {
      cv->loc[0]&=0xffff0000;
      cv->loc[0]+=_fixp1;  
      cv->mptr+=1;
      while (is_solid()&&(cv->loc[0]loc[0]+=_fixp1; cv->mptr+=1; }
   }
   return (cv->loc[0]>=max_loc);
}
///// AAHRRHRHGGHGHG switch to secondary data cache!!!

(...)

// oh oh oh baby oh baby oh self modify height delta step baby now baby please// really, this wants to become the threaded nightmare assembler point coder from hell

Оригинал исходного кода вызывает трудности при чтении в связи с переводами строк (системы Mac OS до версии 9 использовали символ CR вместо более привычных нам LF/CR+LF). Читабельный форк с исправлениями доступен по ссылке.

Нравится14
Комментарии (4)
B
i
u
Спойлер