Cleaning up stuff

This commit is contained in:
tognee 2019-09-18 00:09:46 +02:00
parent 5423be67ca
commit a5ea06a928
44 changed files with 7329 additions and 7432 deletions

View file

@ -165,8 +165,8 @@ void renderp(s32 xp, s32 yp, u32 xTile, u32 yTile) {
xp -= offsetX;
yp -= offsetY;
int scaleX = playerScale, scaleY = playerScale;
sf2d_draw_texture_part_scale(playerSprites, xp << 1, yp << 1, xTile, yTile, 16, 16,
scaleX, scaleY);
sf2d_draw_texture_part_scale(playerSprites, xp << 1, yp << 1, xTile, yTile, 16, 16,
scaleX, scaleY);
}
void renderTitle(int x, int y) {
@ -285,13 +285,13 @@ void renderFrame(int x1, int y1, int x2, int y2, u32 bgColor) {
void bakeLights() {
playerLightBake = sf2d_create_texture(64, 64, TEXFMT_RGBA8, SF2D_PLACE_RAM);
lanternLightBake = sf2d_create_texture(128, 128, TEXFMT_RGBA8, SF2D_PLACE_RAM);
glowwormLightBake = sf2d_create_texture(32, 32, TEXFMT_RGBA8, SF2D_PLACE_RAM);
glowwormBigLightBake = sf2d_create_texture(64, 64, TEXFMT_RGBA8, SF2D_PLACE_RAM);
bakeLight(playerLightBake, 32, 32, 32);
bakeLight(lanternLightBake, 64, 64, 64);
bakeLight(glowwormLightBake, 8, 8, 8);
bakeLight(glowwormBigLightBake, 12, 12, 12);
}
@ -299,7 +299,7 @@ void bakeLights() {
void freeLightBakes() {
sf2d_free_texture(playerLightBake);
sf2d_free_texture(lanternLightBake);
sf2d_free_texture(glowwormLightBake);
sf2d_free_texture(glowwormBigLightBake);
}
@ -311,9 +311,9 @@ void renderLightsToStencil(PlayerData *pd, bool force, bool invert, bool rplayer
C3D_StencilOp(GPU_STENCIL_REPLACE, GPU_STENCIL_KEEP, GPU_STENCIL_KEEP);
C3D_AlphaTest(true, GPU_GREATER, 0);
if(pd->activeItem->id == ITEM_LANTERN) renderLight(pd->entity.x, pd->entity.y, lanternLightBake);
else if(rplayer) renderLight(pd->entity.x, pd->entity.y, playerLightBake);
if(pd->activeItem->id == ITEM_LANTERN) renderLight(pd->entity.x, pd->entity.y, lanternLightBake);
else if(rplayer) renderLight(pd->entity.x, pd->entity.y, playerLightBake);
int i;
for (i = 0; i < eManager.lastSlot[pd->entity.level]; ++i) {
Entity e = eManager.entities[pd->entity.level][i];
@ -326,7 +326,7 @@ void renderLightsToStencil(PlayerData *pd, bool force, bool invert, bool rplayer
else renderLight(e.x+8, e.y-8, glowwormLightBake);
}
}
int xo = offsetX >> 4;
int yo = offsetY >> 4;
int x, y;
@ -334,7 +334,7 @@ void renderLightsToStencil(PlayerData *pd, bool force, bool invert, bool rplayer
//TODO: Even this is not performant enough for old 3DS, when there is a lot of lava on screen
for (x = xo-2; x <= 13 + xo+2; ++x) {
for (y = yo-2; y <= 8 + yo+2; ++y) {
if(getTile(pd->entity.level, x, y) == TILE_LAVA) {
if(getTile(pd->entity.level, x, y) == TILE_LAVA) {
//experimental "speedhack"
if(getTile(pd->entity.level, x+1,y)==TILE_LAVA && getTile(pd->entity.level, x-1,y)==TILE_LAVA && getTile(pd->entity.level, x,y+1)==TILE_LAVA && getTile(pd->entity.level, x,y-1)==TILE_LAVA) {
if((x+y)%2 == 0) continue;
@ -343,7 +343,7 @@ void renderLightsToStencil(PlayerData *pd, bool force, bool invert, bool rplayer
}
}
}
C3D_DepthTest(true, GPU_GEQUAL, GPU_WRITE_ALL);
if(invert) {
@ -421,7 +421,7 @@ void renderDots(int x, int y, u8 bits1, u8 bits2, u8 bits3, u8 bits4, u32 xTile,
render16(x, y, xTile, yTile, bits1);
return;
}
if(tu && tl) render(x, y, xTile, yTile, bits1);
if(tu && tr) render(x + 8, y, xTile+8, yTile, bits2);
if(td && tl) render(x, y + 8, xTile, yTile+8, bits3);
@ -478,40 +478,40 @@ void renderTile(int i, int d, u8 level, int x, int y) {
checkSurrTiles4(level, x >> 4, y >> 4, TILE_TREE);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_FLOWER);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_SAPLING_TREE);
if(level==1 && worldData.season==3) renderConnectedTile4(x, y, 256, 112);
else if(level==1 && worldData.season==2) renderConnectedTile4(x, y, 256, 128);
if(level==1 && worldData.season==3) renderConnectedTile4(x, y, 256, 112);
else if(level==1 && worldData.season==2) renderConnectedTile4(x, y, 256, 128);
else renderConnectedTile4(x, y, 256, 0);
break;
case TILE_TREE:
renderTile(TILE_GRASS, 0, level, x, y);
checkSurrTiles8(level, x >> 4, y >> 4, TILE_TREE);
if(worldData.season==2) {
render(x, y, 352+((tu && tl && tul) ? 16 : 0), 96, 0);
render(x+8, y, 360+((tu && tr && tur) ? 16 : 0), 96, 0);
render(x, y+8, 352+((td && tl && tdl) ? 16 : 0), 104, 0);
render(x+8, y+8, 360+((td && tr && tdr) ? 16 : 0), 104, 0);
} else if(worldData.season==3) {
render(x, y, 352+((tu && tl && tul) ? 16 : 0), 112, 0);
render(x+8, y, 360+((tu && tr && tur) ? 16 : 0), 112, 0);
render(x, y+8, 352+((td && tl && tdl) ? 16 : 0), 120, 0);
render(x+8, y+8, 360+((td && tr && tdr) ? 16 : 0), 120, 0);
} else {
render(x, y, 256+((tu && tl && tul) ? 16 : 0), 48, 0);
render(x+8, y, 264+((tu && tr && tur) ? 16 : 0), 48, 0);
render(x, y+8, 256+((td && tl && tdl) ? 16 : 0), 56, 0);
render(x+8, y+8, 264+((td && tr && tdr) ? 16 : 0), 56, 0);
}
if(worldData.season==2) {
render(x, y, 352+((tu && tl && tul) ? 16 : 0), 96, 0);
render(x+8, y, 360+((tu && tr && tur) ? 16 : 0), 96, 0);
render(x, y+8, 352+((td && tl && tdl) ? 16 : 0), 104, 0);
render(x+8, y+8, 360+((td && tr && tdr) ? 16 : 0), 104, 0);
} else if(worldData.season==3) {
render(x, y, 352+((tu && tl && tul) ? 16 : 0), 112, 0);
render(x+8, y, 360+((tu && tr && tur) ? 16 : 0), 112, 0);
render(x, y+8, 352+((td && tl && tdl) ? 16 : 0), 120, 0);
render(x+8, y+8, 360+((td && tr && tdr) ? 16 : 0), 120, 0);
} else {
render(x, y, 256+((tu && tl && tul) ? 16 : 0), 48, 0);
render(x+8, y, 264+((tu && tr && tur) ? 16 : 0), 48, 0);
render(x, y+8, 256+((td && tl && tdl) ? 16 : 0), 56, 0);
render(x+8, y+8, 264+((td && tr && tdr) ? 16 : 0), 56, 0);
}
break;
case TILE_ROCK:
checkSurrTiles8(level, x >> 4, y >> 4, TILE_ROCK);
if(level>1)
renderConnectedTile8(x, y, 256, 96);
else
renderConnectedTile8(x, y, 336, 64);
if(level>1)
renderConnectedTile8(x, y, 256, 96);
else
renderConnectedTile8(x, y, 336, 64);
break;
case TILE_HARDROCK:
checkSurrTiles8(level, x >> 4, y >> 4, TILE_HARDROCK);
@ -527,33 +527,33 @@ void renderTile(int i, int d, u8 level, int x, int y) {
checkSurrTiles4(level, x >> 4, y >> 4, TILE_SAND);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_CACTUS);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_SAPLING_CACTUS);
if(level==1 && worldData.season==3) {
renderConnectedTile4(x, y, 256, 112);
renderConnectedTile4(x, y, 256, 112);
} else {
renderConnectedTile4(x, y, 320, 0);
if (d > 0) {
render16(x, y, 336, 48, 0);
}
}
renderConnectedTile4(x, y, 320, 0);
if (d > 0) {
render16(x, y, 336, 48, 0);
}
}
break;
case TILE_WATER:
checkSurrTiles4(level, x >> 4, y >> 4, TILE_WATER);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_HOLE);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_ICE);
renderConnectedTile4(x, y, 384, 0);
srand((syncTickCount + (x / 2 - y) * 4311) / 10);
renderDots(x, y, rand() & 3, rand() & 3, rand() & 3, rand() & 3, 288, 64);
break;
case TILE_LAVA:
checkSurrTiles4(level, x >> 4, y >> 4, TILE_LAVA);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_HOLE);
renderConnectedTile4(x, y, 448, 0);
srand((syncTickCount + (x / 2 - y) * 4311) / 10);
renderDots(x, y, rand() & 3, rand() & 3, rand() & 3, rand() & 3, 304, 64);
break;
@ -561,7 +561,7 @@ void renderTile(int i, int d, u8 level, int x, int y) {
checkSurrTiles4(level, x >> 4, y >> 4, TILE_HOLE);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_WATER);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_LAVA);
renderConnectedTile4(x, y, 256, 16);
break;
case TILE_CACTUS:
@ -571,7 +571,7 @@ void renderTile(int i, int d, u8 level, int x, int y) {
case TILE_FLOWER:
renderTile(TILE_GRASS, 0, level, x, y);
if(level==1 && worldData.season==3) render16(x, y, 320, 112, d);
else render16(x, y, 320, 48, d);
else render16(x, y, 320, 48, d);
break;
case TILE_STAIRS_DOWN:
if (level == 0)
@ -594,7 +594,7 @@ void renderTile(int i, int d, u8 level, int x, int y) {
checkSurrTiles4(level, x >> 4, y >> 4, TILE_CLOUD);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_STAIRS_DOWN);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_CLOUDCACTUS);
renderConnectedTile4(x, y, 320, 16);
break;
case TILE_CLOUDCACTUS:
@ -620,32 +620,32 @@ void renderTile(int i, int d, u8 level, int x, int y) {
break;
case TILE_WOOD_WALL:
checkSurrTiles4(level, x >> 4, y >> 4, TILE_WOOD_WALL);
renderConnectedTile4(x, y, 384, 16);
break;
case TILE_STONE_WALL:
checkSurrTiles4(level, x >> 4, y >> 4, TILE_STONE_WALL);
renderConnectedTile4(x, y, 256, 80);
break;
case TILE_IRON_WALL:
checkSurrTiles4(level, x >> 4, y >> 4, TILE_IRON_WALL);
renderConnectedTile4(x, y, 448, 16);
break;
case TILE_GOLD_WALL:
checkSurrTiles4(level, x >> 4, y >> 4, TILE_GOLD_WALL);
renderConnectedTile4(x, y, 256, 32);
break;
case TILE_GEM_WALL:
checkSurrTiles4(level, x >> 4, y >> 4, TILE_GEM_WALL);
renderConnectedTile4(x, y, 320, 32);
break;
case TILE_DUNGEON_WALL:
checkSurrTiles8(level, x >> 4, y >> 4, TILE_DUNGEON_WALL);
renderConnectedTile8(x, y, 384, 32);
break;
case TILE_DUNGEON_FLOOR:
@ -657,61 +657,61 @@ void renderTile(int i, int d, u8 level, int x, int y) {
case TILE_MAGIC_BARRIER:
renderTile(TILE_DUNGEON_FLOOR, 0, level, x, y);
render16(x, y, 320, 64, d);
//draw remaining pillar count
PlayerData *lp = getLocalPlayer();
PlayerData *lp = getLocalPlayer();
if((lp->entity.x - (x+8))*(lp->entity.x - (x+8)) + (lp->entity.y - (y+8))*(lp->entity.y - (y+8)) <= 24*24) {
x -= offsetX;
y -= offsetY;
int data = 0;
int i = 0;
for (i = 0; i < eManager.lastSlot[level]; ++i) {
Entity * e = &eManager.entities[level][i];
if(e->type == ENTITY_MAGIC_PILLAR) {
++data;
}
}
char currentCount[3];
sprintf(currentCount, "%d", data);
drawSizedTextColor(currentCount, x+4 + 1, y+4 + 1, 2, dungeonColor[1]);
drawSizedTextColor(currentCount, x+4, y+4, 2, dungeonColor[0]);
}
break;
case TILE_BOOKSHELVES:
case TILE_BOOKSHELVES:
checkSurrTiles4(level, x >> 4, y >> 4, TILE_BOOKSHELVES);
renderConnectedTile4(x, y, 384, 80 + d*16);
break;
case TILE_WOOD_FLOOR:
render16(x, y, 336, 96, 0);
break;
case TILE_MYCELIUM:
case TILE_WOOD_FLOOR:
render16(x, y, 336, 96, 0);
break;
case TILE_MYCELIUM:
checkSurrTiles4(level, x >> 4, y >> 4, TILE_MYCELIUM);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_MUSHROOM_BROWN);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_MUSHROOM_RED);
if(level==1 && worldData.season==3) renderConnectedTile4(x, y, 256, 112);
else renderConnectedTile4(x, y, 448, 80);
break;
case TILE_MUSHROOM_BROWN:
renderTile(TILE_MYCELIUM, 0, level, x, y);
case TILE_MUSHROOM_BROWN:
renderTile(TILE_MYCELIUM, 0, level, x, y);
render16(x, y, 448 + (d&0x1)*16, 96, 0);
break;
case TILE_MUSHROOM_RED:
renderTile(TILE_MYCELIUM, 0, level, x, y);
break;
case TILE_MUSHROOM_RED:
renderTile(TILE_MYCELIUM, 0, level, x, y);
render16(x, y, 480 + (d&0x1)*16, 96, 0);
break;
case TILE_ICE:
break;
case TILE_ICE:
renderTile(TILE_WATER, 0, level, x, y);
//checkSurrTiles4(x >> 4, y >> 4, TILE_WATER);
//checkSurrTiles4(x >> 4, y >> 4, TILE_HOLE);
checkSurrTiles4(level, x >> 4, y >> 4, TILE_ICE);
renderConnectedTile4(x, y, 448, 112);
break;
}
@ -725,12 +725,12 @@ void renderConnectedTile4(int x, int y, u32 xTile, u32 yTile) {
render16(x, y, xTile+48, yTile, 0);
return;
}
int l = (tl ? 16 : 0);
int r = (tr ? 16 : 0);
int u = (tu ? 32 : 0);
int d = (td ? 32 : 0);
render(x, y, xTile +l+u, yTile, 0);
render(x+8, y, xTile+8+r+u, yTile, 0);
render(x, y+8, xTile +l+d, yTile+8, 0);
@ -743,12 +743,12 @@ void renderConnectedTile8(int x, int y, u32 xTile, u32 yTile) {
render16(x, y, xTile+64, yTile, 0);
return;
}
int l = (tl ? 16 : 0);
int r = (tr ? 16 : 0);
int u = (tu ? 32 : 0);
int d = (td ? 32 : 0);
render(x, y, xTile +l+u+((tl && tu && tul) ? 16 : 0), yTile, 0);
render(x+8, y, xTile+8+r+u+((tr && tu && tur) ? 16 : 0), yTile, 0);
render(x, y+8, xTile +l+d+((tl && td && tdl) ? 16 : 0), yTile+8, 0);
@ -757,45 +757,45 @@ void renderConnectedTile8(int x, int y, u32 xTile, u32 yTile) {
void renderZoomedMap(PlayerData *pd) {
sf2d_draw_rectangle(0, 0, 320, 240, 0xFF0C0C0C); //You might think "real" black would be better, but it actually looks better that way
int mx = pd->mapScrollX;
int my = pd->mapScrollY;
if(pd->mapZoomLevel == 2) mx = 32;
int mx = pd->mapScrollX;
int my = pd->mapScrollY;
if(pd->mapZoomLevel == 2) mx = 32;
sf2d_draw_texture_scale(minimap[pd->entity.level], mx, my, pd->mapZoomLevel, pd->mapZoomLevel); // zoomed map
// Airwizard on zoomed map
if(pd->entity.level == 0){
if(awX != 0 && awY != 0){
render16c(
(mx+((awX/16)*pd->mapZoomLevel)-16)/2,
(my+((awY/16)*pd->mapZoomLevel)-16)/2,
160, 112,
((pd->entity.p.walkDist >> 6) & 1) == 0 ? 0 : 1,
(mx+((awX/16)*pd->mapZoomLevel)-16)/2,
(my+((awY/16)*pd->mapZoomLevel)-16)/2,
160, 112,
((pd->entity.p.walkDist >> 6) & 1) == 0 ? 0 : 1,
2, 2
);
}
}
}
// Player on zoomed map
//TODO: Maybe also render other players?
render16c(
(mx+((pd->entity.x/16)*pd->mapZoomLevel)-16)/2,
(my+((pd->entity.y/16)*pd->mapZoomLevel)-16)/2,
0, 112,
((pd->entity.p.walkDist >> 6) & 1) == 0 ? 0 : 1,
2, 2
);
drawText(pd->mapText,224, 214); // "x2"/"x4"/"x6"
render16(142, 2, 72, 208, 0); // Exit button
renderc(126, 102, 40, 208, 32, 16, 0); // Plus/Minus zoom buttons
if(pd->mapZoomLevel < 3) sf2d_draw_rectangle(258, 210, 26, 20, 0x7F4F4F4F); // gray out minus button
else if(pd->mapZoomLevel > 5) sf2d_draw_rectangle(284, 210, 26, 20, 0x7F4F4F4F); // gray out minus button
//TODO: Maybe also render other players?
render16c(
(mx+((pd->entity.x/16)*pd->mapZoomLevel)-16)/2,
(my+((pd->entity.y/16)*pd->mapZoomLevel)-16)/2,
0, 112,
((pd->entity.p.walkDist >> 6) & 1) == 0 ? 0 : 1,
2, 2
);
drawText(pd->mapText,224, 214); // "x2"/"x4"/"x6"
render16(142, 2, 72, 208, 0); // Exit button
renderc(126, 102, 40, 208, 32, 16, 0); // Plus/Minus zoom buttons
if(pd->mapZoomLevel < 3) sf2d_draw_rectangle(258, 210, 26, 20, 0x7F4F4F4F); // gray out minus button
else if(pd->mapZoomLevel > 5) sf2d_draw_rectangle(284, 210, 26, 20, 0x7F4F4F4F); // gray out minus button
}
char scoreT[32];
void renderGui(PlayerData *pd) {
int i;
//health and stamina
//health and stamina
for (i = 0; i < 10; ++i) {
if (i < pd->entity.p.health)
render(i * 8 + 6, 5, 168, 152, 0);
@ -806,11 +806,11 @@ void renderGui(PlayerData *pd) {
else
render(i * 8 + 6, 14, 191, 152, 0);
}
//minimap
//minimap
sf2d_draw_texture(minimap[pd->entity.level], 10, 102);
//active item
//active item
renderItemWithTextCentered(pd->activeItem, 320, 66);
itoa(pd->score, scoreT, 10); // integer to base10 string
drawText("Score:",214,12);
@ -819,10 +819,10 @@ void renderGui(PlayerData *pd) {
if(awX != 0 && awY != 0){
renderc(1 + (awX/32), 47 + (awY/32), 88, 216, 8, 8, 0); // Mini-AWizard head.
}
}
//TODO: Maybe also render other players?
}
//TODO: Maybe also render other players?
renderc(1 + (pd->entity.x/32), 47 + (pd->entity.y/32), 88, 208, 8, 8, 0); // Mini-Player head.
//quick select
drawText("Quickselect:",164,118);
@ -832,7 +832,7 @@ void renderGui(PlayerData *pd) {
if((inv->lastSlot) > i) {
int xip = i % 4;
int yip = i / 4;
item = &inv->items[i];
renderItemIcon(item->id, item->countLevel, 81+xip*21, 77+yip*21);
}
@ -840,86 +840,86 @@ void renderGui(PlayerData *pd) {
}
void renderPlayer(PlayerData *pd) {
if (pd->entity.level!=getLocalPlayer()->entity.level) {
return;
}
if (pd->entity.level!=getLocalPlayer()->entity.level) {
return;
}
if (pd->entity.p.isDead) {
return;
}
}
int xo = pd->entity.x - 8;
int yo = pd->entity.y - 8;
//attack animation upwards
//attack animation upwards
if (pd->entity.p.attackTimer > 0 && pd->entity.p.dir == 1) {
renderc(xo, yo - 4, 16, 160, 16, 8, 0);
renderItemIcon(pd->activeItem->id, pd->activeItem->countLevel, xo + 4, yo - 4);
}
//find basic indices
int aIndexBig = 0;
int aIndexSmall = 0;
switch(pd->entity.p.dir) {
case 0: //down
aIndexBig = 0;
aIndexSmall = 0;
break;
case 1: //up
aIndexBig = 2;
aIndexSmall = 1;
break;
case 2: //left
aIndexBig = 7;
aIndexSmall = 3;
break;
case 3: //right
aIndexBig = 4;
aIndexSmall = 2;
break;
}
//find index offset based on walk state
u8 walkingOffset = (pd->entity.p.walkDist >> 4) % 2;
if(pd->entity.p.dir==2 || pd->entity.p.dir==3) {
walkingOffset = (pd->entity.p.walkDist >> 4) % 4;
if(walkingOffset==2) walkingOffset = 0;
if(walkingOffset==3) walkingOffset = 2;
}
bool swimming = isWater(pd->entity.level, pd->entity.x>>4, pd->entity.y>>4);
//render water anim when swimming
if (swimming) {
renderc(xo, yo + 5, 48, 160 + (((pd->entity.p.swimTimer >> 4) & 1) << 3), 16, 8, 0);
}
//render the different parts
//legs
if(!swimming) {
renderp(xo, yo, (0+aIndexBig+walkingOffset)*16, pd->sprite.legs*16);
}
//body
renderp(xo, yo, (10+aIndexBig+walkingOffset)*16, pd->sprite.body*16);
//arms (normal)
if(!(pd->entity.p.isCarrying)) {
renderp(xo, yo, (20+aIndexBig+walkingOffset)*16, pd->sprite.arms*16);
}
//head
renderp(xo, yo, (30+aIndexSmall)*16, pd->sprite.head*16);
//eyes
renderp(xo, yo, (34+aIndexSmall)*16, pd->sprite.eyes*16);
//arms (carrying)
if(pd->entity.p.isCarrying) {
renderp(xo, yo, (38+aIndexSmall)*16, pd->sprite.arms*16);
}
//furniture
//find basic indices
int aIndexBig = 0;
int aIndexSmall = 0;
switch(pd->entity.p.dir) {
case 0: //down
aIndexBig = 0;
aIndexSmall = 0;
break;
case 1: //up
aIndexBig = 2;
aIndexSmall = 1;
break;
case 2: //left
aIndexBig = 7;
aIndexSmall = 3;
break;
case 3: //right
aIndexBig = 4;
aIndexSmall = 2;
break;
}
//find index offset based on walk state
u8 walkingOffset = (pd->entity.p.walkDist >> 4) % 2;
if(pd->entity.p.dir==2 || pd->entity.p.dir==3) {
walkingOffset = (pd->entity.p.walkDist >> 4) % 4;
if(walkingOffset==2) walkingOffset = 0;
if(walkingOffset==3) walkingOffset = 2;
}
bool swimming = isWater(pd->entity.level, pd->entity.x>>4, pd->entity.y>>4);
//render water anim when swimming
if (swimming) {
renderc(xo, yo + 5, 48, 160 + (((pd->entity.p.swimTimer >> 4) & 1) << 3), 16, 8, 0);
}
//render the different parts
//legs
if(!swimming) {
renderp(xo, yo, (0+aIndexBig+walkingOffset)*16, pd->sprite.legs*16);
}
//body
renderp(xo, yo, (10+aIndexBig+walkingOffset)*16, pd->sprite.body*16);
//arms (normal)
if(!(pd->entity.p.isCarrying)) {
renderp(xo, yo, (20+aIndexBig+walkingOffset)*16, pd->sprite.arms*16);
}
//head
renderp(xo, yo, (30+aIndexSmall)*16, pd->sprite.head*16);
//eyes
renderp(xo, yo, (34+aIndexSmall)*16, pd->sprite.eyes*16);
//arms (carrying)
if(pd->entity.p.isCarrying) {
renderp(xo, yo, (38+aIndexSmall)*16, pd->sprite.arms*16);
}
//furniture
if (pd->entity.p.isCarrying) {
renderFurniture(pd->activeItem->id, xo, yo - 12);
}
//attack animation (other directios)
//attack animation (other directios)
if (pd->entity.p.attackTimer > 0) {
switch (pd->entity.p.dir) {
case 0:
@ -939,37 +939,37 @@ void renderPlayer(PlayerData *pd) {
}
void renderWeather(u8 level, int xScroll, int yScroll) {
if(level==1) {
if(worldData.season==3) {
int xp = -128 + ((syncTickCount>>2) - xScroll*2)%128;
int yp = -128 + ((syncTickCount>>1) - yScroll*2)%128;
int xp2 = 0 - ((syncTickCount>>2) + xScroll*2)%128;
int yp2 = -128 + ((syncTickCount>>1)+64 - yScroll*2)%128;
int xt;
int yt;
for(xt=0; xt<4; ++xt) {
for(yt=0; yt<3; ++yt) {
sf2d_draw_texture_part_scale(icons, xp + xt*128, yp + yt*128, 192, 0, 64, 64, 2, 2);
sf2d_draw_texture_part_scale(icons, xp2 + xt*128, yp2 + yt*128, 192, 0, 64, 64, 2, 2);
}
}
}
if(worldData.rain) {
int xp = -((xScroll*2)%128);
int yp = -128 + ((syncTickCount<<2) - yScroll*2)%128;
int xp2 = -((xScroll*2+8)%128);
int yp2 = -128 + ((syncTickCount<<1)+64 - yScroll*2)%128;
int xt;
int yt;
for(xt=0; xt<4; ++xt) {
for(yt=0; yt<3; ++yt) {
sf2d_draw_texture_part_scale(icons, xp + xt*128, yp + yt*128, 128, 0, 64, 64, 2, 2);
sf2d_draw_texture_part_scale(icons, xp2 + xt*128, yp2 + yt*128, 128, 0, 64, 64, 2, 2);
}
}
}
}
if(level==1) {
if(worldData.season==3) {
int xp = -128 + ((syncTickCount>>2) - xScroll*2)%128;
int yp = -128 + ((syncTickCount>>1) - yScroll*2)%128;
int xp2 = 0 - ((syncTickCount>>2) + xScroll*2)%128;
int yp2 = -128 + ((syncTickCount>>1)+64 - yScroll*2)%128;
int xt;
int yt;
for(xt=0; xt<4; ++xt) {
for(yt=0; yt<3; ++yt) {
sf2d_draw_texture_part_scale(icons, xp + xt*128, yp + yt*128, 192, 0, 64, 64, 2, 2);
sf2d_draw_texture_part_scale(icons, xp2 + xt*128, yp2 + yt*128, 192, 0, 64, 64, 2, 2);
}
}
}
if(worldData.rain) {
int xp = -((xScroll*2)%128);
int yp = -128 + ((syncTickCount<<2) - yScroll*2)%128;
int xp2 = -((xScroll*2+8)%128);
int yp2 = -128 + ((syncTickCount<<1)+64 - yScroll*2)%128;
int xt;
int yt;
for(xt=0; xt<4; ++xt) {
for(yt=0; yt<3; ++yt) {
sf2d_draw_texture_part_scale(icons, xp + xt*128, yp + yt*128, 128, 0, 64, 64, 2, 2);
sf2d_draw_texture_part_scale(icons, xp2 + xt*128, yp2 + yt*128, 128, 0, 64, 64, 2, 2);
}
}
}
}
}
void renderDayNight(PlayerData *pd) {
@ -978,7 +978,7 @@ void renderDayNight(PlayerData *pd) {
int color2 = 0x00100C0C;
int alpha1 = 0x88;
int alpha2 = 0xDD;
if(worldData.daytime>5000 && worldData.daytime<6000) {
alpha2 = (alpha2 * (1000-(worldData.daytime-5000)))/1000;
alpha1 = (alpha1 * (1000-(worldData.daytime-5000)))/1000;
@ -986,10 +986,10 @@ void renderDayNight(PlayerData *pd) {
alpha1 = (alpha1 * (worldData.daytime-18000))/1000;
alpha2 = (alpha2 * (worldData.daytime-18000))/1000;
}
color1 = color1 | (alpha1 << 24);
color2 = color2 | (alpha2 << 24);
sf2d_draw_rectangle(0, 0, 400, 240, color1); //You might think "real" black would be better, but it actually looks better that way
renderLightsToStencil(pd, true, true, false);
sf2d_draw_rectangle(0, 0, 400, 240, color2); //You might think "real" black would be better, but it actually looks better that way
@ -998,7 +998,7 @@ void renderDayNight(PlayerData *pd) {
}
void renderBackground(s8 level, int xScroll, int yScroll) {
if(level == 0) {
if(level == 0) {
sf2d_draw_texture_part_scale(minimap[1], (-xScroll / 3) - 256, (-yScroll / 3) - 32, 0, 0, 128, 128, 12.5, 7.5);
sf2d_draw_rectangle(0, 0, 400, 240, 0xAFDFDFDF);
} else if(level == 5) {
@ -1118,7 +1118,7 @@ void renderFurniture(int itemID, int x, int y) {
render16(x, y, 240, 128, 0);
break;
case ITEM_POTION_MAKER:
render16(x, y, 240, 96, 0);
render16(x, y, 192, 168, 0);
break;
}
}
@ -1265,7 +1265,7 @@ void renderEntity(Entity* e, int x, int y) {
break;
}
break;
case ENTITY_DRAGONPROJECTILE:
case ENTITY_DRAGONPROJECTILE:
if(e->dragonFire.type==0) {
renderr(x, y, 0, 320, 0, e->dragonFire.age * 0.349);
} else {
@ -1279,7 +1279,7 @@ void renderEntity(Entity* e, int x, int y) {
if (e->arrow.age >= 200)
if (e->arrow.age / 6 % 2 == 0)
return;
int abits = 0;
int ayp = 168;
if(e->arrow.xa<0) {
@ -1292,7 +1292,7 @@ void renderEntity(Entity* e, int x, int y) {
ayp += 8;
abits += 2;
}
switch (e->arrow.itemID) {
case ITEM_ARROW_WOOD:
render(x-2, y-2, 72, ayp, abits);
@ -1314,7 +1314,7 @@ void renderEntity(Entity* e, int x, int y) {
case ENTITY_GLOWWORM:
render(x-4, y-4, 224, 112, 0);
break;
case ENTITY_NPC:
case ENTITY_NPC:
render16(x - 8, y - 8, (e->npc.type*16) + 0, 64, 0);
}
}
@ -1432,10 +1432,10 @@ void renderRecipes(RecipeManager * r, int xo, int yo, int x1, int y1, int select
else
col = 0xFF7F7F7F;
if(r->recipes[i + io].itemAmountLevel==1) {
drawTextColor(getBasicItemName(r->recipes[i + io].itemResult, r->recipes[i + io].itemAmountLevel), x + 18, y + 2, col);
} else {
drawTextColor(getItemName(r->recipes[i + io].itemResult, r->recipes[i + io].itemAmountLevel), x + 18, y + 2, col);
}
drawTextColor(getBasicItemName(r->recipes[i + io].itemResult, r->recipes[i + io].itemAmountLevel), x + 18, y + 2, col);
} else {
drawTextColor(getItemName(r->recipes[i + io].itemResult, r->recipes[i + io].itemAmountLevel), x + 18, y + 2, col);
}
}
int yy = selected + 1 - io + yo;
@ -1463,13 +1463,13 @@ void renderItemStuffWithText(int itemID, int itemCL, bool onlyOne, int x, int y)
y + 2, 0xFFD2D2D2, 0xFFFFFFFF);
}
/* For bottom screen */
/* For bottom screen */
void renderItemWithTextCentered(Item* item, int width, int y) {
char * tn = getItemName(item->id, item->countLevel);
int x = (width - ((strlen(tn) + 2) * 12))/2;
int x = (width - ((strlen(tn) + 2) * 12))/2;
renderItemIcon(item->id, item->countLevel, x >> 1, y >> 1);
if (item->onlyOne)
drawText(getItemName(item->id, item->countLevel), x + 18, y + 2);
else
@ -1478,8 +1478,8 @@ void renderItemWithTextCentered(Item* item, int width, int y) {
}
void renderItemIcon(int itemID, int countLevel, int x, int y) {
int xd;
int yd;
int xd;
int yd;
switch (itemID) {
case ITEM_NULL:
return;
@ -1523,7 +1523,7 @@ void renderItemIcon(int itemID, int countLevel, int x, int y) {
render(x, y, 0, 152, 0);
break;
case ITEM_WOOD:
render(x, y, 8, 152, 0);
render(x, y, 160, 168, 0);
break;
case ITEM_STONE:
renderb(x, y, 16, 152, 0, rockColor[1]);
@ -1559,19 +1559,19 @@ void renderItemIcon(int itemID, int countLevel, int x, int y) {
render(x, y, 80, 152, 0);
break;
case ITEM_GOLD_APPLE:
render(x, y, 177, 160, 0);
render(x, y, 144, 168, 0);
break;
case ITEM_STRENGTH_POTION:
render(x, y, 184, 160, 0);
render(x, y, 176, 160, 0);
break;
case ITEM_SPEED_POTION:
render(x, y, 191, 160, 0);
render(x, y, 184, 160, 0);
break;
case ITEM_REGEN_POTION:
render(x, y, 198, 160, 0);
render(x, y, 192, 160, 0);
break;
case ITEM_SWIM_BREATH_POTION:
render(x, y, 219, 160, 0);
render(x, y, 200, 160, 0);
break;
case ITEM_SLIME:
renderb(x, y, 88, 152, 0, 0xFF4DC04D);
@ -1604,7 +1604,7 @@ void renderItemIcon(int itemID, int countLevel, int x, int y) {
render(x, y, 144, 160, 0);
break;
case ITEM_POTION_MAKER:
render(x, y, 216, 152, 0);
render(x, y, 192, 168, 0);
break;
case ITEM_WALL_WOOD:
renderb(x, y, 224, 144, 0, woodColor);
@ -1672,14 +1672,14 @@ void renderItemIcon(int itemID, int countLevel, int x, int y) {
case ITEM_DRAGON_SCALE:
render(x, y, 168, 160, 0);
break;
case ITEM_BOOKSHELVES:
case ITEM_BOOKSHELVES:
render(x, y, 232, 144, 0);
break;
case ITEM_MAGIC_DUST:
render(x, y, 200, 152, 0);
case ITEM_MAGIC_DUST:
render(x, y, 200, 152, 0);
break;
case ITEM_COIN:
render(x, y, 208, 152, 0);
case ITEM_COIN:
render(x, y, 208, 152, 0);
break;
case TOOL_BUCKET:
render(x, y, 200 + countLevel * 8, 144, 0);
@ -1687,16 +1687,16 @@ void renderItemIcon(int itemID, int countLevel, int x, int y) {
case TOOL_BOW:
render(x, y, 64, 168, 0);
break;
case TOOL_MAGIC_COMPASS:
xd = worldData.compassData[getLocalPlayer()->entity.level][0] - (getLocalPlayer()->entity.x>>4);
yd = worldData.compassData[getLocalPlayer()->entity.level][1] - (getLocalPlayer()->entity.y>>4);
if(abs(yd)>abs(xd)) {
if(yd<0) render(x, y, 112, 168, 0);
else render(x, y, 120, 168, 0);
} else {
if(xd<0) render(x, y, 128, 168, 0);
else render(x, y, 136, 168, 0);
}
case TOOL_MAGIC_COMPASS:
xd = worldData.compassData[getLocalPlayer()->entity.level][0] - (getLocalPlayer()->entity.x>>4);
yd = worldData.compassData[getLocalPlayer()->entity.level][1] - (getLocalPlayer()->entity.y>>4);
if(abs(yd)>abs(xd)) {
if(yd<0) render(x, y, 112, 168, 0);
else render(x, y, 120, 168, 0);
} else {
if(xd<0) render(x, y, 128, 168, 0);
else render(x, y, 136, 168, 0);
}
break;
}
}