From: DeaDDooMER Date: Wed, 8 Mar 2017 15:44:58 +0000 (+0300) Subject: Fix furnace and mob data save X-Git-Url: https://deadsoftware.ru/gitweb?p=cavecraft.git;a=commitdiff_plain;h=13a872abec65a21544bfa928624c6bf3975fd50f Fix furnace and mob data save --- diff --git a/BUGS b/BUGS index c923d05..f3fcc01 100644 --- a/BUGS +++ b/BUGS @@ -14,7 +14,7 @@ В бете 8 была поддержка звука, надо вернуть. Запилить загрузку старых сохранений (см. cavecraft forever) + Софтклавиши для переключения предметов на ремне перепутаны -Печи не сохраняются и не загружаются (не забыть инкрементировать версию формата карт) ++ Печи и мобы не сохраняются и не загружаются (не забыть инкрементировать версию формата карт) При создании мира с сундуком, оный может висеть в воздухе + Зависание при попытке листать пустой список сохранений Иногда вместо травы генерируется грязь. @@ -23,12 +23,12 @@ Уголь встречается на поверхности реже чем железо Починит установку блока при прыжке Перепроверить рост деревьев -Печь не светится когда работает ++ Печь не светится когда работает Потеря контрастности при малом количестве источников света Слишком много золота Курсор на ремне должен быть чётче Один уголь выплавляет 7 предметов, хотя должно быть 8 По лестнице можно лезть даже если она стоит выше игрока -Золото не переплавляется + Игрок возраждается в точке своей смерти, вместо точки спавна + От больших грибов больно уж чорные тени. У тыкв тоже надо поправить. +После удаления всех сохранений кнопки остаются на вид активными diff --git a/res/blocks.cfg b/res/blocks.cfg index 6a55e7d..3266e81 100644 --- a/res/blocks.cfg +++ b/res/blocks.cfg @@ -2,7 +2,7 @@ ;Все описанные здесь блоки могут отображаться на карте. ;Устанавливаем количество блоков -RESET_BLOCKS 124 +RESET_BLOCKS 125 ;Описание команды установки блока: ;SET_BLOCK [id] [tex] [hp] [coll] [tool] [lvl] [flags] [tr] [li] @@ -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 ;Стебель тыквы SET_BLOCK 124 139 1 0 0 0 b101 0 0 - +;Горящая печь +SET_BLOCK 125 134 40 0 3 0 b000 0 15 diff --git a/run.sh b/run.sh index 10d7f13..91e2a1b 100755 --- 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" diff --git a/src/CAVE.mpsrc b/src/CAVE.mpsrc index 90a1f78..6de766b 100644 --- a/src/CAVE.mpsrc +++ b/src/CAVE.mpsrc @@ -32,8 +32,8 @@ uses video; const - version='BETA 9'; - version_map=8; + version = 'BETA 9'; + version_map = 9; var keymode,updx,updy:integer; @@ -339,19 +339,7 @@ procedure cleargame; chest.resetData; - {for ix:=0 to 15 do - begin - b_furnace[ix]:=false; - for iy:=0 to 4 do - begin - furnace[ix,iy].item_i:=0; - furnace[ix,iy].sum_i:=0; - furnace_gg[ix].f_gor:=15; - furnace_gg[ix].fire_time:=0; - furnace_gg[ix].f_got:=0; - furnace_gg[ix].got_time:=0; - end; - end;} + furnace.resetData; drop.resetData; @@ -530,17 +518,7 @@ procedure saveworld(path:string); chest.saveData; drw_load_line('Furnaces',60); //Furnaces - /* for ix:=0 to 15 do - begin - writebool(b_furnace[ix]); - writeint(furnace_gg[ix].f_gor); - writeint(furnace_gg[ix].f_got); - for iy:=0 to 4 do - begin - write_byte(furnace[ix,iy].item_i); - writeint(furnace[ix,iy].sum_i); - end; - end;*/ + furnace.saveData; drw_load_line('Mobs',70); //Mobs mob.saveData; @@ -670,26 +648,15 @@ function loadworld(path:string):boolean; drw_load_line('Chests',55); //Chests chest.loadData; - drw_load_line('Furnaces',60); + drw_load_line('Furnaces',60); //Furnaces - /* for ix:=0 to 15 do - begin - b_furnace[ix]:=readbool; - furnace_gg[ix].f_gor:=readint; - furnace_gg[ix].f_got:=readint; - for iy:=0 to 4 do - begin - furnace[ix,iy].item_i:=read_byte; - furnace[ix,iy].sum_i:=readint; - end; - end;*/ - drw_load_line('Mobs',70); + furnace.loadData; //Mobs mob.loadData; - drw_load_line('Drop',80); + drw_load_line('Drop',80); //Drop drop.loadData; - drw_load_line('Particles',85); + drw_load_line('Particles',85); //Particles max_particles:=readint; reset_particles(max_particles+1); diff --git a/src/furnace.mpsrc b/src/furnace.mpsrc index 7f568df..0d19564 100644 --- a/src/furnace.mpsrc +++ b/src/furnace.mpsrc @@ -38,8 +38,13 @@ interface function furnaceBurn(i:integer):boolean; function itemBurn(i:integer):boolean; + procedure SaveData; + procedure LoadData; + procedure ResetData; + implementation - uses maps, drop, items_store, items; + uses maps, drop, items_store, items, jsr75i, func; + var furnace_b: array [0..MAX_FURNACE] of boolean; furnace_item, furnace_sum: array [0..MAX_FURNACE, 0..MAX_FURNACE_CELLS] of integer; @@ -366,4 +371,58 @@ implementation UpdateTime; end; + procedure SaveData; + var + i, j : Integer; + begin + for i := 0 to MAX_FURNACE do + begin + writebool(furnace_b[i]); + for j := 0 to MAX_FURNACE_CELLS do + begin + write_byte(furnace_item[i, j]); + writeint(furnace_sum[i, j]); + end; + writeint(furnace_fstart[i]); + writeint(furnace_ftime[i]); + writeint(furnace_prstart[i]); + end; + end; + + procedure LoadData; + var + i, j : Integer; + begin + for i := 0 to MAX_FURNACE do + begin + furnace_b[i] := readbool; + for j := 0 to MAX_FURNACE_CELLS do + begin + furnace_item[i, j] := read_byte; + furnace_sum[i, j] := readint; + end; + furnace_fstart[i] := readint; + furnace_ftime[i] := readint; + furnace_prstart[i] := readint; + end; + end; + + procedure ResetData; + var + i, j : Integer; + begin + for i := 0 to MAX_FURNACE do + begin + furnace_b[i] := false; + for j := 0 to MAX_FURNACE_CELLS do + begin + furnace_item[i, j] := 0; + furnace_sum[i, j] := 0; + end; + furnace_fstart[i] := 0; + furnace_ftime[i] := 0; + furnace_prstart[i] := 0; + end; + end; + end. diff --git a/src/items_logic.mpsrc b/src/items_logic.mpsrc index d490072..a0816c7 100644 --- a/src/items_logic.mpsrc +++ b/src/items_logic.mpsrc @@ -231,7 +231,7 @@ procedure destroy_block_cr(id, xx, yy:integer); setmap(0,xx,yy); destsign(getmapinfo(xx,yy)); end; else - if id=106 then + if (id = 106) or (id = 125) then begin setmap(0,xx,yy); DestroyFurnace(xx, yy); @@ -266,7 +266,7 @@ procedure destroy_block_cr(id, xx, yy:integer); begin if createsign(xx,yy)=-1 then set_block_code:=true; end; else - if it=106 then + if (it = 106) or (it = 125) then begin if CreateFurnace(xx, yy)=FURNACE_ERROR then set_block_code:=true; @@ -338,7 +338,7 @@ procedure destroy_block_cr(id, xx, yy:integer); begin destsign(getmapinfo(xx,yy)); end; else - if id=106 then + if (id = 106) or (id = 125) then begin DestroyFurnace(xx, yy); end; else @@ -578,7 +578,7 @@ procedure destroy_block_cr(id, xx, yy:integer); destsign(getmapinfo(xx,yy)); drop.create(104,1,xx*16+4,yy*16+4); end; else - if id=106 then + if (id = 106) or (id = 125) then begin setmap(0,xx,yy); DestroyFurnace(xx, yy); @@ -680,7 +680,7 @@ procedure destroy_block_cr(id, xx, yy:integer); if block=104 then keymode:=5;*/ else - if block=106 then + if (block = 106) or (block = 125) then OpenFurnaceWindow(info); else if block=107 then @@ -1348,6 +1348,14 @@ procedure updateBlock(x, y:integer); create_particle(4, x*16+4, y*16+4); end; else + if (block = 106) or (block = 125) then + begin + if furnaceBurn(getMapInfo(x, y)) then + setmap(125, x, y); + else + setmap(106, x, y); + end; + else if block=110 then begin 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 diff --git a/src/mobs.pas b/src/mobs.pas index 4899980..72f062f 100644 --- a/src/mobs.pas +++ b/src/mobs.pas @@ -22,7 +22,7 @@ interface procedure freeSkin;//Выгрузка текстур implementation - uses phy, player, canvas, func; + uses phy, player, canvas, jsr75i, func; const MAX_MOBS=31; MAX_ANIMREG=3; @@ -543,33 +543,61 @@ procedure storePhy(i:integer); end; end; - procedure saveData;//Сохранение всех данных - begin - + procedure saveData; + var + i, j : integer; + begin + for i := 0 to MAX_MOBS do + begin + write_byte(mob_type[i]); + writeint(mob_x[i]); + writeint(mob_y[i]); + writeint(mob_vx[i]); + writeint(mob_vy[i]); + write_byte(mob_posi[i]); + writeint(mob_hp[i]); + writebool(mob_jmp[i]); + for j := 0 to MAX_ANIMREG do + write_byte(mob_anim[i, j]); + end; end; procedure loadData;//Загрузка всех данных - begin - + var + i, j : integer; + begin + for i := 0 to MAX_MOBS do + begin + mob_type[i] := read_byte; + mob_x[i] := readint; + mob_y[i] := readint; + mob_vx[i] := readint; + mob_vy[i] := readint; + mob_posi[i] := read_byte; + mob_hp[i] := readint; + mob_jmp[i] := readbool; + for j := 0 to MAX_ANIMREG do + mob_anim[i, j] := read_byte; + end; end; procedure resetData;//Сброс всех данных - var - i, j:integer; - begin - for i:=0 to MAX_MOBS do - begin - mob_type[i]:=M_NONE; - mob_x[i]:=0; - mob_y[i]:=0; - mob_vx[i]:=0; - mob_vy[i]:=0; - mob_posi[i]:=0; - mob_hp[i]:=0; - mob_jmp[i]:=false; - for j:=0 to MAX_ANIMREG do - mob_anim[i, j]:=0; - end; + var + i, j:integer; + begin + for i := 0 to MAX_MOBS do + begin + mob_type[i]:=M_NONE; + mob_x[i]:=0; + mob_y[i]:=0; + mob_vx[i]:=0; + mob_vy[i]:=0; + mob_posi[i]:=0; + mob_hp[i]:=0; + mob_jmp[i]:=false; + for j := 0 to MAX_ANIMREG do + mob_anim[i, j]:=0; + end; end; initialization