Skip to content

Commit 3a84da4

Browse files
author
p.witvoet
committed
- updated tile names for more accurate placement
- added river and road tiles - added new level, to test river tiles - added tile generating tool (processes more edit-friendly spritesheet, allows quick placement rule (filenames) updating)
1 parent 2a7bab5 commit 3a84da4

File tree

74 files changed

+102
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+102
-5
lines changed

levels/duo_falls.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
[7, 7, 7, 1, 1, 2, 2, 1, 9, 9, 1, 4, 1, 9, 1, 1, 7, 7, 7, 2, 2, 9, 9, 4, 1, 0, 2, 2, 1, 1, 7, 7, 7],
1212
[7, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 7, 7, 7, 1, 0, 0, 0, 5, 0, 0, 1, 1, 2, 2, 1, 7, 7],
1313
[7, 2, 2, 2, 0, 2, 1, 1, 1, 2, 2, 4, 1, 2, 0, 1, 7, 7, 7, 10, 0, 1, 2, 4, 1, 0, 1, 10, 1, 1, 9, 1, 7],
14-
[7, 2, 2, 10, 0, 10, 1, 9, 9, 1, 1, 4, 1, 1, 0, 9, 7, 7, 7, 2, 0, 9, 7, 4, 7, 0, 10, 11, 10, 1, 2, 2, 7],
15-
[7, 2, 1, 1, 11, 1, 1, 1, 1, 2, 7, 4, 7, 1, 0, 2, 7, 7, 7, 1, 0, 1, 7, 7, 7, 0, 0, 10, 1, 1, 2, 2, 7],
14+
[7, 2, 2, 10, 0, 10, 1, 9, 9, 1, 1, 4, 1, 1, 0, 9, 7, 7, 7, 2, 0, 9, 7, 7, 7, 0, 10, 11, 10, 1, 2, 2, 7],
15+
[7, 2, 1, 1, 11, 1, 1, 1, 1, 2, 7, 7, 7, 1, 0, 2, 7, 7, 7, 1, 0, 1, 7, 7, 7, 0, 0, 10, 1, 1, 2, 2, 7],
1616
[7, 1, 1, 10, 0, 10, 1, 2, 2, 2, 7, 7, 7, 10, 0, 1, 7, 7, 7, 12, 0, 2, 7, 7, 7, 1, 12, 1, 12, 1, 2, 2, 7],
1717
[7, 1, 1, 12, 0, 12, 1, 7, 7, 2, 7, 7, 7, 1, 0, 1, 1, 7, 1, 1, 0, 1, 7, 7, 7, 1, 1, 1, 1, 9, 9, 1, 7],
1818
[7, 1, 9, 9, 0, 9, 9, 2, 2, 2, 7, 7, 7, 2, 0, 1, 9, 1, 9, 2, 0, 9, 7, 7, 7, 9, 9, 1, 1, 3, 1, 7, 7],

levels/lost_river.py

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#================================================================================
2+
# Level info
3+
level.name = 'Lost River'
4+
level.supportedDatabases = ['AI Wars']
5+
level.playerCount = 2
6+
7+
#================================================================================
8+
# Terrain data
9+
level.setTileData( [[2, 2, 2, 2, 1, 1, 4, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 4, 1, 1, 2, 2],
10+
[2, 2, 2, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 4, 1, 2, 2, 2],
11+
[2, 2, 1, 1, 1, 1, 4, 1, 1, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 12, 1, 9, 9, 9, 9, 1, 5, 1, 1, 1, 2],
12+
[2, 2, 1, 9, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 4, 1, 12, 1, 2],
13+
[2, 2, 9, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 2],
14+
[2, 2, 2, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 2],
15+
[2, 2, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 4, 1, 9, 1, 1, 10, 12, 2],
16+
[2, 2, 1, 1, 1, 3, 1, 1, 1, 4, 4, 4, 5, 4, 4, 9, 9, 1, 9, 1, 4, 4, 4, 4, 4, 1, 2, 1, 10, 11, 10, 2],
17+
[2, 2, 10, 1, 12, 3, 1, 1, 1, 4, 4, 1, 1, 1, 4, 4, 4, 1, 1, 1, 4, 1, 1, 5, 1, 1, 1, 1, 1, 10, 2, 2],
18+
[2, 10, 11, 10, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 1, 1, 5, 1, 1, 1, 1, 10, 2, 2, 2],
19+
[2, 2, 10, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 2, 2],
20+
[2, 1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 3, 1, 1, 4, 4, 1, 1, 1, 1, 1, 4, 4, 1, 1, 4, 1, 1, 9, 1, 2],
21+
[2, 1, 9, 1, 1, 1, 4, 1, 1, 1, 1, 3, 1, 1, 1, 4, 1, 1, 9, 1, 4, 4, 4, 1, 1, 1, 4, 4, 1, 1, 2, 2],
22+
[2, 2, 1, 9, 1, 1, 4, 1, 2, 2, 9, 1, 1, 12, 1, 4, 1, 1, 1, 1, 4, 1, 1, 1, 9, 1, 1, 4, 1, 9, 1, 2],
23+
[2, 2, 2, 2, 1, 1, 4, 1, 2, 2, 2, 2, 2, 2, 1, 4, 1, 2, 2, 1, 4, 1, 2, 2, 2, 2, 1, 4, 1, 1, 2, 2]] )
24+
25+
#================================================================================
26+
# Player starting buildings
27+
player1 = level.addPlayer()
28+
player1.addBuilding(level.getBuildingAtPosition(Point(2, 8)))
29+
player1.addBuilding(level.getBuildingAtPosition(Point(4, 8)))
30+
player1.addBuilding(level.getBuildingAtPosition(Point(1, 9)))
31+
player1.addBuilding(level.getBuildingAtPosition(Point(2, 9)))
32+
player1.addBuilding(level.getBuildingAtPosition(Point(3, 9)))
33+
player1.addBuilding(level.getBuildingAtPosition(Point(2, 10)))
34+
35+
player2 = level.addPlayer()
36+
player2.addBuilding(level.getBuildingAtPosition(Point(29, 6)))
37+
player2.addBuilding(level.getBuildingAtPosition(Point(30, 6)))
38+
player2.addBuilding(level.getBuildingAtPosition(Point(28, 7)))
39+
player2.addBuilding(level.getBuildingAtPosition(Point(29, 7)))
40+
player2.addBuilding(level.getBuildingAtPosition(Point(30, 7)))
41+
player2.addBuilding(level.getBuildingAtPosition(Point(29, 8)))
42+
player2.addBuilding(level.getBuildingAtPosition(Point(28, 9)))

run server.bat

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ TITLE AI Wars - Server
22

33
CD source
44

5-
run_server.py localhost 7777 crater_isle.py aiwars.py
5+
run_server.py localhost 7777 lost_river.py aiwars.py
66

77
PAUSE

source/visualization/levelProcessor.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66

77
# First, tiles are mapped to so-called base tiles - transitions from sea to plains and from sea to forests are the same, anyway
88
# Note that terrain names, as specified in the game database, are used to determine the base type. So this table is quite database-specific.
9-
__baseTiles = {'Road': 0, \
9+
__baseTiles = {'Road': 5, \
1010
'Plains': 0, \
1111
'Forest': 0, \
1212
'Mountain': 0, \
1313
'River': 1, \
14-
'Bridge': 1, \
14+
'Bridge': 4, \
1515
'Shoal': 2, \
1616
'Sea': 3, \
1717
'Reef': 3, \

textures/terrain/grid_lines.png

-2 Bytes

textures/terrain/sprites/rock_1.png

-1.02 KB

textures/terrain/sprites/rock_2.png

-1.03 KB

textures/terrain/sprites/rock_3.png

-1.02 KB
1002 Bytes
1002 Bytes
1002 Bytes
984 Bytes

textures/terrain/tiles/1 bl 1 x 1.png

1009 Bytes
984 Bytes
1009 Bytes
1002 Bytes
984 Bytes
984 Bytes
1012 Bytes

textures/terrain/tiles/1 br 1 x 1.png

1002 Bytes
1012 Bytes
1002 Bytes
999 Bytes
984 Bytes
984 Bytes
1002 Bytes

textures/terrain/tiles/1 tl 1 x 1.png

1009 Bytes
1002 Bytes
1009 Bytes
1005 Bytes
1007 Bytes
1007 Bytes
984 Bytes

textures/terrain/tiles/1 tr 1 x 1.png

1003 Bytes
984 Bytes
1003 Bytes
986 Bytes
971 Bytes
984 Bytes
997 Bytes
991 Bytes
967 Bytes
971 Bytes
976 Bytes
986 Bytes
984 Bytes
979 Bytes
1003 Bytes
982 Bytes
979 Bytes
967 Bytes
989 Bytes

tools/to_tiles.bat

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
to_tiles.py "%~dp0\" "river circle.png" 1 1,3,4 0,2,5 16 16
2+
3+
PAUSE

tools/to_tiles.py

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import os
2+
import sys
3+
from PIL import Image
4+
5+
if len(sys.argv) < 8:
6+
print '==============================================================='
7+
print 'Use the the following arguments to process a tilesheet:'
8+
print ' to_tiles.py [output folder] [spritesheet] [type] [bordering]'
9+
print ' [transition] [tile width] [tile height]'
10+
print ''
11+
print 'For example:'
12+
print ' to_tiles.py sea.png 3 2,3,4 0,5 16 16'
13+
print '==============================================================='
14+
exit()
15+
16+
outputFolder = sys.argv[1]
17+
filename = sys.argv[2]
18+
tileType = sys.argv[3]
19+
bordering = sys.argv[4]
20+
transition = sys.argv[5]
21+
tileWidth = int(sys.argv[6])
22+
tileHeight = int(sys.argv[7])
23+
24+
def saveTile(path, image, corner, x, y, tileWidth, tileHeight, tileType, a, b, c):
25+
filename = path + tileType + ' ' + corner + ' ' + a + ' ' + b + ' ' + c + '.png'
26+
tile = image.crop((x, y, x + tileWidth, y + tileHeight))
27+
tile.load()
28+
tile.save(filename)
29+
#
30+
31+
spritesheet = Image.open(filename)
32+
33+
# Generate the corner tiles
34+
saveTile(outputFolder, spritesheet, 'tl', 0, 0, tileWidth, tileHeight, tileType, transition, 'x', transition)
35+
saveTile(outputFolder, spritesheet, 'tl', 32, 0, tileWidth, tileHeight, tileType, bordering, 'x', transition)
36+
saveTile(outputFolder, spritesheet, 'tl', 0, 32, tileWidth, tileHeight, tileType, transition, 'x', bordering)
37+
saveTile(outputFolder, spritesheet, 'tl', 64, 64, tileWidth, tileHeight, tileType, bordering, 'x', bordering)
38+
39+
saveTile(outputFolder, spritesheet, 'tr', 80, 0, tileWidth, tileHeight, tileType, transition, 'x', transition)
40+
saveTile(outputFolder, spritesheet, 'tr', 16, 32, tileWidth, tileHeight, tileType, bordering, 'x', transition)
41+
saveTile(outputFolder, spritesheet, 'tr', 48, 0, tileWidth, tileHeight, tileType, transition, 'x', bordering)
42+
saveTile(outputFolder, spritesheet, 'tr', 16, 64, tileWidth, tileHeight, tileType, bordering, 'x', bordering)
43+
44+
saveTile(outputFolder, spritesheet, 'br', 80, 80, tileWidth, tileHeight, tileType, transition, 'x', transition)
45+
saveTile(outputFolder, spritesheet, 'br', 48, 16, tileWidth, tileHeight, tileType, bordering, 'x', transition)
46+
saveTile(outputFolder, spritesheet, 'br', 16, 48, tileWidth, tileHeight, tileType, transition, 'x', bordering)
47+
saveTile(outputFolder, spritesheet, 'br', 16, 16, tileWidth, tileHeight, tileType, bordering, 'x', bordering)
48+
49+
saveTile(outputFolder, spritesheet, 'bl', 0, 80, tileWidth, tileHeight, tileType, transition, 'x', transition)
50+
saveTile(outputFolder, spritesheet, 'bl', 0, 48, tileWidth, tileHeight, tileType, bordering, 'x', transition)
51+
saveTile(outputFolder, spritesheet, 'bl', 32, 16, tileWidth, tileHeight, tileType, transition, 'x', bordering)
52+
saveTile(outputFolder, spritesheet, 'bl', 64, 16, tileWidth, tileHeight, tileType, bordering, 'x', bordering)

0 commit comments

Comments
 (0)