#176 14-06-2013 07:26

kenking
From: Казахстан
Registered: 28-06-2010
Posts: 253

Re: Вопрос по памяти

1)

{$CLEO}
0000:
while true
  wait 0
    if
      player.Defined($player_char)
    then
        if
          actor.Driving($player_actor)
        then
            03C0: 0@ = actor $PLAYER_ACTOR car  
            0441: 1@ = car 0@ model
            0AA7: call_function 0x4C5C80 num_params 1 pop 1 1@ 2@ // _getModelType 
            //0AA7: call_function 0x4C5B60 num_params 1 pop 1 1@ 2@ // isModelBike
            03F0: enable_text_draw 1   
            045A: draw_text_1number 5.0 5.0 GXT 'NUMBER' number 2@ 
        end
    end
end

где значения 2@ после вызова _getModelType

0 - car
1 - mtruck
2 - quad 
3 - heli
4 - plane
5 - boat
6 - train
...
...
9 - bike
10 - bmx
11 - trailer

2)
значения 2@ после вызова  isModelBike
8766721 - если модель байк

Offline

#177 14-06-2013 08:59

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: Вопрос по памяти

@kenking -

значения 2@ после вызова  isModelBike
8766721 - если модель байк

странное значение, уверен, что здесь нет ошибки?

Offline

#178 14-06-2013 10:49

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Вопрос по памяти

0AA7: call_function 0x4C5B60 num_params 1 pop 1 1@ 2@ // isModelBike
0B10: 2@ = 2@ and 0xFF
if
    2@ == true
then
    // model is a bike
else
    // model isn't a bike
end

Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#179 14-06-2013 15:32

kenking
From: Казахстан
Registered: 28-06-2010
Posts: 253

Re: Вопрос по памяти

Seemann wrote:

странное значение, уверен, что здесь нет ошибки?

Такое значение выводится на экран для всех байков.
Ну с поправкой DK22Pac код будет лучше.

Offline

#180 14-06-2013 16:08

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Вопрос по памяти

Всем спасибо за разъяснения...
А автора никто не знает? Там тройка-четверка лимитов ломается, IDE, collisionmodels, colfiles, buildings.
Полезная штука, мне очень пригодилась, а то единственный аджастер, который ломал лимит, был от Sacky, а он ломает лимиты не через asi, ну это известно...


I know everything and nothing...

Offline

#181 14-06-2013 17:19

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

Так Ryosuke вроде жеж.
P.S. Случайно нажал на кнопку report вместо quick reply sad

Offline

#182 14-06-2013 18:25

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Вопрос по памяти

А ссылку дашь не его сайте, где это у него?


I know everything and nothing...

Offline

#183 14-06-2013 21:13

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

На сайте вроде как нету(да и вобще там уже много чего нету), а тут написано:

* Ryosuke for making maplimit tool and Function-X for giving me this lost tool.

Offline

#184 14-06-2013 23:00

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Вопрос по памяти

Хм, похоже, что он - автор. Ладно, буду иметь ввиду.


А, кстати заметил у тебя в моде, вывод названий районов, одну проблемку, в исходнике, если посмотреть, позиция по x скорости машины всегда будет 0, так как ты не передаешь внутрь scm функции нужное значение переменной, там ты пишешь 14@, хотя ясное дело, по умолчанию, все переменные при начале функции обнуляются и 14@ становится 0.


I know everything and nothing...

Offline

#185 15-06-2013 05:34

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

@mfisto - Да, было такое, но я вроде исправил добавлением 0085: 14@ = 0@ в последней версии под widescreen fix.

Last edited by Sergey81 (15-06-2013 05:36)

Offline

#186 15-06-2013 12:40

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Вопрос по памяти

А ты ее уже выложил?


I know everything and nothing...

Offline

#187 15-06-2013 15:55

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

@mfisto - Да, давно уже: http://www.gtagarage.com/mods/show.php?id=22187
Правда я так и не разобрался до конца с позиционированием текста в VC, поэтому на разных разрешениях эта самая позиция может немного отличаться. С текстурами эта проблема была решена scm-функцией, а тут лень было возиться, вроде работает около дела да и ладно.

Offline

#188 15-06-2013 19:39

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Вопрос по памяти

Есть еще вопросик: как получить в GTA 3 адрес указанной метки, а то Alien так и не сделал нужного опкода.


I know everything and nothing...

Offline

#189 15-06-2013 19:48

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

@mfisto - В zonetext для gta 3 есть scm функция, вот она:

:getLabelOffset
{  Example:
    05F5: call_scm_func @getLabelOffset 1 label @lbl store_to 0@
}
if 
  0@ <> 0 
then
  05EC: 1@ = current_thread_pointer
  1@ += 0x98
  05E0: 1@ = read_memory 1@ size 4 virtual_protect 0 
  000C: 1@ -= 0@ 
else
  1@ = 0 
end
05F6: ret 1 1@

Last edited by Sergey81 (15-06-2013 19:49)

Offline

#190 15-06-2013 22:27

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Вопрос по памяти

Хм, а в Васе тоже такое же смещение 0x98, иными словами, совпадают ли структуры потоков для 3 и Vice. Если да, то в базе, которую делал Alien, размер структуры вообще 0x88. Как ты это нашел тогда? rolleyes


I know everything and nothing...

Offline

#191 16-06-2013 11:07

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Вопрос по памяти

@mfisto - В VC незнаю, не проверял, но скорее всего различается смещение. А нашел обычным перебором.

Last edited by Sergey81 (16-06-2013 11:07)

Offline

#192 19-06-2013 18:12

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Вопрос по памяти

Напомните, пожалуйста, как можно записать, а потом применить углы авто, соответственно по x, по y, по z.
Видимо через матрицу, а конкретнее...?


I know everything and nothing...

Offline

#193 20-06-2013 00:15

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Вопрос по памяти

Прочитать углы поворота машины можно стандартными опкодами, а установить - с помощью метода поворота матрицы:

0A97: 1@ = car 0@ struct
1@ += 0x14
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0  // получили адрес матрицы
1@ += 48
0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 // сохраняем значения эл-тов +48, +52, +56 в памяти т.к. метод поворота матрицы их обнуляет
1@ += 4
0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
1@ += 4
0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0
1@ -= 56
0AA6: call_method 0x59B120 struct 1@ num_params 3 pop 0 0.0 0.0 1.57  // rot Z rot Y rot X (radians) - метод поворота матрицы
1@ += 48
0A8C: write_memory 1@ size 4 value 2@ virtual_protect 0 // восстанавливаем старое значение X-position
1@ += 4
0A8C: write_memory 1@ size 4 value 3@ virtual_protect 0 // восстанавливаем старое значение Y-position      
1@ += 4                                                       
0A8C: write_memory 1@ size 4 value 4@ virtual_protect 0 // восстанавливаем старое значение Z-position

Offline

#194 20-06-2013 11:02

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Вопрос по памяти

Спасибо за ответ. Ведь почти опкодами можно было обойтись, но нет, опкода  для записи x к сожалению нет...

Вот тогда еще вопрос, можно ли для точки пути или может для любой на земле узнать подобное? Т.е. узнать углы x y z.

Last edited by mfisto (20-06-2013 15:48)


I know everything and nothing...

Offline

#195 20-06-2013 19:20

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Вопрос по памяти

У точки углов нет, углы можно измерить либо между отрезками, либо между плоскостями.
Можно прочитать координаты текущей точки и следующей, а затем вычислить углы между отрезком, соединяющим эти точки и мировыми осями координат с помощью опкода 0604:

0604: get_angle_between_vectors_{a,b} 0@ 1@ and_{0,1}_store_to 2@

Вот как определяет ориентацию отрезка, соединяющего две соседние точки ж/д пути скрипт "animtrain":

if
    09E3:   train 0_Train on_forward_direction   
then
    0087: 0_XResult = 0_X2 // (float) X1 Y1 Z1 - текущая точка, X2 Y2 Z2 - следующая точка
    0087: 0_YResult = 0_Y2 // (float) 
    0087: 0_ZResult = 0_Z1 // (float)     
    0063: 0_XResult -= 0_X1 // (float) 
    0063: 0_YResult -= 0_Y1 // (float) 
    0063: 0_ZResult -= 0_Z2 // (float) 
else
    0087: 0_XResult = 0_X1 // (float) 
    0087: 0_YResult = 0_Y1 // (float) 
    0087: 0_ZResult = 0_Z2 // (float)     
    0063: 0_XResult -= 0_X2 // (float) 
    0063: 0_YResult -= 0_Y2 // (float) 
    0063: 0_ZResult -= 0_Z1 // (float)
end
0604: get_angle_between_vectors_{x,y} 0_XResult 0_YResult and_{0,1}_store_to 0_ZAngle // Z_angle
006B: 0_XResult *= 0_XResult // (float) 
006B: 0_YResult *= 0_YResult // (float) 
005B: 0_XResult += 0_YResult // (float) 
01FB: 0_XResult = square_root 0_XResult 
0604: get_angle_between_vectors_{z,a} 0_ZResult 0_XResult and_{0,1}_store_to 0_XAngle // X_angle

Ориентация отрезка, соединяющего две точки пути, задаётся только двумя углами - X и Z.

Last edited by Den_spb (20-06-2013 19:41)

Offline

#196 25-07-2013 06:37

Procion
Registered: 23-07-2013
Posts: 12

Re: Вопрос по памяти

знаю, в exe'шнике игры имеется процедура, могущая выполнять ассемблерный код, и адрес которой можно заменить на собственный. раньше всегда ей пользовался, но за год отсутствия практики, забыл ее адрес :-) кто-нибудь подскажет?

Offline

#198 25-07-2013 06:47

Procion
Registered: 23-07-2013
Posts: 12

Re: Вопрос по памяти

а как отнесется игра, ели в конструкции hex...end использовать команды процессоров i8086-i80286? (старый добрый DOS)

Offline

#199 25-07-2013 10:06

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: Вопрос по памяти

@Procion - какие например?

Offline

#200 25-07-2013 10:58

Procion
Registered: 23-07-2013
Posts: 12

Re: Вопрос по памяти

Ну, например, прерывания DOS, такие как int 20, int 27 и т.д.? ну а подавляющая часть команд оставлена для преемственности поколений smile

Offline

Board footer

Powered by FluxBB