IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Reply to this topicStart new topic
> Альтернативы, тема-мотиватор
feanor
сообщение 18 Jan 2013, 00:05 (Сообщение отредактировал feanor - 18 Jan 2013, 00:09)
Сообщение #1

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




Код по состоянию на позавчера.
Код по состоянию на вчера лежит на ограниченно доступной машине, так шо будет.. когда-нибудь.
Структуры (CASTLE) взяты из вогосорцев, функции патчинга - из бараторчевского патчера.

Суть кода, как и у МоР'a, в выносе обращения к таблице монстров в отдельную функцию, принимающую не только ТТХ монстра, но и ТТХ замка.
Заменены почти все обращения к таблице лайнапов, кроме обращения в экране выбора сценария (ну, там где показываются линейки дегрейдов для каждого замка), какого-то обращения при самом старте героев и воговских. Ну, еще пары из Kingdom Overview, но это исправлено.

Интерфейса для ERM пока нету, потому что он не продуман. Склоняюсь к SN:W переменным с именами типа citrine_<townID>_<town type>_<creature lvl>_<is upgrade> (citrine_0_1_3_1 - переменная, определяющая, кто будет наниматься в первом Оплоте вместо эльфа негрейженного)
Совместимость с battery не проверена.
Функции для работы с видом города и окном отстройки только в проекте.


Код
//
#include "citrine.h"

int GetCreatureFromCastle(int offset, CASTLE* cstl)
{
    int type = offset/14;
    int level = (offset%14)%7;
    int upgrade = (offset%14)/7;

    /*if (type == 2 && level == 2 && upgrade ==0 && cstl->Number&1) return 32;
    if (type == 2 && level == 2 && upgrade ==1 && cstl->Number&1) return 117;

    if (type == 2 && level == 2 && upgrade ==0 && !(cstl->Number&1)) return 33;
    if (type == 2 && level == 2 && upgrade ==1 && !(cstl->Number&1)) return 116;*/

    //return ((int*)0x836CC8)[(type*2+upgrade)*7+level];
    return upgrade;
}

signed int __stdcall CorrectTownCreatureGrowth(HiHook *h, CASTLE* _cstl, int a2, int a3)
{
  signed int result; // eax@1
  int i = 0;


  result = 0;
  do
  {
    if ( GetCreatureFromCastle(14*_cstl->Type+i, _cstl) == a2 )
      break;

    ++result;
    ++i;
  }
  while ( result < 14 );
  if ( result != 14 )
  {
    *(int *)((int)_cstl + 4 * result + 0x118) += a3;
    if ( result < 7 )
      *(int *)((int)_cstl + 4 * result + 0x134) += a3;
  }
  return result;
}



int __stdcall GetMonsterUpgrade(HiHook *h, int a)
{
    return CALL_1(int, __fastcall, h->GetDefaultFunc(), a);
}

int __stdcall GetMonsterDegrade(HiHook *h, int a) //degrade?
{
    return CALL_1(int, __fastcall, h->GetDefaultFunc(), a);

}

int __stdcall HasMonsterUpgrade(HiHook *h, int a)
{

    return CALL_1(int, __fastcall, h->GetDefaultFunc(), a);
}


//хочу лямбду в С.

void __stdcall splice_00551B50(HiHook *h, CASTLE* cstl, int edx)
{
    int a1 = (int)cstl;
    //sub_00551B80(MonstersInTowns_9x2x7[edx0 + 14 * *(_BYTE *)(a1 + 4)], a1 + 2 * edx0 + 22);

    CALL_2(void,__fastcall,0x551B80,GetCreatureFromCastle(edx + 14 * cstl->Type, cstl), a1 + 2 * edx + 22);
    return;
}

int __stdcall hook_428602(LoHook* h, HookContext* c)
    {c->edx = GetCreatureFromCastle(c->edx,(CASTLE*)(*(int*)(c->ebp + 0x8))); return NO_EXEC_DEFAULT;}

int __stdcall hook_428964(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)c->ebx); return NO_EXEC_DEFAULT;}

int __stdcall hook_429BB1(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)(*(int*)(c->ebp - 0x14))); return NO_EXEC_DEFAULT;}

int __stdcall hook_429DEC(LoHook* h, HookContext* c)
    {c->ecx = GetCreatureFromCastle(c->eax,(CASTLE*)c->edi); return NO_EXEC_DEFAULT;}

int __stdcall hook_429F32(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->eax,(CASTLE*)c->edi); return NO_EXEC_DEFAULT;}

int __stdcall hook_42A026(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edi,(CASTLE*)c->eax); return NO_EXEC_DEFAULT;}

int __stdcall hook_42B538(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)c->ecx); return NO_EXEC_DEFAULT;}

int __stdcall hook_42B5D9(LoHook* h, HookContext* c)
    {c->edi = GetCreatureFromCastle(c->edx,(CASTLE*)c->ecx); return NO_EXEC_DEFAULT;}

int __stdcall hook_42B5F3(LoHook* h, HookContext* c)
    {c->esi = GetCreatureFromCastle(c->esi,(CASTLE*)c->ecx); return NO_EXEC_DEFAULT;}

int __stdcall hook_42B724(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->ecx,(CASTLE*)c->edi); return NO_EXEC_DEFAULT;}

int __stdcall hook_42BE42(LoHook* h, HookContext* c)
    {c->edx = GetCreatureFromCastle(c->eax,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_42CF07(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)(*(int*)(c->ebp + 0xC))); return NO_EXEC_DEFAULT;}

int __stdcall hook_42D241(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->eax,(CASTLE*)(*(int*)(c->ebp + 0x8))); return NO_EXEC_DEFAULT;}

int __stdcall hook_432E94(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_432F5F(LoHook* h, HookContext* c)
    {c->edx = GetCreatureFromCastle(c->ecx,(CASTLE*)c->edi); return NO_EXEC_DEFAULT;}

int __stdcall hook_43363B(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->eax,(CASTLE*)c->edx); return NO_EXEC_DEFAULT;}

int __stdcall hook_4BF302(LoHook* h, HookContext* c)
    {c->edi = GetCreatureFromCastle(7+c->eax/4,(CASTLE*)(*(int*)(c->ebp - 0x10))); return NO_EXEC_DEFAULT;}

int __stdcall hook_4BF307(LoHook* h, HookContext* c)
    {c->esi = GetCreatureFromCastle(c->eax/4,(CASTLE*)(*(int*)(c->ebp - 0x10))); return NO_EXEC_DEFAULT;}

int __stdcall hook_4C8D2D(LoHook* h, HookContext* c)
    {c->edx = GetCreatureFromCastle(c->ecx,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_51CFD8(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)(*(int*)(c->ebp - 0x14))); return NO_EXEC_DEFAULT;}

int __stdcall hook_525A8B(LoHook* h, HookContext* c)
    {c->edx = GetCreatureFromCastle(7+c->eax,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_525AAD(LoHook* h, HookContext* c)
{c->return_address =  (c->eax == GetCreatureFromCastle(c->ecx,(CASTLE*)c->esi))?0x525ABA:0x525B56; return NO_EXEC_DEFAULT;}

int __stdcall hook_52A31B(LoHook* h, HookContext* c)
    {c->ebx = GetCreatureFromCastle(c->edx,(CASTLE*)c->edi); return NO_EXEC_DEFAULT;}

int __stdcall hook_5519A7(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_5BEF9E(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->eax,(CASTLE*)c->ecx); return NO_EXEC_DEFAULT;}

//int __stdcall hook_551B68(LoHook* h, HookContext* c)
//    {c->ecx = GetCreatureFromCastle(c->eax,(CASTLE*)c->ecx); return NO_EXEC_DEFAULT;}

int __stdcall hook_5BFC66(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->ecx,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_5BFFDF(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_5C0098(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_5C0264(LoHook* h, HookContext* c)
    {c->edx = GetCreatureFromCastle(c->esi/2,(CASTLE*)c->ecx); return NO_EXEC_DEFAULT;}

int __stdcall hook_5C6023(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->eax,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_5C7196(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->ecx,(CASTLE*)(*(int*)(c->ebx + 0x38))); return NO_EXEC_DEFAULT;}

int __stdcall hook_5C7CE5(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)(*(int*)(c->ebx + 0x38))); return NO_EXEC_DEFAULT;}

int __stdcall hook_5C7D1E(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->eax,(CASTLE*)c->ecx); return NO_EXEC_DEFAULT;}


int __stdcall hook_5D9DE4(LoHook* h, HookContext* c)
    {    int tmgr = *(int*)0x69954C;
        c->edx = GetCreatureFromCastle(c->edx,(CASTLE*)(*(int*)(0x38 + tmgr))); return NO_EXEC_DEFAULT;}

int __stdcall hook_5D9E5D(LoHook* h, HookContext* c)
    {    int tmgr = *(int*)0x69954C;
        c->edx = GetCreatureFromCastle(c->ecx,(CASTLE*)(*(int*)(0x38 + tmgr))); return NO_EXEC_DEFAULT;}

int __stdcall hook_5DD099(LoHook* h, HookContext* c)
    {    int tmgr = *(int*)0x69954C;
        c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_5DDAD6(LoHook* h, HookContext* c)
    {    int tmgr = *(int*)0x69954C;
        c->eax = GetCreatureFromCastle(c->ecx,(CASTLE*)(*(int*)(0x38 + tmgr))); return NO_EXEC_DEFAULT;}

int __stdcall hook_5C8037(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->eax-30,(CASTLE*)(*(int*)(c->ebx + 0x38))); return NO_EXEC_DEFAULT;}

int __stdcall hook_5C0BEC(LoHook* h, HookContext* c)
    {c->ebx = GetCreatureFromCastle(c->edx,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_551A14(LoHook* h, HookContext* c)
    {c->edx = GetCreatureFromCastle(c->ecx-7,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_5DD96B(LoHook* h, HookContext* c)
    {c->eax = GetCreatureFromCastle(c->edx,(CASTLE*)(*(int*)((*(int*)0x69954C) + 0x38))); return NO_EXEC_DEFAULT;}


int __stdcall hook_42BCC9(LoHook* h, HookContext* c)
    {c->edi = GetCreatureFromCastle(c->eax,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}

int __stdcall hook_4C69AF(LoHook* h, HookContext* c)
{c->return_address =  (c->edi != GetCreatureFromCastle(c->eax-30,(CASTLE*)c->ebx))?0x4C69df:0x4C69b8; return NO_EXEC_DEFAULT;}


int __stdcall hook_5C0203(LoHook* h, HookContext* c)
    {c->ecx = GetCreatureFromCastle(c->ecx,(CASTLE*)c->esi); return NO_EXEC_DEFAULT;}


void __stdcall Citrine(PEvent e)
{
    citrine->WriteLoHook(0x5C0203,(void*)hook_5C0203);

    citrine->WriteLoHook(0x42BCC9,(void*)hook_42BCC9);
    citrine->WriteLoHook(0x4C69AF,(void*)hook_4C69AF);

    citrine->WriteLoHook(0x428602,(void*)hook_428602); //edx, [ebp+8] -> edx
    citrine->WriteLoHook(0x428964,(void*)hook_428964); //edx, ebx -> eax
    citrine->WriteLoHook(0x429BB1,(void*)hook_429BB1); //edx, [ebp-0x14] -> eax
    citrine->WriteLoHook(0x429DEC,(void*)hook_429DEC); //eax, edi -> ecx
    citrine->WriteLoHook(0x429F32,(void*)hook_429F32); //eax, edi -> eax
    citrine->WriteLoHook(0x42A026,(void*)hook_42A026); //eax, edi -> eax
    citrine->WriteLoHook(0x42B538,(void*)hook_42B538); //edx, ecx -> eax
    citrine->WriteLoHook(0x42B5D9,(void*)hook_42B5D9); //edx, ecx -> edi
    citrine->WriteLoHook(0x42B5F3,(void*)hook_42B5F3); //esi, ecx -> esi
    citrine->WriteLoHook(0x42B724,(void*)hook_42B724); //eax, edi -> eax

    citrine->WriteLoHook(0x42BE42,(void*)hook_42BE42); //eax, esi -> edx
    citrine->WriteLoHook(0x42CF07,(void*)hook_42CF07); //edx, [ebp+c] -> eax
    citrine->WriteLoHook(0x42D241,(void*)hook_42D241); //eax, [ebp+8] -> eax
    citrine->WriteLoHook(0x432E94,(void*)hook_432E94); //edx, esi -> eax
    citrine->WriteLoHook(0x432F5F,(void*)hook_432F5F); //ecx, edi -> edx
    citrine->WriteLoHook(0x43363B,(void*)hook_43363B); //eax, edx -> eax

    //три обращения из 47AB00,11,33 - получение апгрейда
    citrine->WriteHiHook(0x47AAD0,SPLICE_,EXTENDED_,THISCALL_,(void*)GetMonsterUpgrade);
    citrine->WriteHiHook(0x47AB80,SPLICE_,EXTENDED_,THISCALL_,(void*)GetMonsterDegrade);
    citrine->WriteHiHook(0x47AA50,SPLICE_,EXTENDED_,THISCALL_,(void*)HasMonsterUpgrade);
    

    citrine->WriteLoHook(0x4BF302,(void*)hook_4BF302); //(eax/4)+7 [ebp-0x10] -> edi
    citrine->WriteLoHook(0x4BF308,(void*)hook_4BF307); //eax/4 [ebp-0x10] -> esi

    //новый месяц
    citrine->WriteLoHook(0x4C8D2D,(void*)hook_4C8D2D); //ecx, esi -> edx



    //citrine->WriteLoHook(0x503290,(void*)hook_); //,  ->
    //окно города
    citrine->WriteLoHook(0x51CFD8,(void*)hook_51CFD8); //edx,[EBP-14]  -> eax
    citrine->WriteLoHook(0x525A8B,(void*)hook_525A8B); //edx,[EBP-14]  -> eax
    citrine->WriteLoHook(0x525AAD,(void*)hook_525AAD); //cmp ..
    citrine->WriteLoHook(0x52A31B,(void*)hook_52A31B); //edx, edi  -> ebx
    //клик по двеллу
    citrine->WriteLoHook(0x5519A7,(void*)hook_5519A7); //edx, edi  -> ebx

    //обзор королевства
    //citrine->WriteLoHook(0x551B68,(void*)hook_551B68); //eax, eci  -> ecx //сплайс ниже
    
    //citrine->WriteLoHook(0x5BE383,(void*)hook_52A31B); //старт игры
    //citrine->WriteLoHook(0x5BE3AB,(void*)hook_52A31B); //старт игры

    citrine->WriteLoHook(0x5BEF9E,(void*)hook_5BEF9E); //
    citrine->WriteLoHook(0x5BFC66,(void*)hook_5BFC66); //
    citrine->WriteLoHook(0x5BFFDF,(void*)hook_5BFFDF); //
    citrine->WriteLoHook(0x5C0098,(void*)hook_5C0098); //
    //0x5C0203 - новая неделя


    //citrine->WriteLoHook(0x5C0527,(void*)hook_); //absent in MoP
    //citrine->WriteLoHook(0x5C057E,(void*)hook_5C0264); //
    //citrine->WriteLoHook(0x5C0B34,(void*)hook_5C0264); //

    citrine->WriteLoHook(0x5C0BEC,(void*)hook_5C0BEC); //
    citrine->WriteLoHook(0x5C6023,(void*)hook_5C6023); //
    citrine->WriteLoHook(0x5C7196,(void*)hook_5C7196); //
    citrine->WriteLoHook(0x5C7CE5,(void*)hook_5C7CE5); //
    citrine->WriteLoHook(0x5C7D1E,(void*)hook_5C7D1E); //

    //непрямые отсылки:
    
    citrine->WriteLoHook(0x5C8037,(void*)hook_5C8037); //хинты
    citrine->WriteLoHook(0x551A14,(void*)hook_551A14); //апгрейды



    //окно форта
    citrine->WriteLoHook(0x5D9DE4,(void*)hook_5D9DE4); //edx, tmgr -> edx

    citrine->WriteLoHook(0x5D9E5D,(void*)hook_5D9E5D); //ecx, tmgr -> edx
    citrine->WriteLoHook(0x5D9ED3,(void*)hook_5D9E5D); //ecx, tmgr -> edx
    citrine->WriteLoHook(0x5D9F4C,(void*)hook_5D9E5D); //ecx, tmgr -> edx
    citrine->WriteLoHook(0x5D9FC5,(void*)hook_5D9E5D); //ecx, tmgr -> edx
    citrine->WriteLoHook(0x5DA03E,(void*)hook_5D9E5D); //ecx, tmgr -> edx
    citrine->WriteLoHook(0x5DA0C2,(void*)hook_5D9E5D); //ecx, tmgr -> edx
    citrine->WriteLoHook(0x5DA1BA,(void*)hook_5D9E5D); //ecx, tmgr -> edx

    //
    citrine->WriteLoHook(0x5DD099,(void*)hook_5DD099); //edx, esi -> edx

    citrine->WriteLoHook(0x5DDAD6,(void*)hook_5DDAD6); //ecx, [edx+38] -> eax
    citrine->WriteLoHook(0x5DD96B,(void*)hook_5DD96B); //

    //сплайсы

    citrine->WriteHiHook(0x551B50,SPLICE_,EXTENDED_,FASTCALL_,(void*)splice_00551B50);

    citrine->WriteHiHook(0x5C0250,SPLICE_,EXTENDED_,THISCALL_,(void*)CorrectTownCreatureGrowth);
}
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 03 Mar 2013, 01:34
Сообщение #2

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




По-прежнему думаю над API. Попытка получить SN:W переменные на экране загрузки почему-то приводит к краху игры.

Go to the top of the pageAdd Nick
 
+Quote Post
Bes
сообщение 03 Mar 2013, 01:47
Сообщение #3

замолкаю.
Сообщений: 2 340
Спасибо сказали: 1010 раз




а SN:W вроде как и первые w-переменные (w1-w50) сбрасывается, тобишь не активны.
нет?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 03 Mar 2013, 15:50
Сообщение #4

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




Должно возвращать 0 без вылетов.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 03 Mar 2013, 17:58
Сообщение #5

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




Цитата
а SN:W вроде как и первые w-переменные (w1-w50) сбрасывается, тобишь не активны.
нет?

Если бы оно просто возвращало ноль - это была бы вполне штатная ситуация.

Впрочем, косяк не в snw-переменных, а в том, что указатель на ExecErmCmd почему-то обнуляется.
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 03 Mar 2013, 18:40
Сообщение #6

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




В таких вещах магии быть не может, ведь указатель хранится в коде DLL. Значит где-то опечатка, возможно.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 04 Mar 2013, 20:26
Сообщение #7

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




ЯННП.

Код
        ConnectEra();
        
            char tmp[64];
            sprintf(tmp,"%08x", ExecErmCmd);
            MessageBoxA(0,(LPCSTR)tmp,(LPCSTR)tmp,0);

Выводит 0.

файлик с SDK не изменялся.
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 04 Mar 2013, 21:15
Сообщение #8

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




В прошлых твоих файликах с SDK из ConnectEra были вырезаны почти все получения адресов. Можешь скинуть весь код вообще, чтобы я проверил?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 09 Jun 2013, 20:29
Сообщение #9

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




https://dl.dropboxusercontent.com/u/6175922...citrine_rc1.rar dll+тестовая карта.

Первая Башня на карте имеет в мастерской каменного-алмазного голема, вторая - железного-золотого.

Код
ZVSE
!?PI;
!!MA:O116/2 O117/2;
!!SN:W^citrine_01_0_2_2_0^/32;
!!SN:W^citrine_01_0_2_2_1^/117;

!!SN:W^citrine_01_1_2_2_0^/33;
!!SN:W^citrine_01_1_2_2_1^/116;
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 09 Jun 2013, 20:49
Сообщение #10

допустим, мяў
Сообщений: 24 105
Спасибо сказали: 13412 раза




Здорово! Теперь ещё отстройку бы реализовать. И жилище на экране города.


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 09 Jun 2013, 22:11 (Сообщение отредактировал feanor - 09 Jun 2013, 22:15)
Сообщение #11

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




Цитата
Здорово! Теперь ещё отстройку бы реализовать. И жилище на экране города.
Еще полгода)

Цитата
И жилище на экране города.
MoP когда-то делал триггер "перед отрисовкой экрана города", для нового жилища хватит, вроде как.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 10 Jun 2013, 00:33
Сообщение #12

допустим, мяў
Сообщений: 24 105
Спасибо сказали: 13412 раза




Ну, триггер - это через подмену на лету. Нельзя ли научить игру самостоятельно отрисовывать здание по выбору из 2 и более вариантов, основываясь на установленности какого-то флага для локального города? Или использовать незаюзаный номер строения (выше 40, например), прописав его как Alt_Dwelling_3?


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 23 Jun 2013, 16:18 (Сообщение отредактировал MasterOfPuppets - 23 Jun 2013, 16:34)
Сообщение #13

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2377 раз




Цитата(feanor @ 18 Jan 2013, 01:05) *
Совместимость с battery не проверена.

А альтерветки с этим никак не связаны, вообще-то.
Цитата(hippocamus @ 10 Jun 2013, 01:33) *
Нельзя ли научить игру самостоятельно отрисовывать здание по выбору из 2 и более вариантов, основываясь на установленности какого-то флага для локального города?

Ну ясное дело. Ввести переменные городов, как я это уже давно сделал.
Цитата(hippocamus @ 10 Jun 2013, 01:33) *
Или использовать незаюзаный номер строения (выше 40, например), прописав его как Alt_Dwelling_3?

Зданий отведено лишь 44. > 40 - улучшенные жилища. Расширить до > 44 вряд ли получится. А зданий-пустышек у каждого типа города только 6-8 штук, на апгрейды не хватит, да и эти здания на самом деле не совсем пустые - это декоративные, тоже участвующие в создании образа города.
Итого, лучше всего через подмену на лету или вообще не париться с визуальной составляющей.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 23 Jun 2013, 16:36
Сообщение #14

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




Ну я планирую "на лету" или же вынести весь рендер города в что-то настраиваемое.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 23 Jun 2013, 21:00
Сообщение #15

допустим, мяў
Сообщений: 24 105
Спасибо сказали: 13412 раза




Цитата(MasterOfPuppets @ 23 Jun 2013, 17:18) *
или вообще не париться с визуальной составляющей.
Всяких LoRD'ов и HoL'ов - хватает. У каждого существа должно быть своё строение.


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
totkotoriy
сообщение 23 Jun 2013, 21:20
Сообщение #16

No more lies...
Сообщений: 497
Спасибо сказали: 816 раз




Цитата(hippocamus @ 23 Jun 2013, 21:00) *
Цитата(MasterOfPuppets @ 23 Jun 2013, 17:18) *
или вообще не париться с визуальной составляющей.
Всяких LoRD'ов и HoL'ов - хватает. У каждого существа должно быть своё строение.

Принял как личное оскорбление, тем более что по замкам существ не менял в своем моде...


--------------------
Пишу мало, но редко...


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 25 Jun 2013, 11:36 (Сообщение отредактировал MasterOfPuppets - 26 Jun 2013, 16:54)
Сообщение #17

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2377 раз




Цитата(hippocamus @ 23 Jun 2013, 22:00) *
Цитата(MasterOfPuppets @ 23 Jun 2013, 17:18) *
или вообще не париться с визуальной составляющей.
Всяких HoL'ов и MoP'ов - хватает. У каждого существа должно быть своё строение.

Починено во спасение душевного здоровья ТогоКоторого.

Цитата
Ну я планирую "на лету" или же вынести весь рендер города в что-то настраиваемое.

Мне вот интересно... Даже в рамках одного мода создание альтернативных зданий - колоссальный труд (ибо не просто рисовать надо, а ещё и подстраиваться под существующий экран города). В рамках же универсального инструмента задача вообще малореальная. Одному мододелу нужен некий храм, другому - домик, третьему - гнездо... в зависимости от того, кого он альтернативой выставил. Понимаю, конечно, что это задача не автора проги и графика новых зданий вообще в пакет входить не будет, но всё же печально.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 25 Jun 2013, 11:53
Сообщение #18

допустим, мяў
Сообщений: 24 105
Спасибо сказали: 13412 раза




Цитата(totkotoriy @ 23 Jun 2013, 22:20) *
Цитата(hippocamus @ 23 Jun 2013, 21:00) *
Цитата(MasterOfPuppets @ 23 Jun 2013, 17:18) *
или вообще не париться с визуальной составляющей.
Всяких LoRD'ов и HoL'ов - хватает. У каждого существа должно быть своё строение.

Принял как личное оскорбление, тем более что по замкам существ не менял в своем моде...

Извини. Не стоит воспринимать как оскорбление. Я - не про графику зданий конкретно, а про то, что далеко не всегда есть попадание в стиль - и в монстрах, и в объектах.

МОР, если мод заменяет существо (или добавляет альтернативу) - почему бы ему не нести с собой и жилище на экране города? А механизм альтернатив феанора просто обнаружит наличие такого (допустим, в cfg мода прописано) и отрисует.


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 25 Jun 2013, 12:04
Сообщение #19

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2377 раз




Спасибо, кэп, но я тут ною лишь о том, что далеко не все могут рисовать себе сами. Существ можно просто найти и вставить, а со зданиями - облом.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 25 Jun 2013, 12:39
Сообщение #20

допустим, мяў
Сообщений: 24 105
Спасибо сказали: 13412 раза




Ну, естественный отбор )) Кто не может рисовать - тому не добавить альтернативы.
Хотя вон поляки тоже рисовать не умеют, однако экраны городские делают на ура. Качество, конечно, далеко не айс, но кому-то нравится.


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 3 October 2025 - 19:45
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика