Cheb's Game Engine

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Re: Cheb's Game Engine

Сообщение Cheb » 12.05.2022 08:43:57

Alex2013 писал(а):Ну стандартные карты QuestZDoom переваривает

Это уже НЕ стандартная карта. Динамический скайбокс, иллюзия многоуровневой архитектуры (за счёт небесных порталов: зандронум не поддерживает истинные порталы), нищебродская экономия на объёме (часть текстур создана ремаппингом палитры стандаритных думских текстур), композиционные текстуры (чтобы на больших размерах выглядело не таким повторяющимся)...
Почему я хочу в своей игре полноценные порталы: настраивать это добро в зандронуме - боль. По факту, делаешь карту, отлаживаешь геймплей - потом копируешь открытые участки и возводишь вокруг них "второй этаж": верхние этажи и крыши зданий, или вот скалы с ёлками в моём случае. Потом с помощью якорей и такой-то матери соединяешь это всё небесными порталами.
Чёрная магия и эзотерические хаки, практически.
А я хочу по нормальному.

З.Ы. Да, и нужно указывать порту doom2.wad , оттуда используются многие текстуры и на карте есть ревинанты.

Alex2013 писал(а):а мегамод Arcane Dimensions это вообще невероятно даже в ВиАр он в чем-то лучше модернового Дума 2016

эпично! :shock: :D
Вот у кого хочется учиться.

Shleps писал(а):Опа! А я в то время собственный институт в Дюке Нукеме рисовал. Походу все паскалисты как раз с той эпохи остались. Дети 6-7 турбопаскаля, пригретые потом Дельфёй.

Я тоже карту в дюк нюкеме делал
Изображение. Не очень хорошо видно, там вынесенная дверь с размазанным по ней монстром. Если зайти и нажать кнопку Изображение - вулкан извергнется и размажет уже тебя.
, и тоже на 7 турбо паскале движок и игру под ДОС... Эх...

Про Эльбрус это я так. Вероятность наложить на такой лапки - ну очень смешная. По ходу, арм везде, на арм и ориентируюсь. Мой движок на арме уже запускался и показывал меню. А сколько багов огрёб на пустом месте... Ммм...
Объясняю: слово packed - матерное. Избегать.
Причём, паскаль использует какие-то хаки, позволяя работать с флоатами по невыровненным адресам. Но стоит загрузить драйвер GLES2 - эти хаки слетают, и твоя программа крашится в совершенно неожиданном месте.
Я в конце концов подставил макрос:
Код: Выделить всё
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
  // arm on Raspberry Pi
  // must NOT pack records, results in wall-bangingly hard to trace crashes due to unaligned floating point operations
  {$define maybepacked:=}
  {$ifdef cpu32}
    {$packrecords 4}
  {$else}
    {$fatal WAS NOT DESIGNED FOR THIS! (arm64?)}
  {$endif}
{$else}
  {$define maybepacked:=packed}
{$endif}

и
Код: Выделить всё
  TMotherInput_ = maybepacked record
    TextInput,
    GrabPointer,
    InvertMouseLook: boolean;
    Events: {$ifndef discretedll}  array of TInputEvent {$else} PInputEvent {$endif};
  end;

- и т.п.

Добавлено спустя 39 минут 51 секунду:
З.Ы.
Код: Выделить всё
// Cliff textures in CheKaizo2 --------------------------------------------------------------

// Classic Doom 2 texture, just palette-shifted
texture ROCK4ASH, 128, 128 {
   Patch ROCK4, 0, 0 {
      Translation "58:69=100:111", "70:75=5:8", "144:151=8:8", "76:79=8:8", "236:239=8:8", "13:15=8:8"
         // make light tan into dark gray
         // note: gzdoom builder doesn't show this translation, only works in-game
   }
}

texture RSKYASH, 256, 128 {
   Patch RSKY1, 0, 0 {
      Translation "128:149=192:197", "149:151=195:195", "64:79=96:111", "13:15=108:111", "236:239=108:111", "1:2=5:6"
         // make clouds gray and sky blue
   }
}



// ashwall2 that doesn't look ugly at large scales
// NOTE that this texture looks brighter in the builder than it shows in the game
texture ASHWALLC, 256, 256 {
   Patch ASHWALL2,   0, 0
   Patch ASHWALL2,  64, 0
   Patch ASHWALL2, 128, 0
   Patch ASHWALL2, 192, 0

   Patch ASHWALL2,   0, 128
   Patch ASHWALL2,  64, 128
   Patch ASHWALL2, 128, 128
   Patch ASHWALL2, 192, 128
   
   Patch "textures/rock_hires_mask.png", 0, 0 { Style Modulate }
}
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Shleps » 12.05.2022 12:07:14

Cheb писал(а):Должно выглядеть так:

:lol: :lol: :lol: Фотореалистичные ёлки )))
Примерно так должны выглядеть русские народные сказки для современных малышей.
Никакой лубочности, как в фильмах Роу! чуть огрубленный, но натуралистично-узнаваемый пейзаж, избушки на курьих ножках из оцилиндрованного бревна, трехголовые какодемоны, Кощей бессмертные с символикой СС.

Alex2013 писал(а):Согласен но других разрабов "полного цикла" нет и пока не предвидится.

Syntacore и CloudBear - кристаллы под встраиваемый линукс уже в железе.

Эльбрус не столько принципиально "плохое" как хронически недоделанное и догоняющие ( а ИМХО нужно было вместо Эльбрус 8с (опыт на то момент уже был набран) разу камень уровня Эльбрус 32с делать, тогда бы сечас уже совсем мифический "Эльбрус 128" делали

Как раз наоборот - именно принципиально неудачная архитектура для процессора общего назначения. А 8-16-32-128 - это не доделывание и прогресс, а тупо наращивание количества ядер за счет более тонких технологий. проц общего назначения на сегодняшний день должен быть максимально простым, чтобы
- не затруднять разгон конвейера до максимальных частот, для обеспечения максимальной производительности однопоточных приложений
- сбрасывать частоту подальше от максимума для энергоэффективного режима ничегонеделания
- многопоточную нагрузку принимать на большое количество реальных ядер, а не заниматься схематозным кроиловом выдавая дополнительные АЛУ за полноценное ядро (а-ля HT и VLIW)
Аватара пользователя
Shleps
постоялец
 
Сообщения: 194
Зарегистрирован: 14.06.2006 20:25:14

Re: Cheb's Game Engine

Сообщение Alex2013 » 12.05.2022 18:36:36

Shleps писал(а):yntacore и CloudBear - кристаллы под встраиваемый линукс уже в железе.

RISC-V? Опять "берем чужое потому что своего нет" . Да RISC-V имеет перспективу . Но это именно что "неполный цикл разработки"
У того же МЦСТ есть не только эльбрус но SPARC серия "R" однако флагманом все же считается именно Эльбрус и это неспроста .
Есть Leonhard есть NeuroMatrix есть Multicore и т.д. но им рости рости. а Эльбрусу досточно тупо "отмасштабироваться" просто нужно перестать догонять и начать делать новые камни оттолкнувшись от ТЕКУЩЕГО УРОВНЯ приемлемого быстродействия сразу закладывая процессоры завтрашнего дня, а не вчерашнего.
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Shleps » 12.05.2022 19:53:23

Alex2013 писал(а):Да RISC-V имеет перспективу . Но это именно что "неполный цикл разработки"

Какой он "неполный"??? ещё раз читаем
Shleps писал(а):Syntacore и CloudBear - кристаллы под встраиваемый линукс уже в железе.

И идем на сайты этих компаний.

У того же МЦСТ есть не только эльбрус но SPARC

логично, он же Московский Центр Спарк Технологий.
Только архитектура Sparc практически брошена, после того, как Sun Microsystems куплен Oracle'ом.
всё новое оракловое железо - x86, даже не знаю где спарки ещё остались.... в телекоме?
поправка: Oracle инвестирует в ARM-процессоры. Спарки остались у фуджицу для провительственных/военных нужд.

Есть Leonhard, есть NeuroMatrix, есть Multicore и т.д
Бауманский Леонард - это семантический процессор, не общего назначения. На нём линукс не запустишь и офис тоже.
Модулевский НейроМатрикс - это голое DSP, тоже не общего назначения. В системах на чипе у них ядра ARM в качестве управляющих.
Элвис Мультикор - это тоже, пардон, открытый MIPS с со спец-ядрами для DSP.


а Эльбрусу досточно тупо "отмасштабироваться" просто нужно перестать догонять и начать делать новые камни оттолкнувшись от ТЕКУЩЕГО УРОВНЯ приемлемого быстродействия сразу закладывая процессоры завтрашнего дня, а не вчерашнего.

Что нужно, чтобы понять, что у эльбруса провальная архитектура, которую не компенсировать никакими технологическими ухищрениями? Интел сходил в этот тупик до конца со своими итаниумами и списал всё в музей.
Эльбрусовским инженерам остается только пожелать побыстрее перестать тащить чемодан без ручки и начать развивать risc-V используя их опыт. А эльбрусу найти толковое спецприменение, где VLIW уместен.
Аватара пользователя
Shleps
постоялец
 
Сообщения: 194
Зарегистрирован: 14.06.2006 20:25:14

Re: Cheb's Game Engine

Сообщение Cheb » 13.05.2022 11:50:31

Shleps писал(а):Примерно так должны выглядеть русские народные сказки для современных малышей.
Никакой лубочности, как в фильмах Роу! чуть огрубленный, но натуралистично-узнаваемый пейзаж, избушки на курьих ножках из оцилиндрованного бревна, трехголовые какодемоны, Кощей бессмертные с символикой СС.

8) Стиль не из воздуха взялся.
1998 год, турбо паскаль:
Изображение Изображение
Туловище неуязвимо, любые снаряды рикошетят - и часто попадают в тебя.
http://chebmaster.com/video/goryn_fight2.avi
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Shleps » 13.05.2022 13:23:27

Какая прелесть!
Почему-то фотореалистичность современных движков (условно от Operation FlashPoint -> Far Cry и новее) не дает какой-то атмосферы сказочности, сюрреалистичности.
Вот в ActiveWolrds сделан мир Диптауна по мотивам Лукьяненковского "Лабиринта отражений" - там атмосфера есть.
причем такое впечатление, что катализатором для воображения => сказаочности является либо низкополигональность, либо текстуры низкого разрешения или низкой цветовой глубины.
в анреале атмосфера, безусловно, есть, хотя он изо всех сил пытался быть фотореалистичным. может потому что близкие текстуры дизеринг-подобным фильтром размывали, может из-за хитрых палитр (вариант низкой цветовой глубины)

Добавлено спустя 28 минут 24 секунды:

Это турбопаскаль? Да ладно, там небось один сплошной inline был!
потыкать в гомосеков краснозвёздным скипетром - это шиза!!! А на горыныча их нельзя натравить?
Аватара пользователя
Shleps
постоялец
 
Сообщения: 194
Зарегистрирован: 14.06.2006 20:25:14

Re: Cheb's Game Engine

Сообщение Cheb » 13.05.2022 16:29:41

Код был, на удивление, в основном на Паскале - кроме обработчика прерывания таймера, который обеспечивал многопоточность, и процедуры рисования спрайта - увы, я тогда не знал азов и нормально пошло только на k6-2 266. Почему? Потому что размер спрайта - фиксированный 128х128, даже для крохотных грибочков. И никакого мип-маппинга. Кэш процессора давился и умирал в муках.
Причём, в 16-битный паскаль в asm блоках были вставлены 32-битные команды посредством префикса через db $66.
А потом оказалось, что пентиум с отвращением тормозит на подобных префиксах и каждая команда ждёт несколько тактов вместо того, чтобы ускорить.

Некоторые от воздействия волшебной палочки превращаются в гриб. Их потом можно сорвать и выстрелить в Горыныча.
Планировалось оружие в форме Спасской башни, в которые эти палочки вставляются звездой наружу - и даёт очередь магических зарядов на манер плазмогонки.

Вот бОльшая часть ассемблера:

Код: Выделить всё
{$Q- }
UNIT G_IMAGER;
INTERFACE
  Uses gEXTENDE, g_Ems, g_mat, g_numstr,g_vesa,g_memall;
  Procedure ScreenClear(g,a:integer);
  Procedure ScreenOut;
  Procedure DrawSequence;
  Procedure PutImage(N :word);
VAR ColSeg: array[0..319] of Word;
    CuGmo: word;
CONST
  _ptab=0;
  _weiter=32768;

  VAR GDS: Word;

TYPE a1024 = array[0..2048] of integer;
     b1024 = array[0..2048] of byte;
     i1024 = array[0..2048] of shortint;
  VAR
  _page, _vx, _vy, _sx, _sy: ^a1024;
  _vxseg,_vyseg,_sxseg,_syseg: WORD;
  _eya: ^b1024;
  _nap: ^i1024;
  numdr: integer;
  vseqn,vdist:^a1024;
  Nowtit: Boolean;
IMPLEMENTATION
  Uses G_Contrl,g_lib,g_vga;
  Var BankAd: pointer;
  Procedure DrawSequence;
  var d,xs,ys,dxs,dys,yar,c,a,
      spnum,elnum,spd,w :integer;
  begin
    For c:=0 to NumDr do begin
      a:=vseqn^[c];
      d:=vdist^[c];
      if d<5 then continue;
      PutImage(a);
    end;
  end;

  Procedure ScreenClear(g,a:integer);
  var  w,z,j :word;
  begin
   If g<0 then g:=0;
   If g>199 then g:=199;
   j:=199-g;
   z:=66;
   if a in[2,3] then z:=246;
   if a=4 then z:=0;
   If a=6 then z:=181;
   If a=7 then z:=150;

   For w:= 0 to 319 do
   Asm
     CLD
     Mov bx,[w]; shl bx,1; Mov bx,Word(ColSeg+bx);
     Mov es,bx;
     mov di,0; mov cx,[g]; inc cx; mov ax, $3F3F;
     rep stosw
     Mov ax, 0002h{[z]};
     Mov cx,[j];
    JCXZ @m1;
     rep stosw;
    @m1:
   End;
  end;
  Procedure ScreenOut; EXTERNAL;
  {$L G_IMAGER.OBJ }
{  var c: word;
  Asm
    Cmp [CuGmo], 0;
   JNE @VesaPr;
    Mov [c],0;
   @m1:
    Mov si,[c];
    Mov di,[c]; Shl di,1;
    Mov ax, Word([ColSeg+di]); Mov es,ax;
    Mov ax, [GDS]; Mov ds,ax;
    CLI;
    Mov dx,ss; Mov ax,$a000; Mov ss,ax;
      Mov cx,200;
      Mov di,0;
     @m2:
        Mov bx, es:[di];
        Mov al, ds:[bx];
        Mov ss:[si],al;
        add si,320;
        add di,2;
      LOOP @m2;
    Mov ss,dx; STI;
    Mov ax,SEG [@Data]; Mov ds,ax;
    Inc [c];
    Cmp [c],320; JB @m1;
    STI
   JMP @outit;
   @VesaPr:
    Mov dx,0; Call VesaBank;
    Mov [c],0;
   @m3:
    Mov si,[c]; shl si,1;
    Mov di,[c]; Shl di,1;
    Mov ax, Word([ColSeg+di]); Mov es,ax;
    Mov ax, [GDS]; Mov ds,ax;
    CLI;
    Mov dx,ss; Mov ax,$a000; Mov ss,ax;
      Mov cx,102;
      Mov di,0;
     @m4:
        Mov bx, es:[di]; shl bx,1;
        Mov ax, ds:[bx];
        Mov ss:[si],ax;
        add si,640;
        add di,2;
      LOOP @m4;
    Mov ss,dx; STI;
    Mov ax,SEG [@Data]; Mov ds,ax;
    Inc [c];
    Cmp [c],319; JB @m3;
    STI
    Mov dx,1; Call VesaBank;
    Mov [c],0;
   @m5:
    Mov si,[c]; shl si,1;Add si,384;
    Mov di,[c]; Shl di,1;
    Mov ax, Word([ColSeg+di]); Mov es,ax;
    Mov ax, [GDS]; Mov ds,ax;
    CLI;
    Mov dx,ss; Mov ax,$a000; Mov ss,ax;
      Mov cx,97;
      Mov di,206;
     @m6:
        Mov bx, es:[di]; shl bx,1;
        Mov ax, ds:[bx];
        Mov ss:[si],ax;
        add si,640;
        add di,2;
      LOOP @m6;
    Mov ss,dx; STI;
    Mov ax,SEG [@Data]; Mov ds,ax;
    Inc [c];
    Cmp [c],319; JB @m5;
    STI

   @outit:
  End;}


  Procedure PutImage(N: word);
  var x1,y1,x2,y2,c,l,a,s,b,d: integer;
      nx,ix,ny,iy: longint;
      TX: Array[0..320] of word;
      TY: Array[0..199] of word;
  begin
    MapP( _page^[n] and $0FFF);
{    x1:=((_vx[n]-1) div 16)+1; x2:=((_vx[n]+_sx[n]-1) div 16);}
    Asm
      Mov bx,[n]; shl bx,1;
      MOV SI, [_vxSeg]
      MOV ES, SI
      Mov ax, ES:[BX] {word([_vx]+bx);}
      Dec ax;
      cwd; Mov cx,16; idiv cx;
      Inc ax; Mov [x1], ax;
      Mov ax, ES:[BX]{  Word([_vx]+bx);}
      MOV SI, [_sxSeg]
      MOV ES, SI
      Add ax, ES: [BX] {word([_sx]+bx);}
      dec ax;
      cwd; idiv cx;
      Mov [x2], ax;
{   y1:=((_vy[n]-1) div 16)+1; y2:=((_vy[n]+_sy[n]-1) div 16);}
      MOV SI, [_vySeg]
      MOV ES, SI
      Mov ax, ES:[BX] {word([_vy]+bx);}
      Dec ax;
      cwd; Mov cx,16; idiv cx;
      Inc ax; Mov [y1], ax;
      Mov ax, ES:[BX] {Word([_vy]+bx);}
      MOV SI, [_sySeg]
      MOV ES, SI
      Add ax, ES:[BX] {word([_sy]+bx);} dec ax;
      cwd; idiv cx;
      Mov [y2], ax;
{   dx:=(1 shl 27) div _sx[n];}
      DB 66h; Xor ax,ax; db 66h; xor dx,dx;
      mov ax,1; db 66h; shl ax,27; db 66h; xor cx,cx;
      MOV SI, [_sxSeg]
      MOV ES, SI
      mov cx, ES:[BX] {word([_sx]+bx);}
      DB 66h; idiv cx;
      DB 66h; Mov word([ix]),ax;
{   iy:=(1 shl 27) div _sy[n];}
      DB 66h; Xor ax,ax; db 66h; xor dx,dx;
      mov ax,1; db 66h; shl ax,27; db 66h; xor cx,cx;
      MOV SI, [_sySeg]
      MOV ES, SI
      mov cx, ES:[BX] {word([_sy]+bx);}
      DB 66h; idiv cx;
      DB 66h; Mov word([iy]),ax;
    end;
    If x1>=0 then nx:=(ix*((x1 shl 4)-_VX^[n])) shr 4
             else begin nx:=ix*((-long(_vx^[n]))) shr 4; x1:=0 end;
    If y1>=0 then ny:=(iy*((y1 shl 4)-_Vy^[n])) shr 4
             else begin ny:=iy*((-long(_vy^[n]))) shr 4; y1:=0 end;
    If x2>319 then x2:=319;
    If y2>199 then y2:=199;
    If (x1>319) or (x2<0) or (y1>199) or (y2<0) or (y2<=y1) or (x2<=x1)
    then EXIT;
    If _nap^[n]<1 then Asm
      db 66h; mov Dx,128; db 0,0;db 66h; shl dx,16; db 66h; sub dx, word[nx];
      db 66h; mov si,word[ix];
      Mov cx,[x2]; sub cx,[x1]; Inc cx;
      Mov di,[x1]; Shl di,1;
      @m1:
        db 66h; Mov ax,dx; db 66h; shr ax,16;
        and ax, $007F; Mov [word(TX)+di],ax;
        db 66h; sub dx,si;
        Add di,2;
      LOOP @m1;
    End
    {For c:=x1 to x2 do TX[c]:=(((128 shl 16)-nx-long(c-x1)*ix) shr 16) and $007F}
    else Asm
      db 66h; mov si,word[ix]; db 66h; Mov dx,word[nx];
      Mov cx,[x2]; sub cx,[x1]; Inc cx;
      Mov di,[x1]; Shl di,1;
      @m1:
        db 66h; Mov ax,dx; db 66h; shr ax,16;
        and ax, $007F; Mov [word(TX)+di],ax;
        db 66h; add dx,si;
        Add di,2;
      LOOP @m1;
    End;
      {For c:=x1 to x2 do TX[c]:=((nx+long(c-x1)*ix) shr 16) and $007F;}

    {For c:=y1 to y2 do TY[c]:=((ny+long(c-y1)*iy)shr 9) and $3F80;}
    Asm
      db 66h; mov si,word[iy]; db 66h; Mov dx,word[ny];
      Mov cx,[y2]; sub cx,[y1]; Inc cx;
      Mov di,[y1]; Shl di,1;
      @m1:
        db 66h; Mov ax,dx; db 66h; shr ax,9;
        and ax, $3F80; Mov [word(TY)+di],ax;
        db 66h; add dx,si;
        Add di,2;
      LOOP @m1;
    End;
    a:=_eYa^[n];
    For c:=x1 to x2 do begin
      If (Sres<>2) and (c and 1 =1) then Continue;
      s:=ColSeg[c];
      l:=(y2-y1)+1; d:=TX[c];
      Asm
        Mov ax,[s]; mov es,ax;
        Mov dx,[d];
        Mov di,[y1]; shl di,1;
        mov ax,[EmsAddr]; Add ax,3072; Mov ds,ax;
        mov cx,[l];
        mov ax,[a]; shl ax,8;
       @m1:
          Mov si, word([TY]+di);
          Or si,dx;
          mov al,ds:[si];
          Cmp al,0; JE @m2;
          mov es:[di],ax;
         @m2:
          add di,2;
        LOOP @m1;
        Mov ax,SEG [@Data]; Mov ds,ax;
      End;
    End;
  end;
BEGIN
  BankAd:=@VesaBank;
  New(_page);
  _vxseg:=GetMemSeg(4100);
  _vyseg:=GetMemSeg(4100);
  _sxseg:=GetMemSeg(4100);
  _syseg:=GetMemSeg(4100);
  _vx:=Ptr(_vxseg,0);
  _vy:=Ptr(_vyseg,0);
  _sx:=Ptr(_sxseg,0);
  _sy:=Ptr(_syseg,0);
  new(_eya);
  new(_nap);
  new(vseqn);
  new(vdist);
END.


Добавлено спустя 13 минут 42 секунды:
Фреймбуфер был 16-битный, один байт - палитровый цвет, второй байт - глубина тумана (0-63, емнип). Потом он флипался в ввидеопамять посредством копирования с табличным преобразованием, поддерживались 256 цветов и 16-битный цвет через VESA. Везовская видеостраница не лезла в 64к, приходилось в два приёма, переключая окно отображения видеопамяти на адрес A0000h средствами биос.
..и опять, умри быстродействие: даже в 256-цветном режиме таблица 256х64х1 = 16к, фреймбуфер 320х200х2 = 128к, видеопамять 320х200х1 = 64к. Кеш процессора плакал и давился, жря этот кактус.

Добавлено спустя 3 часа 8 минут 1 секунду:
Зверь ты.
Я тут на досуге попытался представить трёхголового какодемона.
У меня ж чуть мосх в BSOD не выпал!
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Shleps » 13.05.2022 21:19:24

Охохо! И это пишет человек, который планировал стрелять звездами из Спасской башни (ладно, что не пентаграммами)
Тут вообще что, игра про светлое коммунистическое будущее против проклятого крепостнического прошлого???
А у антагониста вместо грены разрывной Колобок, который набирает массу, если катится по ржаному полю?
Ну грибы-то после Rise of the Triad с её великолепным shrooms mode уже не вставляют.

я в Дюке пытался максимально точно калькировать реальность (в мое время плитка была именно шестиугольной - это фотография, импортированная в игру)
Изображение
Изображение

Добавлено спустя 2 часа 1 минуту 16 секунд:
Кстати о трёхглавом какодемоне

Изображение

(гаишная модификация)

Добавлено спустя 36 минут 21 секунду:
Cheb писал(а):Изображение

Посмотрел ролик со звуком, результате почти сделал саундтрек к игрухе :lol:
[петь голосом Кипелова на мотив "Баллады о древнерусском воине"]

Над серой далью вились облака,
Сжимала мухоморомёт рука,
Дым плыл над всей землёй,
Змей Горыныч рыгал огнём злой!
Где тот воин, что врежет звездой?

Кстати, а Горыныч-то на гусеничном ходу!
Аватара пользователя
Shleps
постоялец
 
Сообщения: 194
Зарегистрирован: 14.06.2006 20:25:14

Re: Cheb's Game Engine

Сообщение Cheb » 18.05.2022 11:05:49

Shleps писал(а):Где тот воин, что врежет звездой?

:D

Shleps писал(а):(гаишная модификация)

Не, не, не. Это - тройной сиамский какодемон, не трёхголовый.
Смотри. Какодемон - это голова, так? Одна только голова. Как только пытаемся составить трёхголового - он перестаёт быть одним какодемоном и становится составным трикакодемоньем. То есть надо так, чтобы было три отдельных головы, но при этом нельзя три отдельных какодемона. Но какодемон - это и есть голова!
И - всё. Взаимоисключающие параграфы, взрыв зациклившегося мосха. :shock:

Shleps писал(а):Кстати, а Горыныч-то на гусеничном ходу!

Гы. В какой-то версии я даже приделывал к нему звук работающего механизма (один для движения, другой для разворота).
Вообще-то планировалось более масштабное, с сегментами для куцого хвоста, двумя лапами по бокам, может быть - с гибкими шеями. Но это когда я уже выдыхался. Так организовал физику, что игровой мир должен был уместиться в сорок килобайт, или около того. И вместо геймплея вся энергия ушла на мозготрахи, как побольше упаковать в один байт. Например, координата по высоте (двухбайтовое целое) - у голов горыныча там хранится фаза перезарядки, а высота голов зашита в коде, и везде костыли в физике для этого.
И тому подобное.
Физика, кстати, абсолютно вся целочисленная 16-битная (с редкими вставками вычислений с расширением промежуточных значений до longint), ибо математический сопроцессор 80387 - это такая жутко дорогая и редкая байда, которая бывает только у новых русских.

Shleps писал(а):в мое время плитка была именно шестиугольной

Эеееех... Вот из-за нехватки доступных знаний, на что уходила энергия наша...
Завидую нынешнему поколению: Юнити установил - и вперёд. Не приходится самому драйвер для звуковой карты писать.
Я, вот, когда над тем движком работал - доходило до того, что ходил в библиотеку универа, ксерил там учебник по советским клонам 8086-го. И не было никого, чтобы объяснить мне за кеш и мипмаппинг.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Shleps » 18.05.2022 12:55:43

Cheb писал(а): Как только пытаемся составить трёхголового - он перестаёт быть одним какодемоном и становится составным трикакодемоньем. То есть надо так, чтобы было три отдельных головы, но при этом нельзя три отдельных какодемона. Но какодемон - это и есть голова!
И - всё. Взаимоисключающие параграфы, взрыв зациклившегося мосха. :shock:

Именно поэтому я и выбрал какодемона для аналога головы Горыныча - чтобы породить дзенбуддистский парадокс, типа хлопка одной ладонью.
Ещё визуализация в виде связки воздушных шариков мелькала.

И вместо геймплея вся энергия ушла на мозготрахи, как побольше упаковать в один байт
.
Я никогда так не понимал, когда мой преподаватель по машинной графике показал интро на 128 байт, которая анимировала фрактал Жулиа в 320*200 я офигел, и решил, что никогда так не смогу, и пошёл копать в другом направлении.

Я, вот, когда над тем движком работал - доходило до того, что ходил в библиотеку универа, ксерил там учебник по советским клонам 8086-го. И не было никого, чтобы объяснить мне за кеш и мипмаппинг.

В московском регионе в 95-96 году уже было фидо и там во всю ходили исходники демок с фестивалей и книжки с документацией (вместо ксеренья) :?
Аватара пользователя
Shleps
постоялец
 
Сообщения: 194
Зарегистрирован: 14.06.2006 20:25:14

Re: Cheb's Game Engine

Сообщение Cheb » 20.05.2022 08:36:01

Когда долго занимаешься франкенштейнингом - крыша начинает съезжать тихо, незаметно.
Октябрь 1999, когда я уже понял, что надо переделывать заново и подготавливал ассеты, в то время, как изучал Дельфи:
Изображение Изображение

Shleps писал(а):В московском регионе в 95-96 году уже было фидо и там во всю ходили исходники демок с фестивалей и книжки с документацией

Да, но сначала надо было *знать*, что существует такая штука. Интернет у меня появился в 1998-м, кажется, но точно не раньше, чем пентиум. Сначала - пентиум, потом уже - модем.

Shleps писал(а): типа хлопка одной ладонью.

Удался, полный взрыв мосха.

Добавлено спустя 55 минут 25 секунд:
Пастезавр, мой фирменный монстр - но слепить я его пытался из собачки из "Крови" и зубов босса из "Дюка" http://chebmaster.com/_share/pastezavr.png У моего оригинального дизайна лапки гораздо короче, а напрыгивает он, сгибаясь вдвое, как гусеница, и распрямляясь.
Неведомая хтоническая ээ...хрень, босс из "Дюка" + какодемон. Куча новых анимаций типа напрыгивания - здох в борозде, ниасилил http://chebmaster.com/_share/kusogryz.png Обратите внимание, для фронтального - всегда две анимации атаки, стандартная и ближняя, когда летящая в тебя грабка - перспективно увеличена.
Ср. людоеда, который таки был закончен (и является рескином арчвиля): http://chebmaster.com/_share/LUDOED1.png http://chebmaster.com/_share/LUDOED_A.png У этого анимация ближней атаки - вообще в двойном разрешении, 128х256.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Shleps » 20.05.2022 11:25:34

Cheb писал(а): крыша начинает съезжать тихо, незаметно.

Т.е. главный герой Дума - это на самом деле почти имп и крошит своих )))

Интернет у меня появился в 1998-м, кажется, но точно не раньше, чем пентиум. Сначала - пентиум, потом уже - модем.

А у нас и без интернета в фидо было хорошо.

Пастезавр, мой фирменный монстр

Да? В таком случае его сперли авторы Звездный войн, эпизод 2. Такой же в тигрово-полосатой окраске должен был скушать Падме в сцене казни (Анакину достался бычок, а ОбиВану - крабопаук).
Аватара пользователя
Shleps
постоялец
 
Сообщения: 194
Зарегистрирован: 14.06.2006 20:25:14

Re: Cheb's Game Engine

Сообщение Cheb » 20.05.2022 17:30:44

Shleps писал(а):В таком случае его сперли авторы Звездный войн, эпизод 2.

Падлы.
Мой концепт лет на десять старше, ещё из моей первой книги, с до того, как у меня появился комп.

Shleps писал(а):Т.е. главный герой Дума - это на самом деле почти имп

Ну, вообще-то да, но тут просто пример бредонесения.

З.Ы. Нашёл полные исходники от октября 2001-го - подумываю зацензурить сиськи и пересобрать пак-файл, чтобы можно было наконец выложить саму игру.
Но некогда: на работе занятой сезон, а сборщик только под досбоксом работает.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Shleps » 20.05.2022 19:55:24

Cheb писал(а):
Shleps писал(а):В таком случае его сперли авторы Звездный войн, эпизод 2.

Падлы.
Мой концепт лет на десять старше, ещё из моей первой книги, с до того, как у меня появился комп.

Ну правда же похож, только задница потоньше
Изображение
Изображение
Изображение
Аватара пользователя
Shleps
постоялец
 
Сообщения: 194
Зарегистрирован: 14.06.2006 20:25:14

Re: Cheb's Game Engine

Сообщение Cheb » 21.05.2022 05:24:53

Размер не тот, однако. Мой полтора метра в длину, пасть полметра в ширину.

Я просто оставлю это здесь: http://chebmaster.com/downloads/bryed_3d.zip
Вымотался, выпалывая баги в сборке и закрашивая сиськи чёрными квадратами. Всё равно неполиткорректно - ну, да чёрного кобеля и т.д.
Досбокс все запускать умеют?

Спокойной ночи %P

Добавлено спустя 17 часов 16 минут 14 секунд:
Вдогонку: я с самого начала хотел применить ООП. В турбо 7 оно было. Провёл ряд тестов - и сделал вывод, что объекты - чудовищно тормозные, их надо избегать, как чумы. Хотя - казалось бы - им насрать на ограничение в 64к, можно делать игровой мир хоть 200.
Увы, это всё использовало дальние указатели. То-ли на 386-м это тормозное, то-ли оптимизатор кода в турбе сосал - фактом остаётся, что я ушёл от ООП, зарывшись в преждевременные оптимизации. Я, конечно, мечтал о 32-битном средстве разработки - но такого было не купить ни в одном магазине, ни в одном ларьке с варезом. Пробовал Си - не зашла, уродский зоопарк "моделей памяти": tiny, small, large, huge - только что не в крапинку или полосочку. Любая библиотека, которую чудом достаёшь на развале в глухом пригороде - собрана под свою модель памяти. Вероятность, что окажется та же, что выбрал ты - смешная.
И на этом - всё.

Как основная часть памяти была доступна 16-битной программе? Через EMS. То есть, окно в 64К, в которое отображаются четыре 16-килобайтные страницы. Угадайте, почему у меня все спрайты имеют фиксированный размер 128х128?
Правильно, это одна страница EMS.

Добавлено спустя 22 часа 16 минут 52 секунды:
Чувствую себя сам-себе-злобным-буратиной. Не нужно даже было закрашивать сиськи, достаточно было замазать всю похабщину исходниках карт и пересобрать карты!
Перезакачал.
Как следствие, третий уровень с Горынычем стал гораздо более брутален: все сонмы людоедов сразу ломятся к тебе. Более не отвлекаемые.

Добавлено спустя 4 часа 34 минуты 17 секунд:
https://gamedev.ru/projects/forum/?id=269209

Добавлено спустя 23 часа 51 минуту 38 секунд:
..вот народ уже спидраны на ютуб выкладывает https://www.youtube.com/watch?v=Ggt_U2-bldI
[прослезился]

Добавлено спустя 17 часов 30 минут 6 секунд:
Так, оглядываюсь по теме назад - и понимаю, что протупил даже упомянуть о многом именно по движку.

1. Прогресс в этом году хреновый в частности потому, что ковид пытался меня сгрызть. Зубы обломал, самка собаки, но месяц в минус. Лёгкие восстановились, а мозг ещё не до конца: часто туплю и подвисаю.

2. Я принял решение использовать в загружаемых ДЛЛах менеджер памяти программы-матки.
С одной стороны - требует убирать за собой (раньше: "нафиг освобождать, длл выгрузится и всё исчезнет"), серьёзный хряп - падает и весь цирк с остальными клоунами. Невозможна работа модулей, собранных отличающимися версиями компилятора.
С другой стороны - взаимодействие между маткой и модулями облегчается охрениечески. Можно обмениваться строками, можно - массивами записей... Я ещё полностью не осознал феноменальность облегчения от этого постулата!

К диаволу минусы, экономия объёма работы воодушевляет! :D

Добавлено спустя 15 часов 15 минут:
Дополнение к этой парадигме: перзистентные ассеты (сохраняющиеся при загрузке кода) выносятся из сферы СУБД и переделываются с потомков TChepersyObject на записи. Понадобилось изменить их формат - перезапускай весь движок.
Поелику, реалистично, изменять их придётся в течение примерно месяца из всей разработки, а код получается чудовищно сложным и дорогим.

Соответственно, такими ассетами теперь владеть может приложение-матка, убирая царский геморрой и пляску с бубном вокруг PK3 файлов, открываемых в модуле, их объектов, сохраняющихся в сессию, вызывающих пляски со сличением с текущей версией после загрузки... НА МЫЛО :evil:

Перзистентный ассет - сущность, живущая в памяти, пока запущено приложение-матка. А модули работают с ним через API матки.

Тот путь, по которому я шёл до сих пор - он вёл в глубины, которых не выдержит человеческий разум. Лишь отчаяние и фтагн ждали меня там.

Добавлено спустя 2 часа 49 минут 16 секунд:
Фтааагн :cry:
Код: Выделить всё
function TFileManager.Devour(c: TGenericAsset): boolean;
var
  co: TFileManager;
  i: integer;
begin
  co:= c as TFileManager;
  if Mother^.Debug.Verbose then AddLog('   %0.Devour...', [ClassName]);

  //make sure all the pak files match
  if Length(f_paks) <> Length(co.PakFiles) then begin
    if Mother^.Debug.Verbose then AddLog('    Number of paks doesn''t match (%0 vs %1). Aborting.', [Length(co.PakFiles), Length(f_paks)]);
    Exit(false);
  end;
  for i:= 0 to High(f_paks) do
    if f_paks[i].Hash <> co.PakFiles[i].Hash then begin
      if Mother^.Debug.Verbose then AddLog('    Hashes do not match for pak #%0 (%0 vs %1). Aborting.', [i, HashToHex(co.PakFiles[i].Hash), HashToHex(f_paks[i].Hash)]);
      Exit(false);
    end;
  //lists DO match as the hash guarantees it.
  f_list:= COPY(co.List);
  RebuildListFromPaks; //as it would be pointing to wrong pak objects now!
  Result:= inherited Devour(c);
  co:= nil;
end;


"Тзинч попутал" - это самое разумное, логичное объяснение тому, что я писал такой код :oops:
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32

Рейтинг@Mail.ru