forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Мод FPS от impersonalis-a. (http://forum.boolean.name/showthread.php?t=4515)

Crayzi 19.09.2007 03:29

Re: Создаём свой FPS (first person shooter)
 
Вложений: 2
Хе, решил всеже сам коечто подправить, об этом уже писалось ранее (не мной) но было както замято. Я методом выдирания с горем пополам приклеил нормальную на мой взгляд систему прыжка, не смейтесь, я убил на эту процедуру около 40-50 минут 8=D. Там все нововведения выделены (ну короч там ясно будет), вроде бы все старое что было (мож конечно чтото и убил ненароком) переделал в обычный комментарий и тож выделил.
З.ы. Вспомнил что еще добавил доп. предмет и чуток поизменял характеристики старых.
impersonalis ты непротив чтобы я продолжил потрошение и переделку сей миниигрушки с последующим выкладыванием сдесь в виде продолжения или дополнения(я несобираюсь полностью брать в свои руки эту темку, буду просто изредка, добавлять чтонить новенькое, подправлять чтонить там :-D , какрас на практике и критике всегда легче чем тихо сам с собою)? Или так непойдет?
P.s. Название убойное у архива:crazy:

AndruXa 21.09.2007 01:11

Re: Создаём свой FPS (first person shooter)
 
Хм..... смотрю я на все это и думаю, что чего-то не хватает. И решил добавить.....
Код:

Function update_user()
sp#=.05
shoe_size#=7.0
head_bang_X#=0.1
head_bang_Y#=0.1
walking=0
If KeyDown(30) Then: MoveEntity user,-V#,0,0 : walking=1: EndIf
If KeyDown(32) Then: MoveEntity user, V#,0,0 : walking=1: EndIf
If KeyDown(17) Then: MoveEntity user,0,0, +V# : walking=1: EndIf
If KeyDown(31) Then: MoveEntity user,0,0,-V# : walking=1: EndIf

If walking=1
a1#=(a1#+shoe_size) Mod 360
Else
EndIf
PositionEntity camera,Cos(a1#)*head_bang_X#,Sin(90+a1#*2)*head_bang_Y#,0,0
       
        MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
        If Abs(EntityPitch#(camera))>u# RotateEntity camera,u#*Sgn(EntityPitch#(camera)),0,0

Здесь имитация реальных шагов, ато игрок движется как - то некрасиво, прямолинейно.:) (меняем обычное перемещение игрока на представленное)
Да и добавил вот код собирания бонусов, но чет не работает вроде все просто и правильно ПОСМОТРИТЕ ПОЖАЛСТА :wallbash:
Код:

Const  TypeBonus=6

Global Bonus=CreateCylinder()
EntityType Bonus,TypeBonus
PositionEntity Bonus,0,5,0

Function update_user()
If EntityCollided (user,TypeBonus) Then
PositionEntity Bonus,Rnd(-40,40),0,Rnd(-40,40)
 user_H=user_H+20
Function create_world()
Collisions USERT,TypeBonus,2,2


HolyDel 21.09.2007 01:16

Re: Создаём свой FPS (first person shooter)
 
user точно глобальная переменная?

AndruXa 21.09.2007 01:19

Re: Создаём свой FPS (first person shooter)
 
Global user
Насколько я вижу, да!
Bonus перемещается при столкновении, тока вот жизни от этого не прибавляется....

Crayzi 21.09.2007 02:52

Re: Создаём свой FPS (first person shooter)
 
Чёто мне ненравится в динамике после того что я поменял... я вот заметил, вернул я кусок той функции что отвечала за гравитацию, и лучше стает, но вот в чем проблемма, незнаю как отделатся от той гравитации на какой основан плавный прыжок, и получается что вроде и прыгаеш плавно, но невысоко и быстро падаеш, думал там гравитацию снизить так там приколы начинаются, ща буду думу думать :-D

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

Возвращается переделанный кусок кода какой я когдато удалял (вставлять в Function update_user() прям педер концом (перед End Function)):
Код:


pick_ent=LinePick(EntityX(user,1),EntityY(user,1),EntityZ(user,1),0,-3.6,0)
TranslateEntity user,0,user_vy#,0,True
If pick_ent
jumping=0
Else
jumping=1
user_vy#=user_vy#-G#*delta_t
EndIf

так же единовременно изменить то что было в "While Not KeyHit(1)=1", короче все что там было добавлено на:
Код:


If jumping=0
If KeyDown(57) Then user_vy#=jumpvel# jumping=1
EndIf
If jumping=1
user_vy#=user_vy#-gravity#
by#=by#+user_vy#
EndIf
If by#<1 Then jumping=0


Crayzi 21.09.2007 04:10

Re: Создаём свой FPS (first person shooter)
 
Вложений: 2
Долго разбирался что к чему, но всеже разобрался, бывает изза 1 ошибочки непримечательной пробуеш и так и сяк а нечё невыходит, ладно короче, я добавил задержку между выстрелами, теперь к
Код:

shot_S(0)\sprite=LoadSprite("sprite0.bmp")
HideEntity shot_S(0)\sprite
shot_S(0)\damage=45
shot_S(0)\max_dist=100
shot_S(0)\v=0.3
shot_S(0)\reload_time=2000
shot_S(0)\InCartridge=6
shot_S(0)\max=30

добавляем
Код:

shot_S(0)\shoot_delay=750
а к
Код:

shot_S(1)\sprite=LoadSprite("sprite1.bmp")
HideEntity shot_S(1)\sprite
shot_S(1)\damage=10
shot_S(1)\max_dist=1000
shot_S(1)\v=0.5
shot_S(1)\reload_time=1000
shot_S(1)\InCartridge=15
shot_S(1)\max=240

добавляем
Код:

shot_S(1)\shoot_delay=250
ну и если у кого есть
Код:

shot_S(2)\sprite=LoadSprite("sprite1.bmp")
HideEntity shot_S(2)\sprite
shot_S(2)\damage=100
shot_S(2)\max_dist=100
shot_S(2)\v=0.08
shot_S(2)\reload_time=4000
shot_S(2)\InCartridge=2
shot_S(2)\max=20

добавляем
Код:

shot_S(2)\shoot_delay=1000
Такс, далее в "Type SHOT_TYPE" добавляем еще 1 тип
Код:

Field shoot_delay
в "Type inventar" добавим 2 строчки(тоже типы походу):
Код:

Field shoot_delay_flag
Field last_shoot

далее, далее, далее добавим в функции "Function update_user()" в строку:
Код:

If MouseHit(1) And user_inv\InC[user_inv\current]<>0 And user_inv\reload_flag=False
еще одно условие: And user_inv\shoot_delay_flag=False
вытоге оно станет смотрется примерно так(я у себя условия местами перекрутил :-D ):
Код:

If MouseHit(1) And user_inv\InC[user_inv\current]<>0 And user_inv\shoot_delay_flag=False And user_inv\reload_flag=False
такс, далее добавим сразу 2 строки действий
Код:

user_inv\shoot_delay_flag=True
user_inv\last_shoot=MilliSecs()

вытоге эта If-ка станет сморется так:
Код:

If MouseHit(1) And user_inv\InC[user_inv\current]<>0 And user_inv\shoot_delay_flag=False And user_inv\reload_flag=False
    user_inv\shoot_delay_flag=True
    user_inv\last_shoot=MilliSecs()
  user_gun=FindChild(GUN,"END")
  create_shot(EntityX(user_gun,1),EntityY(user_gun,1),EntityZ(user_gun,1),EntityPitch(camera),EntityYaw(user),0,user_inv\current)
  user_inv\s[user_inv\current]=user_inv\s[user_inv\current]-1
  Change_H(user_b_xline,user_inv\s[user_inv\current])
  user_inv\InC[user_inv\current]=user_inv\InC[user_inv\current]-1
  Change_H(user_reload_xline,user_inv\InC[user_inv\current])
  ;
  If user_inv\current=0
  MoveEntity user,0,0,-1
  EndIf
 EndIf

сразу же после этого добавляем:
Код:

If MilliSecs()-user_inv\last_shoot>shot_S(user_inv\current)\shoot_delay And user_inv\shoot_delay_flag=True
user_inv\shoot_delay_flag=False
EndIf

вроде нечё незабыл, но на всяк пожарный выложу все свои переделки, мало ли что я там напутал.
Ща попробую бонусы прикрутить, мож что сам намучу :)

Crayzi 21.09.2007 04:38

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от AndruXa
Да и добавил вот код собирания бонусов, но чет не работает вроде все просто и правильно ПОСМОТРИТЕ ПОЖАЛСТА :wallbash:
Код:

Const  TypeBonus=6
 
Global Bonus=CreateCylinder()
EntityType Bonus,TypeBonus
PositionEntity Bonus,0,5,0
 
Function update_user()
If EntityCollided (user,TypeBonus) Then
PositionEntity Bonus,Rnd(-40,40),0,Rnd(-40,40)
 user_H=user_H+20
Function create_world()
Collisions USERT,TypeBonus,2,2


Я вроде впихнул код и у меня когда начинают тратится жизни и я беру бонус то жизни пополняются. Сейчас сделаю чтоб циферки жизней было всегда видно на полоске жизней.
Добавь в "While Not KeyHit(1)=1" после "RenderWorld()" вот это и будеш видеть сколько у тебя НР в единицах.
Код:

Color 255,215,0
Text 65,30,"HP : "+user_H,True,True


Crayzi 21.09.2007 04:41

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от Crystal
А я бы на вашем месте работу товарища имперсоналиса не трогал.
Он же вас не просил переделывать его работу.
Если такие умные напишите свой фпс тутор.
А лучше не фпс тутор, а какойнить другой ибо хватает этого тутора.

Ок, буду чёнить другое мутить... просто только начал понимать что к чему и нетерпелось сделать то что мне было дело непонравилось...

AndruXa 21.09.2007 16:53

Аналогично, я только учусь, позтому одной из основных стадий моего обучения было научиться разбираться в чужих кодах и уметь их редактировать. А с шагами реально лучше вам не кажется..........?
Да и бонус не помешал - бы

For Crayzi: А после чего ты вставил
Цитата:

If EntityCollided (user,TypeBonus) Then
PositionEntity Bonus,Rnd(-40,40),0,Rnd(-40,40)
user_H=user_H+20
В функции
уменя стоит в самом конце, может изза этого
А тот счетчик, даже, если я ничего не делаю, сам по себе растет огроменными темпами.
Кстати у тебя увеличивается только цыфры, или полоска тоже?

Crayzi 22.09.2007 02:35

Re: Мод FPS от impersonalis-a.
 
Цитата:

Сообщение от AndruXa
Аналогично, я только учусь, позтому одной из основных стадий моего обучения было научиться разбираться в чужих кодах и уметь их редактировать. А с шагами реально лучше вам не кажется..........?
Да и бонус не помешал - бы

For Crayzi: А после чего ты вставил
В функции
уменя стоит в самом конце, может изза этого
А тот счетчик, даже, если я ничего не делаю, сам по себе растет огроменными темпами.
Кстати у тебя увеличивается только цыфры, или полоска тоже?

Код:

If EntityCollided (user,TypeBonus) Then
PositionEntity Bonus,Rnd(-40,40),0,Rnd(-40,40)
user_H=user_H+20

я выставил в самом конце перед "End Function", насчет "счётчика" я те вот что скажу, я заметил такую фишку что когда жизни полные и ты береш бонус, то полоска не растет а жизней добавляется соответственно 20, если жизней больше 100, то при получении урона полоска остается полной, если жизней мало и ты взял бонус (или несколько бонусов) то полоска обновится только после выстрела бота. Да и неплохо бы добавить сразу после циферок НР еще и циферки сколько брони, чтобы потом легче было разобратся с бонусами для брони (хотя что там разбиратся, все делается по аналогии)
Код:

Text 190,30,"H0 : "+user_H0,True,True
И вообще, поменяй
Код:


Global Bonus=CreateCylinder()
EntityType Bonus,TypeBonus
PositionEntity Bonus,0,5,0

на
Код:

Global Bonus=CreateSphere()
ScaleEntity Bonus,0.2,0.4,0.2
texBonus=LoadTexture(".\pricel.bmp")
EntityTexture Bonus,texBonus
EntityType Bonus,TypeBonus
PositionEntity Bonus,Rnd(-40,40),2,Rnd(-40,40)

Так прикольнее будет. И поменяй позицию по Y после перестановки бонуса, ато у тебя выставлено что вначале он находится на высоте 5(я выстави на высоте 2), а потом на нуле, и вытоге он наполовину закопан в землю и его тяжело найти.

Вот думаю как бы сделать чтобы полоски с жизнями было видно над ботами... Покачто единственное чего я смог добится, это полоски над ботами зависящие от макс. количества их жизней, а далее пока что думаю, но решения ненаблюдаю, вот что сделал
добавил
Код:

Global bot_HP_line=LoadSprite("H.bmp")
потом в "Function create_bot(x#,y#,z#)" сразу после кода создания ориентира (Orient)добавил
Код:

B_HP_Line=CopyEntity(bot_HP_line)
 TurnEntity B_HP_Line,90,0,0
 EntityParent B_HP_Line,b\entity
 PositionEntity B_HP_Line,0,1.5,0
 ScaleSprite B_HP_Line,b\Survivability*0.01,0.1

так же в функцию "Function create_world()" добавил
Код:

HideEntity bot_HP_line
ScaleSprite bot_HP_line,0.8,0.1

Подскажите как привязать полоски с жизнями к текущему кол-ву НР ботов.

Horror 22.09.2007 10:56

Re: Мод FPS от impersonalis-a.
 
на мой взгляд игре не помешалбы улучшение графики
типо моделек анимированных
и текст покруче

H@NON 22.09.2007 12:24

Re: Мод FPS от impersonalis-a.
 
Рано, еще рано за графикку браться. Сперва геймплей. Вот напишешь движок , там дальше и за моделлинг( или как там это называется - создание 3д моделей=)) ) можно браться. Глядишь и игра новая появиться!. Так что сначало руку набей для программирования...

AndruXa 22.09.2007 15:56

Re: Мод FPS от impersonalis-a.
 
Crayzi, эту "фишку" легко исправить смотри страницу 2 этой темы!!!!! 1 сообщение
А все эти изменения предложенные тобой, оно конечно смотрится прикольно, но они лишь косметические
И как сказал H@NON
Цитата:

Рано, еще рано за графикку браться. Сперва геймплей.
А потом можно что ниль и получше сферы с текстурой в максе сварганить А пока движок и устранение багов............

impersonalis 22.09.2007 16:01

Re: Мод FPS от impersonalis-a.
 
Цитата:

If user_H >=100 then user_H<=100
это ещё круче твоего предыдущего
Цитата:

if visota1=0 then visota1=0

impersonalis 22.09.2007 16:02

Re: Мод FPS от impersonalis-a.
 
Цитата:

Подскажите как привязать полоски с жизнями к текущему кол-ву НР ботов.
не совсем понял вопрос.

AndruXa 22.09.2007 16:50

Re: Мод FPS от impersonalis-a.
 
Ха ха ха аш самому смешно :-D сморозил-же, а извеняюсь за тупость больше такого не повторится. Посидел подумал и придумал ВОТ:
Код:

Global per
Function update_user()
per=20
If user_H > 100  Then per=per-40
If user_H = 120 Then user_H = 100
If user_H = 110 Then user_H = 100
If EntityCollided (user,TypeBonus) Then PositionEntity Bonus,Rnd(-40,40),0,Rnd(-40,40)
If EntityCollided (user,TypeBonus) Then user_H=user_H + per

Во, поменяйте в ф-ции update_user()
Спасибо за замечание, ляпнул неподумав, но ведь я тольео учусь и учусь на своих ошибках, а не путем слизывания чужого кода:)

AndruXa 22.09.2007 16:51

Re: Мод FPS от impersonalis-a.
 
Кстати как сделать, зависимость полоски жизней от цифры, ато число жизней меняется, а полоска не хочет?

H@NON 22.09.2007 17:03

Re: Мод FPS от impersonalis-a.
 
число_жизней/100*общая_длина_полоски.

Как то так.

Crayzi 22.09.2007 21:35

Re: Мод FPS от impersonalis-a.
 
Цитата:

Сообщение от impersonalis
не совсем понял вопрос.

Короче я незнаю откуда взять текущее количество жизней ботов, я нащел только их базовое количество... Сейчас еще посморю код, мож что прийдет в голову хорошего... Вот смотрю как в "Function update_shot()" пули колизеятся и отнимают у ботов НР и думаю... думаю... ща мож что надумаю... Неа, ненадумал, пощел я шарится по форуму, мож где найду чтото подобное.

Crayzi 22.09.2007 21:49

Re: Мод FPS от impersonalis-a.
 
Цитата:

Сообщение от AndruXa
Кстати как сделать, зависимость полоски жизней от цифры, ато число жизней меняется, а полоска не хочет?

Про какую именно говориш, про ту что я навешал над ботами или про игрока? Кстати насчет бонуса, опять ты его в землю закапуеш после того как подобрал (изначально он у тебя появляется на определенной высоте, я видел ты выставил, а терь он у тя появляется на высоте по Y=0. Насчет того что я свой бонус чуток переделал на вид, то только временно, я думал сделать крутящуюся красноватую бутылку из сферы и цилиндра, но чёто цилиндр к сфере нехочет привязыватся, вроде все правильно делал, ну это проехали... И еще, думаю стоит сделать так чтобы бонусом можно было набрать 200 жизней, ато использовать бонус как аптечку както неприкольно. И сделаю чуток по другому, ато у меня идея как получше реализовать "непривышение максимума жизней"(который я сделаю равным 200).
Вот как я это реализовал:
Добавил
Код:

Global user_H_max
потом поставил после функций создания бонуса
Код:

user_H_max=200
потом в "Function update_user()" после
Код:

If EntityCollided (user,TypeBonus) Then
PositionEntity Bonus,Rnd(-40,40),2,Rnd(-40,40)
 user_H=user_H+20
EndIf

добавил
Код:

If user_H>200 Then
user_H=user_H_max
EndIf

и теперь можно насобирать максимум 200 НР.

Crayzi 23.09.2007 03:54

Re: Мод FPS от impersonalis-a.
 
Вложений: 2
Еще несколько простеньких но неплохо улучшающих играбильность добавлений:
1. добавлены бонусы брони (+ 15 ед. брони за каждый подобранный бонус)
Появляется еще одна константа(Const)
Код:

Const TypeBonus_sheyd=7
и глобальная переменная в которой указано максимально допустимое значение брони
Код:

Global user_sheyd_max=300
(p.s. Да кстати пока не забыл, можно убрать "user_HP_max=200" и дописать к уже существующему "Global user_HP_max" =200, будет смотрется "Global user_HP_max=200".)

так же создаем собственно бонус к броне какой надо будет "подбирать"
p.s. там я использовал новую картинку (просьба не пинать, это не окончательное оформление, а просто чтобы лучше смотрелось в первое время, картинку выложу в конце сообщения)
Код:

Global Bonus_sheyd=CreateSphere()
ScaleEntity Bonus_sheyd,0.2,0.4,0.2
texBonus_sheyd=LoadTexture(".\Tex_enerji_1.bmp")
EntityTexture Bonus_sheyd,texBonus_sheyd
EntityType Bonus_sheyd,TypeBonus_sheyd
PositionEntity Bonus_sheyd,Rnd(-40,40),2,Rnd(-40,40)

далее в функцию "Function create_world()" дописываем колизею нашего бонуса с User`ом
Код:

Collisions USERT,TypeBonus_sheyd,2,2
далее добавляем в "Function update_user()" еще одно действие или как это назвать, If`ку короче :)
Код:

If EntityCollided (user,TypeBonus_sheyd) Then
PositionEntity Bonus_sheyd,Rnd(-40,40),2,Rnd(-40,40)
 user_H0=user_H0+15
EndIf
If user_H0>300 Then
 user_H0=user_sheyd_max
EndIf

Вроде как ничего незабыл, тогда приступаем к дополнению №2.
Здесь я сделал аш 3 доп. бонуса параллельно :-D, первый добавляет 6 зарядов к дробовику (первому оружию), второй добавляет 30 зарядов к "пукалке" (второе оружие), третий добавляет 2 заряда к (хмм, ну пусть будет базука, чёто мне так хочется, знач надо будет позже попарится над взрывом, дамагом по области, траэкторией полета заряда чтоли, но то позже) "базуке".
Вот и дополнения:
добавляем константу, я сказал констану? я хотел сказать константы, их аш 3
Код:

Const TypeBonus_ammo_0=8
Const TypeBonus_ammo_1=9
Const TypeBonus_ammo_2=10

вначале сделал по другому но потом дошло что можноиспользовать уже имеющиеся поля, значит так, изменяем максимальное количество зарядов для оружий, теперь у нас:
Код:

shot_S(0)\max=60
 
shot_S(1)\max=480
 
shot_S(2)\max=40

поехали дальше, задаем коллизеи (в функции "Function create_world()") для соответствующих типов зарядов:
Код:

Collisions USERT,TypeBonus_ammo_0,2,2
 
 Collisions USERT,TypeBonus_ammo_1,2,2
 
 Collisions USERT,TypeBonus_ammo_2,2,2

Ну и наконец вписуем в функцию "Function update_user()" следующее:
Код:

If EntityCollided (user,TypeBonus_ammo_0) Then
PositionEntity Bonus_ammo_0,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[0]=user_inv\s[0]+6
EndIf
If user_inv\s[0]>shot_S(0)\max Then
user_inv\s[0]=shot_S(0)\max
EndIf
 
If EntityCollided (user,TypeBonus_ammo_1) Then
PositionEntity Bonus_ammo_1,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[1]=user_inv\s[1]+30
EndIf
If user_inv\s[1]>shot_S(1)\max Then
user_inv\s[1]=shot_S(1)\max
EndIf
 
If EntityCollided (user,TypeBonus_ammo_2) Then
PositionEntity Bonus_ammo_2,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[2]=user_inv\s[2]+2
EndIf
If user_inv\s[2]>shot_S(2)\max Then
user_inv\s[2]=shot_S(2)\max
EndIf

А, чуть незабыл, надо же видеть сколько же у нас всетаки зарядов в наличии, в функцию "While Not KeyHit(1)=1" после "RenderWorld()" добавьте вот это:
Код:

Color 0,0,175
Text 350,20,"B_0 : "+user_inv\s[0],True,True
Text 500,20,"B_1 : "+user_inv\s[1],True,True
Text 650,20,"B_2 : "+user_inv\s[2],True,True

теперь даже прикольно побегать в погоне за бонусами :-D, всетаки клевую идею AndruXa подкинул, ну а я е чуток дополнил:-D. Единственное огорчает, доси непонял как работать с жизнями ботов, да и не только жизнями...
Сам же делаю замечание к "проэкту", какаято местность плосковатая :dontknow:, надо чёнить придумать, ато бегаеш как по какомуто полигону где вот вот будут проводить испытания новой атомной бомбы, эх, это опять чтото с формулами гравитации/прыжка надо будет мухлевать...

impersonalis 23.09.2007 04:11

Re: Мод FPS от impersonalis-a.
 
Вы хоть выкладывайте ап-ы кода

Crayzi 23.09.2007 05:29

Re: Мод FPS от impersonalis-a.
 
Вложений: 3
Цитата:

Сообщение от impersonalis
Вы хоть выкладывайте ап-ы кода

Ты имееш в виду, изредка прикреплять целиком файл кода? Ну сейчас выложу.
Здесь все вышеописанные изменения кроме "реалистичных шагов" от "AndruXa".
P.s. Решил поэкономить место и перезалил просто файл кода + пару доп. картинок какие буду использовать в последствие, остальные нужные файлы имеются в выложенных ранее архивах.

AndruXa 24.09.2007 13:27

To impersonalis Подскажи пожалста все переменные, которые отвечают за перемещение каких-нить объектов. Ато пишу замедление игры когда жизней меньше 10 + эффект размытой, красной камеры. Неохота разбираться самому в таком объемном коде ~1000 строк. А для тебя это все родное!!!! Кстати можно сделать эффект замедления без уменьшения скорости перемещения всех объектов??? может как-нить через тамер чтоли????????

Цитата:

Сообщение от AndruXa
Кстати как сделать, зависимость полоски жизней от цифры, ато число жизней меняется, а полоска не хочет?
Цитата:

Про какую именно говориш, про ту что я навешал над ботами или про игрока?
Я имею ввиду полоску жизней игрока. Когда подбираеш бонус число жизней увеличивается, а полоска нет, пока бот в тебя не пальнет. Я хочу сделать прямую зависимость полоски от числа.

dimanche13 24.09.2007 13:34

Re: Мод FPS от impersonalis-a.
 
Цитата:

Сообщение от AndruXa
Неохота разбираться самому в таком объемном коде ~1000 строк.

прикольно! и ты еще хочешь что-то МОДифицировать? Надо самому все узнать, чтобы каждая строчка стала родная, как у импера. :crazy:
Совет: напротив каждой строки делай коммент,что она делает, так и поймешь... конечно не сразу. Но совесть будет чиста, хоть попытался бы что-то понять.
Про полоску жизни, читай статью в известном журнале.

С уважением

AndruXa 24.09.2007 15:43

Re: Мод FPS от impersonalis-a.
 
Цитата:

прикольно! и ты еще хочешь что-то МОДифицировать? Надо самому все узнать, чтобы каждая строчка стала родная, как у импера.
Совет: напротив каждой строки делай коммент,что она делает, так и поймешь... конечно не сразу. Но совесть будет чиста, хоть попытался бы что-то понять.
Про полоску жизни, читай статью в известном журнале.
Я уже добавил более 300 строк, и комменты делал, только чето сейчас путаюсь не только в коде, но и в комментах:4to: так как мечты большие, а опыта маловато. В Глобале около 80 переменных, со своими то я разобрался, а вот с impersonalista уже жесткого диска в голове не хватает. Вот я и решил спросить у него самого, чтобы он перечислил переменные, если конечно не трудно. P.S. первый раз работаю с таким кол-вом текста, до этого максималка было 250 строк. Даже боюсь представлять что бывает в голове у програмистов профессионалов, пишущих проекты класса А 200 000 строк :4to:

Crayzi 25.09.2007 03:45

Re: Мод FPS от impersonalis-a.
 
Цитата:

Сообщение от AndruXa
Я имею ввиду полоску жизней игрока. Когда подбираеш бонус число жизней увеличивается, а полоска нет, пока бот в тебя не пальнет. Я хочу сделать прямую зависимость полоски от числа.

Щас напишу коечто что поидее исправит сею проблемму.
Ну покачто временно решил сделать по подобию того как после попадения пули в игрока оно обновлялось.(сделал пока что для НР и для НО, точнее не сделал а методом копи/пасте дополнил действия при подбирании бонуса)
на строку ниже после "user_H=user_H+20" (это у нас в "упдате юзер" если помните) добавь
Код:

Change_H(user_xline,user_H)
аналогичто на строку ниже после "user_H0=user_H0+15" добавь
Код:

Change_H(user_xline0,user_H0)
.

Так же где нибудь в начале "Function update_user()" добавь
Код:

Change_H(user_b_xline,user_inv\s[user_inv\current])
(эта строчка при старте игры обновит полоску боеприпасов, чтобы она сразу отображалась корректно, ато если изначально боезапас неполон то она отображается не корректно до первого выстрела.)

Ща еще пару сек и сделаю чтобы когда подбираеш бонус дающий пули то полоска означающая их максимум сразуже "пополнялась".
тэкс, короче так, в функции "Function update_user()" надо добавить еще 3 одинаковые строчки в 3 ифки подбирания бонуса к зарядам.
Вот это
"Change_H(user_b_xline,user_inv\s[user_inv\current])"
добавь в
Код:

If EntityCollided (user,TypeBonus_ammo_0) Then
PositionEntity Bonus_ammo_0,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[0]=user_inv\s[0]+6
EndIf
If user_inv\s[0]>shot_S(0)\max Then
user_inv\s[0]=shot_S(0)\max
EndIf

получится вот так:
Код:

If EntityCollided (user,TypeBonus_ammo_0) Then
PositionEntity Bonus_ammo_0,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[0]=user_inv\s[0]+6
;вот оно-
Change_H(user_b_xline,user_inv\s[user_inv\current])
;--------
EndIf
If user_inv\s[0]>shot_S(0)\max Then
user_inv\s[0]=shot_S(0)\max
EndIf


далее в
Код:

If EntityCollided (user,TypeBonus_ammo_1) Then
PositionEntity Bonus_ammo_1,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[1]=user_inv\s[1]+30
EndIf
If user_inv\s[1]>shot_S(1)\max Then
user_inv\s[1]=shot_S(1)\max
EndIf

будет сморется вот так:
Код:


If EntityCollided (user,TypeBonus_ammo_1) Then
PositionEntity Bonus_ammo_1,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[1]=user_inv\s[1]+30
;-----------
Change_H(user_b_xline,user_inv\s[user_inv\current])
;-----------
EndIf
If user_inv\s[1]>shot_S(1)\max Then
user_inv\s[1]=shot_S(1)\max
EndIf

и последнее
Код:

If EntityCollided (user,TypeBonus_ammo_2) Then
PositionEntity Bonus_ammo_2,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[2]=user_inv\s[2]+2
EndIf
If user_inv\s[2]>shot_S(2)\max Then
user_inv\s[2]=shot_S(2)\max
EndIf

станет выглядеть так:
Код:

If EntityCollided (user,TypeBonus_ammo_2) Then
PositionEntity Bonus_ammo_2,Rnd(-40,40),2,Rnd(-40,40)
user_inv\s[2]=user_inv\s[2]+2
Change_H(user_b_xline,user_inv\s[user_inv\current])
EndIf
If user_inv\s[2]>shot_S(2)\max Then
user_inv\s[2]=shot_S(2)\max
EndIf

Вот с чем я доси неразобрался, так это как к текущим НР ботов попривязывать полоски их НР...

Добавлено(1):
Щас будем сносить тот недо-прыжок какой я сделал ранее (там было слишком много нерабочего, и он был сам по себе какойто не такой) и ставить тот какой я сделал из прыжка impersonalis.
1. Такс короче добавляем новую константу:
Код:

Const jumpvel#=.003
2. Удаляем:
Код:

gravity#=.01
jumpvel#=.3

3. Удаляем в "Function update_user()":
Код:

pick_ent=LinePick(EntityX(user,1),EntityY(user,1),EntityZ(user,1),0,-3.6,0)
 TranslateEntity user,0,user_vy#*delta_t,0,True
 If pick_ent
 jumping=0
 Else
    jumping=1
  user_vy#=user_vy#-G#*delta_t
 EndIf


4. Добавляем вместо того что удалили вот это:
Код:

pick_ent=LinePick(EntityX(user,1),EntityY(user,1),EntityZ(user,1),0,-3.6,0)
 TranslateEntity user,0,user_vy#*delta_t,0,True
 
 
If pick_ent
  jump_bool=False
 
 Else
  jump_bool=True
  user_vy#=user_vy#-G#*delta_t;
 EndIf

Код:

If KeyHit(57) And jump_bool=False Then user_vy#=jumpvel#*delta_t jump_bool=True
5. Удаляем в "While Not KeyHit(1)=1":
Код:

If jumping=0
 If KeyDown(57) Then user_vy#=jumpvel# jumping=1
EndIf
If jumping=1
 user_vy#=user_vy#-gravity#*delta_t
 by#=by#+user_vy#
EndIf
If by#<1 Then jumping=0

6. Любуемся нормальным кодом (без лишних кусочков раскиданных повсюду) и плавным прыжком.
Добавлено(2): Ща чудю, мудрю, хочу сделать так чтобы был смысл игры, допустим, надо будет собирать определенный бонус за который будут давать очки, набрав определенное количество очков вы выигруете. Вот думаю, сделать чтоль чтото типо сложности игры, токо это надо делать кнопки... но всеравно ведь до кнопок дело дойдет... пока что сделаю только бонус, и реген НР тож сделаю, будет 1 НР раз в 2.5 сек, но после пополнения до 100 реген отключится.
Тэкс, щас добавим регенерацию.
1. Добавляем новую константу какая будет отвечать за промежуток времени между восстановлением НР:
Код:

Const regen_HP_time=2500
2. Добавляем новую глобальную переменную какая будет содержать число восстанавливаемых жизней:
Код:

Global user_H_regen=1
3. В "Type inventar" добавим еще 2 строчки:
Код:

Field regen_HP_Flag
 Field last_regen_HP_time

4. В "Function update_user()" добавим перед "End Function"(дабы избежать путаници):
Код:

If user_inv\regen_HP_Flag=False And user_H>0 And user_H<100 Then
user_inv\Regen_HP_flag=True
user_H=user_H+user_H_regen
user_inv\last_regen_HP_time=MilliSecs()
Change_H(user_xline,user_H)
EndIf
If MilliSecs()-user_inv\last_regen_HP_time>regen_HP_time And user_inv\Regen_HP_flag=True Then
user_inv\Regen_HP_flag=False
EndIf

5. Смотрим что у нас получилось, для этого потеряйте в бою какоенибудь количество НР(чтобы было менее 100) и убегите от ботов.

Crayzi 26.09.2007 06:11

Re: Мод FPS от impersonalis-a.
 
Вложений: 2
Пока что думаю, как бы получше сделать набирание очков, и при каком их количестве выдавать победу.
~1-1.5 часа спустя:
Фух, сделал условия победы и поражения(высветится обычная надпись типо "You Win" или "You Dead", позже сделаю блокировку стрельбы, перемещения и т. д., и возможность начать заново), добавил кубик который надо подбирать, после "подбирания" он перемещается в рандомное место, при этом вам добавляется 1 очко (Score), когда количество очков будет равно 30, вы выиграли, если количество ваших НР равно 0 то вы проиграли. Короч мож еще что добавил, хз... Уже почти несоображаю, спать хо...
П.с. Долгое ща будет описание чаво и куда добавить...
1. Добавьте пару глобальных переменных, первые 2 со значками доллара на конце рассчитаны для хранения текстовых данных, они у нас будут отвечать за текст "You Win" и "You Dead"б Третья глобальная переменная у нас(Score) для хранения данных о количестве набранных очков:
Код:

Global Win$
Global Dead$
Global Score=0

2. ВОт еще добавляем пару констант, первая у нас будет "порогом" количества очко (Score) нужного для выиграша, вторая понадобится для того чтобы сделать коллизион этого бонуса с игроком:
Код:

Const Win_qantiti_score=30
Const Type_Smoll_score=11

3. Этот кусочек кода отвечает за создание кубика, придание ему размера, присвоение этому кубику типа, по которому его потом можно будет "колизеить" и размещение его в случайном месте:
Код:


Global Smoll_score=CreateCube()
ScaleEntity Smoll_score,0.5,0.5,0.5
EntityType Smoll_score,Type_Smoll_score
PositionEntity Smoll_score,Rnd(-40,40),2,Rnd(-40,40)

4. В функцию "Function update_user()" добавим кусочек кода отвечающий за проверку, произошла ли колизея юзера с типом бонуса отвечающего за Score, если коллизея произошла, то +1 к Score и переместить скоре в случайное место:
Код:

If EntityCollided (user,Type_Smoll_score) Then
PositionEntity Smoll_score,Rnd(-40,40),2,Rnd(-40,40)
Score=Score+1
EndIf

5. В функцию "Function create_world()", а это отвечает за колизею типа (Type) игрока(USERT) с типом бонуса отвечающего за Score(Type_Smoll_Score):
Код:


Collisions USERT,Type_Smoll_score,2,2

6. В функцию "While Not KeyHit(1)=1"(в самом начале) добавим условия победы и поражения, 1. - если количество очков (Score) равно значению которое занесено в константе (постоянной) "Win_qantiti_score"(а там у нас 30) и DeadT=0 тогда добавить в переменную "Win$" текст "You Win". 2. Если жизни игрока меньше или равны нулю, тогда переменную "DeadT" равна 1, а в переменную "Dead$" дописуем "You Dead". 3. Tckb ;если жизни игрока меньше 0, тогда прировнять их к 0. 4. Если количество очков больше максимума то приравнять к максимуму.:
Код:

;1.
If Score=Win_qantiti_score And DeadT=0 Then
Win$="You Win"
EndIf
;2.
If user_H<=0
DeadT=1
Dead$="You Dead"
EndIf
;3.
If user_H<0
 user_H=0
EndIf
4.If Score>Win_qantiti_score
Score=Win_qantiti_score
EndIf

7. Между "RenderWorld()" (все в той же функции "While Not KeyHit(1)=1") и Flip добавляем оператор "Text" далее пишем позицию выведения текста, далее в ковычках вписуем "Score :", эта надпись будет у нас перед циферкой количества очков какие набрал игрок, сразуже после той надписи добавляем +Score, это у нас будут сами очки (циферка) потом 2 раза прописуем True тобес - Правда. 2. делает тоже самое, только выводит на экран значёк "/" и цифру максимального количества очков нужных для выиграша. 3. Меняем цвет текста какой будем выводить далее. 4. Добавляем оператор кода "Text", выбираем координаты куда разместить текст, и "говорим" что текстом у нас будет переменная Win$. 5. Опять меняем цвет текста какой будем высвечивать далее. 6. Здесь тоже вписуем оператор текст, координаты задаем (я задал те же что и при высвечивании победы) и говорим что тут у нас будет надпись находящаяся в переменной Dead$:
Код:

1.
Text 130,60,"Score : "+Score,True,True
2.
Text 210,60,"/ "+Win_qantiti_score,True,True
3.
Color 0,255,0
4.
Text 450,60,Win$,True,True
5.
Color 255,0,0
6.
Text 450,60,Dead$,True,True

Вроде усе.
На всяк пожарный выкладую ап кода(П.с, тута чучуть изменена стрельба, думаю нечё особенного я там не сделал так что описывать смысла нет).

dimanche13 26.09.2007 11:52

Re: Мод FPS от impersonalis-a.
 
Всё отлично, но ты бы давал маленькие объяснения к коду, а еще очень напрягают слова впихните, запихайте, всуньте...

Crayzi 26.09.2007 14:26

Re: Мод FPS от impersonalis-a.
 
Цитата:

Сообщение от dimanche13
Всё отлично, но ты бы давал маленькие объяснения к коду, а еще очень напрягают слова впихните, запихайте, всуньте...

Сейчас попробую описать, я просто писал уже сонный как хз кто, и мне было лиж бы написать. Все, описал, так пойдет?


Часовой пояс GMT +4, время: 12:11.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot