diff --git a/Engine/src/live/World.ts b/Engine/src/live/World.ts
index 2593d3e..b24d000 100644
--- a/Engine/src/live/World.ts
+++ b/Engine/src/live/World.ts
@@ -1,6 +1,10 @@
 import { Entity } from "./Entity"
+import * as planck from 'planck'
 
 export interface WorldContext {
   addEntity(entity: Entity, layerTitle: string, x: number, y: number): void
   removeEntity(entity: Entity): void
+  queryAABB(aabb: planck.AABB, callback: (fixture: planck.Fixture) => boolean): void
+  rayCast(point1: planck.Vec2, point2: planck.Vec2, callback: (fixture: planck.Fixture, pointer: planck.Vec2, normal: planck.Vec2, fraction: number) => boolean): void
+  queryEntities(min: [number, number], max: [number, number]): Entity[]
 }
\ No newline at end of file
diff --git a/Engine/src/states/Game.ts b/Engine/src/states/Game.ts
index 07688ff..5a705c4 100644
--- a/Engine/src/states/Game.ts
+++ b/Engine/src/states/Game.ts
@@ -254,10 +254,6 @@ export function GameState(ctx: ContextI, selectedAnimal: string, selectedSegment
 
         let entity = new AnimalEntity(animals[animal])
 
-        setTimeout(() => {
-          entity.dead = true
-          entity.shouldGib = true
-        }, 1000+Math.random()*3000)
 
         addEntity(entity, 'objects', x, y)
       }
@@ -373,6 +369,7 @@ export function GameState(ctx: ContextI, selectedAnimal: string, selectedSegment
         shape = planck.Polygon(spriteShape.points.map(v=>planck.Vec2(v[0], v[1])))
       }
       if (shape !== undefined) {
+        entity.shape = shape
         let body = world.createDynamicBody({
           position: planck.Vec2(entity.x, entity.y),
           fixedRotation: true,
@@ -460,6 +457,41 @@ export function GameState(ctx: ContextI, selectedAnimal: string, selectedSegment
   let worldContext: WorldContext = {
     addEntity,
     removeEntity,
+    queryAABB: (aabb: planck.AABB, callback: (fixture: planck.Fixture) => boolean) => {
+      world.queryAABB(aabb, callback)
+    },
+    rayCast: (point1: planck.Vec2, point2: planck.Vec2, callback: (fixture: planck.Fixture, point: planck.Vec2, normal: planck.Vec2, fraction: number) => boolean) => {
+      world.rayCast(point1, point2, callback)
+    },
+    queryEntities: (min: [number, number], max: [number, number]): Entity[] => {
+      let ret: Entity[] = []
+      for (let entity of entities) {
+        if (!entity.shape) {
+          continue
+        }
+        let p = entity.position
+        let r = entity.shape.getRadius()
+        let a = {
+          x: min[0],
+          w: max[0] - min[0],
+          y: min[1],
+          h: max[1] - min[1],
+        }
+        let b = {
+          x: p[0],
+          w: r,
+          y: p[1],
+          h: r,
+        }
+        console.log(a, 'vs', b)
+        if (
+          (Math.abs(min[0] - (p[0]-r)) * 2 < ((max[0]-min[0]) + r)) &&
+          (Math.abs(min[1] - (p[1]-r)) * 2 < ((max[1]-min[1]) + r))) {
+            ret.push(entity)
+        }
+      }
+      return ret
+    },
   }
 
   let desiredActions: Action[] = []