#1 13-08-2006 23:41

Capushon
Registered: 13-08-2006
Posts: 351
Website

Вопросы по опкодам

<center>В этой теме задаются все вопросы по конкретным опкодам (назначение того или иного опкода, особенности использования, лимиты и т.д.). Все остальные подобные темы будут "приклеиваться" к этой</center>
<hr>

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

Пример непонятного правила, при котором необходимо дублировать строки (оригинальный main.scm трейд :POOL2_6325):

0792: (unknown) $PLAYER_ACTOR
0792: (unknown) $PLAYER_ACTOR
0792: (unknown) $PLAYER_ACTOR
0792: (unknown) $PLAYER_ACTOR
0792: (unknown) $PLAYER_ACTOR

Как после команды "return", что-то ещё может выполняться?
(оригинальный main.scm трейд :QUARRY_2253)

018A: @132 = create_checkpoint_at @215 @216 @217
0006: @239 = 1;; integer values
0051: return;; Bug?
00BF: @200 = current_time_hours, @201 = current_time_minutes
0085: @50 = @202;; integer values and handles
0012: @50 *= 60;; integer values

Пример, когда один и тот же код операции использован и в условии и
самостоятельно(оригинальный main.scm трейд :DRUGS4_5856):

075A: @230 "DONUTDROP" "MD_CHASE" 4.0 0 1

(оригинальный main.scm трейд :WUZI5_2018)

00D6: if 0
075A:   @74 "KAT_THROW_O" "MISC" 10000.0 0 0
004D: jump_if_false ЈWUZI5_2022

Еще пример, когда один и тот же код операции использован и в условии и
самостоятельно (оригинальный main.scm трейд :STEAL4_1089):

04E6: unknown_object @106 near_point @160 @161 @162 radius 5.0 5.0 3.0 unknown 1

(оригинальный main.scm трейд :STEAL4_1110)

00D6: if 0
04E6:   unknown_object @106 near_point @160 @161 @162 radius 6.0 6.0 6.0 unknown 0
004D: jump_if_false ЈSTEAL4_1120

Вот снова, один и тот же код операции использован и в условии и
самостоятельно (оригинальный main.scm трейд :VALET_793):

03D3: find_nearest_route_for_3D_coord @21 @22 @23 get_3D_coord_to $73 $74 $75 get_Z_angle_to @24

(оригинальный main.scm трейд :GFDATE_3266)

00D6: if 0
03D3:   find_nearest_route_for_3D_coord @4 @7 @10 get_3D_coord_to @5 @8 @11 get_Z_angle_to @13;; BUG???
004D: jump_if_false ЈGFDATE_3290

Как это понимать??? Неточность некоторых OPR-кодов?
Я не нахожу объяснений ...

Last edited by Seemann (14-11-2007 07:51)


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#2 15-08-2006 01:30

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

Re: Вопросы по опкодам

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

  04E6: is_object 106@ within_cube_with_center_at_3D_coord 156@ 157@ 158@ half_width 6.0 half_height 6.0 depth 6.0 flag 0
  075A: set_object 88@ animation "BBALL_IDLELOOP_O" group "BSKTBALL" 10000.0 lockF 0 loop 0 //IF AND SET
0792: disembark_instantly_char 42@

начнем хотя бы с этого smile

P.S. Maybe someone from gtaf knows?

Offline

#3 16-08-2006 17:37

Xieon
Registered: 16-08-2006
Posts: 2

Re: Вопросы по опкодам

2Capushon
Как после команды "return", что-то ещё может выполняться?
Ну это, кстати, вполне обьяснимое явление - просто подряд идут коды сразу нескольких функций, грубо говоря это те же несколько gosub'ов, только после разработки R* оставили ссылку только на одну из них, а код не убрали. Даже, кстати, если использовать в госубах вместо меток числа, то такое тоже работает.

Аналогично, ничего удивительного не вижу в джампах, обходящих невыполнимый код в начале майна и еще где то, я иногда когда отлаживаю скрипты тоже так делаю, а потом убираю. smile Rockstar, судя по всему, просто поленились убирать отладочный код, поставив джампы и отключив соответственные опкоды в ехе.

Пример, когда один и тот же код операции использован и в условии и
самостоятельно(оригинальный main.scm трейд :DRUGS4_5856):

Ну игра при таком двойном использовании этих опкодов не вылетает. Вывод: их можно использовать и самостоятельно, и в условии. wink

Last edited by Xieon (16-08-2006 17:37)

Offline

#4 22-08-2006 15:17

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Вопросы по опкодам

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

Мне думается, что Рокстар использовал более высокоуровневый билдер, поэтому столько мусора smile. Это можно представить как будто одну и ту же программу сначало скомпилировали  в asm, а потом в delphi, если посмотреть листинг то в delphi-проги останется куча мусора и тут такая же система, наверное:) Но это моё ИМХО.

Как говорится чем ниже уровень, тем больше возможностей.

Offline

#5 22-08-2006 16:42

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

Re: Вопросы по опкодам

Sanchez wrote:

Мне думается, что Рокстар использовал более высокоуровневый билдер, поэтому столько мусора

В принципе можно посмотреть точную версию того кода, который писали их программисты. Пример R* скрипта записан в файле main.sc (есть в папке Data во всех GTA3). В VC и GTA3 еще есть debug.sc. Вот такой код и был скомпилирован R*-ким билдером в main.scm

Offline

#6 22-08-2006 21:18

Capushon
Registered: 13-08-2006
Posts: 351
Website

Re: Вопросы по опкодам

2Seemann

можно посмотреть точную версию того кода, который писали их программисты. Пример R* скрипта записан в файле main.sc

Может им хотелось, что бы так думали...  :-)


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#7 23-08-2006 07:29

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

Re: Вопросы по опкодам

Вряд ли. Больно уж конструкции оттуда схожи с теми, что мы имеем в SCM.

Offline

#8 27-08-2006 09:37

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Вопросы по опкодам

Capushon wrote:

Может им хотелось, что бы так думали...  :-)

Да мне тоже так кажется.

Seemann wrote:

Вряд ли. Больно уж конструкции оттуда схожи с теми, что мы имеем в SCM.

Я не думаю что весь код можно написть в таком виде, больно долго и муторно. Вот гта 3 можно (да и то врят ли), там всего код занимал 2 мб, но гта са с 14 мб, отлаживать столь большой код замучеешься. Хотя кто их там знает. smile

Last edited by Sanchez (27-08-2006 09:37)

Offline

#9 08-09-2006 13:50

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

Re: Вопросы по опкодам

Sanchez wrote:

Я не думаю что весь код можно написть в таком виде, больно долго и муторно.

А как по твоему выглядел их код? Если ниже уровнем (как в SAMB), то это так писать еще дольше и муторнее. Если выше - то тогда не вижу смысла в придумывании каких-либо "промужуточных" форматов, как в *.sc. Да и если сравнивать структуру отдельных конструкций (например, загрузку моделей) то совпадение 100%.

Offline

#10 09-09-2006 12:31

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Вопросы по опкодам

2Seemann
Может быть, я только высказал своё мнение.

Offline

#11 06-01-2007 17:23

Satyricon
Registered: 06-01-2007
Posts: 10

Re: Вопросы по опкодам

Так как мапс слёг и многие не знают о восстановлении на нете, если не возражаете - буду свои вопросы кидать сюда wink
1. 0570: $m = create_asset_radar_marker_with_icon 32 at x y z
    018B: show_on_radar $m 2
Я так понял они работают в паре, 0570 - создаёт(просто создаёт) радарный значок, 018B - в зависимости от параметра 0 - ничего нет, 1 сфера, 2 иконка на радаре, 3 иконка и сфера
    Это аналоги или другим опкодам или тут что-то другое кроется?
2.09B4: (unknown) x y 10.0 16384 1
   10 - наверное радиус, 1\0 - показывает\непоказывает
   в обсчем я от балды (точнее где сиджей стоял) ввёл эти координаты, рядом около этих координат  стоял домик и появился маркер входа, ну я вошол в него, вышел и маркер исчез.
Я не понял что ето за число 16384 и тоже, для чего этот опкод


wait 0

Offline

#12 06-01-2007 17:54

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

Re: Вопросы по опкодам

Вообще-то есть уже тема для этого:
http://www.sannybuilder.com/forums/viewtopic.php?id=4

Я так понял они работают в паре

018B работает с любым маркером, устанавливает его тип (ты их уже описал). Опкод 0165, например, устанавливает цвет любого маркера.

Я не понял что ето за число 16384 и тоже, для чего этот опкод

Это неизвестный опкод. Сможешь сформулировать, что он точно делает - честь и хвала smile

Выглядит он примерно так:

09B4: unknown_portalXY 345.5621 306.2212 radius 10.0 bitmask 16384 enabled 0

Offline

#13 07-01-2007 06:47

Satyricon
Registered: 06-01-2007
Posts: 10

Re: Вопросы по опкодам

Сори за тему, я ту сначала бегло неправильно прочитал(название в смысле)
исчо вопрос
0959: $2882 = create_horseshoe_at x y z
0958: $2932 = create_photo_at x y z
095A: $2982 = create_oyster_at x y z
как ведётся статистика сбора ракушек, фото, подков, эти переменные вродь больше не фигурируют в мэйне....???


wait 0

Offline

#14 07-01-2007 07:57

svetka
Registered: 29-12-2006
Posts: 222

Re: Вопросы по опкодам

Не хотела создавть новую тему из-за одного вопроса, да и в  "Разжёвывание "известных" команд" как-то не лезет.
Есть ли опкод отвечающий за статистику прохождения автошколы или здесь нужно писать специальный скрипт?

Offline

#15 07-01-2007 09:57

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

Re: Вопросы по опкодам

Satyricon wrote:

как ведётся статистика сбора ракушек, фото, подков, эти переменные вродь больше не фигурируют в мэйне....???

Пикапы создаются в майне, а сбор контролируется через ехе.
В gta-sa.exe есть процедура _StreetPickupTaken, которая срабатывает когда игрок берет какой-нибудь пикап и в зависимости от его вида (взятка, устрица, подкова и т.п.) вызывает другие процедуры.

.text:004552D0 OysterCollected     proc near                               ; CODE XREF: _StreetPickupTaken+296p
.text:00455390 HorseshoeTaken      proc near                               ; CODE XREF: _StreetPickupTaken+2B7p

насчет фоток не знаю, но принцип должен быть тот же.

svetka wrote:

Есть ли опкод отвечающий за статистику прохождения автошколы или здесь нужно писать специальный скрипт?

Сама автошкола это скрипт, поэтому опкода для него быть не может. Подобная статистика прохождения контролируется через переменные.
Есть, например, флаг прохождения миссии: $MISSION_BACK_TO_SCHOOL_PASSED.

Offline

#16 07-01-2007 10:46

Satyricon
Registered: 06-01-2007
Posts: 10

Re: Вопросы по опкодам

Пикапы создаются в майне, а сбор контролируется через ехе.
В gta-sa.exe есть процедура _StreetPickupTaken, которая срабатывает когда игрок берет какой-нибудь пикап и в зависимости от его вида (взятка, устрица, подкова и т.п.) вызывает другие процедуры.

ыыы.....мне до этого далеко есчо smile

01C7: remove_object_from_mission_cleanup_list xxx
01C5: remove_actor_from_mission_cleanup_list xxx
а вот это что? (может и не пригится, но так, из любопытства) wink


wait 0

Offline

#17 07-01-2007 18:27

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

Re: Вопросы по опкодам

Satyricon wrote:

01C7: remove_object_from_mission_cleanup_list xxx
01C5: remove_actor_from_mission_cleanup_list xxx

В игре есть такое понятие как mission_cleanup_list. В него автоматически заносятся все объекты, созданные во время миссии. В конце миссии есть команда mission_cleanup, которая как раз и высвобождает память от всего созданного на протяжении миссии, уничтожаем всех актеров, машины и пр. Если вам нужно, чтобы объект (актер) оставался в игре и после окончания миссии, вы может принудительно изъять его из этого списка этими командами

Offline

#18 07-01-2007 19:50

Satyricon
Registered: 06-01-2007
Posts: 10

Re: Вопросы по опкодам

Опа.....возьму на заметку smile
Такой вопрос у меня возник при ковырянии мэйна, это у рокстара такой стиль програмирования интересный или это билдер так декомпилит? и вообще известно чем рокстар мэйн пишет?


wait 0

Offline

#19 08-01-2007 09:13

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

Re: Вопросы по опкодам

это у рокстара такой стиль програмирования интересный или это билдер так декомпилит?

билдер декомпилирует as is. Это такой стиль у R*. Хотя если подумать, то другого стиля там быть и не может - высокоуровневые конструкции всегда дают лишний код при компиляции (можешь скомпилировать примеры из санника и декомпилировать их и посмотреть что получается при компиляции if..then, циклов и пр.). Примеры оригинального R*-кого кода можно посмотреть в файле main.sc.

и вообще известно чем рокстар мэйн пишет?

точно не известно, но это их собственный компилятор (что-то вроде санника smile)

Offline

#20 08-01-2007 15:39

Satyricon
Registered: 06-01-2007
Posts: 10

Re: Вопросы по опкодам

Кстати по поводу if..then, что-то я не видел чтоб этим кто-то польбзовался, это же намного удобней чем через if....not....jf, намного код проще и читабельней


wait 0

Offline

#21 11-01-2007 19:39

Satyricon
Registered: 06-01-2007
Posts: 10

Re: Вопросы по опкодам

В миссиях используется вот такой код
0A0B: (unknown) и 4 параметра, 3 из них - координаты
что за оно кто  в курсе уже?


wait 0

Offline

#22 12-01-2007 09:01

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

Re: Вопросы по опкодам

Satyricon wrote:

что за оно кто  в курсе уже?

зайди в тему Новые опкоды, там есть ссылка на sascm.ini.

Offline

#23 17-01-2007 06:48

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

Re: Вопросы по опкодам

2Capushon:
Можешь объяснить точно, в чем различие между 073С и 0730? Я так понимаю - разный тип компонентов. Ты случайно не знаешь полный их список и за что каждая цифра отвечает?

Есть вот это:

0  Капот.  
1  Багажник.  
2  Дверь водителя или левого переднего места.  
3  Дверь правого переднего места.  
4  Дверь заднего левого места.  
5  Дверь заднего правого места.  

by Alexander

а полнее?

Offline

#24 17-01-2007 16:08

Capushon
Registered: 13-08-2006
Posts: 351
Website

Re: Вопросы по опкодам

6, 7, 8, 9 - либо не существует, либо не для всего транспорта.
10  ;; Лобовое стекло
11  ;; Передний бампер
12  ;; Задний бампер


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#25 19-01-2007 10:48

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

Re: Вопросы по опкодам

Seemann wrote:

В игре есть такое понятие как mission_cleanup_list. В него автоматически заносятся все объекты, созданные во время миссии. В конце миссии есть команда mission_cleanup, которая как раз и высвобождает память от всего созданного на протяжении миссии, уничтожаем всех актеров, машины и пр. Если вам нужно, чтобы объект (актер) оставался в игре и после окончания миссии, вы может принудительно изъять его из этого списка этими командами

Добавлю, что MissionCleanupList может хранить до 75 хендлов. Это максимум, который может создаваться в пределах одной миссии (актеров, машин, объектов и т.д.)

Offline

Board footer

Powered by FluxBB