000182. Колода карт в GTA San Andreas
#Колода карт в GTA San Andreas
В этом уроке мы рассмотрим возможности работы с игровыми картами.
Привет! Будем играть в карты? Маловероятно, так как написать хорошую карточною игру обычным скриптингом проблематично. Тем не менее, некоторые возможности для работы с колодой у нас есть. Их мы и рассмотрим.
У нас доступны только 2 опкода, которые относятся к теме. Рассмотрим первый:
1
059D: shuffle_card_decks 1
Copied!
Этот опкод включает возможность перемешивания карт. За что отвечает параметр "1" мне точно не известно. Скорее всего - это количество карт, которые не будут повторятся, когда будет взята карта с колоды. Или этот параметр отвечает за тип колоды, которая может использоваться для той или иной игры.
Я смог узнать только допустимые значения. Разрешено использовать параметр от 0 до 6 включительно. Если установить значение выше, то игра у меня вылетала.
После включения генератора колоды можно уже получить карту, используя опкод:
1
059E: get_card_to [email protected]
Copied!
В переменную [email protected] будет записан текущий идентификатор карты. По-сути: это обычное число от 1 до 52 включительно. Идентификаторы располагаются в таком порядке:
1
Т 2 3 4 5 6 7 8 9 10 В Д К
Copied!
По цвету масти сортировка следующая:
1
Трефы (♣) Бубны (♦) Пики (♠) Червы (♥)
Copied!
Чтобы было легче ориентироваться в этой паутине идентификаторов, я сгруппировал всё в одной картинке через скрипт:
title
Собственно, на этом можно было и закончить. Но я решил написать пример использования, чтобы статья не была такой бесполезной. Давайте дадим игроку 6 карт и позволим ему выбрать одну из них. В зависимости от выбранной карты игроку будут начислены деньги:
1
{$CLEO}
2
wait 2000
3
01B4: set_player $PLAYER_CHAR can_move 0
4
0390: load_txd_dictionary 'LD_CARD'
5
038F: load_texture "CD1C" as 1
6
038F: load_texture "CD2C" as 2
7
038F: load_texture "CD3C" as 3
8
038F: load_texture "CD4C" as 4
9
038F: load_texture "CD5C" as 5
10
038F: load_texture "CD6C" as 6
11
038F: load_texture "CD7C" as 7
12
038F: load_texture "CD8C" as 8
13
038F: load_texture "CD9C" as 9
14
038F: load_texture "CD10C" as 10
15
038F: load_texture "CD11C" as 11
16
038F: load_texture "CD12C" as 12
17
038F: load_texture "CD13C" as 13
18
038F: load_texture "CD1D" as 14
19
038F: load_texture "CD2D" as 15
20
038F: load_texture "CD3D" as 16
21
038F: load_texture "CD4D" as 17
22
038F: load_texture "CD5D" as 18
23
038F: load_texture "CD6D" as 19
24
038F: load_texture "CD7D" as 20
25
038F: load_texture "CD8D" as 21
26
038F: load_texture "CD9D" as 22
27
038F: load_texture "CD10D" as 23
28
038F: load_texture "CD11D" as 24
29
038F: load_texture "CD12D" as 25
30
038F: load_texture "CD13D" as 26
31
038F: load_texture "CD1S" as 27
32
038F: load_texture "CD2S" as 28
33
038F: load_texture "CD3S" as 29
34
038F: load_texture "CD4S" as 30
35
038F: load_texture "CD5S" as 31
36
038F: load_texture "CD6S" as 32
37
038F: load_texture "CD7S" as 33
38
038F: load_texture "CD8S" as 34
39
038F: load_texture "CD9S" as 35
40
038F: load_texture "CD10S" as 36
41
038F: load_texture "CD11S" as 37
42
038F: load_texture "CD12S" as 38
43
038F: load_texture "CD13S" as 39
44
038F: load_texture "CD1H" as 40
45
038F: load_texture "CD2H" as 41
46
038F: load_texture "CD3H" as 42
47
038F: load_texture "CD4H" as 43
48
038F: load_texture "CD5H" as 44
49
038F: load_texture "CD6H" as 45
50
038F: load_texture "CD7H" as 46
51
038F: load_texture "CD8H" as 47
52
038F: load_texture "CD9H" as 48
53
038F: load_texture "CD10H" as 49
54
038F: load_texture "CD11H" as 50
55
038F: load_texture "CD12H" as 51
56
038F: load_texture "CD13H" as 52
57
0581: enable_radar 0
58
0826: enable_hud 0
59
02EB: restore_camera_with_jumpcut
60
03F0: enable_text_draw 1
61
62
059D: shuffle_card_decks 6 // тасуем колоду
63
059E: get_card_to [email protected] // сохраняем ID карты
64
059E: get_card_to [email protected] // сохраняем ID карты
65
059E: get_card_to [email protected] // сохраняем ID карты
66
059E: get_card_to [email protected] // сохраняем ID карты
67
059E: get_card_to [email protected] // сохраняем ID карты
68
059E: get_card_to [email protected] // сохраняем ID карты
69
70
[email protected] = 0 // текущая выбранная карта
71
[email protected] = 0 // таймер для контроля нажатия клавиш
72
73
while true
74
wait 0
75
if
76
00E1: player 0 pressed_key 15 // ~k~~VEHICLE_ENTER_EXIT~
77
then
78
jump @END_SCRIPT
79
end
80
81
00E2: get_player 0 key 0 state_to [email protected] // ~k~~GO_LEFT~ / ~k~~GO_RIGHT~
82
83
if and
86
then
88
if
90
then
92
end
93
end
94
95
if and
98
then
100
if
102
then
104
end
105
end
106
107
108
for [email protected] = 0 to 5
109
if
111
then
112
038E: draw_box_position [email protected] 224.0 size 48.0 80.0 RGBA 64 0 156 222
113
else
114
038E: draw_box_position [email protected] 224.0 size 40.0 72.0 RGBA 0 0 0 196
115
end
116
038D: draw_texture [email protected]([email protected],6i) position [email protected] 224.0 size 32.0 64.0 RGBA 255 255 255 255
117
118
end
119
120
if
121
00E1: player 0 pressed_key 16 // ~k~~PED_SPRINT~
122
then
124
0109: player $PLAYER_CHAR money += [email protected]([email protected],6i)
125
jump @END_SCRIPT
126
end
127
128
end
129
130
:END_SCRIPT
131
0581: enable_radar 1
132
0826: enable_hud 1
133
03F0: enable_text_draw 0
134
0391: release_textures
135
059D: shuffle_card_decks 0
136
01B4: set_player $PLAYER_CHAR can_move 1
137
0A93: end_custom_thread
Copied!
Вот такой небольшой скрипт у нас получился. Результат такой:
title
Спасибо за внимание!
× Примечание: я использовал идентификаторы согласно оригинальному MAIN.SCM. Возможно, они только декоративные и по-сути колода является только генератором простых чисел от 1 до 52 включительно.
Copy link
Edit on GitHub