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)
 + Софтклавиши для переключения предметов на ремне перепутаны
-Печи не сохраняются и не загружаются (не забыть инкрементировать версию формата карт)
++ Печи и мобы не сохраняются и не загружаются (не забыть инкрементировать версию формата карт)
 При создании мира с сундуком, оный может висеть в воздухе
 + Зависание при попытке листать пустой список сохранений
 Иногда вместо травы генерируется грязь.
 Уголь встречается на поверхности реже чем железо
 Починит установку блока при прыжке
 Перепроверить рост деревьев
-Печь не светится когда работает
+Печь не светится когда работает
 Потеря контрастности при малом количестве источников света 
 Слишком много золота
 Курсор на ремне должен быть чётче
 Один уголь выплавляет 7 предметов, хотя должно быть 8
 По лестнице можно лезть даже если она стоит выше игрока
-Золото не переплавляется
 + Игрок возраждается в точке своей смерти, вместо точки спавна
 + От больших грибов больно уж чорные тени. У тыкв тоже надо поправить.
+После удаления всех сохранений кнопки остаются на вид активными
index 6a55e7d3d7fce7ae246ec30aacf1c49bde7184e0..3266e81729bf76d0baf5e75219196cef72a5450c 100644 (file)
@@ -2,7 +2,7 @@
 ;Все описанные здесь блоки могут отображаться на карте.\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
@@ -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
-\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
 
-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"
index 90a1f780f4e51db2589efa885705eba93d71e0d2..6de766ba1a2b5bb5536d231afc86dd059fc144ec 100644 (file)
@@ -32,8 +32,8 @@ uses
  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
@@ -339,19 +339,7 @@ procedure cleargame;
 \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
@@ -530,17 +518,7 @@ procedure saveworld(path:string);
      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
@@ -670,26 +648,15 @@ function loadworld(path:string):boolean;
      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
-    /* 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
-      drw_load_line('Drop',80);\r
+     drw_load_line('Drop',80);\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
index 7f568dfe10252c743cfc0495de0a26612f5b45e2..0d195642186697463307e752a6dc2c29e52f751c 100644 (file)
@@ -38,8 +38,13 @@ interface
  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
- 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
@@ -366,4 +371,58 @@ implementation
    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
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
-   if id=106 then\r
+   if (id = 106) or (id = 125) then\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
-    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
@@ -338,7 +338,7 @@ procedure destroy_block_cr(id, xx, yy:integer);
     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
@@ -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
-   if id=106 then\r
+   if (id = 106) or (id = 125) then\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=106 then\r
+   if (block = 106) or (block = 125) 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
+  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
index 4899980faad7dd40f79c6aa86bac25798a8f3481..72f062f21fdb2df6c94774f8f4a9304d81b6a7eb 100644 (file)
@@ -22,7 +22,7 @@ interface
  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
@@ -543,33 +543,61 @@ procedure storePhy(i:integer);
      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
-   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
-   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