View.Set ("graphics:max,max, title: MAP EDITOR")
% Declare the terrain constants
const NORMAL := 1
const GRASS := 2
const FOREST := 3
const MOUNTAIN := 4
const ROAD := 5
const SHALLOW := 6
const WATER := 7
const SHORE := 8
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
const INFANTRY := 21
const TANKS := 22
const ARTILLERY := 23
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
var terrainTypes : array 1 .. 8 of int := init (49, 48, 2, 66, 15, 53, 55, 91)
var map : array 1 .. 100, 1 .. 100 of int
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
var unitnames : array 1 .. 3 of string := init ("Infantry", "Tank", "Artillery")
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
var mx, my, mb, terrType : int := 1
var teamOn : boolean := false
var unitChoice : int := 0
var verdana := Font.New ("verdana:10:bold")
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
var smallfont := Font.New ("arialnarrow:6")
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ********************* COMMON PROCEDURES AND FUNCTIONS *************************
function pixToGridX (mx : int) : int
result (mx - 100) div 16
end pixToGridX
function pixToGridY (my : int) : int
result (my - 100) div 16
end pixToGridY
proc updateTile (tileX, tileY, terrType : int)
drawfillbox (100 + tileX * 16, 100 + tileY * 16, 116 + tileX * 16, 116 + tileY * 16, terrainTypes (map (tileX, tileY)))
end updateTile
proc initializeMap
for i : 1 .. 100
for j : 1 .. 100
map (i, j) := 2
end for
end for
end initializeMap
proc drawMap
for i : 1 .. 40
for j : 1 .. 40
drawfillbox (100 + i * 16, 100 + j * 16, 100 + i * 16 + 16, 100 + j * 16 + 16, terrainTypes (map (i, j)))
end for
end for
end drawMap
% ********************* MAP EDITOR PROCEDURES AND FUNCTIONS *************************
proc initializeEditor
% The Save Button
drawbox (50, 250, 100, 275, black)
drawfill (51, 251, red, black)
Font.Draw ("SAVE", 58, 258, verdana, white)
% The Load Button
drawbox (50, 280, 100, 305, black)
drawfill (51, 281, red, black)
Font.Draw ("LOAD", 58, 288, verdana, white)
for i : 1 .. 2
for j : 1 .. 4
if i = 1 then
drawfillbox (25 + (i * 25), 100 + (j * 25), 50 + (i * 25), 125 + (j * 25), terrainTypes (j))
else
drawfillbox (25 + (i * 25), 100 + (j * 25), 50 + (i * 25), 125 + (j * 25), terrainTypes (4 + j))
end if
end for
end for
end initializeEditor
proc changeTerrType (mx, my, terrType : int)
map (pixToGridX (mx), pixToGridY (my)) := terrType
end changeTerrType
proc saveMap
var filename : string := ""
var output : int
locate (1, 1)
put "Enter a name: " ..
get filename
open : output, filename + ".map", put
for i : 1 .. 40
for j : 1 .. 40
put : output, map (i, j), " " ..
end for
end for
close : output
end saveMap
proc loadMap
var filename : string := ""
var input : int
var character : string (1)
locate (1, 1)
put "Enter a name: " ..
get filename
open : input, filename + ".map", get
for i : 1 .. 40
for j : 1 .. 40
get : input, character
if strintok (character) = false and character not= " " then
put "Data file corrupted! Tile (", i, ",", j, ") defaulted to Default Type"
elsif strintok (character) then
map (i, j) := strint (character)
end if
end for
end for
close : input
drawMap
end loadMap
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
proc unitLabels (teamOn : boolean)
Draw.Text ("Units", 125, 90, verdana, black)
drawbox (65, 75, 95, 100, black)
drawfill (66, 76, red, black)
drawbox (65, 30, 95, 55, black)
drawfill (66, 31, blue, black)
if teamOn = false then
drawbox (64, 29, 96, 56, white)
drawbox (64, 74, 96, 101, green)
else
drawbox (64, 74, 96, 101, white)
drawbox (64, 29, 96, 56, green)
end if
for u : 1 .. 3
drawbox (130 + (u * 35), 55, 155 + (u * 35), 80, black)
Draw.Text (unitnames (u), 130 + (u * 35), 40, smallfont, black)
end for
end unitLabels
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
proc mapEditor
initializeMap
initializeEditor
drawMap
loop
mousewhere (mx, my, mb)
locate (1, 1)
put mx, " ", my ..
locate (1, 10)
put terrType ..
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
locate (2, 1)
if teamOn = false then
put "RED TEAM " ..
else
put "BLUE TEAM" ..
end if
locate (3, 1)
if unitChoice = 21 then
put "INFANTRY " ..
elsif unitChoice = 22 then
put "TANKS " ..
elsif unitChoice = 23 then
put "ARTILLERY " ..
end if
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
unitLabels (teamOn)
if mx > 50 and my > 125 and mx < 100 and my < 225 and mb = 1 then
if mx < 75 then
terrType := 1 + (my - 125) div 25
else
terrType := 5 + ((my - 125) div 25)
end if
end if
if mx > 116 and my > 115 and mx < 758 and my < 756 and mb = 1 then
changeTerrType (mx, my, terrType)
updateTile (pixToGridX (mx), pixToGridY (my), map (pixToGridX (mx), pixToGridY (my)))
end if
if mx > 50 and my > 250 and mx < 100 and my < 275 and mb = 1 then
saveMap
elsif mx > 50 and my > 280 and mx < 100 and my < 305 and mb = 1 then
loadMap
end if
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Changes the Team for the unit About to be placed.
if mx >= 65 and mx <= 95 then
if my >= 75 and my <= 100 and mb = 1 then
teamOn := false
elsif my >= 30 and my <= 55 and mb = 1 then
teamOn := true
end if
end if
% Changes the Unit Selected.
if my >= 55 and my <= 80 then
%AS MANY IF STATMENTS AS UNITS
if mx >= 165 and mx <= 190 and mb = 1 then
unitChoice := INFANTRY
elsif mx >= 200 and mx <= 225 and mb = 1 then
unitChoice := TANKS
elsif mx >= 235 and mx <= 260 and mb = 1 then
unitChoice := ARTILLERY
end if
end if
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end loop
end mapEditor
mapEditor