GameHackLab[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Изменение счетчика населения при найме юнитов в Stronghold Crusader

    Запланировано Прикреплена Закрыта Перенесена Взлом игр (средний уровень и выше)
    9 Сообщения 4 Posters 322 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • W
      W00D
      отредактировано

      Добрый день! Я делаю свой мод по игре Stronghold Crusader. В игре есть такая особенность при найме любых юнитов, доступные крестьяне у костра превращаются в выбранного юнита и при этом срабатывает счетчик на вычитание единицы из текущего значения населения. А рабочие юниты превращаются из крестьян без вычитания этой единицы - крестьянин просто превращается в работника и идет на работу.

      Я хочу, чтобы военные(нанимаемые) юниты были как гражданские(все рабочие) в плане смерти, найма, роспуска. Чтобы они подчинялись счётчику населения один в один как рабочие, по сути дать им(нанимаемым юнитам) функции рабочих, в плане учета населения только.
      Найм любого военного юнита - приравнять к - когда крестьянин превращается в любого рабочего (новый крестьянин не выходит из донжона, вместо только что ушедшего на работу)/
      Умирает нанятый юнит - приравнять к умирает рабочий(отнимается единичка из населения в книжке внизу)/
      Роспуск(превращение обратно в крестьян) нанятых юнитов - приравнять к заморозке производственного здания(рабочий превращается обратно в крестьянина и идёт к костру) - (прибавление количества крестьян не происходит).

      версия игры 1.41 eng

      Что мне удалось найти в силу моих возможностей:
      Я нашел функцию отвечающую за счетчик текущего населения, но если ее занопить это просто ломает сам счетчик, пробовал менять рядом регисры похожие на sub ...-1, add...1, толку нет.
      f77a3a9a-2d6b-4f1b-b6e0-4536254188b2-image.png

      Нашел так же строчки в коде которые отвечают за смерть всех юнитов(если ее занопить - ни один объект не умирает), пробовал смотреть код рядом но ничего не понятно. Так же нашел строчку кода которая отвечает за роспуск или замораживание здания и превращение юнитов/работников обратно в крестьян, по аналогии сверху толку то не дало.

      Помогите пожалуйста понять где записаны эти счетчики, и как их поменять!

      K 1 ответ Последний ответ Ответить Цитировать 0
      • K
        KRYPTOPUNK @W00D
        отредактировано

        @W00D
        Если ты делаешь прям мод, то бывает полезно более глобально посмотреть на код, можешь воспользоваться дизассемблером, таким как GHIDRA, она тебе псевдокод нарисует, какие переменные в функции где и откуда приходят. Попробуй его использовать

        W 1 ответ Последний ответ Ответить Цитировать 0
        • W
          W00D @KRYPTOPUNK
          отредактировано

          @KRYPTOPUNK Я в принципе далек от программирования, и знания языков, поэтому самостоятельно мало что пойму, использовал иду. Делаю мод полу-колхозным методом. Мне бы хоть одну из этих функций понять как сделать, остальные думаю по аналогии можно поковырять. Я здесь просто уперся в потолок своих возможностей, мне нужна помощь в конкретном месте.

          K 1 ответ Последний ответ Ответить Цитировать 0
          • K
            KRYPTOPUNK @W00D
            отредактировано

            @W00D попробую завтра посмотреть

            1 ответ Последний ответ Ответить Цитировать 1
            • LIRWL
              LIRW
              отредактировано

              Вот тут по моему код функции на юнитов...

              83 ? ? ? 0F 8D ? ? ? ? 8B 96 ? ? ? ? 69 C0
              

              Принцип работы прост... Висит таймер на регенерацию числа, стоит проверка этого числа и стоит кол на спавн их.. если это число выше указанного, идет пропуск всего этого дела.

              W 1 ответ Последний ответ Ответить Цитировать 0
              • W
                W00D @LIRW
                отредактировано

                @LIRW Спасибо за ответ! Я к удивлению копался в этом месте. Там из интересного - это только максимальное количество(24) крестьян у костра, и id юнита(крестьянин) выходящего из донжона, которые можно менять в угоду балансу. Но они по моему не коррелируют с счетчиком населения в книжке внизу.

                LIRWL 1 ответ Последний ответ Ответить Цитировать 0
                • LIRWL
                  LIRW @W00D
                  отредактировано

                  @W00D Ну так вот это 24 измени... и будет сколько хочешь спавнится. Оно по моему на cmp висит...

                  W 1 ответ Последний ответ Ответить Цитировать 0
                  • Partizan1078P
                    Partizan1078
                    отредактировано

                    Хз что за версия.....

                    [ENABLE]
                    aobscanmodule(ogran,Stronghold Crusader.exe,0F ? ? ? ? ? ? 01 ? 0F ? ? ? ? ? ? 8B ? ? ? ? ? ? FF)
                    alloc(newmem,$1000)
                    label(return)
                    registersymbol(ogran)
                    
                    newmem:
                      mov word ptr [eax+000001AA],#100
                      movsx edx,word ptr [eax+000001AA]
                      jmp return
                    
                    ogran:
                      jmp newmem
                      nop 2
                    return:
                    
                    [DISABLE]
                    ogran:
                    db 0F BF 90 AA 01 00 00
                    unregistersymbol(ogran)
                    dealloc(newmem)
                    {
                    // ORIGINAL CODE - INJECTION POINT: Stronghold Crusader.exe+230A7
                    Stronghold Crusader.exe+23077: 66 39 9C 31 A8 01 00 00  - cmp [ecx+esi+000001A8],bx
                    Stronghold Crusader.exe+2307F: 8D 8C 31 A8 01 00 00     - lea ecx,[ecx+esi+000001A8]
                    Stronghold Crusader.exe+23086: 7E 09                    - jle "Stronghold Crusader.exe"+23091
                    Stronghold Crusader.exe+23088: 66 83 01 FF              - add word ptr [ecx],-01
                    Stronghold Crusader.exe+2308C: A1 E8 63 B9 00           - mov eax,["Stronghold Crusader.exe"+7963E8]
                    Stronghold Crusader.exe+23091: 69 C0 2C 03 00 00        - imul eax,eax,0000032C
                    Stronghold Crusader.exe+23097: 8B D5                    - mov edx,ebp
                    Stronghold Crusader.exe+23099: 69 D2 F4 39 00 00        - imul edx,edx,000039F4
                    Stronghold Crusader.exe+2309F: 03 C6                    - add eax,esi
                    Stronghold Crusader.exe+230A1: 8D 8A B4 82 19 01        - lea ecx,[edx+"Stronghold Crusader.exe"+D982B4]
                    // ---------- INJECTING HERE ----------
                    Stronghold Crusader.exe+230A7: 0F BF 90 AA 01 00 00     - movsx edx,word ptr [eax+000001AA]
                    // ---------- DONE INJECTING  ----------
                    Stronghold Crusader.exe+230AE: 01 11                    - add [ecx],edx
                    Stronghold Crusader.exe+230B0: 0F BF 80 E6 00 00 00     - movsx eax,word ptr [eax+000000E6]
                    Stronghold Crusader.exe+230B7: 8B 0C 85 A8 89 5B 00     - mov ecx,[eax*4+"Stronghold Crusader.exe"+1B89A8]
                    Stronghold Crusader.exe+230BE: FF D1                    - call ecx
                    Stronghold Crusader.exe+230C0: 8B 0D E8 63 B9 00        - mov ecx,["Stronghold Crusader.exe"+7963E8]
                    Stronghold Crusader.exe+230C6: 8B D1                    - mov edx,ecx
                    Stronghold Crusader.exe+230C8: 69 D2 2C 03 00 00        - imul edx,edx,0000032C
                    Stronghold Crusader.exe+230CE: 66 39 9C 32 E4 00 00 00  - cmp [edx+esi+000000E4],bx
                    Stronghold Crusader.exe+230D6: 8D 04 32                 - lea eax,[edx+esi]
                    Stronghold Crusader.exe+230D9: 0F 84 2A 02 00 00        - je "Stronghold Crusader.exe"+23309
                    }
                    
                    1 ответ Последний ответ Ответить Цитировать 1
                    • W
                      W00D @LIRW
                      отредактировано W00D

                      @LIRW Это вообще не то, что я описал, что хочу сделать.

                      1 ответ Последний ответ Ответить Цитировать 0
                      • Первое сообщение
                        Последнее сообщение