Причина заражения может быть упавший метеорит или лаборатория потерпевшая аварию. нейтрализовать заражение можно с помощью специального контейнера который герой несёт с собой, в этом контейнере находится нейтрализатор разработанный учёными, его надо доставить в очаг заражения и активировать. Для активации можно придумать какую нибудь головоломку. После чего прилетает вертик и забирает героя. Игра закончена.
это слишком обобщенно... мне нужны именно квесты(до самой мелочи) Более мощный компьютер глючит быстрее и точнее.
сразу ризнаюсю у меня нету диз дока(все на ходу придумываю) поэтому списка квестов нету только придумал что будет 3 концовки и 4 квеста начальных... концовки: 1- выполнены все квесты(уничтожена причина заражения - зону не взорут, вы герой) 2- не все кв. выполнены вы эвакуируетесь на вертолете(главное жив остался) 3- вы не успели эвакуироваться и сгорели вместе с городом(звание героя...посмертно) квесты тайна... мне нужен сценарист или идейщик для кв. цепочки... Более мощный компьютер глючит быстрее и точнее.
одна ночь и один шанс))) какая тут модет быть смена дня и ночи, туплю))
во-во
Quote (Vint)
фонари где нибудь если возможно
стоят=)))
Quote (Vint)
возможность из кучи поломанных машин собрать недостающих запчастей для более целой тачки
на игру дается всего час(или меньше если квестов не придумаю), так что придется галопом бегать и на собирание запчастей нет времени...+ я подумал что машины делать невыгодно с плановой стороны...т.к если будут тачки добежать до места назначения будет слишком легко и быстро Более мощный компьютер глючит быстрее и точнее.
оконный режим для тестов... полноекранный будет в след демке... просвечивающую темноту пытался сделать, но похоже не те способы выбрал... Пушки стерегут выходы из города... они всех сносят моментально(в новой версии перед пушками будут горы трупов что бы знать что подходить нельзя...) Вертолет доработаю...
Добавлено (03.11.2011, 13:16) --------------------------------------------- Сейчас вкл. 1-ой переменной отделяет от возможности водить машину в игру... Вопрос нужно ли это???
Для какого жанра игра:ТДС На каком движке/конструкторе: ГМ 8 В каком пространстве: 2Д Какой вид в игре: Сверху Какие есть похожие игры:любая ТДС Какой Язык Пр. используется в игре: ГМЛ Для какой платформы: Винда Предоставление исходного кода игры: Если попросят Какой тип лицензии распространения:конечно за 100500 уе=))) Сроки разработки: 28.10.11 Состав имеющейся команды:я и еще раз я=))
история:
в одной далекой далекой галактике...Шутка=) Начинается все, как ни заезжено, с заражения части города нейзвестным токсином. Сам токсин, заражая людей, их просто убивает, но насекомых что жили под землей заставляет мутировать и нападать на всех людей... Правительство быстро "закрыло" зону дабы не выпустить заразу, но немного исследовав состав токсина стало известно что при воздействии на него солнечных лучей токсин начнет нереальными темпами распространяться по воздуху и было решено выжечь всю територию. Но ученые которые занимались исследованиями токсина смогди получить разрешение на высадку "исследователя" в зоне и отстрочку зачистки на 1 час. Именно этим исследователем игрок и будет. Его задачей будет выжить в зоне и собирать образцыи выполнятьзадания порученые учеными...
-ГГ - 85-90% -фичи игры - 70-73% -постройка города - 35-40% -готовность спрайтов - 50% -квесты -10% -мобы - 5-7%(виды мобов) -виды оружия - 80-90% -дополнительные средства - 20-25% -меню, титры и окно проигрыша - 1% -звуки - 10-25%
лог разработки:
Code
02.11.2011(14.52) - на даный момент построена часть города, почти доделан ГГ, 1 вид мобов, 4 вида оружия, 1 квест("Высадка") 03.11.2011(11.03) - добавил в игру мины, турели, аптечки, антидоты, батареи. Настроил выбор пушки прокруткой колесом мыши.Немного достроил город... 03.11.2011(12.20) - настроил вертолет(добавил звук, сделал видимость посадки/взлета), сделал ограничение на запас энергии турелей. 03.11.2011(15.27) - закончил 2-ой квест, немного подредактировал вертолет, пушки, и гг... 21.11.2011(14.44) - возобновил работу над игрой! добавил магазин, профиксил квесты, немного подредактировал турели, зделал мобам правильный поиск пути(не тупят между домами), чюточку подгоняю денежный баланс...
мне как всегда требуются художники и дизайнер уровня(уровень большой) Более мощный компьютер глючит быстрее и точнее.
Сообщение отредактировал BrightSpot - Понедельник, 21 Ноября 2011, 16:46
В этой теме я не буду писать пошаговых уроков создания тди и т.д, а просто буду выкладывать труды своего мозга...
урок 1 простецкий радар(без скриптов)
подготовка: создаем спрайт радара(круглый) и спайты пометок на радаре(ГГ , мобы, цели и т.д) создаем обьект o_radar и назначаем ему наш заготовленый спрайт: в draw:
Code
x=view_xview+???//крепим к виду y=view_yview+??? draw_sprite_ext(sprite_index,-1,x,y,1,1,0,c_white,1)// отрисовываем
дальше создаем обьект o_radar_hero и назначаем ему заготовленый спрайт(у меня стрелочка) Step:
Code
{ x=o_hero.x//крепим к ГГ y=o_hero.y depth=o_radar.depth-1//глубину ставим что бы не терялась метка под радаром }
дальше создаем o_radar_mob или что нужно и у него пишем: Create:
Code
mob_id=0//ставим переменную мобы_носителя a=1000//меняя эти переменные можно контролировать дистанцию восприятия радара b=13//но формулы их просчета я не вывел поэтому все методом тыка
Step:
Code
x=mob_id.x//крепим к мобу_носителю y=mob_id.y depth=o_radar.depth-1//глубина
Draw:
Code
if distance_to point(o_hero.x,o_hero.y)<=a//проверяем попадает ли моб в зону радара { draw_sprite(sprite_index,-1,o_radar.x-(o_hero.x-x)/b,o_radar.y-(o_hero.y-y)/b)//если да - отрисовываем }
что бы метка держалась на определенном мобе то у него в Create:
сам TextBox готов, а что бы что нибудь вывести достаточно в событии(когда нужно выводить) вставить:
Code
textbox.t=1;textbox.text="я ваш дом труба шатал"
вот и все=))
урок 3:инвентарь
дальше я взялся за создание инвентаря(основу взял из этой на нашем форуме и немного усовершенствовал) распишу лучше с 0: создаем обьект o_case(слоты инвентаря) и o_inv(сам инвентарь) у последнего в событии Create:
Code
width = 4;//количество клеток по высоте height = 5;//количество клеток по ширине for(i = 0; i < width; i += 1;)//просчитывает цикл { for(j = 0; j < height; j += 1;)//еще раз для двойного массива { cell[i,j] = instance_create((i*32),( j*32), o_case)//создает слоты инвентаря }}
дальше идем в Create o_case:
Code
v_item=0//предмет в ячейке(0=пусто) v_kolvo=0//количество предметов v_cur=0//Нужна для отображения надписи при наведении на ячейку v_text=''//текст надписи xport=x//нужна для удобной привязки инвентаря к виду yport=y//аналогичная предыдущей
дальше идем в Step:
Code
x=view_xview[0]+xport//Привязка к виду y=view_yview[0]+yport if v_item=0{v_text=''}//Тест в зависимости от предмета if v_item=1{v_text='Яблоко('+string(v_kolvo)+'):Востанавливает 15 здоровья'} if v_item=2{v_text='Древняя монета('+string(v_kolvo)+'):Можно продать'}
дальше в Draw:
Code
draw_set_font(f0)//настраиваем шрифт if v_item=0{draw_sprite_ext(s_inv_pustoy_slot,-1,view_xview[0]+xport,view_yview[0]+yport,1,1,0,c_white,0.5)}//рисуем спрайт в зависимости от обьекта if v_item=1{draw_sprite_ext(s_inv_item1_test,-1,view_xview[0]+xport,view_yview[0]+yport,1,1,0,c_white,0.5)} if v_item=2{draw_sprite_ext(s_inv_item2_test,-1,view_xview[0]+xport,view_yview[0]+yport,1,1,0,c_white,0.5)} draw_sprite(sprite_index,-1,view_xview[0]+xport,view_yview[0]+yport)//рисуем спрайт самого слота if v_cur=1{draw_text(300,50,v_text)}//если v_cur=1 то выводим текст
следуем в mouse_enter:
Code
v_cur=1//переменная для вывода текста(вкл)
следуем в mouse_leave:
Code
v_cur=0//переменная для вывода текста(выкл)
дальше создаем обьект, например, o_item для него лучше всего написать скрипт(что бы не копиравать кучу кода для каждого нового обьекта), он будет лежать в событии подбора предмета, например столкновение) назовем скрипт s_item. В нем:
Code
a=1//предохранительная переменная for(j = 0; j < o_inv.height; j += 1;) { //просматриваем ячейки инвентаря for(i = 0; i < o_inv.width; i += 1;) { if o_inv.cell[i,j].v_item=argument0 // усли находит ячейку с таким самым предмето(argument0-это номер предмета и ставится в самом предмете) if o_inv.cell[i,j].v_kolvo<argument1//и если количество предметов ниже максимального { { instance_destroy()//уничтожает предмет o_inv.cell[i,j].v_kolvo+=1//и увеличивает количество предметов в инвентаре a=0//эта переменка нужна т.к происходил странный баг с 0-вым колвом предметов) exit } } } } if a=1//если таких самых предметов нету в инвентаре { for(j = 0; j < o_inv.height; j += 1;)//снова просматрваем каждую ячейку { for(i = 0; i < o_inv.width; i += 1;) { if o_inv.cell[i,j].v_item=0// и когда находим пустую { o_inv.cell[i,j].v_item = argument0;//добавляем предмет o_inv.cell[i,j].v_kolvo= 1;//количесво ставим 1(или 100500) instance_destroy();//уничтожаем предмет exit; } } } }
единственным отличием моего инвентаря от примера на который ссылка выше - это вывод текста и возможность складировать по несколько вещей...Поэтому я ввел этот пункт только ради общей составляющей=))
сам инвентарь готов, но, для большей удобности, нужно иметь возможность перемещать предметы в инвентаре по собственному желанию... этим сейчас и займемся=)
для начала идем в Create объекта инвентаря(по статье o_inv) там добавляем несколько переменных:
Code
v_mouse=0//предмет который перетаскиваем v_item=0//эта переменка нужна для правильной замены предмета v_kolvo=0//Количество предмета(у меня все сразу перетаскивается) v_kol=0//также дополнительная переменка для правильной замены(что бы не потерять что то=)
дальше идем в событие Left Pressed(или Right Pressed если так удобнее)и пишем:
Code
if o_inv.v_mouse=0 and !(v_item=0)//проверяем на соответствие поднятого ничего нету\в слоте что то лежит { o_inv.v_mouse=v_item// поднимаем предмет o_inv.v_kolvo=v_kolvo//устанавливаем количество поднятого v_item=0//опустошаем слот exit//обрываем функцию } if v_item=0 and !(o_inv.v_mouse=0)//проверка пустой слот\на мышке что то висит { v_item=o_inv.v_mouse//ложим предмет в слот v_kolvo=o_inv.v_kolvo//устанавливаем ему количество o_inv.v_mouse=0// опустошаем мышку exit//обрыв ф-ции } if !(o_inv.v_mouse=0) and !(v_item=0) and !(o_inv.v_mouse=v_item)//проверка мышка с предметов\слот не пустой\предмет на мышке и в слоте разные { o_inv.v_item=v_item//бросаем предмет в доп. переменную o_inv.v_kol=v_kolvo//количество тоже в доп. переменную v_item=o_inv.v_mouse//ложим в слот предмет с мышки v_kolvo=o_inv.v_kolvo//устанавливаем кол-во предметов o_inv.v_mouse=o_inv.v_item//ложим предмет из доп. переменной на мышку o_inv.v_kolvo=o_inv.v_kol// так же и количество o_inv.v_item=0//очищаем доп. переменные o_inv.v_kol=0 exit//обрываем } if v_item=o_inv.v_mouse//проверка предмет на мышке такой же как в слоте { o_inv.v_mouse=0//чистим мышку v_kolvo+=o_inv.v_kolvo//увеличеваем кол-во предметов за счет кол-ва на мышке o_inv.v_kolvo=0//очищаем количество на мышке exit//обрываем }
в принципе уже все работает, но все операции проходят незаметно(не видно что на мышке висит) поэтому идем в Draw объекта o_inv(инвентарь) и пишем:
Code
if v_mouse=1{draw_sprite(s_inv_item1_test,-1,mouse_x,mouse_y)}//смотрит на "ид" предмета и взависимости от значения рисует спрайт который висит на мышке
теперь можно создать еще несколько предметов и как угодно их перемещать по инвентарю=))
урок 4: перемотка списка пушек(если пушки можно подбирать)
в собитии колесо мыши вверх:
Code
if weapon=0 //это переманная типа пушки в руках { if weap1=1{weapon=1;break}//weap1=1 - это проверка есть ли у ГГ пушка 1 и если есть берем ее в руки. else {if weap2=1{weapon=2;break}// если пушки 1 нету проверяем пушку 2 и т.д } if weapon=1//снова повторяем все теже проверки только на следующей пушке { if weap2=1{weapon=2;break} else {weapon=0;break}//если пушек нету или это последняя в списке то ставим стандартную пушку(кулаки, нож и т.д) break }
что бы зделать обратный ход просто начинайте просчет с зада на перед+))
урок 5: точный поиск пути
многие(если не каждый) парились тем что, mp_potential_step(x,y,sp,0) работает только на небольших препятствиях(иначе как придурков по углам таскает) так вот система очень простая и построена на сетке(хоть это и не очень быстро, но те кто делают "огромные" игры и сами придумают себе поиск пути) И так начнем: создаем обьект o_grid в нем:
Code
Create:grid=mp_grid_create(0,0,room_width/16,room_height/16,16,16)//создаем сетку,(16 - это размер ячейки)
дальше обьекте бота/ГГ(или кто там будет двигаться) create:
Code
path=path_add()// создаем путь по которому будет следовать обьект(если создать стандартный путь то обьекты будут повторять движения за одним из ботов)
step:
Code
mp_grid_add_instances(o_grid.grid,o_block,1)// добавляем o_block как преграду(желательно зделать его родителем всех преград) mp_grid_path(o_grid.grid,path,x,y,o_target.x,o_target.y,1)//просчитываем путь по сетке, оминая ранее обозначеные препячтвия path_start(path,1,0,0)//запускаем путь
вот и все, запустив игру, бот будет идти к o_target даже если построить крутой лабиринт...
урок 6:создание обьекта(не мобы, а блоки, стены и пр.) на стороне сервера(39dll_gex)
и так, после моей последней пробы с ммо хочу добавить пару фишек которые я оттуда вынес=)) как создать обьект на сервере что бы он появился у всех игроков: примечание(я не буду расписывать как связать клиент-сервер и все в этом духе..таких примеров тьма) в событии create обьекта(на сервере):
Code
dll39_buffer_clear(0) dll39_write_byte(0,0) dll39_write_byte(12,0)//кейс на этот обьект dll39_write_short(x,0) dll39_write_short(y,0) for(i=1;i<=16;i+=1){ if(o_con.gh[i]>0){ dll39_message_send(o_con.gh[i].client,0,0,0);//отправка всем играющим игрокам }} //этот код нужен если хотите добавлять предметы прямо во время игры..
дальше в степ:
Code
if(o_con.client > 0)//проверка на нового игрока(должна быть уже готова) { dll39_buffer_clear(0) dll39_write_byte(0,0) dll39_write_byte(12,0) dll39_write_short(x,0) dll39_write_short(y,0) dll39_message_send(o_con.client,0,0,0);(отправка новичку) } //этот код отправляет команду на создание уже созданных обьектов..
теперь идем в клиент туда где принимаем кейсы:
Code
case 12://если пришел кейс 12 block=instance_create(0,0,o_stars)//создаем обьект block.x=dll39_read_short(0)//ловим его координаты... block.y=dll39_read_short(0) break;
впринципе все... вроде как мелочь, но я в свое время на ней голову сломал=))
урок 7(теория) как зделать защиту от хака на скорость передвижения на стороне клиента.
все до банальности просто... на стороне сервера добавляем в персе переменки(xpr=x,ypr=x) а дальше в степе делаем проверку на расстояние между xpr и x + проверка ypr и y и и если выше положеного то (бан, кик и т.д) а на следующей строчке уравниваем коорды=)) вот и все=)
сейчас времени мало, но когда появится выложу и другие уроки... Более мощный компьютер глючит быстрее и точнее.
Сообщение отредактировал BrightSpot - Четверг, 24 Ноября 2011, 19:07
if target=0//если нету цели {xx=x+irandom_range(-50,+50)//даем произвольные коорды вокруг зомбака yy=y+irandom_range(-50,+50)} alarm[0]=irandom_range(60,180)
в Step
Code
if target=0 && !(xx=x) && !(y=yy)//если цели нету и коорды назначения не сходятся с коордами зомбака {mp_potential_step(xx,yy,5,0)}//идем к коордам image_angle=direction//поворачиваем спрайт в сторону движения if distance_to_point(x,y,o_hero.x,o_hero.y)<=150//если дистанция до ГГ(o_hero) меньше заданой {target=1}else{target=0}//ставим цель активной, иначе выключаем if target=1 && distance_to_point(x,y,o_hero.x,o_hero.y)>=20//если цель активна и дистанция до ГГ больше заданой {mp_potential_step(o_hero.x,o_hero.y,5,0)}//двигаем к ГГ if distance_to_point(x,y,o_hero.x,o_hero.y)<20//если дистанция до ГГ меньше заданой {direction=point_direction(x,y,o_hero.x,o_hero.y)//поворачиваем зомбака к ГГ if kick=1{kick=0;alarm[1]=60;o_hero.hp-=10}}//если бить можно, запрещаем следующий удар, ставим аларм, отнимаем хп у ГГ
в alarm[1]
Code
kick=1//разрешаем следующий удар
вроде все Более мощный компьютер глючит быстрее и точнее.
начни с освоения ГМ-а, дальше создавай различные мелкие игрушки и учись на своих ошибках, когда будеш полностью понимать логику языка(условия, переменные, циклы, алармы) то поставленая тобой задача окажется весьма простой... для начала могу только дать совет что в игре будет множество действий с координатами или сеткой(как уже решиш) и много рандомных действий... удачи! Справка(в первую очередь) и форум тебе в помощь... Более мощный компьютер глючит быстрее и точнее.
Квадратики хотят попасть в мир кружков. Нам нужно предотвратить попадание квадратиков в мир кружков. Потому что у квадратиков острые углы и они могут поранить кружки.
Обидно... я с подобной идеей стратегию делаю=(( что же придется перерисовать юнитов=( А так картинка прикольная! мне всегда нравился такой стиль=)) Более мощный компьютер глючит быстрее и точнее.
Сожалею, но вам прийдется искать прогера(если еще не нашли) т.к у меня вышел небольшой переезд и нэта нету=( + из-за укороченого учебного года, навалилось очень много учебы... исходник я зберегу и по возможности буду его доделывать по прошлому плану(возможно получится потом найти художника) Более мощный компьютер глючит быстрее и точнее.
http://rghost.ru/25896401 кароч изменения в пушке(создается корпусом и получает его ид, что уберает баг с перелетанием пушки на танк в котором сидишь..) с танками просто сделал через instance_nearest.... кароч там все просто... Более мощный компьютер глючит быстрее и точнее.