Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2009, 20:29   #11
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ну это не скрипт, это файл конфигурации. Скипт - это например xml для задания изменения состояния объектов в игре, как двигаться, скорости, габариты и пр.
Используй ini или res от туда сразу можно выдергивать данные просто подряд или как в ini по заголовку и указателю.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.06.2009, 22:05   #12
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

В liero xtreme все моды сделаны такими связанными между собой "скриптами". Потом они компилируются в байт-код, т.к. парсить ini на ходу слишком медленно
Код:
###################
# Projectile: Mini rocket

[General]
Type = PRJ_image
Trail = TRL_DOOMSDAY
Gravity = 30
image= FastBullet.png
UseAngle = true
UseSpecAngle = false
AngleImages = 130

[Hit]
Type = Explode
Damage = 3
Sound =Metal.wav
Shake = 2
Projectiles=true

[PlayerHit]
Type = Injure
Damage = 16

[Projectile]
Amount = 16
Speed = 30
Speedvar=10
spread=360
projectile =P_uzi-bits.txt
пыщь
JTG вне форума Ответить с цитированием
Старый 29.06.2009, 22:29   #13
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

JTG, ..."на ходу" пользовать, думаю, все же не стоит в любом случае ))) ...как бы то ни было, автор хочет менять параметры не влезая в движок по любому поводу. Тут любые средства хороши, ...данные ушли по-назначению в начале загрузки и дело сделано.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 01.07.2009, 16:27   #14
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Сейчас придумал и реализовал в игре систему внешних скриптов с нуля. Единственный недостаток в том что команды без параметров(сейчас думаю над этим). Основой системы являются опкоды, т.е код по которому различаются команды.
Например скрипт моей игры:
Код:
0012: change_player_speed
0001: run_additional_script
0000: terminate_script
Команды определяются кодом в начале строк (с помощью функции pos), а текст только поясняет команду (он может быть любым). Плюс также в том, что скрипты могут запускать друг друга и сами себя.

P.S Уезжал в питер на несколько дней и не мог ответить.
Вадим Буренков вне форума Ответить с цитированием
Старый 02.07.2009, 01:03   #15
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Ну например можно сделать так(используя ваши опткоды):
Цитата:
0012 345
0043 asddss
3432 А это текст
Всё что дальше пробела - параметр, четере первых символа - опткод.
Опткод имеет фиксированную длинну и его просто копируем (можно переделать в integer). Дальше блоками if (optkod = BLABLA) then определяем опткод и переходим к обработчику. Этому обработчику передаём остальную строку(всё что дальше первого пробела).
В обработчиках можно написать всё что душа пожелает.
Кстати обработчик может содержать собственно несколько модулей и к примеру раскладывать строчку переданную ему на отдельные команды, например

0001 'data.bin' 'papka/papka1/' 0

Предположим 0001 - команда копирования, и она скопирует фаил в указанную папку, ноль в конце означает что если фаил существует, то отмена копирования. Конечно приведённый пример не имеет отношения к играм, скорее это напоминает BAT файлы.
Но думаю, что я понятно описал свою мысль.

Последний раз редактировалось Виталий Серов; 02.07.2009 в 01:30.
Виталий Серов вне форума Ответить с цитированием
Старый 02.07.2009, 09:49   #16
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Спасибо, но я уже разобрался. Я написал функцию, которая извлекает число или строку ограниченную символами из строки опкода. Вот опкоды которые я уже прикрутил к игре и справка по их работе.Надеюсь скоро выложу саму игру.
Код:
Скрипты в CosmoNoid находятся в Data/Scripts. Каждому скрипту соответствует файл .gsc
(game script).Все скрипты запускаются из Main.gsc опкодом:
"0001: run_external_script @file.gsc# in_thread $thread%" (о параметрах file, thread и 
других написано ниже), а завершается опкодом "0000: end_thread".  

Игровые опкоды в основном являются интерпритаторами процедур и функций в Delphi 
и позволяют писать игровой код (скрипты) после компиляции exe.
Опкоды бывают без или с 1,2 или 3 параметрами.Индитификатором опкода является его 
номер, например "0001:".За ним идет описание опкода "run_external_script ". Оно может
быть любым или вообще не быть в опкоде поскольку игнорируется интерпритатором. Далее 
идут параметры, которые выделяются в комманде символами. Первый параметр отделяется 
знаками @ и #, второй $ и % а третий ^ и &.

На данный момент доступно 17 опкодов.
Стандартных-16
Ожидания-1
Условных-0
Список опкодов:

1)Системные опкоды
0000: end_thread
0001: run_external_script @file.gsc# in_thread $thread%
0006: set_background @file.bmp#
0007: terminate_game
0010: wait_for_keypress @key_code#
 
2)Игровые опкоды

A)Космические корабли
0008: create_ship_with_handle @ship_handle# in_memory_from_iniFile $ini_settings%
0009: create_ship @ship_handle# in_game_coords $Xpos% ^Ypos&
0003: destroy_ship @ship_handle# in_game 
0002: change_ship @ship_handle# position_to $Xpos% ^Ypos&

-0004: set_ship @ship_handle# speed_to $XSpeed% ^YSpeed&
-0005: set_ship @ship_handle# health_to $health%

B)Игрок

-0014: give_veapon @weapon_handle#  to_player 
-0015: give_ammo $ammo_count% to_player_weapon @weapon_handle# 
-0016: remove_player_weapon @weapon_handle#
C)Оружие
-0008: create_weapon_with_handle @weapon_handle# in_memory_from_iniFile $ini_settings%
-0017: remove_weapon_with_handle @weapon_handle# in_memory

3)Опкоды для работы со звуком
0011: load_sound @sound_handle# $file.wav% 
0012: play_sound @sound_handle# 
0013: free_sound @sound_handle# 

#########################
#Типы данных в скриптах:#
#########################
File-тип данных файла (file.bmp, file.wav и.т.д). Путь для файла находится 
автоматически(Для скриптов Data/scripts, для музыки data/sound и.т.д).
 
Thread-поток скрипта(целое число 0..10).Игра поддердивает до 10 одновременно 
работающих потоков.Каждый скрипт запускается на своем потоке, например поток номер 0 
является скриптом Main.gsc и запускается игрой автоматически. В нем производится 
настройка параметров и запуск остальных игровых скриптов. При попытке запустить два 
скрипта на одном потоке первый скрипт аварийно завершится а запускаемый скрипт будет 
работать на его потоке. 

Key_code(целое число)-код клавиши. Определяется программой в комплекте.

ship_handle(целое число 0..100)-индитификатор космического корабля в игре(индекс в 
массиве).Каждый имеет свой handle, например корабль игрока имеет индекс 0, игровые 
корабли противника в стандартной игре 1..50. Для написания скриптов отведены места 50..100. 
При попытке создать корабль на используемом handl'е старый корабль исчезнет а новый займет его место.

ini_settings (file.ini)-тип данных файла конфигурации обьекта. Путь для файла 
находится автоматически.


weapon_handle(не определено)-указатель на оружие.

sound_handle(целое число 0..4) -указатель на звук. Используется так-же как и ship_handle. 
Используется только в дополнительных скриптах.

Остальные параметры, например health, Xpos, YSpeed и.т.д являются простыми целыми 
числами.
Я делаю игру таким образом, чтобы все игровые обьекты не содерхались в exe. Напимер все относящееся к космическим кораблям (анимации, характеристики, звуки, системы поведения) находятся в файлах.То есть можно не редактируя игру (exe) путем добавления файлов добавить новый корабль, а потом в скрипте создать его командами
0008: create_ship_with_handle @ship_handle# in_memory_from_iniFile $ini_settings%
0009: create_ship @ship_handle# in_game_coords $Xpos% ^Ypos&.

Последний раз редактировалось Вадим Буренков; 02.07.2009 в 09:56.
Вадим Буренков вне форума Ответить с цитированием
Старый 02.07.2009, 11:16   #17
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Ну это прям как в gta.
VintProg вне форума Ответить с цитированием
Старый 02.07.2009, 11:17   #18
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Скрипты это очень мощная вещь!
VintProg вне форума Ответить с цитированием
Старый 02.07.2009, 11:18   #19
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Ну так я сам писал скрипты для GTASA а сейчас для GTA4. Вот и сделал систему по подобию.
Вадим Буренков вне форума Ответить с цитированием
Старый 02.07.2009, 11:22   #20
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Да я много раз делал моды на GTA Vice City и GTA-SA,так там они компилируютса.
VintProg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выполнением скриптов в IE rom@nыч JavaScript, Ajax 7 17.08.2008 18:56
Проблема с отображением джава скриптов LSDkltn HTML и CSS 2 01.04.2008 10:38