diff --git a/src/mobs.pas b/src/mobs.pas
index 95815db35f60c894ba81fd5da88288eb5f65968a..72f062f21fdb2df6c94774f8f4a9304d81b6a7eb 100644 (file)
--- a/src/mobs.pas
+++ b/src/mobs.pas
procedure freeSkin;//Выгрузка текстур\r
\r
implementation\r
procedure freeSkin;//Выгрузка текстур\r
\r
implementation\r
- uses phy, player, canvas, func;\r
+ uses phy, player, canvas, jsr75i, func;\r
const\r
MAX_MOBS=31;\r
MAX_ANIMREG=3;\r
const\r
MAX_MOBS=31;\r
MAX_ANIMREG=3;\r
setPosi(1, i);\r
end;\r
\r
setPosi(1, i);\r
end;\r
\r
- function testSolid(i, vector:integer):boolean;\r
+ function testSolid(i, vector : integer) : boolean;\r
var\r
var\r
- x, y:integer;\r
+ x, y : integer;\r
begin\r
begin\r
- y:=((getY(i)+getH(i)))/16-1;\r
+ y := (getY(i) + getH(i)) / 16 - 1;\r
\r
\r
- if vector<0 then\r
- begin\r
- x:=(getX(i)/16)-1;\r
- end;\r
- else\r
- if vector>0 then\r
- begin\r
- x:=((getX(i)+getW(i))/16){+1};\r
- end;\r
+ if vector > 0 then\r
+ x := (getX(i) + getW(i) / 2 + 16 / 2) / 16;\r
else\r
else\r
- x:=((getX(i)+getW(i)/2)/16);\r
+ x := (getX(i) + getW(i) / 2 - 16 / 2) / 16;\r
\r
\r
- testSolid:=phy.isSolid(x, y, getVX(i), getVY(i));\r
+ testSolid := phy.isSolid(x, y, getVX(i), getVY(i));\r
end;\r
\r
end;\r
\r
- procedure updateZloyAiAnim(i:integer);\r
+ function collideWithPlayer(i : integer) : boolean;\r
+ begin\r
+ collideWithPlayer := CollTwoObj(getX(i), getY(i), getW(i), getH(i), player.getX, player.getY, player.getW, player.getH);\r
+ end;\r
+\r
+ function canBite(i : integer) : boolean;\r
+ begin\r
+ canBite := collideWithPlayer(i);\r
+ end;\r
+\r
+ procedure updateZloyAiAnim(i : integer);\r
const\r
DEL=1;\r
var\r
const\r
DEL=1;\r
var\r
mob_anim[i, 3]:=a_f;\r
end;\r
\r
mob_anim[i, 3]:=a_f;\r
end;\r
\r
- procedure updateZloyAi(i:integer);\r
+ procedure updateZloyAi(i : integer);\r
+ var\r
+ vector : integer;\r
begin\r
begin\r
- if player.getX<getX(i) then\r
+ if player.getX < getX(i) then\r
begin\r
goLeft(i);\r
begin\r
goLeft(i);\r
- updateZloyAiAnim(i);\r
- if testSolid(i, -1) then\r
- goUp(i);\r
- end;\r
- else\r
- if player.getX>getX(i) then\r
- begin\r
- goRight(i);\r
- updateZloyAiAnim(i);\r
- if testSolid(i, 1) then\r
- goUp(i);\r
+ vector := -1;\r
end;\r
end;\r
+ else if player.getX > getX(i) then\r
+ begin\r
+ goRight(i);\r
+ vector := 1;\r
+ end;\r
+\r
+ if vector <> 0 then\r
+ begin\r
+ updateZloyAiAnim(i);\r
+ if testSolid(i, vector) then\r
+ goUp(i);\r
+ end;\r
+\r
+ if collideWithPlayer(i) then\r
+ player.biteIt(1, vector);\r
end;\r
\r
end;\r
\r
- procedure update;//Обновление логики\r
+ procedure update;\r
var\r
i, _type, ai:integer;\r
begin\r
var\r
i, _type, ai:integer;\r
begin\r
end;\r
end;\r
\r
end;\r
end;\r
\r
- procedure saveData;//Сохранение всех данных\r
- begin\r
-\r
+ procedure saveData;\r
+ var\r
+ i, j : integer;\r
+ begin\r
+ for i := 0 to MAX_MOBS do\r
+ begin\r
+ write_byte(mob_type[i]);\r
+ writeint(mob_x[i]);\r
+ writeint(mob_y[i]);\r
+ writeint(mob_vx[i]);\r
+ writeint(mob_vy[i]);\r
+ write_byte(mob_posi[i]);\r
+ writeint(mob_hp[i]);\r
+ writebool(mob_jmp[i]);\r
+ for j := 0 to MAX_ANIMREG do\r
+ write_byte(mob_anim[i, j]);\r
+ end;\r
end;\r
\r
procedure loadData;//Загрузка всех данных\r
end;\r
\r
procedure loadData;//Загрузка всех данных\r
- begin\r
-\r
+ var\r
+ i, j : integer;\r
+ begin\r
+ for i := 0 to MAX_MOBS do\r
+ begin\r
+ mob_type[i] := read_byte;\r
+ mob_x[i] := readint;\r
+ mob_y[i] := readint;\r
+ mob_vx[i] := readint;\r
+ mob_vy[i] := readint;\r
+ mob_posi[i] := read_byte;\r
+ mob_hp[i] := readint;\r
+ mob_jmp[i] := readbool;\r
+ for j := 0 to MAX_ANIMREG do\r
+ mob_anim[i, j] := read_byte;\r
+ end;\r
end;\r
\r
procedure resetData;//Сброс всех данных\r
end;\r
\r
procedure resetData;//Сброс всех данных\r
- var\r
- i, j:integer;\r
- begin\r
- for i:=0 to MAX_MOBS do\r
- begin\r
- mob_type[i]:=M_NONE;\r
- mob_x[i]:=0;\r
- mob_y[i]:=0;\r
- mob_vx[i]:=0;\r
- mob_vy[i]:=0;\r
- mob_posi[i]:=0;\r
- mob_hp[i]:=0;\r
- mob_jmp[i]:=false;\r
- for j:=0 to MAX_ANIMREG do\r
- mob_anim[i, j]:=0;\r
- end;\r
+ var\r
+ i, j:integer;\r
+ begin\r
+ for i := 0 to MAX_MOBS do\r
+ begin\r
+ mob_type[i]:=M_NONE;\r
+ mob_x[i]:=0;\r
+ mob_y[i]:=0;\r
+ mob_vx[i]:=0;\r
+ mob_vy[i]:=0;\r
+ mob_posi[i]:=0;\r
+ mob_hp[i]:=0;\r
+ mob_jmp[i]:=false;\r
+ for j := 0 to MAX_ANIMREG do\r
+ mob_anim[i, j]:=0;\r
+ end;\r
end;\r
\r
initialization\r
end;\r
\r
initialization\r