diff --git a/gamedata/assets/robot/0.png b/gamedata/assets/robot/0.png new file mode 100644 index 0000000..24b7601 Binary files /dev/null and b/gamedata/assets/robot/0.png differ diff --git a/gamedata/assets/robot/1.png b/gamedata/assets/robot/1.png new file mode 100644 index 0000000..5a347cb Binary files /dev/null and b/gamedata/assets/robot/1.png differ diff --git a/gamedata/assets/robot/2.png b/gamedata/assets/robot/2.png new file mode 100644 index 0000000..003023a Binary files /dev/null and b/gamedata/assets/robot/2.png differ diff --git a/gamedata/assets/robot/3.png b/gamedata/assets/robot/3.png new file mode 100644 index 0000000..c5c1206 Binary files /dev/null and b/gamedata/assets/robot/3.png differ diff --git a/gamedata/assets/robot/4.png b/gamedata/assets/robot/4.png new file mode 100644 index 0000000..5a347cb Binary files /dev/null and b/gamedata/assets/robot/4.png differ diff --git a/gamedata/assets/robot/5.png b/gamedata/assets/robot/5.png new file mode 100644 index 0000000..003023a Binary files /dev/null and b/gamedata/assets/robot/5.png differ diff --git a/gamedata/assets/robot/death.png b/gamedata/assets/robot/death.png new file mode 100644 index 0000000..e826f04 Binary files /dev/null and b/gamedata/assets/robot/death.png differ diff --git a/gamedata/maps/TulipFields/map.json b/gamedata/maps/TulipFields/map.json index e239618..4c692bc 100644 --- a/gamedata/maps/TulipFields/map.json +++ b/gamedata/maps/TulipFields/map.json @@ -418,7 +418,7 @@ [-1], [-1], [6, 1], - [-1], + [9, 2], [8, 0], [-1], [-1], @@ -507,7 +507,96 @@ [-1], [-1], [6, 1], + [7, 1], + [8, 1], [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1] + ], + [ + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [10, 3], + [-1], + [-1], + [-1], + [-1], + [-1], + [-1], + [6, 1], + [7, 1], [8, 1], [-1], [-1], @@ -596,7 +685,7 @@ [-1], [-1], [6, 1], - [-1], + [7, 1], [8, 1], [-1], [-1], @@ -685,96 +774,7 @@ [-1], [-1], [6, 1], - [-1], - [8, 1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1] - ], - [ - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [6, 1], - [-1], + [7, 1], [8, 1], [-1], [-1], @@ -862,8 +862,8 @@ [-1], [-1], [6, 0], - [-1], - [-1], + [11, 2], + [7, 1], [8, 1], [-1], [-1], @@ -950,9 +950,9 @@ [-1], [6, 0], [7, 0], - [-1], - [-1], - [-1], + [11, 2], + [7, 1], + [7, 1], [8, 1], [-1], [-1], @@ -1038,10 +1038,10 @@ [-1], [-1], [6, 1], - [-1], - [-1], - [-1], - [-1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], [8, 1], [-1], [-1], @@ -1127,10 +1127,10 @@ [-1], [-1], [6, 1], - [-1], - [-1], - [-1], - [-1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], [8, 1], [-1], [-1], @@ -1216,9 +1216,9 @@ [-1], [-1], [6, 1], - [-1], - [-1], - [-1], + [7, 1], + [7, 1], + [7, 1], [9, 0], [8, 2], [-1], @@ -1305,9 +1305,9 @@ [-1], [-1], [6, 1], - [-1], - [-1], - [-1], + [7, 1], + [7, 1], + [7, 1], [8, 1], [-1], [-1], @@ -1735,16 +1735,16 @@ [-1], [-1], [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], + [6, 1], + [7, 1], + [7, 1], + [9, 2], + [8, 0], + [1, 1], + [1, 1], + [1, 1], + [1, 1], + [1, 1], [-1], [-1], [-1], @@ -1824,28 +1824,28 @@ [-1], [-1], [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], + [6, 1], + [7, 1], + [7, 1], + [7, 1], + [9, 2], + [7, 0], + [8, 0], + [1, 1], + [1, 1], + [3, 2], + [2, 0], + [6, 0], + [7, 0], + [7, 0], + [7, 0], + [7, 0], + [7, 0], + [7, 0], + [7, 0], + [7, 0], + [7, 0], + [7, 0], [-1], [-1], [-1], @@ -1913,28 +1913,28 @@ [-1], [-1], [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], - [-1], + [6, 1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], + [9, 2], + [7, 0], + [7, 0], + [7, 0], + [7, 0], + [11, 2], + [7, 1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], + [7, 1], [-1], [-1], [-1], @@ -2433,8 +2433,8 @@ "gridCellsX": 87, "gridCellsY": 27, "entities": [ - {"name": "Solid", "id": 25, "_eid": "17026310", "x": 16, "y": 224, "width": 208, "height": 64, "originX": 0, "originY": 0}, - {"name": "Solid", "id": 26, "_eid": "17026310", "x": 432, "y": 224, "width": 160, "height": 48, "originX": 0, "originY": 0}, + {"name": "Solid", "id": 25, "_eid": "17026310", "x": 16, "y": 224, "width": 208, "height": 80, "originX": 0, "originY": 0}, + {"name": "Solid", "id": 26, "_eid": "17026310", "x": 432, "y": 224, "width": 160, "height": 128, "originX": 0, "originY": 0}, {"name": "Solid", "id": 27, "_eid": "17026310", "x": 480, "y": 192, "width": 112, "height": 32, "originX": 0, "originY": 0}, {"name": "SemiSolid", "id": 28, "_eid": "59763689", "x": 368, "y": 224, "width": 64, "height": 16, "originX": 0, "originY": 0}, {"name": "Solid", "id": 29, "_eid": "17026310", "x": 592, "y": 320, "width": 192, "height": 32, "originX": 0, "originY": 0}, @@ -2457,6 +2457,31 @@ "entities": [ {"name": "Spawns", "id": 4, "_eid": "25816588", "x": 64, "y": 176, "originX": 0, "originY": 0} ] + }, + { + "name": "Ennemies", + "_eid": "09737179", + "offsetX": 0, + "offsetY": 0, + "gridCellWidth": 16, + "gridCellHeight": 16, + "gridCellsX": 87, + "gridCellsY": 27, + "entities": [ + { + "name": "Robot", + "id": 3, + "_eid": "09735943", + "x": 528, + "y": 160, + "originX": 0, + "originY": 0, + "nodes": [ + {"x": 496, "y": 160}, + {"x": 576, "y": 160} + ] + } + ] } ] } \ No newline at end of file diff --git a/gamedata/objects/combat/ennemies/robot.py b/gamedata/objects/combat/ennemies/robot.py new file mode 100644 index 0000000..c1c00d9 --- /dev/null +++ b/gamedata/objects/combat/ennemies/robot.py @@ -0,0 +1,60 @@ +from gamedata.objects.combat.movable import Movable + +class Robot(Movable): + + def __init__(self,x,y,game,nodes=None): + + super().__init__(game,x,y) + + self.sprites = game.getSpriteDir("robot/") + self.sprite = self.sprites[0] + self.deadsprite = game.sprite_lib["robot/death.png"] + + self.rect[2],self.rect[3] = self.deadsprite.get_size() + + self.speed = 30 + self.falling = 20 + self.spriteindex = 0 + + self.gravityway = 1 # Vertical flip + self.walkingway = 1 # Horizontal flip + + # Offset it correctly + self.rect[0] = x+8-self.rect[2]/2 + + # Movement boundaries + if nodes: + self.endpoints = [x["x"] for x in nodes[:2]] # Get only x positions + self.endpoints.sort() + else: + self.endpoints = None + + def step(self): + + # Flipping vertically + if self.water and self.rect.center[1]>self.water.rect[1]: + self.gravityway = -1 + else: + self.gravityway = 1 + + # Flipping horizontally + if self.endpoints: + if self.rect.center[0]>self.endpoints[1]: + self.walkingway = -1 + if self.rect.center[0]self.water.rect.y: # Reverse gravity underwater + if self.water and self.rect.y>self.water.rect.y: # Reverse gravity underwater if self.gravityway == 1: self.gravityway = -1 # Décellerer @@ -67,7 +70,7 @@ class Player(Movable): self.canfastfall = False self.verspd *= 0.9 - if self.water.rect.y-self.leapmargin<=self.rect.y<=self.water.rect.y+self.leapmargin: + if self.water and self.water.rect.y-self.leapmargin<=self.rect.y<=self.water.rect.y+self.leapmargin: self.leaptimer-=self.game.dt # Inside the margin else: self.leaptimer = self.leapmaxtimer # Outside, reset the timer diff --git a/gamedata/objects/combat/tileset.py b/gamedata/objects/combat/tileset.py index be57223..d56d0be 100644 --- a/gamedata/objects/combat/tileset.py +++ b/gamedata/objects/combat/tileset.py @@ -1,4 +1,5 @@ from gamedata.objects.base import BaseObject +from gamedata.objects.combat.ennemies.robot import Robot class TilesetRenderer(BaseObject): @@ -16,6 +17,13 @@ class TilesetRenderer(BaseObject): if self.level["background"]: self.bg = self.level["background"] + def step(self): + # Spawning ennemies + while len(self.queue)>0: + props = self.queue.pop() + e = props[0](props[1],props[2],self.game,nodes=props[3]) + self.game.gameloop.summon(e) + def draw(self): self.game.window.blit(self.game.pygame.transform.scale(self.bg,(self.game.globals["cameraw"],self.game.globals["camerah"])),[0,0]) for layer in self.layers: @@ -29,6 +37,8 @@ class TilesetRenderer(BaseObject): self.layers = [] self.spawns = [] spawnlists = {"Spawns":self.spawns} + ennemies = {"Robot":Robot} + self.queue = [] # For spawning ennemies after beeing initialized if "layers" in json.keys() and type(json["layers"]).__name__=="list": solidlayer = False for layer in json["layers"]: @@ -46,6 +56,15 @@ class TilesetRenderer(BaseObject): h = entity["height"] spawnlists[entity["name"]].append(self.game.pygame.Rect((x,y,w,h))) + elif layer["name"] == "Ennemies" and "entities" in layer.keys(): + for entity in layer["entities"]: + x,y = entity["x"],entity["y"] + nodes = [] + if "nodes" in entity.keys(): + nodes = entity["nodes"] + self.queue.append((ennemies[entity["name"]],x,y,nodes)) + + else: # J'ajoute un layer de tiles tileset = level["tilesets"][layer["tileset"]] tilew,tileh = layer["gridCellWidth"],layer["gridCellHeight"]