GTA: Modification Area

A website for the GTA modding scene

Search
 
 

Display results as :
 


Rechercher Advanced Search

Latest topics
» Big-game starts raising Schneider's profile
Sun Mar 04, 2012 2:28 am by lavivi

» [Help] cleo created lighting
Thu Oct 14, 2010 1:03 am by findmy012

» Mission Question
Thu Oct 14, 2010 1:02 am by findmy012

» [IV] Spoiler Script
Thu Oct 14, 2010 1:02 am by findmy012

» Mission mod [help]
Sat Sep 18, 2010 5:50 pm by jayd00

» Bc7 Mod Help
Fri Aug 20, 2010 11:19 am by pengpeng

» Found a bug
Fri Dec 18, 2009 4:22 am by _CJ360_

» [IV] Novitec Rosso 599 GTB
Tue Nov 17, 2009 4:22 pm by Kotton

» Hello/Guidance Request
Mon Oct 12, 2009 6:45 am by Adler

Navigation
 Portal
 Index
 Memberlist
 Profile
 FAQ
 Search
Affiliates
image

Image

Image

Image

Image

Image

Image

Image

Image

Image

image

Image

steve-m.com

Image


----- Русский -----

Если ваш сайт содержит большую коллекцию SCM/CLEO-скриптов (больше 16), напишите на мой e-mail, и я добавлю его в список. Приветствуются скрипты, которые не встречаются на других сайтах ... Спасибо. ))))


----- English -----

If your website has a big enough collection of SCM/CLEO scripts (more than 16) notify me by e-mail
, and I will add it to the list. The unique scripts are preferable ... Thank you. ))))

Log in

I forgot my password



December 2016
MonTueWedThuFriSatSun
   1234
567891011
12131415161718
19202122232425
262728293031 

Calendar Calendar


You are not connected. Please login or register

[SA] Поезда. Лимит вагонов.

View previous topic View next topic Go down  Message [Page 1 of 1]

1 [SA] Поезда. Лимит вагонов. on Tue Jun 30, 2009 11:23 am



Итак, первый посыл: адреса памяти San Andreas могут меняться также легко через SCM.

Более подробно об этом написано в статье Меняем игровую память через SCM (San Andreas).

Второй посыл: опкод:


Code:

06D8: $hTrain = create_train_at 2285.1524 -1257.4997 23.0 type 0 direction 1


Он создает поезд с определенным числом вагонов. Вид поезда, количество вагонов определяется параметром type.

Всего существует 16 типов поездов:


Code:

Train    Carriage1  Carriage2  Carriage3  Carriage4  Carriage5
----------------------------------------------------------------------------           
0:          #FREIGHT  #FREIFLAT  #FREIFLAT  #FREIFLAT  #FREIFLAT    x
1,2,4,7,11: #STREAK  #STREAKC  #STREAKC      x        x          x
3:          #FREIGHT  #FREIFLAT  #FREIFLAT  #FREIFLAT    x          x
5:          #STREAK  #STREAKC  #STREAKC  #STREAKC      x          x
6:          #FREIGHT  #FREIFLAT  #FREIFLAT      x        x          x
8:          #TRAM    #TRAM          x          x        x          x
9,14:      #TRAM        x          x          x        x          x
10:        #FREIGHT  #FREIFLAT      x          x        x          x
12:        #FREIGHT  #FREIFLAT  #FREIFLAT  #FREIFLAT  #FREIGHT      x
13:        #FREIGHT  #FREIFLAT  #FREIFLAT  #FREIFLAT  #FREIFLAT #FREIFLAT
15:        #STREAK      x          x          x        x          x



Третий посыл: в San Andreas есть адрес 0x8D44F8.
Данный адрес - это начало перечня моделей для каждого типа поезда. Всего определено 16 блоков-перечней (по числу типов), каждый из которых содержит 16 чисел типа DWord, определяющих номер модели поезда и его вагонов.

Например, тип 0 содержит записанные подряд числа: 537, 569, 569, 569, 569, 0, 0, 0, 0, 0 и т.д.

Адреса всех типов:


Code:

0x8D44F8 тип 0
0x8D4538 тип 1
0x8D4578 тип 2
0x8D45B8 тип 3
0x8D45F8 тип 4
0x8D4638 тип 5
0x8D4678 тип 6
0x8D46B8 тип 7
0x8D46F8 тип 8
0x8D4738 тип 9
0x8D4778 тип 10
0x8D47B8 тип 11
0x8D47F8 тип 12
0x8D4838 тип 13
0x8D4878 тип 14
0x8D48B8 тип 15


Четвертый посыл: подпрограмма создания поезда читает эти цифры до тех пор, пока не найдет 0.

Анализируя эти посылы, легко догадаться что можно изменить типы поездов, чтобы создавать свои собственные вариации с очень большим числом вагонов (мне удавалось создавать 18 вагонов, хотя я не тестировал это детально).
Данные адреса памяти относятся к типу Data, так что их можно менять прямо в игре.

Собственно, сам код:


Code:

for 0@ = -382229 to -382216
  wait 0
  &0(0@,1i) = #STREAKC       
 end



Этим циклом мы добавили 14 новых вагонов #STREAKC к типу 0 (т.е. к 4-м уже существующим вагонам, хотя ничто не мешало нам перезаписать старые модели и создать абсолютно новый тип).

О принципе получения чисел в цикле можно прочитать здесь.

Теперь можно создавать поезд.


Code:

// type "test"
    :Trains_01
    wait 0
    2@ = -229908
    if
    &0(2@,1i) == 0x54455354
    jf @Trains_01
    &0(2@,1i) = 0x54455300
    03E5: show_text_box 'CHEAT1'  // Cheat activated
    0169: set_fade_color_RGB 0 0 0
    fade 0 time 500

    while true
    if
        not fading
    then
          break
        end
        wait 0
    end
          // type 0 has been changed! ADDED 14 more now carriages to the train
    for 0@ = -382229 to -382216
      wait 0
      &0(0@,1i) = #STREAKC     
    end

      #FREIGHT.Load
      #FREIFLAT.Load
      #STREAKC.Load

      while true
        if and
          Model.Available(#FREIGHT)
          Model.Available(#FREIFLAT)
          Model.Available(#STREAKC)
        then
          break
        end
        wait 0
      end
   
      Actor.PutAt($PLAYER_ACTOR, 2270.1771, -1144.8823, 27.5108)
      03CB: set_rendering_origin_at 2270.1771 -1144.8823 27.5108
      04E4: unknown_refresh_game_renderer_at 2270.1771 -1144.8823
      wait 1300
      fade 1 time 1500
   
      while true
    if
        fading 
    then
          break
        end
        wait 0
    end
      // create train with new carriages
      06D8: 1@ = create_train_at 2278.1771 -1144.8823 27.5108 type 0 direction 1
      0395: clear_area 1 at 2270.1771 -1144.8823 27.5108 radius 1.0 
    Model.Destroy(#FREIGHT)
    Model.Destroy(#FREIFLAT)
    Model.Destroy(#STREAKC)
    end_thread


Поезд с 18 вагонами создан. Наслаждайтесь Grin Smile.

З.Ы. При изменении типов имейте в виду, что при укорачивании поезда (уменьшении числа вагонов в данном типе), необходимо ненужные вагоны перезаписывать в ноль.


Берем адрес первого набора вагонов: 0x8D44F8

Смотрим в подпрограмму:


Code:

:MemoryWrite_DWORD
  0@ -= 0xA49960
  0@ /= 4
  008A: &0(0@,1i) = 1@ 
return




Теперь подставляем вместо 0@ наш адрес и считаем:


Code:

0x8D44F8 - 0xA49960 = 0xFFE8AB98 (-1528936)
-1528936 / 4 = -382234


-382234 это будет адрес для первого элемента в записи. В первом типе в этой ячейке записано #FREIGHT (смотри таблицу). Нам первые 4 вагона и сам локомотив не нужно менять (хотя, как я и говорил, ничто не мешает это сделать), поэтому мы прибавляем 5 к данному числу и получаем адрес для 5го вагона: -382229. В оригинальной игре этот адрес содержит 0, поэтому тип 0 создает только 4 вагона. И вот мы начинаем записывать новые значения циклом.


Code:

-382229 - 5й вагон
-382228 - 6й вагон



и т.д.

Игра, когда парсит массив &0(0@,1i), она это -382229 преобразует в нужный глобальный адрес.


Также см.:
[SA|MEMORY] Поезда. Лимит вагонов.
SA Memory Topic
SA Memory handling, some tricks using SA arrays

View user profile http://gtamodding.com


Дамп кода EXE со списком всех типов поездов:


Code:

.data:008D44F8 TrainTypesModelPool dd 537                                  ; 0                         
.data:008D44FC                    dd 569
.data:008D4500                    dd 569
.data:008D4504                    dd 569
.data:008D4508                    dd 569
.data:008D450C                    dd 0
.data:008D4510                    dd 0
.data:008D4514                    dd 0
.data:008D4518                    dd 0
.data:008D451C                    dd 0
.data:008D4520                    dd 0
.data:008D4524                    dd 0
.data:008D4528                    dd 0
.data:008D452C                    dd 0
.data:008D4530                    dd 0
.data:008D4534                    dd 0
.data:008D4538                    dd 538                                  ; 1
.data:008D453C                    dd 570
.data:008D4540                    dd 570
.data:008D4544                    dd 0
.data:008D4548                    dd 0
.data:008D454C                    dd 0
.data:008D4550                    dd 0
.data:008D4554                    dd 0
.data:008D4558                    dd 0
.data:008D455C                    dd 0
.data:008D4560                    dd 0
.data:008D4564                    dd 0
.data:008D4568                    dd 0
.data:008D456C                    dd 0
.data:008D4570                    dd 0
.data:008D4574                    dd 0
.data:008D4578                    dd 538                                  ; 2
.data:008D457C                    dd 570
.data:008D4580                    dd 570
.data:008D4584                    dd 0
.data:008D4588                    dd 0
.data:008D458C                    dd 0
.data:008D4590                    dd 0
.data:008D4594                    dd 0
.data:008D4598                    dd 0
.data:008D459C                    dd 0
.data:008D45A0                    dd 0
.data:008D45A4                    dd 0
.data:008D45A8                    dd 0
.data:008D45AC                    dd 0
.data:008D45B0                    dd 0
.data:008D45B4                    dd 0
.data:008D45B8                    dd 537                                  ; 3
.data:008D45BC                    dd 569
.data:008D45C0                    dd 569
.data:008D45C4                    dd 569
.data:008D45C8                    dd 0
.data:008D45CC                    dd 0
.data:008D45D0                    dd 0
.data:008D45D4                    dd 0
.data:008D45D8                    dd 0
.data:008D45DC                    dd 0
.data:008D45E0                    dd 0
.data:008D45E4                    dd 0
.data:008D45E8                    dd 0
.data:008D45EC                    dd 0
.data:008D45F0                    dd 0
.data:008D45F4                    dd 0
.data:008D45F8                    dd 538                                  ; 4
.data:008D45FC                    dd 570
.data:008D4600                    dd 570
.data:008D4604                    dd 0
.data:008D4608                    dd 0
.data:008D460C                    dd 0
.data:008D4610                    dd 0
.data:008D4614                    dd 0
.data:008D4618                    dd 0
.data:008D461C                    dd 0
.data:008D4620                    dd 0
.data:008D4624                    dd 0
.data:008D4628                    dd 0
.data:008D462C                    dd 0
.data:008D4630                    dd 0
.data:008D4634                    dd 0
.data:008D4638                    dd 538                                  ; 5
.data:008D463C                    dd 570
.data:008D4640                    dd 570
.data:008D4644                    dd 570
.data:008D4648                    dd 0
.data:008D464C                    dd 0
.data:008D4650                    dd 0
.data:008D4654                    dd 0
.data:008D4658                    dd 0
.data:008D465C                    dd 0
.data:008D4660                    dd 0
.data:008D4664                    dd 0
.data:008D4668                    dd 0
.data:008D466C                    dd 0
.data:008D4670                    dd 0
.data:008D4674                    dd 0
.data:008D4678                    dd 537                                  ; 6
.data:008D467C                    dd 569
.data:008D4680                    dd 569
.data:008D4684                    dd 0
.data:008D4688                    dd 0
.data:008D468C                    dd 0
.data:008D4690                    dd 0
.data:008D4694                    dd 0
.data:008D4698                    dd 0
.data:008D469C                    dd 0
.data:008D46A0                    dd 0
.data:008D46A4                    dd 0
.data:008D46A8                    dd 0
.data:008D46AC                    dd 0
.data:008D46B0                    dd 0
.data:008D46B4                    dd 0
.data:008D46B8                    dd 538                                  ; 7
.data:008D46BC                    dd 570
.data:008D46C0                    dd 570
.data:008D46C4                    dd 0
.data:008D46C8                    dd 0
.data:008D46CC                    dd 0
.data:008D46D0                    dd 0
.data:008D46D4                    dd 0
.data:008D46D8                    dd 0
.data:008D46DC                    dd 0
.data:008D46E0                    dd 0
.data:008D46E4                    dd 0
.data:008D46E8                    dd 0
.data:008D46EC                    dd 0
.data:008D46F0                    dd 0
.data:008D46F4                    dd 0
.data:008D46F8                    dd 449                                  ; 8
.data:008D46FC                    dd 449
.data:008D4700                    dd 0
.data:008D4704                    dd 0
.data:008D4708                    dd 0
.data:008D470C                    dd 0
.data:008D4710                    dd 0
.data:008D4714                    dd 0
.data:008D4718                    dd 0
.data:008D471C                    dd 0
.data:008D4720                    dd 0
.data:008D4724                    dd 0
.data:008D4728                    dd 0
.data:008D472C                    dd 0
.data:008D4730                    dd 0
.data:008D4734                    dd 0
.data:008D4738                    dd 449                                  ; 9
.data:008D473C                    dd 0
.data:008D4740                    dd 0
.data:008D4744                    dd 0
.data:008D4748                    dd 0
.data:008D474C                    dd 0
.data:008D4750                    dd 0
.data:008D4754                    dd 0
.data:008D4758                    dd 0
.data:008D475C                    dd 0
.data:008D4760                    dd 0
.data:008D4764                    dd 0
.data:008D4768                    dd 0
.data:008D476C                    dd 0
.data:008D4770                    dd 0
.data:008D4774                    dd 0
.data:008D4778                    dd 537                                  ; 10
.data:008D477C                    dd 569
.data:008D4780                    dd 0
.data:008D4784                    dd 0
.data:008D4788                    dd 0
.data:008D478C                    dd 0
.data:008D4790                    dd 0
.data:008D4794                    dd 0
.data:008D4798                    dd 0
.data:008D479C                    dd 0
.data:008D47A0                    dd 0
.data:008D47A4                    dd 0
.data:008D47A8                    dd 0
.data:008D47AC                    dd 0
.data:008D47B0                    dd 0
.data:008D47B4                    dd 0
.data:008D47B8                    dd 538                                  ; 11
.data:008D47BC                    dd 570
.data:008D47C0                    dd 570
.data:008D47C4                    dd 0
.data:008D47C8                    dd 0
.data:008D47CC                    dd 0
.data:008D47D0                    dd 0
.data:008D47D4                    dd 0
.data:008D47D8                    dd 0
.data:008D47DC                    dd 0
.data:008D47E0                    dd 0
.data:008D47E4                    dd 0
.data:008D47E8                    dd 0
.data:008D47EC                    dd 0
.data:008D47F0                    dd 0
.data:008D47F4                    dd 0
.data:008D47F8                    dd 537                                  ; 12
.data:008D47FC                    dd 569
.data:008D4800                    dd 569
.data:008D4804                    dd 569
.data:008D4808                    dd 537
.data:008D480C                    dd 0
.data:008D4810                    dd 0
.data:008D4814                    dd 0
.data:008D4818                    dd 0
.data:008D481C                    dd 0
.data:008D4820                    dd 0
.data:008D4824                    dd 0
.data:008D4828                    dd 0
.data:008D482C                    dd 0
.data:008D4830                    dd 0
.data:008D4834                    dd 0
.data:008D4838                    dd 537                                  ; 13
.data:008D483C                    dd 569
.data:008D4840                    dd 569
.data:008D4844                    dd 569
.data:008D4848                    dd 569
.data:008D484C                    dd 569
.data:008D4850                    dd 0
.data:008D4854                    dd 0
.data:008D4858                    dd 0
.data:008D485C                    dd 0
.data:008D4860                    dd 0
.data:008D4864                    dd 0
.data:008D4868                    dd 0
.data:008D486C                    dd 0
.data:008D4870                    dd 0
.data:008D4874                    dd 0
.data:008D4878                    dd 449                                  ; 14
.data:008D487C                    dd 0
.data:008D4880                    dd 0
.data:008D4884                    dd 0
.data:008D4888                    dd 0
.data:008D488C                    dd 0
.data:008D4890                    dd 0
.data:008D4894                    dd 0
.data:008D4898                    dd 0
.data:008D489C                    dd 0
.data:008D48A0                    dd 0
.data:008D48A4                    dd 0
.data:008D48A8                    dd 0
.data:008D48AC                    dd 0
.data:008D48B0                    dd 0
.data:008D48B4                    dd 0
.data:008D48B8                    dd 538                                  ; 15
.data:008D48BC                    dd 0
.data:008D48C0                    dd 0
.data:008D48C4                    dd 0
.data:008D48C8                    dd 0
.data:008D48CC                    dd 0
.data:008D48D0                    dd 0
.data:008D48D4                    dd 0
.data:008D48D8                    dd 0
.data:008D48DC                    dd 0
.data:008D48E0                    dd 0
.data:008D48E4                    dd 0
.data:008D48E8                    dd 0
.data:008D48EC                    dd 0
.data:008D48F0                    dd 0
.data:008D48F4                    dd 0


Еще, эти адреса не совпадают с реальными адресами в самом gta-sa.exe. Их рассчитывают программы-дизассеблеры, и реальный оффсет можно узнать там же.
Например, таблица вагонов в gta-sa.exe v1.0 хранится по адресу 5054712 (0x4D20F8).

View user profile http://gtamodding.com

View previous topic View next topic Back to top  Message [Page 1 of 1]

Permissions in this forum:
You cannot reply to topics in this forum