Код запустить не получилось, т.к. нет медии твоей.
Несколько слов всё же скажу.
Вот есть полёт снарядов:
Function UpdateEnemyBullet(ex_bul_en.T_bullet_en)
ex_bul_en\time = ex_bul_en\time-1
MoveEntity ex_bul_en\ent,0,0,1
If ex_bul_en\time<=0 Or EntityCollided(ex_bul_en\ent,TYPE_WALL) Or EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
FreeEntity ex_bul_en\ent
Delete ex_bul_en
Return
EndIf
If EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
health=health-5
EndIf
End Function
Есть две проверки на коллизию с игроком, причём после первой пуля удаляется. А потом та же пуля снова участвует в проверке. Вряд ли так ты отнимешь жизни игрока.
Ещё есть в главном цикле обновление врагов:
;--enemy`s movement--;
UpdateEnemy(ex_en.T_enemy)
;--enemy`s movement--;
И сама функция:
Function UpdateEnemy(ex_en.T_enemy)
For ex_en.T_enemy = Each T_enemy
PointEntity ex_en\ent,player
TurnEntity ex_en\ent,0,181.5,0
Next
End Function
И что же ты туда передаёшь за экземпляр типа такой с именем
ex_en?
У тебя эта переменная нигде не объявлена, но используется во многих местах. Я думаю что проблема как раз в этой переменной.
Не передавай ничего в функцию UpdateEnemy().
Хоть это и блиц, но использовать конструкцию [
Local имя_переменной] желательно.
Например вот тут что хранит ex_en?
Function CreateEnemyBullet.T_bullet_en()
ex_bul_en.T_bullet_en = New T_bullet_en
ex_bul_en\time = 150
ex_bul_en\ent = CopyEntity(shot_en1,ex_en)
RotateEntity ex_bul_en\ent,0,180,0
PositionEntity ex_bul_en\ent,-3.5,-1.5,-3
EntityParent ex_bul_en\ent,0
Return ex_bul_en
End Function
Пройди поиском по коду и увидишь, что ты её используешь сначала как
ex_en.T_enemy а потом как
числовой parent в ex_bul_en\ent = CopyEntity(shot_en1,ex_en). Т.к. область видимости разная, тебе это сходит с рук.
Можешь заменить внутри функций эту переменную на другую, или перед циклом
For ex_en.T_enemy = Each T_enemy ......
написать
Local ex_en.T_enemy
и далее твой цикл с перебором врагов.