Skip to content

Commit 4229b77

Browse files
committed
New objects, extended trap logic, castle improvement.
1 parent 349cffc commit 4229b77

35 files changed

+438
-88
lines changed

config.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
fullscreen=Off
2-
music_volume=1
2+
music_volume=0
33
se_volume=1

src/main/java/com/khomsi/game/entity/Entity.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package com.khomsi.game.entity;
22

3+
import com.khomsi.game.entity.npc.dungeon.NpcHeavyDungeonRock;
34
import com.khomsi.game.entity.player.Player;
45
import com.khomsi.game.main.GameManager;
56
import com.khomsi.game.main.tools.Tools;
67
import com.khomsi.game.objects.interact.CoinBObject;
78
import com.khomsi.game.objects.spells.HeartObject;
89
import com.khomsi.game.objects.spells.ManaObject;
10+
import com.khomsi.game.tiles.interactive.InteractiveTile;
11+
import com.khomsi.game.tiles.interactive.dungeon.SwitchPress;
912

1013
import java.awt.*;
1114
import java.awt.image.BufferedImage;
1215
import java.util.ArrayList;
16+
import java.util.Arrays;
1317
import java.util.List;
1418
import java.util.Random;
1519

@@ -687,6 +691,35 @@ public void getRandomDirection(int interval) {
687691
}
688692
}
689693

694+
public List<Entity> getEntitiesForPlates() {
695+
int currentMap = gameManager.currentMap;
696+
697+
List<InteractiveTile> plates = Arrays.stream(gameManager.interactTile[currentMap])
698+
.filter(SwitchPress.class::isInstance)
699+
.toList();
700+
701+
List<Entity> rocks = Arrays.stream(gameManager.npcList[currentMap])
702+
.filter(NpcHeavyDungeonRock.class::isInstance)
703+
.toList();
704+
705+
//Scan the plates
706+
for (InteractiveTile plate : plates) {
707+
int xDistance = Math.abs(worldX - plate.worldX);
708+
int yDistance = Math.abs(worldY - plate.worldY);
709+
int distance = Math.max(xDistance, yDistance);
710+
if (distance < 15) {
711+
if (linkedEntity == null) {
712+
linkedEntity = plate;
713+
gameManager.playSE(21);
714+
}
715+
} else {
716+
if (linkedEntity == plate)
717+
linkedEntity = null;
718+
}
719+
}
720+
return rocks;
721+
}
722+
690723
public int getDetected(Entity entity, Entity[][] target, String targetName) {
691724
int index = 999;
692725
int nextWorldX = entity.getLeftX();
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.khomsi.game.entity.npc.castle;
2+
3+
import com.khomsi.game.entity.Entity;
4+
import com.khomsi.game.entity.npc.dungeon.NpcHeavyDungeonRock;
5+
import com.khomsi.game.main.GameManager;
6+
import com.khomsi.game.objects.inside.castle.BigDoorClosedObject;
7+
import com.khomsi.game.objects.inside.castle.BigDoorOpenedObject;
8+
9+
import java.util.Arrays;
10+
import java.util.List;
11+
import java.util.stream.IntStream;
12+
13+
import static com.khomsi.game.objects.inside.castle.DoorType.OPENED;
14+
15+
public class NpcHeavyCastleRock extends NpcHeavyDungeonRock {
16+
public static final String NPC_NAME = "Rock Castle";
17+
18+
public NpcHeavyCastleRock(GameManager gameManager) {
19+
super(gameManager);
20+
name = NPC_NAME;
21+
}
22+
23+
@Override
24+
public void moveObj(String direction) {
25+
this.direction = direction;
26+
changeDirection(direction);
27+
detectPlate();
28+
}
29+
30+
public void detectPlate() {
31+
List<Entity> rocks = getEntitiesForPlates();
32+
// Count the rocks on plates
33+
long count = rocks.stream()
34+
.filter(rock -> rock.linkedEntity != null)
35+
.count();
36+
37+
//If all the rocks are on the plates, the door opens
38+
if (count == rocks.size()) {
39+
Arrays.stream(gameManager.object[gameManager.currentMap])
40+
.filter(BigDoorClosedObject.class::isInstance)
41+
.findFirst()
42+
.ifPresent(obj -> {
43+
int index = IntStream.range(0, gameManager.object[gameManager.currentMap].length)
44+
.filter(i -> gameManager.object[gameManager.currentMap][i] == obj)
45+
.findFirst()
46+
.orElse(-1);
47+
48+
if (index != -1) {
49+
gameManager.object[gameManager.currentMap][index]
50+
= new BigDoorOpenedObject(gameManager, OPENED);
51+
gameManager.object[gameManager.currentMap][index].worldX = GameManager.TILE_SIZE * 74;
52+
gameManager.object[gameManager.currentMap][index].worldY = GameManager.TILE_SIZE * 52;
53+
gameManager.playSE(4);
54+
}
55+
});
56+
}
57+
}
58+
}

src/main/java/com/khomsi/game/entity/npc/dungeon/NpcHeavyRock.java renamed to src/main/java/com/khomsi/game/entity/npc/dungeon/NpcHeavyDungeonRock.java

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,16 @@
44
import com.khomsi.game.entity.Entity;
55
import com.khomsi.game.objects.dungeon.DungeonDoorClosedObject;
66
import com.khomsi.game.objects.dungeon.DungeonDoorOpenedObject;
7-
import com.khomsi.game.tiles.interactive.InteractiveTile;
8-
import com.khomsi.game.tiles.interactive.dungeon.SwitchPress;
97

108
import java.awt.*;
119
import java.util.Arrays;
1210
import java.util.List;
1311
import java.util.stream.IntStream;
1412

15-
public class NpcHeavyRock extends Entity {
13+
public class NpcHeavyDungeonRock extends Entity {
1614
public static final String NPC_NAME = "Rock";
1715

18-
public NpcHeavyRock(GameManager gameManager) {
16+
public NpcHeavyDungeonRock(GameManager gameManager) {
1917
super(gameManager);
2018
direction = "down";
2119
speed = 4;
@@ -90,31 +88,7 @@ public void moveObj(String direction) {
9088
}
9189

9290
public void detectPlate() {
93-
int currentMap = gameManager.currentMap;
94-
95-
List<InteractiveTile> plates = Arrays.stream(gameManager.interactTile[currentMap])
96-
.filter(SwitchPress.class::isInstance)
97-
.toList();
98-
99-
List<Entity> rocks = Arrays.stream(gameManager.npcList[currentMap])
100-
.filter(NpcHeavyRock.class::isInstance)
101-
.toList();
102-
103-
//Scan the plates
104-
for (InteractiveTile plate : plates) {
105-
int xDistance = Math.abs(worldX - plate.worldX);
106-
int yDistance = Math.abs(worldY - plate.worldY);
107-
int distance = Math.max(xDistance, yDistance);
108-
if (distance < 8) {
109-
if (linkedEntity == null) {
110-
linkedEntity = plate;
111-
gameManager.playSE(21);
112-
}
113-
} else {
114-
if (linkedEntity == plate)
115-
linkedEntity = null;
116-
}
117-
}
91+
List<Entity> rocks = getEntitiesForPlates();
11892
// Count the rocks on plates
11993
long count = rocks.stream()
12094
.filter(rock -> rock.linkedEntity != null)

src/main/java/com/khomsi/game/entity/player/Player.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import com.khomsi.game.objects.interact.KeyObject;
99
import com.khomsi.game.objects.interact.MagicNecklaceObject;
1010
import com.khomsi.game.objects.light.LanternObject;
11-
import com.khomsi.game.objects.outside.TentObject;
1211
import com.khomsi.game.objects.projectTiles.FireBallObject;
1312

1413
import java.awt.*;
@@ -87,13 +86,18 @@ public void setDefaultValues() {
8786

8887
public void setDefaultPosition() {
8988
//player position of player
90-
/* gameManager.currentMap = 0;
89+
/* gameManager.currentMap = 0;
9190
worldX = GameManager.TILE_SIZE * 29;
9291
worldY = GameManager.TILE_SIZE * 92;
9392
direction = "down";*/
94-
gameManager.currentMap = 0;
93+
/* gameManager.currentMap = 0;
9594
worldX = GameManager.TILE_SIZE * 15;
9695
worldY = GameManager.TILE_SIZE * 27;
96+
direction = "down";*/
97+
98+
gameManager.currentMap = 0;
99+
worldX = GameManager.TILE_SIZE * 75;
100+
worldY = GameManager.TILE_SIZE * 56;
97101
direction = "down";
98102
}
99103

src/main/java/com/khomsi/game/main/GameManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public class GameManager extends JPanel implements Runnable {
8181
public Map map = new Map(this);
8282
//ENTITY AND OBJECTS
8383
//TODO extend the massive, when you'll have more objects
84-
public Entity[][] object = new Entity[maxMap][30];
84+
public Entity[][] object = new Entity[maxMap][40];
8585
public Entity[][] npcList = new Entity[maxMap][30];
8686
public Entity[][] mobs = new Entity[maxMap][30];
8787
public Entity[][] animatedTiles = new Entity[maxMap][100];

src/main/java/com/khomsi/game/main/logic/EntityGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.khomsi.game.objects.dungeon.DungeonDoorOpenedObject;
77
import com.khomsi.game.objects.equipment.*;
88
import com.khomsi.game.objects.inside.*;
9+
import com.khomsi.game.objects.inside.castle.BigDoorClosedObject;
10+
import com.khomsi.game.objects.inside.castle.TreasureChestObject;
911
import com.khomsi.game.objects.interact.ChestObject;
1012
import com.khomsi.game.objects.interact.CoinBObject;
1113
import com.khomsi.game.objects.interact.KeyObject;
@@ -59,6 +61,8 @@ public Entity getObject(String itemNames) {
5961
case MapObject.OBJ_NAME -> object = new MapObject(gameManager);
6062
case WindowObject.OBJ_NAME -> object = new WindowObject(gameManager);
6163
case PictureObject.OBJ_NAME -> object = new PictureObject(gameManager);
64+
case TreasureChestObject.OBJ_NAME -> object = new TreasureChestObject(gameManager);
65+
case BigDoorClosedObject.OBJ_NAME -> object = new BigDoorClosedObject(gameManager);
6266
}
6367
return object;
6468
}

src/main/java/com/khomsi/game/main/logic/EventHandler.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,11 @@ private boolean shouldInteractHealingPool(int currentMap) {
150150
int[][] interactRanges = new int[][]{};
151151
if (currentMap == 0) {
152152
interactRanges = new int[][]{
153-
{0, 21, 85}
153+
{0, 25, 82},
154+
{0, 46, 75},
155+
{0, 16, 39},
156+
{0, 36, 30},
157+
{0, 18, 25}
154158
};
155159
} else if (currentMap == 1) {
156160
//TODO Add items to map 1
@@ -189,7 +193,26 @@ private boolean shouldInteractSeaUrchin(int currentMap) {
189193
}
190194
return false;
191195
}
192-
196+
private boolean shouldInteractPit(int currentMap) {
197+
// Initialize with an empty array
198+
int[][] interactRanges = new int[][]{};
199+
if (currentMap == 0) {
200+
interactRanges = new int[][]{
201+
//Sea urchin locations
202+
{0, 35, 66},
203+
{0, 35, 67},
204+
{0, 36, 67},
205+
{0, 37, 67},
206+
{0, 38, 67}
207+
};
208+
}
209+
for (int[] range : interactRanges) {
210+
if (interact(currentMap, range[1], range[2], "any")) {
211+
return true;
212+
}
213+
}
214+
return false;
215+
}
193216
public boolean interact(int map, int col, int row, String direction) {
194217
return interact(map, col, row, direction, 0);
195218
}

src/main/java/com/khomsi/game/objects/editor/placement/InteractiveTilePlacement.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.khomsi.game.main.GameManager;
44
import com.khomsi.game.tiles.interactive.Bush;
5+
import com.khomsi.game.tiles.interactive.dungeon.SwitchPress;
56

67
import static com.khomsi.game.objects.editor.PlaceObjects.MAP_MAIN;
78

@@ -49,5 +50,13 @@ public void placeInteractiveTilesOnMap0() {
4950
gameManager.interactTile[mapNum][index] = new Bush(gameManager, 51, 68);
5051
index++;
5152
gameManager.interactTile[mapNum][index] = new Bush(gameManager, 52, 66);
53+
54+
55+
setCastleSwitches(index, mapNum);
56+
}
57+
58+
private void setCastleSwitches(int index, int mapNum) {
59+
index++;
60+
gameManager.interactTile[mapNum][index] = new SwitchPress(gameManager, 80, 58);
5261
}
5362
}

src/main/java/com/khomsi/game/objects/editor/placement/NpcPlacement.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.khomsi.game.entity.npc.beach.NpcCrabs;
44
import com.khomsi.game.entity.npc.beach.NpcRock;
5+
import com.khomsi.game.entity.npc.castle.NpcHeavyCastleRock;
56
import com.khomsi.game.entity.npc.dungeon.NpcTutorialMan;
67
import com.khomsi.game.main.GameManager;
78

@@ -19,8 +20,8 @@ public NpcPlacement(GameManager gameManager) {
1920
public void placeNpcOnMap0() {
2021
int index = 0;
2122
int mapNum = MAP_MAIN;
22-
//Map 0
2323
npcOnBeachMap1(index, mapNum);
24+
rocksOnMap1(index, mapNum);
2425
}
2526

2627
private void npcOnBeachMap1(int index, int mapNum) {
@@ -56,6 +57,13 @@ private void npcOnBeachMap1(int index, int mapNum) {
5657
index++;
5758
}
5859

60+
private void rocksOnMap1(int index, int mapNum) {
61+
gameManager.npcList[mapNum][index] = new NpcHeavyCastleRock(gameManager);
62+
gameManager.npcList[mapNum][index].worldX = GameManager.TILE_SIZE * 78;
63+
gameManager.npcList[mapNum][index].worldY = GameManager.TILE_SIZE * 56;
64+
index++;
65+
}
66+
5967
public void placeNpcOnDungeonMap1() {
6068
int mapNum = MAP_DUNGEON;
6169
int index = 3;

0 commit comments

Comments
 (0)