DEADSOFTWARE

Fix furnace and mob data save
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Wed, 8 Mar 2017 15:44:58 +0000 (18:44 +0300)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Wed, 8 Mar 2017 15:44:58 +0000 (18:44 +0300)
BUGS
res/blocks.cfg
run.sh
src/CAVE.mpsrc
src/furnace.mpsrc
src/items_logic.mpsrc
src/mobs.pas

diff --git a/BUGS b/BUGS
index c923d054ff4b941b54ca6b2ccbe1421852050ea3..f3fcc01d1fe0ef61258f3329b2fd2cd31ae60c9f 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -14,7 +14,7 @@
 В бете 8 была поддержка звука, надо вернуть.
 Запилить загрузку старых сохранений (см. cavecraft forever)
 + Софтклавиши для переключения предметов на ремне перепутаны
 В бете 8 была поддержка звука, надо вернуть.
 Запилить загрузку старых сохранений (см. cavecraft forever)
 + Софтклавиши для переключения предметов на ремне перепутаны
-Печи не сохраняются и не загружаются (не забыть инкрементировать версию формата карт)
++ Печи и мобы не сохраняются и не загружаются (не забыть инкрементировать версию формата карт)
 При создании мира с сундуком, оный может висеть в воздухе
 + Зависание при попытке листать пустой список сохранений
 Иногда вместо травы генерируется грязь.
 При создании мира с сундуком, оный может висеть в воздухе
 + Зависание при попытке листать пустой список сохранений
 Иногда вместо травы генерируется грязь.
 Уголь встречается на поверхности реже чем железо
 Починит установку блока при прыжке
 Перепроверить рост деревьев
 Уголь встречается на поверхности реже чем железо
 Починит установку блока при прыжке
 Перепроверить рост деревьев
-Печь не светится когда работает
+Печь не светится когда работает
 Потеря контрастности при малом количестве источников света 
 Слишком много золота
 Курсор на ремне должен быть чётче
 Один уголь выплавляет 7 предметов, хотя должно быть 8
 По лестнице можно лезть даже если она стоит выше игрока
 Потеря контрастности при малом количестве источников света 
 Слишком много золота
 Курсор на ремне должен быть чётче
 Один уголь выплавляет 7 предметов, хотя должно быть 8
 По лестнице можно лезть даже если она стоит выше игрока
-Золото не переплавляется
 + Игрок возраждается в точке своей смерти, вместо точки спавна
 + От больших грибов больно уж чорные тени. У тыкв тоже надо поправить.
 + Игрок возраждается в точке своей смерти, вместо точки спавна
 + От больших грибов больно уж чорные тени. У тыкв тоже надо поправить.
+После удаления всех сохранений кнопки остаются на вид активными
index 6a55e7d3d7fce7ae246ec30aacf1c49bde7184e0..3266e81729bf76d0baf5e75219196cef72a5450c 100644 (file)
@@ -2,7 +2,7 @@
 ;Все описанные здесь блоки могут отображаться на карте.\r
 \r
 ;Устанавливаем количество блоков\r
 ;Все описанные здесь блоки могут отображаться на карте.\r
 \r
 ;Устанавливаем количество блоков\r
-RESET_BLOCKS 124\r
+RESET_BLOCKS 125\r
 \r
 ;Описание команды установки блока:\r
 ;SET_BLOCK [id] [tex] [hp] [coll] [tool] [lvl] [flags] [tr] [li]\r
 \r
 ;Описание команды установки блока:\r
 ;SET_BLOCK [id] [tex] [hp] [coll] [tool] [lvl] [flags] [tr] [li]\r
@@ -247,4 +247,5 @@ SET_BLOCK 122 138 1 0 0 0 b101 0 0
 SET_BLOCK 123 139 1 0 0 0 b101 0 0\r
 ;Стебель тыквы\r
 SET_BLOCK 124 139 1 0 0 0 b101 0 0\r
 SET_BLOCK 123 139 1 0 0 0 b101 0 0\r
 ;Стебель тыквы\r
 SET_BLOCK 124 139 1 0 0 0 b101 0 0\r
-\r
+;Горящая печь\r
+SET_BLOCK 125 134 40 0 3 0 b000 0 15\r
diff --git a/run.sh b/run.sh
index 10d7f13785583ee7969f2b4af53ae78363a3e643..91e2a1b912b78191cf90894e68e6e55617f1208a 100755 (executable)
--- a/run.sh
+++ b/run.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
 #!/bin/sh
 
-F="c:;fs/c;e:;fs/e"
+F="c:;fs/c"
 
 mkdir -p fs/c fs/e
 # exec java -Dfileconn.dir.memorycard="file:///c:/" -jar pstros.jar bin.jar -w176 -h208 -s2 -fc="$F"
 
 mkdir -p fs/c fs/e
 # exec java -Dfileconn.dir.memorycard="file:///c:/" -jar pstros.jar bin.jar -w176 -h208 -s2 -fc="$F"
index 90a1f780f4e51db2589efa885705eba93d71e0d2..6de766ba1a2b5bb5536d231afc86dd059fc144ec 100644 (file)
@@ -32,8 +32,8 @@ uses
  video;\r
 \r
 const\r
  video;\r
 \r
 const\r
- version='BETA 9';\r
- version_map=8;\r
+ version = 'BETA 9';\r
+ version_map = 9;\r
 \r
 var\r
  keymode,updx,updy:integer;\r
 \r
 var\r
  keymode,updx,updy:integer;\r
@@ -339,19 +339,7 @@ procedure cleargame;
 \r
   chest.resetData;\r
 \r
 \r
   chest.resetData;\r
 \r
-  {for ix:=0 to 15 do\r
-   begin\r
-    b_furnace[ix]:=false;\r
-    for iy:=0 to 4 do\r
-     begin\r
-      furnace[ix,iy].item_i:=0;\r
-      furnace[ix,iy].sum_i:=0;\r
-      furnace_gg[ix].f_gor:=15;\r
-      furnace_gg[ix].fire_time:=0;\r
-      furnace_gg[ix].f_got:=0;\r
-      furnace_gg[ix].got_time:=0;\r
-     end;\r
-   end;}\r
+  furnace.resetData;\r
 \r
   drop.resetData;\r
 \r
 \r
   drop.resetData;\r
 \r
@@ -530,17 +518,7 @@ procedure saveworld(path:string);
      chest.saveData;\r
      drw_load_line('Furnaces',60);\r
      //Furnaces\r
      chest.saveData;\r
      drw_load_line('Furnaces',60);\r
      //Furnaces\r
-    /* for ix:=0 to 15 do\r
-      begin\r
-       writebool(b_furnace[ix]);\r
-       writeint(furnace_gg[ix].f_gor);\r
-       writeint(furnace_gg[ix].f_got);\r
-        for iy:=0 to 4 do\r
-         begin\r
-          write_byte(furnace[ix,iy].item_i);\r
-          writeint(furnace[ix,iy].sum_i);\r
-         end;\r
-       end;*/\r
+     furnace.saveData;\r
      drw_load_line('Mobs',70);\r
      //Mobs\r
      mob.saveData;\r
      drw_load_line('Mobs',70);\r
      //Mobs\r
      mob.saveData;\r
@@ -670,26 +648,15 @@ function loadworld(path:string):boolean;
      drw_load_line('Chests',55);\r
      //Chests\r
      chest.loadData;\r
      drw_load_line('Chests',55);\r
      //Chests\r
      chest.loadData;\r
-      drw_load_line('Furnaces',60);\r
+     drw_load_line('Furnaces',60);\r
      //Furnaces\r
      //Furnaces\r
-    /* for ix:=0 to 15 do\r
-      begin\r
-       b_furnace[ix]:=readbool;\r
-       furnace_gg[ix].f_gor:=readint;\r
-       furnace_gg[ix].f_got:=readint;\r
-        for iy:=0 to 4 do\r
-         begin\r
-          furnace[ix,iy].item_i:=read_byte;\r
-          furnace[ix,iy].sum_i:=readint;\r
-         end;\r
-       end;*/\r
-       drw_load_line('Mobs',70);\r
+     furnace.loadData;\r
      //Mobs\r
      mob.loadData;\r
      //Mobs\r
      mob.loadData;\r
-      drw_load_line('Drop',80);\r
+     drw_load_line('Drop',80);\r
      //Drop\r
      drop.loadData;\r
      //Drop\r
      drop.loadData;\r
-      drw_load_line('Particles',85);\r
+     drw_load_line('Particles',85);\r
      //Particles\r
      max_particles:=readint;\r
      reset_particles(max_particles+1);\r
      //Particles\r
      max_particles:=readint;\r
      reset_particles(max_particles+1);\r
index 7f568dfe10252c743cfc0495de0a26612f5b45e2..0d195642186697463307e752a6dc2c29e52f751c 100644 (file)
@@ -38,8 +38,13 @@ interface
  function furnaceBurn(i:integer):boolean;\r
  function itemBurn(i:integer):boolean;\r
 \r
  function furnaceBurn(i:integer):boolean;\r
  function itemBurn(i:integer):boolean;\r
 \r
+ procedure SaveData;\r
+ procedure LoadData;\r
+ procedure ResetData;\r
+\r
 implementation\r
 implementation\r
- uses maps, drop, items_store, items;\r
+ uses maps, drop, items_store, items, jsr75i, func;\r
+\r
  var\r
   furnace_b: array [0..MAX_FURNACE] of boolean;\r
   furnace_item, furnace_sum: array [0..MAX_FURNACE, 0..MAX_FURNACE_CELLS] of integer;\r
  var\r
   furnace_b: array [0..MAX_FURNACE] of boolean;\r
   furnace_item, furnace_sum: array [0..MAX_FURNACE, 0..MAX_FURNACE_CELLS] of integer;\r
@@ -366,4 +371,58 @@ implementation
    UpdateTime;\r
   end;\r
 \r
    UpdateTime;\r
   end;\r
 \r
+  procedure SaveData;\r
+    var\r
+      i, j : Integer;\r
+    begin\r
+      for i := 0 to MAX_FURNACE do\r
+        begin\r
+          writebool(furnace_b[i]);\r
+          for j := 0 to MAX_FURNACE_CELLS do\r
+            begin\r
+              write_byte(furnace_item[i, j]);\r
+              writeint(furnace_sum[i, j]);\r
+            end;\r
+          writeint(furnace_fstart[i]);\r
+          writeint(furnace_ftime[i]);\r
+          writeint(furnace_prstart[i]);\r
+        end;\r
+    end;\r
+\r
+  procedure LoadData;\r
+    var\r
+      i, j : Integer;\r
+    begin\r
+      for i := 0 to MAX_FURNACE do\r
+        begin\r
+          furnace_b[i] := readbool;\r
+          for j := 0 to MAX_FURNACE_CELLS do\r
+            begin\r
+              furnace_item[i, j] := read_byte;\r
+              furnace_sum[i, j]  := readint;\r
+            end;\r
+          furnace_fstart[i]  := readint;\r
+          furnace_ftime[i]   := readint;\r
+          furnace_prstart[i] := readint;\r
+        end;      \r
+    end;\r
+\r
+  procedure ResetData;\r
+    var\r
+      i, j : Integer;\r
+    begin\r
+      for i := 0 to MAX_FURNACE do\r
+        begin\r
+          furnace_b[i] := false;\r
+          for j := 0 to MAX_FURNACE_CELLS do\r
+            begin\r
+              furnace_item[i, j] := 0;\r
+              furnace_sum[i, j]  := 0;\r
+            end;\r
+          furnace_fstart[i]  := 0;\r
+          furnace_ftime[i]   := 0;\r
+          furnace_prstart[i] := 0;\r
+        end;      \r
+    end;\r
+\r
 end.\r
 end.\r
index d4900720c14ff97e92740b4079910d991620deb5..a0816c786b5cf4a569b16b157452430252312bb9 100644 (file)
@@ -231,7 +231,7 @@ procedure destroy_block_cr(id, xx, yy:integer);
      setmap(0,xx,yy);\r
      destsign(getmapinfo(xx,yy));\r
     end; else\r
      setmap(0,xx,yy);\r
      destsign(getmapinfo(xx,yy));\r
     end; else\r
-   if id=106 then\r
+   if (id = 106) or (id = 125) then\r
     begin\r
      setmap(0,xx,yy);\r
      DestroyFurnace(xx, yy);\r
     begin\r
      setmap(0,xx,yy);\r
      DestroyFurnace(xx, yy);\r
@@ -266,7 +266,7 @@ procedure destroy_block_cr(id, xx, yy:integer);
     begin\r
      if createsign(xx,yy)=-1 then set_block_code:=true;\r
     end; else\r
     begin\r
      if createsign(xx,yy)=-1 then set_block_code:=true;\r
     end; else\r
-    if it=106 then\r
+    if (it = 106) or (it = 125) then\r
      begin\r
       if CreateFurnace(xx, yy)=FURNACE_ERROR then\r
        set_block_code:=true;\r
      begin\r
       if CreateFurnace(xx, yy)=FURNACE_ERROR then\r
        set_block_code:=true;\r
@@ -338,7 +338,7 @@ procedure destroy_block_cr(id, xx, yy:integer);
     begin\r
      destsign(getmapinfo(xx,yy));\r
     end; else\r
     begin\r
      destsign(getmapinfo(xx,yy));\r
     end; else\r
-   if id=106 then\r
+   if (id = 106) or (id = 125) then\r
     begin\r
      DestroyFurnace(xx, yy);\r
     end; else\r
     begin\r
      DestroyFurnace(xx, yy);\r
     end; else\r
@@ -578,7 +578,7 @@ procedure destroy_block_cr(id, xx, yy:integer);
      destsign(getmapinfo(xx,yy));\r
      drop.create(104,1,xx*16+4,yy*16+4);\r
     end; else\r
      destsign(getmapinfo(xx,yy));\r
      drop.create(104,1,xx*16+4,yy*16+4);\r
     end; else\r
-   if id=106 then\r
+   if (id = 106) or (id = 125) then\r
     begin\r
      setmap(0,xx,yy);\r
      DestroyFurnace(xx, yy);\r
     begin\r
      setmap(0,xx,yy);\r
      DestroyFurnace(xx, yy);\r
@@ -680,7 +680,7 @@ procedure destroy_block_cr(id, xx, yy:integer);
    if block=104 then\r
     keymode:=5;*/\r
    else\r
    if block=104 then\r
     keymode:=5;*/\r
    else\r
-   if block=106 then\r
+   if (block = 106) or (block = 125) then\r
     OpenFurnaceWindow(info);\r
    else\r
    if block=107 then\r
     OpenFurnaceWindow(info);\r
    else\r
    if block=107 then\r
@@ -1348,6 +1348,14 @@ procedure updateBlock(x, y:integer);
      create_particle(4, x*16+4, y*16+4);\r
    end;\r
   else\r
      create_particle(4, x*16+4, y*16+4);\r
    end;\r
   else\r
+  if (block = 106) or (block = 125) then\r
+   begin\r
+    if furnaceBurn(getMapInfo(x, y)) then\r
+      setmap(125, x, y);\r
+    else\r
+      setmap(106, x, y);\r
+   end;\r
+  else\r
   if block=110 then\r
    begin\r
     if (getmap(x-1, y)=0) or (getmap(x+1, y)=0) or (getmap(x, y-1)=0) or (getmap(x, y+1)=0) then\r
   if block=110 then\r
    begin\r
     if (getmap(x-1, y)=0) or (getmap(x+1, y)=0) or (getmap(x, y-1)=0) or (getmap(x, y+1)=0) then\r
index 4899980faad7dd40f79c6aa86bac25798a8f3481..72f062f21fdb2df6c94774f8f4a9304d81b6a7eb 100644 (file)
@@ -22,7 +22,7 @@ interface
  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
@@ -543,33 +543,61 @@ procedure storePhy(i:integer);
      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