Fixed issue with unknown nodes

master
bzt 2019-12-10 18:31:58 +01:00
parent 8ee37ce0d9
commit f7fe82f2d4
3 changed files with 17 additions and 15 deletions

Binary file not shown.

Binary file not shown.

View File

@ -123,17 +123,18 @@ void edit_redraw(int full)
i = nodes[y][Z][X].param0;
if(i) {
j = nodes[y][Z][X].param2 & PARAM2_MAX;
j %= blocks[i].numpar2;
s = 32 * blocks[i].numpar2*32 * 4;
if(blocks[i].numpar2) j %= (int)blocks[i].numpar2; else j = 0;
if(!blocks[i].dr) {
s = 32 * (blocks[i].numpar2 ? blocks[i].numpar2 : 1)*32 * 4;
blocks[i].dr = (unsigned char *)malloc(s);
if(!blocks[i].dr) error(lang[ERR_MEM]);
if(blocks[i].img)
memcpy(blocks[i].dr, blocks[i].img, s);
else {
for(l = 0; l < blocks[i].numpar2; l++)
memcpy(blocks[i].tr + l * 32 * 32 * 4, (uint8_t*)icons->pixels + 32 * icons->pitch,
32 * 32 * 4);
j = 0;
s = 32 * 32 * 4;
blocks[i].numpar2 = 1;
memcpy(blocks[i].tr, (uint8_t*)icons->pixels + 32 * icons->pitch, s);
}
for(l = 0; l < s; l += 4) {
blocks[i].dr[l+0] = (b[0]*k + (256 - k)*blocks[i].dr[l+0])>>8;
@ -188,17 +189,18 @@ void edit_redraw(int full)
i = nodes[y][Z][X].param0;
if(i) {
j = nodes[y][Z][X].param2 & PARAM2_MAX;
j %= (int)blocks[i].numpar2;
if(blocks[i].numpar2) j %= (int)blocks[i].numpar2; else j = 0;
if(!blocks[i].tr) {
s = 32 * blocks[i].numpar2*32 * 4;
s = 32 * (blocks[i].numpar2 ? blocks[i].numpar2 : 1)*32 * 4;
blocks[i].tr = (unsigned char *)malloc(s);
if(!blocks[i].tr) error(lang[ERR_MEM]);
if(blocks[i].img)
memcpy(blocks[i].tr, blocks[i].img, s);
else {
for(l = 0; l < blocks[i].numpar2; l++)
memcpy(blocks[i].tr + l * 32 * 32 * 4, (uint8_t*)icons->pixels + 32 * icons->pitch,
32 * 32 * 4);
j = 0;
s = 32 * 32 * 4;
blocks[i].numpar2 = 1;
memcpy(blocks[i].tr, (uint8_t*)icons->pixels + 32 * icons->pitch, s);
}
for(l = 0; l < s; l += 4) blocks[i].tr[l+3] >>= 3;
}
@ -233,16 +235,16 @@ void edit_redraw(int full)
}
if(i) {
j = nodes[currlayer][Z][X].param2 & PARAM2_MAX;
j %= (int)blocks[i].numpar2;
if(blocks[i].numpar2) j %= (int)blocks[i].numpar2; else j = 0;
s = 32 * 32 * 4;
if(nodes[currlayer][Z][X].param1 & 0x80) {
memcpy(tmpblk, blocks[i].img ? blocks[i].img + j * 32 * 32 * 4 : (uint8_t*)icons->pixels + 32 * icons->pitch,
32 * 32 * 4);
for(k = 0; k < 32 * 32 * 4; k += 4)
memcpy(tmpblk, blocks[i].img ? blocks[i].img + j * s : (uint8_t*)icons->pixels + 32 * icons->pitch, s);
for(k = 0; k < s; k += 4)
if(tmpblk[k + 3])
tmpblk[k] = (255*64 + (256 - 64)*tmpblk[k])>>8;
blk->pixels = tmpblk;
} else {
blk->pixels = blocks[i].img ? blocks[i].img + j * 32 * 32 * 4 : (uint8_t*)icons->pixels + 32 * icons->pitch;
blk->pixels = blocks[i].img ? blocks[i].img + j * s : (uint8_t*)icons->pixels + 32 * icons->pitch;
}
if(dst.w == src.w)
SDL_BlitSurface(blk, &src, cl, &dst);