diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
index 34ba629ad41a879a0361d9e4c3f83b92094816e0..cf14c9bff0a9ccd3ea90f4fdf36ca9d624623501 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
@@ -181,15 +181,17 @@ public class GameSceneController implements Initializable {
     }
 
     private void updateContent() {
-        player.updateEntity(this);
-        enemy.updateEntity(this);
+        player.updateEntity(this, graphicsContext2D);
+        enemy.updateEntity(this, graphicsContext2D);
         player.attack(enemy, graphicsContext2D);
         enemy.attack(player, graphicsContext2D);
         updateGameplayObjects();
+        updateExplosionspawns();
         player.checkGameplayObjectInteraction(player, graphicsContext2D);
         enemy.checkGameplayObjectInteraction(enemy, graphicsContext2D);
-        player.placeBomb(player, graphicsContext2D);
-        enemy.placeBomb(enemy, graphicsContext2D);
+
+        player.placeBombAction(player, graphicsContext2D);
+        enemy.placeBombAction(enemy, graphicsContext2D);
         double playerHP = (double) getPlayer().getHealth() / getPlayer().getMaxEntityHealth();
         double enemyHP = (double) getEnemy().getHealth() / getEnemy().getMaxEntityHealth();
         if (playerHP >= 0) {
@@ -229,6 +231,13 @@ public class GameSceneController implements Initializable {
         runtimeInfo.setGameplayObjects(updateList);
         log.debug("Gameplay objects updated");
     }
+    private void updateExplosionspawns() {
+        List<IEntity> explosionspawns = runtimeInfo.getExplosionspawns();
+        List<IEntity> updateList = explosionspawns.stream().filter(obj -> obj.getOBJECT_STATUS() != ObjectStatus.USED)
+                .collect(Collectors.toList());
+        runtimeInfo.setExplosionspawns(updateList);
+        log.debug("explosions objects updated");
+    }
 
     public IEntity getEnemy() {
         return enemy;
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java
index bc522e9527d8961a84400613a6d44d6e55a17bc9..30d2ba1fcd4d47519db2a1a4c8fec007398ffcbb 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java
@@ -33,6 +33,9 @@ public class RuntimeInfo {
 
     private List<IEntity> gameplayObjects = new ArrayList<>();
 
+    private List<IEntity> explosionspawns = new ArrayList<>();
+
+
     //Stats Tracking during Gameplay
     private int kills = 0;
     private int deaths = 0;
@@ -125,6 +128,14 @@ public class RuntimeInfo {
         this.gameplayObjects = gameplayObjects;
     }
 
+    public List<IEntity> getExplosionspawns() {
+        return explosionspawns;
+    }
+
+    public void setExplosionspawns(List<IEntity> explosionspawns) {
+        this.explosionspawns = explosionspawns;
+    }
+
     public String getMapDataGame() {
         return mapDataGame;
     }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityFactory.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityFactory.java
index 40432b15b7eb4de956e968d53fdebdfd231b820d..e15dec5063e815dd25224490547277fc1838eb45 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityFactory.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityFactory.java
@@ -30,18 +30,33 @@ public class EntityFactory {
     public static IEntity createGameplayObject(ObjectType objectType, int cordX, int cordY, GraphicsContext graphicsContext) {
         if (objectType == ObjectType.HEART) {
             return new Heart(cordX, cordY, graphicsContext);
-        } else if (objectType == ObjectType.BIG_BOMB) {
-            return new BigBomb(cordX, cordY, graphicsContext);
         } else if (objectType == ObjectType.BIG_BOMB_ITEMFRAME) {
             return new BigBombItemFrame(cordX, cordY, graphicsContext);
         } else if (objectType == ObjectType.BLASTUP_ITEMFRAME) {
             return new BlastUpItemFrame(cordX, cordY, graphicsContext);
-        } else if (objectType == ObjectType.BOMB) {
-            return new Bomb(cordX, cordY, graphicsContext);
+        } else if (objectType == ObjectType.BLASTDOWN_ITEMFRAME) {
+            return new BlastDownItemFrame(cordX, cordY, graphicsContext);
+        } else if (objectType == ObjectType.BOMBCLOCK_ITEMFRAME) {
+            return new BombClockItemFrame(cordX, cordY, graphicsContext);
         } else if (objectType == ObjectType.EXPLOSION) {
             return new Explosion(cordX, cordY, graphicsContext);
+        } else if (objectType == ObjectType.TELEPORT_ITEMFRAME) {
+            return new TeleportationItemFrame(cordX, cordY, graphicsContext);
+        }
+        throw new IllegalArgumentException();
+    }
+    public static IEntity createBombs(ObjectType objectType, int cordX, int cordY, GraphicsContext graphicsContext,int blastradius) {
+        if (objectType == ObjectType.BOMB) {
+            return new Bomb(cordX, cordY, graphicsContext, blastradius);
+        } else if (objectType == ObjectType.BIG_BOMB) {
+            return new BigBomb(cordX, cordY, graphicsContext, blastradius);
+        }
+        throw new IllegalArgumentException();
+    }
+    public static IEntity createMarker(ObjectType objectType, int cordX, int cordY, GraphicsContext graphicsContext,int player) {
+        if (objectType == ObjectType.MARKER) {
+            return new Marker(cordX, cordY, graphicsContext, player);
         }
         throw new IllegalArgumentException();
     }
-
 }
\ No newline at end of file
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BigBomb.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BigBomb.java
index a5821ab14765c07e7b0f3b69c264798c060acec5..19debfc0250626a78605dd8607737e4bf7dae03e 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BigBomb.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BigBomb.java
@@ -1,9 +1,12 @@
 package de.hdm_stuttgart.battlearena.Model.Entity.GameplayObjects;
 
 import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
 import de.hdm_stuttgart.battlearena.Model.Entity.EntityDirection;
+import de.hdm_stuttgart.battlearena.Model.Entity.EntityFactory;
 import de.hdm_stuttgart.battlearena.Model.Entity.IEntity;
 
+import de.hdm_stuttgart.battlearena.Model.Map.TileManager;
 import javafx.geometry.BoundingBox;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.image.Image;
@@ -11,23 +14,26 @@ import javafx.scene.image.Image;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 
+import java.util.List;
 import java.util.Objects;
 
 public class BigBomb implements IEntity {
-    private boolean status;
 
-    private static final Logger log = LogManager.getLogger(Bomb.class);
+    private static final Logger log = LogManager.getLogger(BigBomb.class);
+    RuntimeInfo runtimeInfo = RuntimeInfo.getInstance();
     private final int posX;
     private final int posY;
     private int frameIndex = 0;
     private int frameCounter = 0;
-    private Image[] frames = new Image[6];
+    private final Image[] frames = new Image[6];
     private final GraphicsContext graphicsContext;
     private BoundingBox boxCollider;
     private final ObjectType OBJECT_TYPE = ObjectType.BOMB;
     private ObjectStatus OBJECT_STATUS = ObjectStatus.UNUSED;
+    private final int scaledTileSize = 48;
+    private int blastradius = 18;
 
-    public BigBomb(int posX, int posY, GraphicsContext graphicsContext) {
+    public BigBomb(int posX, int posY, GraphicsContext graphicsContext, int blastradius) {
         this.posX = posX;
         this.posY = posY;
         this.graphicsContext = graphicsContext;
@@ -46,13 +52,10 @@ public class BigBomb implements IEntity {
         frames[0] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/big_bomb/Bigbomb.png")));
         frames[1] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/big_bomb/Bigbomb.png")));
         frames[2] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/bomb/redbomb.png")));
-        frames[3] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/bigexplosion.png")));
-        frames[4] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/middleexplosion.png")));
-        frames[5] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/smallexplosion.png")));
     }
 
     @Override
-    public void updateEntity(GameSceneController gameScene) {
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
 
     }
 
@@ -62,7 +65,7 @@ public class BigBomb implements IEntity {
     }
 
     @Override
-    public void placeBomb(IEntity entity, GraphicsContext graphicsContext) {
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
 
     }
 
@@ -87,22 +90,173 @@ public class BigBomb implements IEntity {
         if (frameCounter > 17) {
             if (frameIndex == 0) {
                 frameIndex = 1;
-                //PLayer.spawnExplosion();
             } else if (frameIndex == 1) {
                 frameIndex = 2;
             } else if (frameIndex == 2) {
                 frameIndex = 3;
-            } else if (frameIndex == 3) {
-                frameIndex = 4;
-            } else if (frameIndex == 4) {
-                frameIndex = 5;
-            }else if( frameIndex == 5){
+                checkExplosionSpawn(graphicsContext,blastradius);
                 OBJECT_STATUS = ObjectStatus.USED;
             }
             frameCounter = 0;
         }
     }
 
+    public void checkExplosionSpawn(GraphicsContext graphicsContext, int blastradius) {
+        int isDestructible;
+        boolean stopDown = false, stopUp = false, stopRight = false, stopLeft = false;
+
+        int xTile = posX / scaledTileSize;
+        int yTile = posY / scaledTileSize;
+        int yUp = yTile;
+        int xRight = xTile;
+        int yDown = yTile;
+        int xLeft = xTile;
+
+        spawnExplosion(yTile, xTile,graphicsContext);
+
+        isDestructible = checkTilePlacing(yTile, xTile);
+        if (isDestructible != 0) {
+            spawnExplosion(yTile,xTile,graphicsContext);
+            for (int i = 0; i < blastradius; i++) {
+                yDown += 1;
+                yUp -= 1;
+                xRight += 1;
+                xLeft -= 1;
+                if(yDown < 18 && yDown >= 0 && xTile < 18 && xTile >= 0) {
+                    isDestructible = checkTilePlacing(yDown, xTile);
+                    if (isDestructible != 0 && !stopDown) {
+                        spawnExplosion(yDown, xTile, graphicsContext);
+                        if(isDestructible == 2){
+                            stopDown = true;
+                        }
+                    } else {
+                        stopDown = true;
+                    }
+                }
+                if(yUp < 18 && yUp >= 0 && xTile < 18 && xTile >= 0) {
+                    isDestructible = checkTilePlacing(yUp, xTile);
+                    if (isDestructible != 0 && !stopUp) {
+                        spawnExplosion(yUp, xTile, graphicsContext);
+                        if(isDestructible == 2){
+                            stopUp = true;
+                        }
+                    } else {
+                        stopUp = true;
+                    }
+                }if(yTile < 18 && yTile >= 0 && xRight < 18 && xRight >= 0) {
+                    isDestructible = checkTilePlacing(yTile, xRight);
+                    if (isDestructible != 0 && !stopRight) {
+                        spawnExplosion(yTile, xRight, graphicsContext);
+                        if(isDestructible == 2){
+                            stopRight = true;
+                        }
+                    } else {
+                        stopRight = true;
+                    }
+                }if(yTile < 18 && yTile >= 0 && xLeft < 18 && xLeft >= 0) {
+                    isDestructible = checkTilePlacing(yTile, xLeft);
+                    if (isDestructible != 0 && !stopLeft) {
+                        spawnExplosion(yTile, xLeft, graphicsContext);
+                        if (isDestructible == 2) {
+                            stopLeft = true;
+                        }
+                    } else {
+                        stopLeft = true;
+                    }
+                }
+            }
+        }
+    }
+
+    public int checkTilePlacing(int y, int x) {     //Change it with a DestructionHandler like CollisionHandler //tileSet[xTile].getDestruction();
+        if(TileManager.tileMap[y][x] >= 20){
+            return 2;       //Last spawn, in this direction
+        }else if(TileManager.tileMap[y][x] <= 9){
+            return 1;       //Keep Going
+        }else{
+            return 0;       //dont continue
+        }
+    }
+
+    public void spawnExplosion(int spawnCordY, int spawnCordX, GraphicsContext graphicsContext){
+        List<IEntity> explosionspawns = runtimeInfo.getExplosionspawns();
+        IEntity explosion = EntityFactory.createGameplayObject(ObjectType.EXPLOSION, spawnCordX * scaledTileSize, spawnCordY * scaledTileSize, graphicsContext);
+        explosionspawns.add(explosion);
+        runtimeInfo.setGameplayObjects(explosionspawns);
+        log.debug("Big Bomb explosion placed");
+        changeCheckedTileDestructable(graphicsContext);
+    }
+
+    public void changeCheckedTileDestructable(GraphicsContext graphicsContext){
+        int x,y;
+        List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+        List<IEntity> explosionList = gameplayObjects.stream().filter(obj -> obj.getOBJECT_TYPE() == ObjectType.EXPLOSION)
+                .toList();
+        for (IEntity entity : explosionList) {
+            y = (entity.getMapPosY()) / scaledTileSize;
+            x = (entity.getMapPosX()) / scaledTileSize;
+            if (TileManager.tileMap[y][x] > 19) {
+                TileManager.tileMap[y][x] = 0;
+
+                //spawning item entitys
+                spawnItems(x * scaledTileSize, y * scaledTileSize, graphicsContext);
+            }
+        }
+    }
+
+    public void spawnItems(int x, int y,GraphicsContext graphicsContext){
+        final double dropChanceBigBombItemFrame = 0.1;
+        final double dropChanceHeart = 0.15;
+        final double dropChanceBlastUpItemFrame = 0.15;
+        final double dropChanceBlastDownItemFrame = 0.15;
+        final double dropChanceBombClock = 0.1;
+        final double dropChanceTeleportItemFrame = 0.15;
+        double randomDropChance = Math.random() * 1;
+
+        if (randomDropChance < dropChanceBigBombItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity heart = EntityFactory.createGameplayObject(ObjectType.BIG_BOMB_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(heart);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("BigBombItemFrame dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity bigBombItemFrame = EntityFactory.createGameplayObject(ObjectType.HEART, x, y, graphicsContext);
+            gameplayObjects.add(bigBombItemFrame);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.debug("heart dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame + dropChanceBlastUpItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity blastUpItemFrame = EntityFactory.createGameplayObject(ObjectType.BLASTUP_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(blastUpItemFrame);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("BlastUpItemFrame dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame + dropChanceBlastUpItemFrame + dropChanceBlastDownItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity blastDownItemFrame = EntityFactory.createGameplayObject(ObjectType.BLASTDOWN_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(blastDownItemFrame);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("BlastUpItemFrame dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame + dropChanceBlastUpItemFrame + dropChanceBlastDownItemFrame + dropChanceBombClock) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity bombClockItemFrame = EntityFactory.createGameplayObject(ObjectType.BOMBCLOCK_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(bombClockItemFrame);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("BombClockItemFrame dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame + dropChanceBlastUpItemFrame + dropChanceBombClock + dropChanceTeleportItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity teleportItemFrame = EntityFactory.createGameplayObject(ObjectType.TELEPORT_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(teleportItemFrame);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("TeleportItemFrame dropped");
+        }
+    }
+
     @Override
     public void healPlayer(int heal) {
 
@@ -153,6 +307,11 @@ public class BigBomb implements IEntity {
         OBJECT_STATUS = objectStatus;
     }
 
+    @Override
+    public int getplayer() {
+        return 0;
+    }
+
     @Override
     public int getHealth() {
         return 0;
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BigBombItemFrame.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BigBombItemFrame.java
index 790cc0de444243cd6004342b5894a751231b3692..442b1d287d94128f63fd6789af450137f51b6c7c 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BigBombItemFrame.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BigBombItemFrame.java
@@ -15,7 +15,6 @@ import java.util.Objects;
 
 
 public class BigBombItemFrame implements IEntity {
-    private boolean status;
 
     private static final Logger log = LogManager.getLogger(Bomb.class);
     private final int posX;
@@ -53,7 +52,7 @@ public class BigBombItemFrame implements IEntity {
 
 
     @Override
-    public void updateEntity(GameSceneController gameScene) {
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
 
     }
 
@@ -63,7 +62,7 @@ public class BigBombItemFrame implements IEntity {
     }
 
     @Override
-    public void placeBomb(IEntity entity, GraphicsContext graphicsContext) {
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
 
     }
 
@@ -149,6 +148,11 @@ public class BigBombItemFrame implements IEntity {
         OBJECT_STATUS = objectStatus;
     }
 
+    @Override
+    public int getplayer() {
+        return 0;
+    }
+
     @Override
     public int getHealth() {
         return 0;
@@ -158,6 +162,5 @@ public class BigBombItemFrame implements IEntity {
     public int getMaxEntityHealth() {
         return 0;
     }
-
 }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BlastDownItemFrame.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BlastDownItemFrame.java
new file mode 100644
index 0000000000000000000000000000000000000000..0bca8c9f47862d873f9594f135e5d0825a793725
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BlastDownItemFrame.java
@@ -0,0 +1,163 @@
+package de.hdm_stuttgart.battlearena.Model.Entity.GameplayObjects;
+
+import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+import de.hdm_stuttgart.battlearena.Model.Entity.EntityDirection;
+import de.hdm_stuttgart.battlearena.Model.Entity.IEntity;
+
+import javafx.geometry.BoundingBox;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.image.Image;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+
+import java.util.Objects;
+
+
+public class BlastDownItemFrame implements IEntity {
+    private static final Logger log = LogManager.getLogger(BlastDownItemFrame.class);
+    private final int posX;
+    private final int posY;
+
+    private int frameIndex = 0;
+    private int frameCounter = 0;
+    private Image[] frames = new Image[4];
+    private final GraphicsContext graphicsContext;
+    private BoundingBox boxCollider;
+    private final ObjectType OBJECT_TYPE = ObjectType.BLASTDOWN_ITEMFRAME;
+    private ObjectStatus OBJECT_STATUS = ObjectStatus.UNUSED;
+
+    public BlastDownItemFrame(int posX, int posY, GraphicsContext graphicsContext) {
+        this.posX = posX;
+        this.posY = posY;
+        this.graphicsContext = graphicsContext;
+
+        initializeEntity();
+    }
+
+    @Override
+    public void initializeEntity() {
+        loadEntitySprites();
+        boxCollider = new BoundingBox(posX + 12, posY + 12, 24, 24);
+    }
+
+    @Override
+    public void loadEntitySprites() {
+        frames[0] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastDownItemFrameUp.png")));
+        frames[1] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastDownItemFrameMiddle.png")));
+        frames[2] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastDownItemFrameDown.png")));
+        frames[3] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastDownItemFrameMiddle.png")));
+    }
+
+
+    @Override
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void checkGameplayObjectInteraction(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void attack(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void updateEntityWalkAnimation() {
+
+    }
+
+    public void renderEntity(GraphicsContext graphicsContext) {
+        graphicsContext.drawImage(frames[frameIndex], posX, posY, 48, 48);
+        updateAnimation();
+    }
+    private void updateAnimation() {
+        frameCounter++;
+
+        if (frameCounter > 25) {
+            if (frameIndex == 0) {
+                frameIndex = 1;
+            } else if (frameIndex == 1) {
+                frameIndex = 2;
+            } else if (frameIndex == 2) {
+                frameIndex = 3;
+            } else if (frameIndex == 3) {
+                frameIndex = 0;
+            }
+            frameCounter = 0;
+        }
+    }
+
+    @Override
+    public void healPlayer(int heal) {
+
+    }
+
+    @Override
+    public BoundingBox getBoxCollider() {
+        return boxCollider;
+    }
+
+    @Override
+    public EntityDirection getEntityDirection() {
+        return null;
+    }
+
+    @Override
+    public int getEntitySpeed() {
+        return 0;
+    }
+
+    @Override
+    public void gotHit(int damageDone) {
+
+    }
+
+    @Override
+    public int getMapPosX() {
+        return posX;
+    }
+
+    @Override
+    public int getMapPosY() {
+        return posY;
+    }
+
+    @Override
+    public ObjectType getOBJECT_TYPE() {
+        return OBJECT_TYPE;
+    }
+
+    @Override
+    public ObjectStatus getOBJECT_STATUS() {
+        return OBJECT_STATUS;
+    }
+
+    @Override
+    public void setObjectStatus(ObjectStatus objectStatus) {
+        OBJECT_STATUS = objectStatus;
+    }
+
+    @Override
+    public int getplayer() {
+        return 0;
+    }
+
+    @Override
+    public int getHealth() {
+        return 0;
+    }
+
+    @Override
+    public int getMaxEntityHealth() {
+        return 0;
+    }
+}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BlastUpItemFrame.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BlastUpItemFrame.java
index 613664880e59ac0ce569d06a51b153fd7247003f..7b242d0a590a7a1da232db5890fa9ea762b2a2b3 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BlastUpItemFrame.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BlastUpItemFrame.java
@@ -15,9 +15,7 @@ import java.util.Objects;
 
 
 public class BlastUpItemFrame implements IEntity {
-    private boolean status;
-
-    private static final Logger log = LogManager.getLogger(Bomb.class);
+    private static final Logger log = LogManager.getLogger(BlastUpItemFrame.class);
     private final int posX;
     private final int posY;
 
@@ -45,15 +43,15 @@ public class BlastUpItemFrame implements IEntity {
 
     @Override
     public void loadEntitySprites() {
-        frames[0] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastItemFrameUp.png")));
-        frames[1] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastItemFrameMiddle.png")));
-        frames[2] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastItemFrameDown.png")));
-        frames[3] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastItemFrameMiddle.png")));
+        frames[0] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastUpItemFrameUp.png")));
+        frames[1] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastUpItemFrameMiddle.png")));
+        frames[2] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastUpItemFrameDown.png")));
+        frames[3] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/BlastUpItemFrameMiddle.png")));
     }
 
 
     @Override
-    public void updateEntity(GameSceneController gameScene) {
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
 
     }
 
@@ -63,7 +61,7 @@ public class BlastUpItemFrame implements IEntity {
     }
 
     @Override
-    public void placeBomb(IEntity entity, GraphicsContext graphicsContext) {
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
 
     }
 
@@ -81,13 +79,12 @@ public class BlastUpItemFrame implements IEntity {
         graphicsContext.drawImage(frames[frameIndex], posX, posY, 48, 48);
         updateAnimation();
     }
-    private void updateAnimation() {        //Easily add more frames
+    private void updateAnimation() {
         frameCounter++;
 
-        if (frameCounter > 25) {    //17
+        if (frameCounter > 25) {
             if (frameIndex == 0) {
                 frameIndex = 1;
-                //PLayer.spawnExplosion();
             } else if (frameIndex == 1) {
                 frameIndex = 2;
             } else if (frameIndex == 2) {
@@ -150,6 +147,11 @@ public class BlastUpItemFrame implements IEntity {
     }
 
     @Override
+
+    public int getplayer() {
+        return 0;
+    }
+
     public int getHealth() {
         return 0;
     }
@@ -159,4 +161,4 @@ public class BlastUpItemFrame implements IEntity {
         return 0;
     }
 
-}
+}
\ No newline at end of file
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Bomb.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Bomb.java
index f586f7f5c44945ff17e055d5436d47823c18e0fc..f919ee7c7a3b950ef8e36911448d6235a9bc9c06 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Bomb.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Bomb.java
@@ -1,11 +1,17 @@
 package de.hdm_stuttgart.battlearena.Model.Entity.GameplayObjects;
 
 import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
 import de.hdm_stuttgart.battlearena.Model.Entity.EntityDirection;
+import de.hdm_stuttgart.battlearena.Model.Entity.EntityFactory;
 import de.hdm_stuttgart.battlearena.Model.Entity.IEntity;
 
+
+import de.hdm_stuttgart.battlearena.Model.Map.TileManager;
+
 import de.hdm_stuttgart.battlearena.Model.Sound.SFX;
 import de.hdm_stuttgart.battlearena.Model.Sound.SoundEffects;
+
 import javafx.geometry.BoundingBox;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.image.Image;
@@ -13,28 +19,33 @@ import javafx.scene.image.Image;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 
+import java.util.List;
 import java.util.Objects;
 
 public class Bomb implements IEntity {
-    private boolean status;
-
     private static final Logger log = LogManager.getLogger(Bomb.class);
+    RuntimeInfo runtimeInfo = RuntimeInfo.getInstance();
     private final int posX;
     private final int posY;
     private int frameIndex = 0;
     private int frameCounter = 0;
-    private Image[] frames = new Image[6];
+    private final Image[] frames = new Image[6];
     private final GraphicsContext graphicsContext;
     private BoundingBox boxCollider;
     private final ObjectType OBJECT_TYPE = ObjectType.BOMB;
     private ObjectStatus OBJECT_STATUS = ObjectStatus.UNUSED;
+
+    private final int scaledTileSize = 48;
+    private int blastradius;
+
     //private SoundEffects soundEffects;
 
-    public Bomb(int posX, int posY, GraphicsContext graphicsContext) {
+
+    public Bomb(int posX, int posY, GraphicsContext graphicsContext, int blastradius) {
         this.posX = posX;
         this.posY = posY;
         this.graphicsContext = graphicsContext;
-
+        this.blastradius = blastradius;
         initializeEntity();
     }
 
@@ -49,13 +60,10 @@ public class Bomb implements IEntity {
         frames[0] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/bomb/bomb.png")));
         frames[1] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/bomb/bomb.png")));
         frames[2] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/bomb/redbomb.png")));
-        frames[3] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/bigexplosion.png")));
-        frames[4] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/middleexplosion.png")));
-        frames[5] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/smallexplosion.png")));
     }
 
     @Override
-    public void updateEntity(GameSceneController gameScene) {
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
 
     }
 
@@ -65,7 +73,7 @@ public class Bomb implements IEntity {
     }
 
     @Override
-    public void placeBomb(IEntity entity, GraphicsContext graphicsContext) {
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
 
     }
 
@@ -91,23 +99,177 @@ public class Bomb implements IEntity {
 
             if (frameIndex == 0) {
                 frameIndex = 1;
-                //PLayer.spawnExplosion();
             } else if (frameIndex == 1) {
                 frameIndex = 2;
             } else if (frameIndex == 2) {
                 frameIndex = 3;
+
+                checkExplosionSpawn(graphicsContext, blastradius);
+
                 //soundEffects.playSoundEffectOnce(SFX.BOMB);
-            } else if (frameIndex == 3) {
-                frameIndex = 4;
-            } else if (frameIndex == 4) {
-                frameIndex = 5;
-            } else if (frameIndex == 5) {
+
+
                 OBJECT_STATUS = ObjectStatus.USED;
             }
             frameCounter = 0;
         }
     }
 
+    public void checkExplosionSpawn(GraphicsContext graphicsContext, int blastradius) {
+
+        int isDestructible;
+        boolean stopDown = false, stopUp = false, stopRight = false, stopLeft = false;
+
+        int xTile = posX / scaledTileSize;
+        int yTile = posY / scaledTileSize;
+        int yUp = yTile;
+        int xRight = xTile;
+        int yDown = yTile;
+        int xLeft = xTile;
+        spawnExplosion(yTile, xTile,graphicsContext);
+
+        isDestructible = checkTilePlacing(yTile, xTile);
+        if (isDestructible != 0) {
+            spawnExplosion(yTile,xTile,graphicsContext);
+            for (int i = 0; i < blastradius; i++) {
+                yDown += 1;
+                yUp -= 1;
+                xRight += 1;
+                xLeft -= 1;
+                if(yDown < 18 && yDown >= 0 && xTile < 18 && xTile >= 0) {
+                    isDestructible = checkTilePlacing(yDown, xTile);
+                    if (isDestructible != 0 && !stopDown) {
+                        spawnExplosion(yDown, xTile, graphicsContext);
+                        if(isDestructible == 2){
+                            stopDown = true;
+                        }
+                    } else {
+                        stopDown = true;
+                    }
+                }
+                if(yUp < 18 && yUp >= 0 && xTile < 18 && xTile >= 0) {
+                    isDestructible = checkTilePlacing(yUp, xTile);
+                    if (isDestructible != 0 && !stopUp) {
+                        spawnExplosion(yUp, xTile, graphicsContext);
+                        if(isDestructible == 2){
+                            stopUp = true;
+                        }
+                    } else {
+                        stopUp = true;
+                    }
+                }if(yTile < 18 && yTile >= 0 && xRight < 18 && xRight >= 0) {
+                    isDestructible = checkTilePlacing(yTile, xRight);
+                    if (isDestructible != 0 && !stopRight) {
+                        spawnExplosion(yTile, xRight, graphicsContext);
+                        if(isDestructible == 2){
+                            stopRight = true;
+                        }
+                    } else {
+                        stopRight = true;
+                    }
+                }if(yTile < 18 && yTile >= 0 && xLeft < 18 && xLeft >= 0) {
+                    isDestructible = checkTilePlacing(yTile, xLeft);
+                    if (isDestructible != 0 && !stopLeft) {
+                        spawnExplosion(yTile, xLeft, graphicsContext);
+                        if (isDestructible == 2) {
+                            stopLeft = true;
+                        }
+                    } else {
+                        stopLeft = true;
+                    }
+                }
+            }
+        }
+    }
+
+    public void spawnExplosion(int spawnCordY, int spawnCordX, GraphicsContext graphicsContext){
+        List<IEntity> explosionspawns = runtimeInfo.getExplosionspawns();
+        IEntity explosion = EntityFactory.createGameplayObject(ObjectType.EXPLOSION, spawnCordX * scaledTileSize, spawnCordY * scaledTileSize, graphicsContext);
+        explosionspawns.add(explosion);
+        runtimeInfo.setGameplayObjects(explosionspawns);
+        log.debug("explosion placed");
+        changeCheckedTileDestructable(graphicsContext);
+    }
+
+    public int checkTilePlacing(int y, int x) {     //Change it with a DestructionHandler like CollisionHandler //tileSet[xTile].getDestruction();
+        if(TileManager.tileMap[y][x] >= 20){
+            return 2;       //Last spawn, in this direction
+        }else if(TileManager.tileMap[y][x] <= 9){
+            return 1;       //Keep Going
+        }else{
+            return 0;       //dont continue
+        }
+    }
+    public void changeCheckedTileDestructable(GraphicsContext graphicsContext){
+        int x,y;
+        List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+        List<IEntity> explosionList = gameplayObjects.stream().filter(obj -> obj.getOBJECT_TYPE() == ObjectType.EXPLOSION)
+                .toList();
+        for (IEntity entity : explosionList) {
+            y = (entity.getMapPosY()) / scaledTileSize;
+            x = (entity.getMapPosX()) / scaledTileSize;
+            if (TileManager.tileMap[y][x] > 19) {
+                TileManager.tileMap[y][x] = 0;
+
+                //spawning item entitys
+                spawnItems(x * scaledTileSize, y * scaledTileSize, graphicsContext);
+            }
+        }
+    }
+
+    public void spawnItems(int x, int y,GraphicsContext graphicsContext){
+        final double dropChanceBigBombItemFrame = 0.1;
+        final double dropChanceHeart = 0.15;
+        final double dropChanceBlastUpItemFrame = 0.15;
+        final double dropChanceBlastDownItemFrame = 0.15;
+        final double dropChanceBombClock = 0.1;
+        final double dropChanceTeleportItemFrame = 0.15;
+        double randomDropChance = Math.random() * 1;
+
+        if (randomDropChance < dropChanceBigBombItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity heart = EntityFactory.createGameplayObject(ObjectType.BIG_BOMB_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(heart);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("BigBombItemFrame dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity bigBombItemFrame = EntityFactory.createGameplayObject(ObjectType.HEART, x, y, graphicsContext);
+            gameplayObjects.add(bigBombItemFrame);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.debug("heart dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame + dropChanceBlastUpItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity blastUpItemFrame = EntityFactory.createGameplayObject(ObjectType.BLASTUP_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(blastUpItemFrame);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("BlastUpItemFrame dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame + dropChanceBlastUpItemFrame + dropChanceBlastDownItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity blastDownItemFrame = EntityFactory.createGameplayObject(ObjectType.BLASTDOWN_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(blastDownItemFrame);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("BlastUpItemFrame dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame + dropChanceBlastUpItemFrame + dropChanceBlastDownItemFrame + dropChanceBombClock) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity bombClock = EntityFactory.createGameplayObject(ObjectType.BOMBCLOCK_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(bombClock);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("BombClockItemFrame dropped");
+        }
+        else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame + dropChanceBlastUpItemFrame + dropChanceBlastDownItemFrame + dropChanceBombClock + dropChanceTeleportItemFrame) {
+            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+            IEntity teleportItemFrame = EntityFactory.createGameplayObject(ObjectType.TELEPORT_ITEMFRAME, x, y, graphicsContext);
+            gameplayObjects.add(teleportItemFrame);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.info("TeleportItemFrame dropped");
+        }
+    }
+
     @Override
     public void healPlayer(int heal) {
 
@@ -158,6 +320,11 @@ public class Bomb implements IEntity {
         OBJECT_STATUS = objectStatus;
     }
 
+    @Override
+    public int getplayer() {
+        return 0;
+    }
+
     @Override
     public int getHealth() {
         return 0;
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BombClockItemFrame.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BombClockItemFrame.java
new file mode 100644
index 0000000000000000000000000000000000000000..d1fbbb357926b7fb947ac987918e10c13e881953
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/BombClockItemFrame.java
@@ -0,0 +1,163 @@
+package de.hdm_stuttgart.battlearena.Model.Entity.GameplayObjects;
+
+import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+import de.hdm_stuttgart.battlearena.Model.Entity.EntityDirection;
+import de.hdm_stuttgart.battlearena.Model.Entity.IEntity;
+import javafx.geometry.BoundingBox;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.image.Image;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.Objects;
+
+
+public class BombClockItemFrame implements IEntity {
+
+    private static final Logger log = LogManager.getLogger(BombClockItemFrame.class);
+    private final int posX;
+    private final int posY;
+
+    private int frameIndex = 0;
+    private int frameCounter = 0;
+    private Image[] frames = new Image[4];
+    private final GraphicsContext graphicsContext;
+    private BoundingBox boxCollider;
+    private final ObjectType OBJECT_TYPE = ObjectType.BOMBCLOCK_ITEMFRAME;
+    private ObjectStatus OBJECT_STATUS = ObjectStatus.UNUSED;
+
+    public BombClockItemFrame(int posX, int posY, GraphicsContext graphicsContext) {
+        this.posX = posX;
+        this.posY = posY;
+        this.graphicsContext = graphicsContext;
+
+        initializeEntity();
+    }
+
+    @Override
+    public void initializeEntity() {
+        loadEntitySprites();
+        boxCollider = new BoundingBox(posX + 12, posY + 12, 24, 24);
+    }
+
+    @Override
+    public void loadEntitySprites() {
+        frames[0] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/ClockItemFrame1Up.png")));
+        frames[1] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/ClockItemFrame2Middle.png")));
+        frames[2] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/ClockItemFrame3Down.png")));
+        frames[3] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/ClockItemFrame4Middle.png")));
+    }
+
+
+    @Override
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void checkGameplayObjectInteraction(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void attack(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void updateEntityWalkAnimation() {
+
+    }
+
+    public void renderEntity(GraphicsContext graphicsContext) {
+        graphicsContext.drawImage(frames[frameIndex], posX, posY, 48, 48);
+        updateAnimation();
+    }
+    private void updateAnimation() {
+        frameCounter++;
+
+        if (frameCounter > 25) {
+            if (frameIndex == 0) {
+                frameIndex = 1;
+            } else if (frameIndex == 1) {
+                frameIndex = 2;
+            } else if (frameIndex == 2) {
+                frameIndex = 3;
+            } else if (frameIndex == 3) {
+                frameIndex = 0;
+            }
+            frameCounter = 0;
+        }
+    }
+
+    @Override
+    public void healPlayer(int heal) {
+
+    }
+
+    @Override
+    public BoundingBox getBoxCollider() {
+        return boxCollider;
+    }
+
+    @Override
+    public EntityDirection getEntityDirection() {
+        return null;
+    }
+
+    @Override
+    public int getEntitySpeed() {
+        return 0;
+    }
+
+    @Override
+    public void gotHit(int damageDone) {
+
+    }
+
+    @Override
+    public int getMapPosX() {
+        return posX;
+    }
+
+    @Override
+    public int getMapPosY() {
+        return posY;
+    }
+
+    @Override
+    public ObjectType getOBJECT_TYPE() {
+        return OBJECT_TYPE;
+    }
+
+    @Override
+    public ObjectStatus getOBJECT_STATUS() {
+        return OBJECT_STATUS;
+    }
+
+    @Override
+    public void setObjectStatus(ObjectStatus objectStatus) {
+        OBJECT_STATUS = objectStatus;
+    }
+
+    @Override
+    public int getplayer() {
+        return 0;
+    }
+
+    @Override
+    public int getHealth() {
+        return 0;
+    }
+
+    @Override
+    public int getMaxEntityHealth() {
+        return 0;
+    }
+}
+
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Explosion.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Explosion.java
index 977b890eb602792bc23cb7d347f35b619a424695..c0edb59df1d96100d297b5fe89343ad57e073d56 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Explosion.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Explosion.java
@@ -12,9 +12,6 @@ import org.apache.logging.log4j.Logger;
 import java.util.Objects;
 
 public class Explosion implements IEntity {
-
-    private boolean status;
-
     private static final Logger log = LogManager.getLogger(Explosion.class);
     private final int posX;
     private final int posY;
@@ -39,16 +36,13 @@ public class Explosion implements IEntity {
     }
     @Override
     public void loadEntitySprites() {
-        frames[0] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/clear.png")));
-        frames[1] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/clear.png")));
-        frames[2] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/clear.png")));
-        frames[3] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/bigexplosion.png")));
-        frames[4] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/middleexplosion.png")));
-        frames[5] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/smallexplosion.png")));
+        frames[0] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/bigexplosion.png")));
+        frames[1] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/middleexplosion.png")));
+        frames[2] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/smallexplosion.png")));
     }
 
     @Override
-    public void updateEntity(GameSceneController gameScene) {
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
 
     }
 
@@ -58,7 +52,7 @@ public class Explosion implements IEntity {
     }
 
     @Override
-    public void placeBomb(IEntity entity, GraphicsContext graphicsContext) {
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
 
     }
 
@@ -80,19 +74,12 @@ public class Explosion implements IEntity {
     private void updateAnimation() {        //Easily add more frames
         frameCounter++;
 
-        if (frameCounter > 17) {
+        if (frameCounter > 20) {
             if (frameIndex == 0) {
                 frameIndex = 1;
-                //PLayer.spawnExplosion();
             } else if (frameIndex == 1) {
                 frameIndex = 2;
             } else if (frameIndex == 2) {
-                frameIndex = 3;
-            } else if (frameIndex == 3) {
-                frameIndex = 4;
-            } else if (frameIndex == 4) {
-                frameIndex = 5;
-            }else if( frameIndex == 5){
                 OBJECT_STATUS = ObjectStatus.USED;
             }
             frameCounter = 0;
@@ -148,6 +135,9 @@ public class Explosion implements IEntity {
         OBJECT_STATUS = objectStatus;
     }
 
+    @Override
+    public int getplayer() { return 0;}
+
     @Override
     public int getHealth() {
         return 0;
@@ -155,6 +145,7 @@ public class Explosion implements IEntity {
 
     @Override
     public int getMaxEntityHealth() {
+
         return 0;
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Heart.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Heart.java
index db00a108cadf5468cad08a2a3c855fa8121299f4..0245be324c69a0f99fb53b5b3b51aba876ae421f 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Heart.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Heart.java
@@ -36,7 +36,7 @@ public class Heart implements IEntity {
     @Override
     public void initializeEntity() {
         loadEntitySprites();
-        boxCollider = new BoundingBox(posX+12, posY+12, 24, 24);
+        boxCollider = new BoundingBox(posX + 12, posY + 12, 24, 24);
     }
 
     @Override
@@ -45,7 +45,7 @@ public class Heart implements IEntity {
     }
 
     @Override
-    public void updateEntity(GameSceneController gameScene) {
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
 
     }
 
@@ -55,7 +55,7 @@ public class Heart implements IEntity {
     }
 
     @Override
-    public void placeBomb(IEntity entity, GraphicsContext graphicsContext) {
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
 
     }
 
@@ -124,6 +124,11 @@ public class Heart implements IEntity {
         OBJECT_STATUS = objectStatus;
     }
 
+    @Override
+    public int getplayer() {
+        return 0;
+    }
+
     @Override
     public int getHealth() {
         return 0;
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Marker.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Marker.java
new file mode 100644
index 0000000000000000000000000000000000000000..428abb7a82ab72ff63718c8ee8e64865ca6db296
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Marker.java
@@ -0,0 +1,151 @@
+package de.hdm_stuttgart.battlearena.Model.Entity.GameplayObjects;
+
+import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
+import de.hdm_stuttgart.battlearena.Model.Entity.EntityDirection;
+import de.hdm_stuttgart.battlearena.Model.Entity.EntityFactory;
+import de.hdm_stuttgart.battlearena.Model.Entity.IEntity;
+
+import de.hdm_stuttgart.battlearena.Model.Map.TileManager;
+import javafx.geometry.BoundingBox;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.image.Image;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+
+import java.util.List;
+import java.util.Objects;
+
+public class Marker implements IEntity {
+    private static final Logger log = LogManager.getLogger(Marker.class);
+    RuntimeInfo runtimeInfo = RuntimeInfo.getInstance();
+    private final int posX;
+    private final int posY;
+    private final int player;
+    private int frameIndex = 0;
+    private int frameCounter = 0;
+    private Image sprite;
+    private final GraphicsContext graphicsContext;
+    private BoundingBox boxCollider;
+    private final ObjectType OBJECT_TYPE = ObjectType.MARKER;
+    private ObjectStatus OBJECT_STATUS = ObjectStatus.UNUSED;
+
+    public Marker(int posX, int posY, GraphicsContext graphicsContext, int player) {
+        this.posX = posX;
+        this.posY = posY;
+        this.graphicsContext = graphicsContext;
+        this.player = player;
+
+        initializeEntity();
+    }
+
+    @Override
+    public void initializeEntity() {
+        loadEntitySprites();
+    }
+
+    @Override
+    public void loadEntitySprites() {
+        if(player == 1){
+            sprite = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/Markersmall.png")));
+        } else if(player == 2) {
+            sprite = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/vfx/Markersmalllightblue.png")));
+        }
+    }       //Else throw Exception ?
+
+    @Override
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void checkGameplayObjectInteraction(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void attack(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void updateEntityWalkAnimation() {
+
+    }
+
+    public void renderEntity(GraphicsContext graphicsContext) {
+        graphicsContext.drawImage(sprite, posX, posY, 48, 48);
+    }
+
+    @Override
+    public void healPlayer(int heal) {
+
+    }
+
+    @Override
+    public BoundingBox getBoxCollider() {
+        return boxCollider;
+    }
+
+    @Override
+    public EntityDirection getEntityDirection() {
+        return null;
+    }
+
+    @Override
+    public int getEntitySpeed() {
+        return 0;
+    }
+
+    @Override
+    public void gotHit(int damageDone) {
+
+    }
+
+    @Override
+    public int getMapPosX() {
+        return posX;
+    }
+
+    @Override
+    public int getMapPosY() {
+        return posY;
+    }
+
+    @Override
+    public ObjectType getOBJECT_TYPE() {
+        return OBJECT_TYPE;
+    }
+
+    @Override
+    public ObjectStatus getOBJECT_STATUS() {
+        return OBJECT_STATUS;
+    }
+
+    @Override
+    public void setObjectStatus(ObjectStatus objectStatus) {
+        OBJECT_STATUS = objectStatus;
+    }
+    @Override
+    public int getplayer(){
+        return player;
+    }
+
+    @Override
+    public int getHealth() {
+        return 0;
+    }
+
+    @Override
+    public int getMaxEntityHealth() {
+        return 0;
+    }
+
+}
+
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/ObjectType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/ObjectType.java
index 62f47fb70fc0c97b8d37e6ceaf3a6ea932aeb225..b11ccc5f5d81eb0465184ea2983fca487d08220d 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/ObjectType.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/ObjectType.java
@@ -2,10 +2,14 @@ package de.hdm_stuttgart.battlearena.Model.Entity.GameplayObjects;
 
 public enum ObjectType {
     BLASTUP_ITEMFRAME,
+    BLASTDOWN_ITEMFRAME,
+    BOMBCLOCK_ITEMFRAME,
     BLASTUP,
     BIG_BOMB_ITEMFRAME,
     BIG_BOMB,
     BOMB,
     HEART,
-    EXPLOSION
+    EXPLOSION,
+    MARKER,
+    TELEPORT_ITEMFRAME
 }
\ No newline at end of file
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/TeleportationItemFrame.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/TeleportationItemFrame.java
new file mode 100644
index 0000000000000000000000000000000000000000..447266fa9b65a3e9c6e517f765e75ea949673861
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/TeleportationItemFrame.java
@@ -0,0 +1,162 @@
+package de.hdm_stuttgart.battlearena.Model.Entity.GameplayObjects;
+
+import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+import de.hdm_stuttgart.battlearena.Model.Entity.EntityDirection;
+import de.hdm_stuttgart.battlearena.Model.Entity.IEntity;
+import javafx.geometry.BoundingBox;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.image.Image;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.Objects;
+
+
+public class TeleportationItemFrame implements IEntity {
+    private static final Logger log = LogManager.getLogger(TeleportationItemFrame.class);
+    private final int posX;
+    private final int posY;
+    private int frameIndex = 0;
+    private int frameCounter = 0;
+    private Image[] frames = new Image[4];
+    private final GraphicsContext graphicsContext;
+    private BoundingBox boxCollider;
+    private final ObjectType OBJECT_TYPE = ObjectType.TELEPORT_ITEMFRAME;
+    private ObjectStatus OBJECT_STATUS = ObjectStatus.UNUSED;
+
+    public TeleportationItemFrame(int posX, int posY, GraphicsContext graphicsContext) {
+        this.posX = posX;
+        this.posY = posY;
+        this.graphicsContext = graphicsContext;
+
+        initializeEntity();
+    }
+
+    @Override
+    public void initializeEntity() {
+        loadEntitySprites();
+        boxCollider = new BoundingBox(posX + 12, posY + 12, 24, 24);
+    }
+
+    @Override
+    public void loadEntitySprites() {
+        frames[0] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/AmogUsUp.png")));
+        frames[1] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/AmogUsMiddle.png")));
+        frames[2] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/AmogUsDown.png")));
+        frames[3] = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/objects/itemFrames/AmogUsMiddle.png")));
+    }
+
+
+    @Override
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void checkGameplayObjectInteraction(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void attack(IEntity entity, GraphicsContext graphicsContext) {
+
+    }
+
+    @Override
+    public void updateEntityWalkAnimation() {
+
+    }
+
+    public void renderEntity(GraphicsContext graphicsContext) {
+        graphicsContext.drawImage(frames[frameIndex], posX, posY, 48, 48);
+        updateAnimation();
+    }
+    private void updateAnimation() {
+        frameCounter++;
+
+        if (frameCounter > 25) {
+            if (frameIndex == 0) {
+                frameIndex = 1;
+            } else if (frameIndex == 1) {
+                frameIndex = 2;
+            } else if (frameIndex == 2) {
+                frameIndex = 3;
+            } else if (frameIndex == 3) {
+                frameIndex = 0;
+            }
+            frameCounter = 0;
+        }
+    }
+
+    @Override
+    public void healPlayer(int heal) {
+
+    }
+
+    @Override
+    public BoundingBox getBoxCollider() {
+        return boxCollider;
+    }
+
+    @Override
+    public EntityDirection getEntityDirection() {
+        return null;
+    }
+
+    @Override
+    public int getEntitySpeed() {
+        return 0;
+    }
+
+    @Override
+    public void gotHit(int damageDone) {
+
+    }
+
+    @Override
+    public int getMapPosX() {
+        return posX;
+    }
+
+    @Override
+    public int getMapPosY() {
+        return posY;
+    }
+
+    @Override
+    public ObjectType getOBJECT_TYPE() {
+        return OBJECT_TYPE;
+    }
+
+    @Override
+    public ObjectStatus getOBJECT_STATUS() {
+        return OBJECT_STATUS;
+    }
+
+    @Override
+    public void setObjectStatus(ObjectStatus objectStatus) {
+        OBJECT_STATUS = objectStatus;
+    }
+
+    @Override
+    public int getplayer() {
+        return 0;
+    }
+
+    @Override
+    public int getHealth() {
+        return 0;
+    }
+
+    @Override
+    public int getMaxEntityHealth() {
+        return 0;
+    }
+}
+
+
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java
index 3d9cfc2bcbd713b797f95f13cc3f9517175076f0..336332169b1e9c5e90438cc9672426bf53a84838 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java
@@ -12,12 +12,12 @@ public interface IEntity {
 
     void loadEntitySprites();
 
-    void updateEntity(GameSceneController gameScene);
+    void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext);
 
     //checks collision with GameplayObjects by iterating through GameplayObjects list
     void checkGameplayObjectInteraction(IEntity entity, GraphicsContext graphicsContext);
 
-    void placeBomb(IEntity entity, GraphicsContext graphicsContext);
+    void placeBombAction(IEntity entity, GraphicsContext graphicsContext);
 
     void attack(IEntity entity, GraphicsContext graphicsContext);
 
@@ -42,8 +42,12 @@ public interface IEntity {
     ObjectType getOBJECT_TYPE();
 
     ObjectStatus getOBJECT_STATUS();
+
     void setObjectStatus(ObjectStatus objectStatus);
 
+    int getplayer();
+
     int getHealth();
     int getMaxEntityHealth();
+
 }
\ No newline at end of file
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/NetworkPlayerTwo.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/NetworkPlayerTwo.java
index d04ca21c3307bfba4250b3c8599685f4b19f0808..cdd2277a1710c10a8ec54d9539123fda0e22161c 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/NetworkPlayerTwo.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/NetworkPlayerTwo.java
@@ -34,7 +34,7 @@ class NetworkPlayerTwo implements IEntity{
     }
 
     @Override
-    public void updateEntity(GameSceneController gameScene) {
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
 
     }
 
@@ -44,7 +44,7 @@ class NetworkPlayerTwo implements IEntity{
     }
 
     @Override
-    public void placeBomb(IEntity entity, GraphicsContext graphicsContext) {
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
 
     }
 
@@ -117,6 +117,11 @@ class NetworkPlayerTwo implements IEntity{
     }
 
     @Override
+
+    public int getplayer() {
+        return 0;
+    }
+
     public int getHealth() {
         return health;
     }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
index 051bd8278abe858b23aa6377b0a7fa6e84b039b8..2203eaa5cbe9b440a8b3da2f529ef3ffaa45a2f5 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
@@ -80,9 +80,16 @@ class Player implements IEntity {
     private int iFrameCounter = 0;
     private int attackRate = 0;
     private int bombPlacementRate = 0;
+    private int bombReducedPlacementRate = 100;
     private boolean isBigBombItemFrame = false;
     private boolean isBlastUpItemFrame = false;
+    private boolean isBlastDownItemFrame = false;
+    private boolean isBombClockItemFrame = false;
+    private boolean markerPlacedPlayerOne = false;
+    private boolean markerPlacedPlayerTwo = false;
+    private boolean isTeleportItemFrame = false;
     private int blastradius = 1;
+    private final int pixelpadding = 30;
 
     public Player(GraphicsContext gameScene, InputHandler inputHandler, EntityClass entityClass,
                   GameSceneController gameSceneController, PlayerMode PLAYER_MODE) {
@@ -211,7 +218,7 @@ class Player implements IEntity {
     }
 
     @Override
-    public void updateEntity(GameSceneController gameScene) {
+    public void updateEntity(GameSceneController gameScene, GraphicsContext graphicsContext) {
         if (PLAYER_MODE == PlayerMode.PLAYER_ONE) {
             updateInvincibility();
             updateAttackRate();
@@ -229,7 +236,7 @@ class Player implements IEntity {
 
                 boolean isWalkableTile = collisionHandler.handleMapCollision(this, scaledTileSize, gameSceneController);
 
-                performEntityMovement(isWalkableTile);
+                performEntityMovement(isWalkableTile, graphicsContext);
 
                 boolean isEntityCollision = boxCollider.intersects(gameScene.getEnemy().getBoxCollider());
                 //boolean isEntityCollision = collisionHandler.handleBoxCollision(boxCollider, gameScene.getEnemy().getBoxCollider());
@@ -255,7 +262,7 @@ class Player implements IEntity {
 
                 boolean isWalkableTile = collisionHandler.handleMapCollision(this, scaledTileSize, gameSceneController);
 
-                performEntityMovement(isWalkableTile);
+                performEntityMovement(isWalkableTile, graphicsContext);
 
                 boolean isEntityCollision = boxCollider.intersects(gameScene.getPlayer().getBoxCollider());
                 //boolean isEntityCollision = collisionHandler.handleBoxCollision(boxCollider, gameScene.getEnemy().getBoxCollider());
@@ -285,9 +292,27 @@ class Player implements IEntity {
         }
     }
 
-    private void performEntityMovement(boolean isWalkableTile) {
+    private void performEntityMovement(boolean isWalkableTile, GraphicsContext graphicsContext) {
+        int xTile = (pixelpadding + mapPosX) / scaledTileSize;
+        int yTile = (pixelpadding + mapPosY) / scaledTileSize;
+        int lastxTile = xTile;
+        int lastyTile = yTile;
+
+
+        int pos;
+        if (PLAYER_MODE == PlayerMode.PLAYER_ONE && !markerPlacedPlayerOne) {
+            markerPlacedPlayerOne = findNearestTpTile(yTile, xTile, graphicsContext);
+
+
+        }
+        if (PLAYER_MODE == PlayerMode.PLAYER_TWO && !markerPlacedPlayerTwo) {
+            markerPlacedPlayerTwo = findNearestTpTile(yTile, xTile, graphicsContext);
+
+        }
+
         lastMapPosX = mapPosX;
         lastMapPosY = mapPosY;
+
         try {
             sfx.playSoundEffect(gameSceneController);
         } catch (IOException e) {
@@ -295,6 +320,7 @@ class Player implements IEntity {
         } catch (InterruptedException e) {
             throw new RuntimeException(e);
         }
+
         if (isWalkableTile) {
             switch (playerDirection) {
                 case UP:
@@ -310,6 +336,124 @@ class Player implements IEntity {
                     mapPosX += playerSpeed;
             }
         }
+        xTile = (pixelpadding + mapPosX) / scaledTileSize;
+        yTile = (pixelpadding + mapPosY) / scaledTileSize;
+
+        if (PLAYER_MODE == PlayerMode.PLAYER_ONE && lastxTile != xTile || PLAYER_MODE == PlayerMode.PLAYER_ONE && lastyTile != yTile) {
+            markerPlacedPlayerOne = removeMarker(markerPlacedPlayerOne);
+        }
+        if (PLAYER_MODE == PlayerMode.PLAYER_TWO && lastxTile != xTile || PLAYER_MODE == PlayerMode.PLAYER_TWO && lastyTile != yTile) {
+            markerPlacedPlayerTwo = removeMarker(markerPlacedPlayerTwo);
+        }
+
+    }
+
+    private boolean placeMarker(int yTile, int xTile, GraphicsContext graphicsContext) {
+
+        List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+        int player = 0;
+
+        if (isTeleportItemFrame && TileManager.tileMap[yTile][xTile] < 10 && PLAYER_MODE == PlayerMode.PLAYER_ONE) {
+            player = 1;
+            IEntity marker = EntityFactory.createMarker(ObjectType.MARKER, xTile * scaledTileSize, yTile * scaledTileSize, graphicsContext, player);
+            gameplayObjects.add(marker);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.debug("Player 1 marker placed");
+            //isTeleportItemFrame = false;
+        } else if (isTeleportItemFrame && TileManager.tileMap[yTile][xTile] < 10 && PLAYER_MODE == PlayerMode.PLAYER_TWO) {
+            player = 2;
+            IEntity marker = EntityFactory.createMarker(ObjectType.MARKER, xTile * scaledTileSize, yTile * scaledTileSize, graphicsContext, player);
+            gameplayObjects.add(marker);
+            runtimeInfo.setGameplayObjects(gameplayObjects);
+            log.debug("Player 2 marker placed");
+            //isTeleportItemFrame = false;
+        }
+
+        //checkTilePlacing(yTile, xTile);
+        return true;
+    }
+
+    private boolean findNearestTpTile(int yTile, int xTile, GraphicsContext graphicsContext) {
+
+        final int minTpLength = 1;
+        final int maxTpLength = 18;
+        boolean isAbleToPlace = false;
+        boolean stopDown = false, stopUp = false, stopRight = false, stopLeft = false;
+        boolean markerSet = false;
+        int yUp = yTile - minTpLength;
+        int yDown = yTile + minTpLength;
+        int xLeft = xTile - minTpLength;
+        int xRight = xTile + minTpLength;
+
+        for (int i = minTpLength; i < maxTpLength; i++) {
+            if (playerDirection == EntityDirection.UP) {
+                yUp -= 1;
+                isAbleToPlace = checkTilePlacing(yUp, xTile);
+                if (isAbleToPlace && !stopUp) {
+                    placeMarker(yUp, xTile, graphicsContext);
+
+                    stopUp = true;
+                    markerSet = true;
+                }
+            } else if (playerDirection == EntityDirection.DOWN) {
+                yDown += 1;
+                isAbleToPlace = checkTilePlacing(yDown, xTile);
+                if (isAbleToPlace && !stopDown) {
+                    placeMarker(yDown, xTile, graphicsContext);
+
+                    stopDown = true;
+                    markerSet = true;
+                }
+            } else if (playerDirection == EntityDirection.LEFT) {
+                xLeft -= 1;
+                isAbleToPlace = checkTilePlacing(yTile, xLeft);
+                if (isAbleToPlace && !stopLeft) {
+                    placeMarker(yTile, xLeft, graphicsContext);
+
+                    stopLeft = true;
+                    markerSet = true;
+                }
+            } else if (playerDirection == EntityDirection.RIGHT) {
+                xRight += 1;
+                isAbleToPlace = checkTilePlacing(yTile, xRight);
+                if (isAbleToPlace && !stopRight) {
+                    placeMarker(yTile, xRight, graphicsContext);
+
+                    stopRight = true;
+                    markerSet = true;
+                }
+            }
+        }
+        return markerSet;
+    }
+
+    public boolean checkTilePlacing(int y, int x) {     //Change it with a DestructionHandler like CollisionHandler //tileSet[xTile].getDestruction();
+        if (y < 18 && y > 0 && x < 18 && x > 0 && TileManager.tileMap[y][x] < 10) {
+            return true;
+        }
+        return false;
+    }
+
+    private boolean removeMarker(boolean markerPlacedPlayer) {
+        List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
+        if (markerPlacedPlayer == markerPlacedPlayerOne) {
+            for (IEntity gameplayObject : gameplayObjects) {
+                if (gameplayObject.getOBJECT_TYPE() == ObjectType.MARKER && gameplayObject.getplayer() == 1) {
+                    log.debug("Removed Marker Player 1");
+
+                    gameplayObject.setObjectStatus(ObjectStatus.USED);
+                }
+            }
+        } else if (markerPlacedPlayer == markerPlacedPlayerTwo) {
+            for (IEntity gameplayObject : gameplayObjects) {
+                if (gameplayObject.getOBJECT_TYPE() == ObjectType.MARKER && gameplayObject.getplayer() == 2) {
+                    log.debug("Removed Marker Player 2");
+
+                    gameplayObject.setObjectStatus(ObjectStatus.USED);
+                }
+            }
+        }           //TODO: Marker - AND other Bombs - get ONLY visually removed when explosion is set to USED ??
+        return false;
     }
 
     private void performEntityCollision(boolean isEntityCollision) {
@@ -330,7 +474,6 @@ class Player implements IEntity {
 
     @Override
     public void checkGameplayObjectInteraction(IEntity entity, GraphicsContext graphicsContext) {
-
         List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
         for (IEntity gameplayObject : gameplayObjects) {
             if (gameplayObject.getOBJECT_TYPE() == ObjectType.HEART) {
@@ -339,21 +482,11 @@ class Player implements IEntity {
                     healPlayer(5);
                     gameplayObject.setObjectStatus(ObjectStatus.USED);
                 }
-            } else if (gameplayObject.getOBJECT_TYPE() == ObjectType.BOMB) {
-                if (gameplayObject.getBoxCollider().intersects(boxCollider)) {
-                    log.debug("Collision with bomb");
-                    gotHit(10);
-                }
             } else if (gameplayObject.getOBJECT_TYPE() == ObjectType.EXPLOSION) {
                 if (gameplayObject.getBoxCollider().intersects(boxCollider)) {
                     log.debug("Collision with explosion");
                     gotHit(10);
                 }
-            } else if (gameplayObject.getOBJECT_TYPE() == ObjectType.BIG_BOMB) {
-                if (gameplayObject.getBoxCollider().intersects(boxCollider)) {
-                    log.debug("Collision with bigBomb");
-                    gotHit(10);
-                }
             } else if (gameplayObject.getOBJECT_TYPE() == ObjectType.BIG_BOMB_ITEMFRAME) {
                 if (gameplayObject.getBoxCollider().intersects(boxCollider)) {
                     isBigBombItemFrame = true;
@@ -362,200 +495,122 @@ class Player implements IEntity {
                 }
             } else if (gameplayObject.getOBJECT_TYPE() == ObjectType.BLASTUP_ITEMFRAME) {
                 if (gameplayObject.getBoxCollider().intersects(boxCollider)) {
-                    isBlastUpItemFrame = true;
                     log.info("Collision with blastUpItemFrame");
+                    isBlastUpItemFrame = true;
+                    blastradius = updateBlastradius(blastradius);
+                    gameplayObject.setObjectStatus(ObjectStatus.USED);
+                }
+            } else if (gameplayObject.getOBJECT_TYPE() == ObjectType.BLASTDOWN_ITEMFRAME) {
+                if (gameplayObject.getBoxCollider().intersects(boxCollider)) {
+                    log.info("Collision with blastDownItemFrame");
+                    isBlastDownItemFrame = true;
+                    blastradius = updateBlastradius(blastradius);
+                    gameplayObject.setObjectStatus(ObjectStatus.USED);
+                }
+            } else if (gameplayObject.getOBJECT_TYPE() == ObjectType.BOMBCLOCK_ITEMFRAME) {
+                if (gameplayObject.getBoxCollider().intersects(boxCollider)) {
+                    log.info("Collision with bombClockItemFrame");
+                    isBombClockItemFrame = true;
+                    bombPlacementRate = updateBombPlacementRate(bombPlacementRate);
+                    gameplayObject.setObjectStatus(ObjectStatus.USED);
+                }
+            } else if (gameplayObject.getOBJECT_TYPE() == ObjectType.TELEPORT_ITEMFRAME) {
+                if (gameplayObject.getBoxCollider().intersects(boxCollider)) {
+                    isTeleportItemFrame = true;
+                    log.info("Collision with teleportItemFrame");
                     gameplayObject.setObjectStatus(ObjectStatus.USED);
                 }
             }
         }
-    }
 
-    public int updateblastradius(int blastradius) {
-        if (isBlastUpItemFrame) {
-            blastradius++;
-            log.info("Upded blastradius:" + blastradius);
-            isBlastUpItemFrame = false;
-            return blastradius;
-        } else {
-            return blastradius;
-        }
     }
 
     @Override
-    public void placeBomb(IEntity entity, GraphicsContext graphicsContext) {
-        blastradius = updateblastradius(blastradius);
+    public void placeBombAction(IEntity entity, GraphicsContext graphicsContext) {
 
         List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
         if (inputHandler.isBomb() && PLAYER_MODE == PlayerMode.PLAYER_ONE && bombPlacementRate == 0 ||
                 inputHandler.isSdBomb() && PLAYER_MODE == PlayerMode.PLAYER_TWO && bombPlacementRate == 0) {
             sfx.playSoundEffectOnce(SFX.BOMB);
-            if (isBigBombItemFrame) {
-                log.debug("We have Itemframes in the List");
-                bombPlacementRate = 100;
-                int xTile = mapPosX / scaledTileSize;
-                int yTile = mapPosY / scaledTileSize;
+
+            blastradius = updateBlastradius(blastradius);
+            if (isBigBombItemFrame && !isTeleportItemFrame) {
+                log.debug("We have Big_Bomb ItemFrames in the List");
+                bombPlacementRate = updateBombPlacementRate(bombPlacementRate);
+                int xTile = (pixelpadding + mapPosX) / scaledTileSize;
+                int yTile = (pixelpadding + mapPosY) / scaledTileSize;
 
                 if (TileManager.tileMap[yTile][xTile] < 10) {
-                    int blastradiusbig = 18;
-                    //List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
-                    IEntity bigbomb = EntityFactory.createGameplayObject(ObjectType.BIG_BOMB, xTile * scaledTileSize, yTile * scaledTileSize, graphicsContext);
+                    IEntity bigbomb = EntityFactory.createBombs(ObjectType.BIG_BOMB, xTile * scaledTileSize, yTile * scaledTileSize, graphicsContext, blastradius);
                     gameplayObjects.add(bigbomb);
                     runtimeInfo.setGameplayObjects(gameplayObjects);
-                    log.info("Bigbomb placed");
-                    checkExplosionSpawn(graphicsContext, blastradiusbig);
+                    log.debug("Bigbomb placed");
                     isBigBombItemFrame = false;
                 }
-            } else {
-                log.debug("No Itemframes in the List");
-                bombPlacementRate = 100;
-                //int extrapixelpadding = 2;            //Could this fix the wrong Tile because of the Player??
+            } else if (PLAYER_MODE == PlayerMode.PLAYER_ONE && isTeleportItemFrame) {
+                bombPlacementRate = 25;
+                for (IEntity gameplayObject : gameplayObjects) {
+                    if (gameplayObject.getOBJECT_TYPE() == ObjectType.MARKER && gameplayObject.getplayer() == 1) {
+                        mapPosX = gameplayObject.getMapPosX();
+                        mapPosY = gameplayObject.getMapPosY();
+                        log.info("Teleport Player 1");
+                        gameplayObject.setObjectStatus(ObjectStatus.USED);
+                    }
+                }
+                removeMarker(markerPlacedPlayerOne);
+                isTeleportItemFrame = false;
+            } else if (PLAYER_MODE == PlayerMode.PLAYER_TWO && isTeleportItemFrame) {
+                bombPlacementRate = 25;
+                for (IEntity gameplayObject : gameplayObjects) {
+                    if (gameplayObject.getOBJECT_TYPE() == ObjectType.MARKER && gameplayObject.getplayer() == 2) {
+                        mapPosX = gameplayObject.getMapPosX();
+                        mapPosY = gameplayObject.getMapPosY();
+                        log.info("Teleport Player 2");
+                        gameplayObject.setObjectStatus(ObjectStatus.USED);
+                    }
+                }
+                removeMarker(markerPlacedPlayerTwo);
+                isTeleportItemFrame = false;
+            } else if (!isTeleportItemFrame) {
+                log.debug("No BigBomb Itemframes in the List");
+                bombPlacementRate = bombReducedPlacementRate;
                 int xTile = mapPosX / scaledTileSize;
                 int yTile = mapPosY / scaledTileSize;
 
                 if (TileManager.tileMap[yTile][xTile] < 10) {
-                    //List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
-                    IEntity bomb = EntityFactory.createGameplayObject(ObjectType.BOMB, xTile * scaledTileSize, yTile * scaledTileSize, graphicsContext);
+                    IEntity bomb = EntityFactory.createBombs(ObjectType.BOMB, xTile * scaledTileSize, yTile * scaledTileSize, graphicsContext, blastradius);
                     gameplayObjects.add(bomb);
                     runtimeInfo.setGameplayObjects(gameplayObjects);
                     log.info("bomb placed");
-                    checkExplosionSpawn(graphicsContext, blastradius);
                 }
             }
         }
     }
 
-    public void checkExplosionSpawn(GraphicsContext graphicsContext, int blastradius) {
-        int isDestructible;
-        boolean stopDown = false, stopUp = false, stopRight = false, stopLeft = false;
-        boolean stopUpRight = false, stopUpLeft = false, stopDownRight = false, stopDownLeft = false;
-
-        int xTile = mapPosX / scaledTileSize;       //TODO: Fix sometimes bad bomb spawning
-        int yTile = mapPosY / scaledTileSize;
-        int yUp = yTile;
-        int xRight = xTile;
-        int yDown = yTile;
-        int xLeft = xTile;
-        //final int blastradius = 2;          //should be 1-2
-        isDestructible = checkTilePlacing(yTile, xTile);
-        if (isDestructible != 0) {
-            for (int i = 0; i < blastradius; i++) {
-                yDown += 1;
-                yUp -= 1;
-                xRight += 1;
-                xLeft -= 1;
-                if (yDown < 18 && yDown >= 0 && xTile < 18 && xTile >= 0) {
-                    //changeCheckedTileDestroyable(graphicsContext);
-                    isDestructible = checkTilePlacing(yDown, xTile);
-                    if (isDestructible != 0 && !stopDown) {
-                        spawnExplosion(yDown, xTile, graphicsContext);
-                        if (isDestructible == 2) {
-                            stopDown = true;
-                        }
-                    } else {
-                        stopDown = true;
-                    }
-                }
-                if (yUp < 18 && yUp >= 0 && xTile < 18 && xTile >= 0) {
-                    //changeCheckedTileDestroyable(graphicsContext);
-                    isDestructible = checkTilePlacing(yUp, xTile);
-                    if (isDestructible != 0 && !stopUp) {
-                        spawnExplosion(yUp, xTile, graphicsContext);
-                        if (isDestructible == 2) {
-                            stopUp = true;
-                        }
-                    } else {
-                        stopUp = true;
-                    }
-                }
-                if (yTile < 18 && yTile >= 0 && xRight < 18 && xRight >= 0) {
-                    //changeCheckedTileDestroyable(graphicsContext);
-                    isDestructible = checkTilePlacing(yTile, xRight);
-                    if (isDestructible != 0 && !stopRight) {
-                        spawnExplosion(yTile, xRight, graphicsContext);
-                        if (isDestructible == 2) {
-                            stopRight = true;
-                        }
-                    } else {
-                        stopRight = true;
-                    }
-                }
-                if (yTile < 18 && yTile >= 0 && xLeft < 18 && xLeft >= 0) {
-                    //changeCheckedTileDestroyable(graphicsContext);
-                    isDestructible = checkTilePlacing(yTile, xLeft);
-                    if (isDestructible != 0 && !stopLeft) {
-                        spawnExplosion(yTile, xLeft, graphicsContext);
-                        if (isDestructible == 2) {
-                            stopLeft = true;
-                        }
-                    } else {
-                        stopLeft = true;
-                    }
-                }
-            }
-        }
-    }
-
-    public int checkTilePlacing(int y, int x) {     //Change it with a DestructionHandler like CollisionHandler //tileSet[xTile].getDestruction();
-        if (TileManager.tileMap[y][x] >= 20) {
-            return 2;       //Last spawn, in this direction
-        } else if (TileManager.tileMap[y][x] <= 9) {
-            return 1;       //Keep Going
-        } else {
-            return 0;       //dont continue
+    private int updateBombPlacementRate(int bombPlacementRate) {
+        if (isBombClockItemFrame && bombReducedPlacementRate > 10) {
+            bombReducedPlacementRate -= 10;
+            log.info("Reducing bomb Placementrate:" + bombReducedPlacementRate);
+            isBombClockItemFrame = false;
         }
+        return bombReducedPlacementRate;
     }
 
-    public void changeCheckedTileDestructable(GraphicsContext graphicsContext) {
-        int x, y;        //TODO Fix Explosion
-        List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
-        List<IEntity> explosionList = gameplayObjects.stream().filter(obj -> obj.getOBJECT_TYPE() == ObjectType.EXPLOSION)
-                .toList();
-        for (IEntity entity : explosionList) {
-            y = (entity.getMapPosY()) / scaledTileSize;
-            x = (entity.getMapPosX()) / scaledTileSize;
-            if (TileManager.tileMap[y][x] > 19) {
-                TileManager.tileMap[y][x] = 0;
-                sfx.playSoundEffectOnce(SFX.WOOD_Destruction);
-                //spawning item entitys
-                spawnItems(x * scaledTileSize, y * scaledTileSize, graphicsContext);
+    public int updateBlastradius(int blastradius) {
+        if (isBlastUpItemFrame) {
+            blastradius++;
+            log.info("Upping blastradius:" + blastradius);
+            isBlastUpItemFrame = false;
+        } else if (isBlastDownItemFrame) {
+            if (blastradius > 1) {
+                blastradius--;
+                log.info("Lowering blastradius:" + blastradius);
             }
+            isBlastDownItemFrame = false;
         }
-    }
 
-    public void spawnExplosion(int spawnCordX, int spawnCordY, GraphicsContext graphicsContext) {
-        List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
-        IEntity explosion = EntityFactory.createGameplayObject(ObjectType.EXPLOSION, spawnCordY * scaledTileSize, spawnCordX * scaledTileSize, graphicsContext);
-        gameplayObjects.add(explosion);
-        runtimeInfo.setGameplayObjects(gameplayObjects);
-        log.debug("explosion placed");
-        changeCheckedTileDestructable(graphicsContext);
-    }
-
-    public void spawnItems(int x, int y, GraphicsContext graphicsContext) {
-        final double dropChanceBigBombItemFrame = 0.1;
-        final double dropChanceHeart = 0.15;
-        final double dropChanceBlastUpItemFrame = 0.15;
-        double randomDropChance = Math.random() * 1;
-
-        if (randomDropChance < dropChanceBigBombItemFrame) {
-            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
-            IEntity heart = EntityFactory.createGameplayObject(ObjectType.BIG_BOMB_ITEMFRAME, x, y, graphicsContext);
-            gameplayObjects.add(heart);
-            runtimeInfo.setGameplayObjects(gameplayObjects);
-            log.info("heart dropped");
-        } else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame) {
-            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
-            IEntity bigBombItemFrame = EntityFactory.createGameplayObject(ObjectType.HEART, x, y, graphicsContext);
-            gameplayObjects.add(bigBombItemFrame);
-            runtimeInfo.setGameplayObjects(gameplayObjects);
-            log.info("BigBombItemFrame dropped");
-        } else if (randomDropChance < dropChanceHeart + dropChanceBigBombItemFrame + dropChanceBlastUpItemFrame) {
-            List<IEntity> gameplayObjects = runtimeInfo.getGameplayObjects();
-            IEntity bigBombItemFrame = EntityFactory.createGameplayObject(ObjectType.BLASTUP_ITEMFRAME, x, y, graphicsContext);
-            gameplayObjects.add(bigBombItemFrame);
-            runtimeInfo.setGameplayObjects(gameplayObjects);
-            log.info("BlastUpItemFrame dropped");
-        }
+        return blastradius;
+
     }
 
     @Override
@@ -569,9 +624,13 @@ class Player implements IEntity {
 
         if (inputHandler.isAttack() && PLAYER_MODE == PlayerMode.PLAYER_ONE && attackRate == 0 ||
                 inputHandler.isSdAttack() && PLAYER_MODE == PlayerMode.PLAYER_TWO && attackRate == 0) {
-            attackRate = 15;
+
+            attackRate = 50;
+
+
             sfx.playSoundEffectOnce(SFX.SWORD_SWING);
 
+
             if (playerDirection == EntityDirection.UP) {
                 hitBox = new BoundingBox(mapPosX + playerWidth, mapPosY - 10, attackWidth, attackRange);
                 graphicsContext.strokeRect(mapPosX + playerWidth, mapPosY - 10, attackWidth, attackRange);
@@ -672,12 +731,13 @@ class Player implements IEntity {
         if (iFrameCounter == 0) {
             if (damagedHealth > 0) {
                 health -= damageDone;
-                iFrameCounter = 10;
+                iFrameCounter = 100;
             } else {
+
                 health = 0;
-                //log.info("Dead");
+                log.info("Dead");
             }
-            //log.info("DamageTaken, current Health: " + health);
+            log.info("DamageTaken, current Health: " + health);
         }
 
     }
@@ -746,4 +806,8 @@ class Player implements IEntity {
         return maxPlayerHealth;
     }
 
+    @Override
+    public int getplayer() {
+        return 0;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileFactory.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileFactory.java
index d31689700319fc4dd7bf25082c0c5915df0a09ee..7c10e8b13b9d11b5cda2f27af0be4a882118fa18 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileFactory.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Map/TileFactory.java
@@ -10,6 +10,7 @@ public class TileFactory {
 
     private static final Logger log = LogManager.getLogger(TileFactory.class);
 
+
     public static ITile createTile(TileType tileType, TileType tileType2, Image tileSprite, SFXLoop sfx) {
         if (tileType == TileType.WALKABLE && tileType2 == TileType.DESTRUCTIBLE) {
             log.info("Tile with type: " + tileType + " " + tileType2 + " created.");
diff --git a/src/main/resources/textures/objects/itemFrames/AmogUsDown.png b/src/main/resources/textures/objects/itemFrames/AmogUsDown.png
new file mode 100644
index 0000000000000000000000000000000000000000..efd12b87b444db988f3b9dac98c140cb50f8559c
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/AmogUsDown.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/AmogUsMiddle.png b/src/main/resources/textures/objects/itemFrames/AmogUsMiddle.png
new file mode 100644
index 0000000000000000000000000000000000000000..b4141f898b06342b1620aede93ad572a03bc3c93
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/AmogUsMiddle.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/AmogUsUp.png b/src/main/resources/textures/objects/itemFrames/AmogUsUp.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce2825c57c2eb28724863bb9b5e3247f3e23a4a1
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/AmogUsUp.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ArmorFrameGreyDown.png b/src/main/resources/textures/objects/itemFrames/ArmorFrameGreyDown.png
new file mode 100644
index 0000000000000000000000000000000000000000..09a90af35ff3aa3fc7bad10651bae877694aa6b2
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ArmorFrameGreyDown.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ArmorFrameGreyMiddle.png b/src/main/resources/textures/objects/itemFrames/ArmorFrameGreyMiddle.png
new file mode 100644
index 0000000000000000000000000000000000000000..daa21909c5980cb99dcae663cae71fdefa41e367
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ArmorFrameGreyMiddle.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ArmorFrameGreyUp.png b/src/main/resources/textures/objects/itemFrames/ArmorFrameGreyUp.png
new file mode 100644
index 0000000000000000000000000000000000000000..e04a4663d982a678b025b861c3a32ebd49d806b3
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ArmorFrameGreyUp.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ArmorFramePurpleMiddle.png b/src/main/resources/textures/objects/itemFrames/ArmorFramePurpleMiddle.png
new file mode 100644
index 0000000000000000000000000000000000000000..dda8533891e1362adff512c0109f4392513d520c
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ArmorFramePurpleMiddle.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/BlastDownItemFrameDown.png b/src/main/resources/textures/objects/itemFrames/BlastDownItemFrameDown.png
new file mode 100644
index 0000000000000000000000000000000000000000..9147e7e301037b901445a3492aac6ce9c4351c30
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/BlastDownItemFrameDown.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/BlastDownItemFrameMiddle.png b/src/main/resources/textures/objects/itemFrames/BlastDownItemFrameMiddle.png
new file mode 100644
index 0000000000000000000000000000000000000000..30e08a4dac0225a815d2587ffe4d06f2312317e1
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/BlastDownItemFrameMiddle.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/BlastDownItemFrameUp.png b/src/main/resources/textures/objects/itemFrames/BlastDownItemFrameUp.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e295e1b884e5a89489d81c61aaa5f343e5424ff
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/BlastDownItemFrameUp.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/BlastItemFrameDown.png b/src/main/resources/textures/objects/itemFrames/BlastItemFrameDown.png
deleted file mode 100644
index e5d250bb9b20c7e192358a4dd143cd8b7a908f6f..0000000000000000000000000000000000000000
Binary files a/src/main/resources/textures/objects/itemFrames/BlastItemFrameDown.png and /dev/null differ
diff --git a/src/main/resources/textures/objects/itemFrames/BlastItemFrameMiddle.png b/src/main/resources/textures/objects/itemFrames/BlastItemFrameMiddle.png
deleted file mode 100644
index 2c8a93e650aaed70057b6e64fcd1233e19f307f5..0000000000000000000000000000000000000000
Binary files a/src/main/resources/textures/objects/itemFrames/BlastItemFrameMiddle.png and /dev/null differ
diff --git a/src/main/resources/textures/objects/itemFrames/BlastItemFrameUp.png b/src/main/resources/textures/objects/itemFrames/BlastItemFrameUp.png
deleted file mode 100644
index 4a633765b869cac0f47b399aa37a047b9e6bb85b..0000000000000000000000000000000000000000
Binary files a/src/main/resources/textures/objects/itemFrames/BlastItemFrameUp.png and /dev/null differ
diff --git a/src/main/resources/textures/objects/itemFrames/BlastUpItemFrameDown.png b/src/main/resources/textures/objects/itemFrames/BlastUpItemFrameDown.png
new file mode 100644
index 0000000000000000000000000000000000000000..d27512a067b1c26e0e09f951cd81c7370ba10905
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/BlastUpItemFrameDown.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/BlastUpItemFrameMiddle.png b/src/main/resources/textures/objects/itemFrames/BlastUpItemFrameMiddle.png
new file mode 100644
index 0000000000000000000000000000000000000000..bdab779804418a03f86897ec058dd742fecffc85
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/BlastUpItemFrameMiddle.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/BlastUpItemFrameUp.png b/src/main/resources/textures/objects/itemFrames/BlastUpItemFrameUp.png
new file mode 100644
index 0000000000000000000000000000000000000000..b334ff57e7f0d255e966ff4eb858e490c43bdabb
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/BlastUpItemFrameUp.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ClockItemFrame1Up.png b/src/main/resources/textures/objects/itemFrames/ClockItemFrame1Up.png
new file mode 100644
index 0000000000000000000000000000000000000000..26f4f749eb98775f1b4a74112002103d357dc54d
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ClockItemFrame1Up.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ClockItemFrame2Middle.png b/src/main/resources/textures/objects/itemFrames/ClockItemFrame2Middle.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f8bd6847d5bb4a895e3711e527ea821621564d8
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ClockItemFrame2Middle.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ClockItemFrame3Down.png b/src/main/resources/textures/objects/itemFrames/ClockItemFrame3Down.png
new file mode 100644
index 0000000000000000000000000000000000000000..3de4f072c037347a39f92e37de9f0f90614a0242
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ClockItemFrame3Down.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ClockItemFrame4Middle.png b/src/main/resources/textures/objects/itemFrames/ClockItemFrame4Middle.png
new file mode 100644
index 0000000000000000000000000000000000000000..7782b908bfe01fd7f40ac489fe2d643f9ee3fbe8
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ClockItemFrame4Middle.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ShieldItemFrameDown.png b/src/main/resources/textures/objects/itemFrames/ShieldItemFrameDown.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5a34200ee094e2b5133fd8cc2b052b14136c558
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ShieldItemFrameDown.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ShieldItemFrameMiddle.png b/src/main/resources/textures/objects/itemFrames/ShieldItemFrameMiddle.png
new file mode 100644
index 0000000000000000000000000000000000000000..6b3b918c86da9cc12baf5b65dc459e2304d674bf
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ShieldItemFrameMiddle.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/ShieldItemFrameUp.png b/src/main/resources/textures/objects/itemFrames/ShieldItemFrameUp.png
new file mode 100644
index 0000000000000000000000000000000000000000..38b7bc12987427762b56bda36d80035fbb4baa18
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/ShieldItemFrameUp.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/Skull_ItemFrameMiddle.png b/src/main/resources/textures/objects/itemFrames/Skull_ItemFrameMiddle.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc5258c1d9d80a0f35679f0ee8d9f2a988e27375
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/Skull_ItemFrameMiddle.png differ
diff --git a/src/main/resources/textures/objects/itemFrames/Skull_ItemFrameMiddle2.png b/src/main/resources/textures/objects/itemFrames/Skull_ItemFrameMiddle2.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf384e9aa58884bc258e38cf0bc47e5d4d677fc0
Binary files /dev/null and b/src/main/resources/textures/objects/itemFrames/Skull_ItemFrameMiddle2.png differ
diff --git a/src/main/resources/textures/objects/vfx/Marker.png b/src/main/resources/textures/objects/vfx/Marker.png
new file mode 100644
index 0000000000000000000000000000000000000000..d93cf7020d44ae72288246af0d6aad2faf2d5e93
Binary files /dev/null and b/src/main/resources/textures/objects/vfx/Marker.png differ
diff --git a/src/main/resources/textures/objects/vfx/Markersmall.png b/src/main/resources/textures/objects/vfx/Markersmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..e291f0dfff61225eae925b1ce3c5a6d933f9b885
Binary files /dev/null and b/src/main/resources/textures/objects/vfx/Markersmall.png differ
diff --git a/src/main/resources/textures/objects/vfx/Markersmallblue.png b/src/main/resources/textures/objects/vfx/Markersmallblue.png
new file mode 100644
index 0000000000000000000000000000000000000000..edc10055737c918b8c94b1ce10b1fa052a8668b5
Binary files /dev/null and b/src/main/resources/textures/objects/vfx/Markersmallblue.png differ
diff --git a/src/main/resources/textures/objects/vfx/Markersmalllightblue.png b/src/main/resources/textures/objects/vfx/Markersmalllightblue.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ad0c5747621a84e37bc05bb0e8451080bd98fc6
Binary files /dev/null and b/src/main/resources/textures/objects/vfx/Markersmalllightblue.png differ
diff --git a/src/main/resources/textures/objects/vfx/explosionFrame3.png b/src/main/resources/textures/objects/vfx/explosionFrame3.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc9fca358c62b821aa12ba60ac15ad11e2762aaf
Binary files /dev/null and b/src/main/resources/textures/objects/vfx/explosionFrame3.png differ
diff --git a/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtilsTest.java b/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtilsTest.java
index 6fe7a78190c6e19cc745d4aaec49d281970665cf..eccb5e56bb077aa56ec18d9476eec803dcd02d41 100644
--- a/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtilsTest.java
+++ b/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtilsTest.java
@@ -33,7 +33,7 @@ public class CryptoUtilsTest {
                 testInfo.getDisplayName()));
     }
     @Test
-    void encryptDecryptiontest() throws IOException {
+    void encryptDecryptionTest() throws IOException {
         BufferedWriter writer = new BufferedWriter(new FileWriter(encryptiondecryptiontestFile));
         writer.write(testtext);
         writer.close();
diff --git a/src/test/java/de/hdm_stuttgart/battlearena/Model/Entity/PlayerTest.java b/src/test/java/de/hdm_stuttgart/battlearena/Model/Entity/PlayerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..7055c8bad92ea6d3136c0b210d0a36579cf52e53
--- /dev/null
+++ b/src/test/java/de/hdm_stuttgart/battlearena/Model/Entity/PlayerTest.java
@@ -0,0 +1,29 @@
+package de.hdm_stuttgart.battlearena.Model.Entity;
+
+import de.hdm_stuttgart.battlearena.Controller.Enum.PlayerMode;
+import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler;
+import de.hdm_stuttgart.battlearena.Model.Entity.EntityClass;
+import de.hdm_stuttgart.battlearena.Model.Entity.EntityDirection;
+import de.hdm_stuttgart.battlearena.Model.Map.TileManager;
+import javafx.fxml.FXML;
+import javafx.scene.layout.BorderPane;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
+
+public class PlayerTest {
+    @FXML
+    private BorderPane gameScene;
+
+
+    GameSceneController GameSceneController = new GameSceneController();
+    //TileManager tileManager = new TileManager()
+    Player player = new Player(null, InputHandler.getInstance(), EntityClass.HUMAN, GameSceneController, PlayerMode.PLAYER_ONE);
+    @Test
+    public void checkTileWalkable(){
+
+        int x = 1, y =1;
+        if(TileManager.tileMap[y][x] < 10)
+        assertTrue(player.checkTilePlacing(x,y));
+    }
+}