Игровые Форумы - Показать сообщение отдельно - Уроки по коддингу.
Показать сообщение отдельно
Старый 05.02.2007, 21:07   #4
Экс Администратор
 
 Аватар для Flint
 
Отсутствует :(

Регистрация: 12.11.2006
Адрес: Киев
Сообщения: 2,101

Репутация: 2060   Добавить отзыв для Flint

Отправить сообщение для  Flint с помощью ICQ
По умолчанию Корабики, буль-буль=)

Урок № 3
Сегодня я вас научу добавлять корабли

\resource\models\ships тут мы наблюдаем корабли.. Например добавляем папку с нашим судном. Обязательно должен кончаться на 1!! Galeoth_h1 к примеру.. Открываем ее и смотрим что бы все файлы имели такое же название..

galeoth_h1_mast1.gm
galeoth_h1_mast3.gm

Сделали? Хорошо! Теперь идем resource\models\ships\Sailorspoints тут копируем сайлор поинты с наиболее похожего судна и обзываем как наш корабль..

Galeoth_h1 в данном случае....

Теперь идем в текстуры... \resource\textures\Ships

Создаем папку которая называеться так же как и наш корабль.. Galeoth_h1 с такой структурой.

Galeoth_h1
- Hull1
- Hull2
- Hull3

Внутри каждой папки должа быть текстура.. В принципе в Hull1 чистое дно, Hull2 первый апгрейт днища, Hull3 второй апгрейт днища..

Пока это все что мы тут можем делать...

Туперь идем в \program\ships\Ships_init

///////////////////////////////////////////////////////////////////////////
/// Galeon HEAVY Название для ориентации
///////////////////////////////////////////////////////////////////////////
makeref(refShip,ShipsTypes[SHIP_GALEON_H]); //Название судна
refShip.Name = "Galeon_h"; //Название судна
refship.Soundtype = "frigate"; //Звуки. .Можно прикрутить звуки мановара к Люгеру
refShip.Class = 3; //Клас судна
refShip.Cannon = CANNON_TYPE_CANNON_LBS16; //Калибр орудий установленый по дефолту.
refShip.MaxCaliber = 24; //Макс калибр пушек
refShip.Weight = Tonnes2CWT(1100); //Масса корабля
refShip.Capacity = 3000; //грузоподъемность
refShip.CannonsQuantity = 36; //колво орудий
refShip.rcannon = 15; //Орудия правого борта
refShip.lcannon = 15; //Орудия леаого борта
refShip.fcannon = 2; //Носовые орудия
refShip.bcannon = 4; //Кормовые орудия
refShip.MaxCrew = 400; //Макс команда
refShip.MinCrew = 64; //Мин команда
refShip.BoardingCrew = 200; //Абордажники
refShip.GunnerCrew = 36; //Стрелки
refShip.CannonerCrew = 72; //Канониры
refShip.SailorCrew = 400; //Моряки
refShip.SpeedRate = 12.0; //Скорость
refShip.TurnRate = 25.0; //Маневр
refShip.Price = 105000; //Стоимость
refShip.HP = 4000; //Жизнь корабля
refShip.SP = 100; //Паруса
refShip.AbordageLocation = "Boarding Deck_01"; //Локация абордажа
refship.Type.Merchant = false; //Возможность использования компютером как Торгового судна
refship.Type.War = true; //Возможность использования компютером как Военного судна
refShip.fWindAgainstSpeed = 2.0; //Скорости по отношению к ветеру..
refShip.sea_enchantment = 1.2; //Это что то связано с встречами..
refShip.lowpolycrew = 20; //Колво матросиков на палубе
refShip.buildtime = 80; //Время на постройку.. Но походу неиспользуеться..

refship.Rocking.y = 0.4; //Раскачивание судна по оси У
refship.Rocking.az = 0.02; //Раскачивание судна по оси z
refship.WaterLine = -0.2; //Ватерлиния чем меньше значение тем выше из воды выглядывает судно... Можно сделать подводную локу или воздушный корабль

refship.SpeedDependWeight = 0.5; //тут скорость к масе
refship.SubSeaDependWeight = 0.3; //тут тоже что то. В игре не заметно...
refship.TurnDependWeight = 0.5; //ПОгружение от веса..
refShip.Height.Bombs.Y = 2.5; refShip.Height.Bombs.DY = 2.0;
refShip.Height.Grapes.Y = 4.0; refShip.Height.Grapes.DY = 1.0;
refShip.Height.Knippels.Y = 26.0; refShip.Height.Knippels.DY = 20.0;
refShip.Height.Balls.Y = 2.5; refShip.Height.Balls.DY = 2.0;
//Это параметры залпа....

refship.InertiaAccelerationX = 4.5; refship.InertiaBrakingX = 4.5; //Ускорения-хамедления.
refship.InertiaAccelerationY = 3; refship.InertiaBrakingY = 3; //Ускорения-хамедления.
refship.InertiaAccelerationZ = 4.5; refship.InertiaBrakingZ = 4.5; //Ускорения-хамедления.

refShip.GeraldSails.rey_b2 = 1;
refShip.GeraldSails.rey_b3 = 1;
refShip.GeraldSails.rey_b2.vscale = 0.98;
refShip.GeraldSails.rey_b3.vscale = 0.8;
refship.Track.Enable = true;
refship.Track1.ZStart = 0.0;
refship.Track1.LifeTime = 14.5;
refship.Track1.Width = "5.2, 7.3";
refship.Track1.Speed = "5.5, 6.5";
refship.Track2.ZStart = -0.15;
refship.Track2.LifeTime = 8.5;
refship.Track2.Width = "6.0, 8.0";
refship.Track2.Speed = "0.15, 0.25";
//Тоже не совсем понятные параметры.. Я их не трогаюю. Но походу они на чтото влияют

Так у нас есть корабль!!
Но теперь идем в program\ships\ships.н

там строчка
#define SHIP_TYPES_QUANTITY 23 //сюда добавляем +1

То есть
#define SHIP_TYPES_QUANTITY 24

Дальше видим такие строчки

//6 это наш клас

нам надо


//3
#define SHIP_CORVETTE 10
#define SHIP_PINNACE 12
Дописываем Галеон


//3
#define SHIP_CORVETTE 10
#define SHIP_GALEON_H 23 //Тут надо не забывать что #define SHIP_TYPES_QUANTITY 24 это значит последний номер судна 23!
#define SHIP_PINNACE 12

Все тут закончено...

В принципе судно плавает по морям океанам и вы его захватить можете! Но лутче сделать так для теста(ВНИМАНИЕ В ВЕРИСЯХ ТДМ начиная от 0.1.0201 НЕРАБОТАЕТ!!!! И спользуйте ТДМ 0.01 или К3) дать герою со старта корабль.

Идем в program\characters\characters_init

находим там в персонаже


ch.shotgun = "0";
ch.Ship.Type = GenerateShip(SHIP_LUGGER, 1);
SetBaseShipData(ch);

Вот эту строчку и правим ch.Ship.Type = GenerateShip(SHIP_LUGGER, 1);.

В нашем случае ch.Ship.Type = GenerateShip(SHIP_GALEON_H, 1);

Все запускаем игру... И видем свой корабль!!!

Но возникают вопросы.. А почему нет картинки судна в интрфейсе? А почему нет описания???

Все по порядку... Так пока в игре.. Находим удачный вид корабля и СКРИНИМ .. Помните потом будете резать картинку до квадрата и масштабить до 256х256 так что выбирайте ракурс!

Скрин есть обрабатываем.. Я юзаю стандартный офис Пиктуре Менеджер.. Там все это делаеться ЕЛЕМЕНТАРНО .. В обшем обрезали до квадрата, потом смаштабили до 256х256.. Теперь открываем фотошоп и перегоняем в ТГА, обзывая его как и нашу модель в нашем случае galeon_h.tga! Дальше открываем ConvertorTX и там конвертируем в ТГА.ТХ файл директория конвертации RESOURCE\Textures\INTERFACES\SHIPS конвертим в 16 битном режиме и все выходим отсюда и идем в RESOURCE\INI\interfaces\pictures

Ищем тут такое [SHIPS_lugger]

Видим такой блок

[SHIPS_lugger]
sTextureName = ships\lugger.tga
wTextureWidth = 128
wTextureHeight = 128
picture = ship,0,0,128,128

Меняем под свой корабль..

[SHIPS_galeon_h]
sTextureName = ships\galeon_h.tga
wTextureWidth = 128
wTextureHeight = 128
picture = ship,0,0,128,128

Все картинка у нас ..

Теперь такая весчь как описание?
RESOURCE\INI\texts\russian\common

Там ищем Lugger.
Видим такую строчку
string = Lugger,"Люгер"

Меняем под свой корабль

string = Galeon_h,"Тяж. Галеон"
Добавляем под люгер..

Дальше крутим вниз и видим такое
string = Lugger_descr,"Как один из самых быстрых кораблей 16-го века, люгер пользовался большой популярностью среди берегового братства, контрабандистов и военных, использовавших его в качестве быстрого курьерского или разведывательского судна."

Мы меняем под свое..
string = Galeon_h_descr,"Ля-ля "

Теперь нас смущает постоянно меняющаяся иконка в левом верхнем углу.. В принципе добавить можно и свою(аналогия с оружием размер 64х64) но я предпочитаю дефолт.. Уж слишком много возни .

Идем сюда \program\battle_interface\BattleInterface

И тут ищем знакомое lugger

Такой вот кейс.

case "lugger":
BI_intNRetValue[0] = 0+0*8;
BI_intNRetValue[1] = 0+0*8 + 1;
BI_intNRetValue[2] = BI_ICONS_TEXTURE_SHIP1;
break;

В приницпе алгоритм такой ищем наиболее похожий корабль и на базе его делаем наш..

case "galeon_h":
BI_intNRetValue[0] = 2+3*8;
BI_intNRetValue[1] = 2+3*8 + 1;
BI_intNRetValue[2] = BI_ICONS_TEXTURE_SHIP1;
break;

Все теперь запускаем игру и наслаждаемся ..

Хотя нет есть фиха Sailorspoints.
Открываем наш галеон \MODELS\Ships\SAILORSPOINTS\Galeoth_h1
[SIZE]
points = 28
links = 30
[POINT_DATA]
point 0 = -1.053810,1.572414,5.501140,0
point 1 = 1.015286,1.554920,5.494949,0
point 2 = 1.021910,1.332422,2.101484,0
point 3 = -1.003741,1.324923,2.151694,0
point 4 = -1.028343,1.334921,-1.200451,0
point 5 = 1.053739,1.382422,-1.307331,0
point 6 = -0.932265,1.537422,6.736780,0
point 7 = 0.928816,1.519911,6.657925,0
point 8 = -0.867764,1.547411,-4.546486,0
point 9 = 0.718989,1.492410,-4.582409,0
point 10 = 0.966041,1.454911,-8.690816,4
point 11 = -1.064782,1.452408,-8.631719,4
point 12 = 3.249074,1.434911,-0.637954,10
point 13 = 3.228406,1.469920,-0.248444,10
point 14 = 0.840388,1.427552,7.692973,3
point 15 = 1.031660,1.347551,5.505277,2
point 16 = 1.005709,1.337549,2.096193,2
point 17 = -1.058242,1.335025,-1.223066,1
point 18 = 1.007782,1.347523,-1.275707,2
point 19 = -1.057008,1.465025,-4.540694,1
point 20 = 1.077551,1.432525,-4.599940,2
point 21 = -3.285402,1.322526,-0.675767,10
point 22 = -3.284778,1.342523,-0.364964,10
point 23 = -1.026730,1.330025,2.165932,1
point 24 = -1.020359,1.357526,5.523181,1
point 25 = -0.760462,1.825028,7.740371,3
point 26 = 1.011494,1.410026,-7.762551,10
point 27 = -1.012654,1.475022,-7.877825,10

[LINK_DATA]
link 0 = 0,3
link 1 = 3,4
link 2 = 8,4
link 3 = 11,8
link 4 = 1,2
link 5 = 5,2
link 6 = 7,1
link 7 = 10,9
link 8 = 5,9
link 9 = 6,0
link 10 = 9,8
link 11 = 18,12
link 12 = 12,13
link 13 = 14,13
link 14 = 0,24
link 15 = 3,23
link 16 = 4,17
link 17 = 1,15
link 18 = 16,2
link 19 = 18,5
link 20 = 20,9
link 21 = 19,8
link 22 = 21,17
link 23 = 22,21
link 24 = 22,25
link 25 = 7,26
link 26 = 6,26
link 27 = 26,21
link 28 = 6,27
link 29 = 6,24
link 30 = 7,14
link 25 = 7,26
link 26 = 25,27
link 27 = 6,27
link 28 = 6,23
link 29 = 7,14

Муть да?? И я так думаю . В обшем мини мануал..
[SIZE]
points = 28 //колво поинтов с нулем считаем.
links = 30 //колво линков с нулем.
[POINT_DATA]
point 0 = -1.053810,1.572414,5.501140,0 //координаты поинта 0. Координаты -1.053810 - Х, 1.572414 - Z, 5.501140-Y. Берем маю/макс и начинаем смотреть координаты там и водить сюда.. Метод тыка тут... И только ОН!
point 1 = 1.015286,1.554920,5.494949,0

[LINK_DATA]
link 0 = 0,3 //показывает куда итди! Например с Поинта 0 на поинт 3.
link 1 = 3,4
link 2 = 8,4

Все это напряжно? Да..
Тут есть две новости плохая и хорошая.
Плохая нет тулов которые пишут сейлор поинты в интерфесе(может быть ты напишешь его?). Тока тыком.. Хотя есть тулы которые его пишут но очень косячно..

Хорошая это то что Сайлор поинты ты можешь править прямо в игре. Как? Расказываю... Загружай свой Галеон, море смотрим как матросики бегают.. Дальше два пути, выбирай сам как лутче тебе.
1. Сохранить игру, дальше правишь сейлор поинты, сохранить документ и загружаешь игру.. Вуаля новые сейлор поинты работают.
2. Правишь сейлор поинты, сохранить документ, выходишь на глобальную карту, снова в море вуаля новые сейлор поинты!

Все это хорошо но как пустить в продажу?
А просто.
Идем в \program\scripts\utils
Там ищем такое
for (int i = SHIP_LUGGER; i <= SHIP_FRIGATE; i++)

А теперь внимание идем в program\ships\ships.н
Там смотрим порядковый номер фрегата 13. Так вот продвинутые юзеры, все порядковые номера после 13 в верфь не попадут. Более того порядок идет по номерам.. То есть Если под 14 номером будет Лодка то идти она будет после фрегата и доступна будет на крутых левелах. Вот так вот!

Меняем строчку под свои нужды.. Или порядкове номера и наслаждаемся кораблем в Верфи.

Удачи!
Следуюющий урок раскажет как добавить персонажа и диалог ему .

Последний раз редактировалось КиллерМЕН, 17.02.2013 в 14:27.
   
__________________
Чрезмерное злоупотребление компьютерными играми сносит башню.
Доказано минздравом.