diff --git a/desktop_version/src/Editor.cpp b/desktop_version/src/Editor.cpp index a9d8cdc1..2bee1a24 100644 --- a/desktop_version/src/Editor.cpp +++ b/desktop_version/src/Editor.cpp @@ -993,6 +993,10 @@ static void draw_entities(void) font::print(PR_FONT_8X8, x, y, "////", 255 - help.glow, 255 - help.glow, 255 - help.glow); graphics.draw_rect(x, y, 32, 8, graphics.getRGB(255, 255, 255)); break; + case 5: // Gravity Tokens + graphics.draw_sprite(x, y, 68 + entity->p1, graphics.getcol(entity->p2)); + graphics.draw_rect(x, y, 16, 16, graphics.getRGB(255, 164, 164)); + break; case 9: // Shiny Trinkets graphics.draw_sprite(x, y, 22, 196, 196, 196); graphics.draw_rect(x, y, 16, 16, graphics.getRGB(255, 164, 164)); diff --git a/desktop_version/src/Entity.cpp b/desktop_version/src/Entity.cpp index 210145a8..ccf5928c 100644 --- a/desktop_version/src/Entity.cpp +++ b/desktop_version/src/Entity.cpp @@ -1484,13 +1484,14 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int entity.rule = 3; entity.type = 4; entity.size = 0; - entity.tile = 11; + entity.tile = 68 + meta1; + entity.colour = meta2; entity.w = 16; entity.h = 16; - entity.behave = meta1; - entity.para = meta2; + entity.behave = p2; + entity.para = p3; entity.onentity = 1; - entity.animate = 100; + entity.animate = (p1 >= 1) ? 1 : -1; break; case 6: //Decorative particles entity.rule = 2; @@ -2638,8 +2639,22 @@ bool entityclass::updateentities( int i ) { game.gravitycontrol = (game.gravitycontrol + 1) % 2; ++game.totalflips; - return disableentity(i); - + music.playef(8 + entities[i].behave); + entities[i].invis = true; + entities[i].state = 2; + // Removes collision + entities[i].onentity = 0; + } + else if (entities[i].state == 2) + { + // Wait until recharged! + } + else if (entities[i].state == 3) + { + // Respawn! + entities[i].invis = false; + entities[i].state = 0; + entities[i].onentity = 1; } break; case 5: //Particle sprays @@ -3479,6 +3494,7 @@ void entityclass::animateentities( int _i ) } break; case 1: + case 4: case 23: //Variable animation switch(entities[_i].animate) diff --git a/desktop_version/src/Logic.cpp b/desktop_version/src/Logic.cpp index 51e3e71e..cc947c56 100644 --- a/desktop_version/src/Logic.cpp +++ b/desktop_version/src/Logic.cpp @@ -421,6 +421,11 @@ void gamelogic(void) } if (!entitygone) obj.entities[i].state = 4; } + else if (obj.entities[i].type == 4 && obj.entities[i].state == 2) + { + // Gravity token: Give a signal to respawn + obj.entities[i].state = 3; + } else if (obj.entities[i].type == 23 && game.swnmode && game.deathseq<15) { //if playing SWN, get the enemies offscreen. diff --git a/desktop_version/src/Map.cpp b/desktop_version/src/Map.cpp index 747ebc38..6607ec34 100644 --- a/desktop_version/src/Map.cpp +++ b/desktop_version/src/Map.cpp @@ -1865,6 +1865,9 @@ void mapclass::loadlevel(int rx, int ry) case 3: // Disappearing platforms obj.createentity(ex, ey, 3); break; + case 5: // Gravity tokens + obj.createentity(ex, ey, 5, ent.p1, ent.p2, ent.p3, ent.p4); + break; case 9: // Trinkets obj.createentity(ex, ey, 9, cl.findtrinket(edi)); break;