
-----------------------------------
zylum
Fri Feb 27, 2004 6:51 pm

starting my final project...
-----------------------------------
since i've been bored lately and havent thought of a cool program to make, i decided to start on my final project... im going to make a multiplayer capture the falg/2d shooter/tag type game.... heres what i have so far...

[url=http://members.rogers.com/zylum/compsci/isu/engine.txt]source

are there any bugs that need to be fixed???

- zylum

-----------------------------------
Cervantes
Fri Feb 27, 2004 7:05 pm


-----------------------------------
wow that's pretty good. as far as I can tell the collisions and everything are flawless.  Nice, neat code too :)

-----------------------------------
Tony
Fri Feb 27, 2004 8:33 pm


-----------------------------------
looks like it will turn out to be an awesome game 8)

-----------------------------------
Andy
Fri Feb 27, 2004 8:43 pm


-----------------------------------
nsns but y does it "lag" when i back up?

-----------------------------------
Tony
Fri Feb 27, 2004 11:23 pm


-----------------------------------
i dont think it "lags"... you just move slowler when you run backwards then overwise... just makes the game that much more realistic :D

-----------------------------------
Paul
Fri Feb 27, 2004 11:42 pm


-----------------------------------
Very nice, you might wanna make it a bit bigger though, some ppl would prolly not see it that well.

-----------------------------------
zylum
Sat Feb 28, 2004 1:38 am


-----------------------------------
thanks for the comments... here is an updated version and a level editor....

map editor:

setscreen ("graphics:593;593")

var cols, rows : int
put "how many columns?"
get cols
put "how many rows?"
get rows

cols := min (cols, 37)
rows := min (rows, 37)

cls

var clr : int
var tile : array 1 .. cols, 1 .. rows of int
for col : 1 .. cols
    for row : 1 .. rows
        if row = 1 or col = 1 or row = rows or col = cols then
            clr := 43
            tile (col, row) := 1
        else
            clr := 53
            tile (col, row) := 0
        end if
        drawfillbox ((col - 1) * 16, (row - 1) * 16, (col - 1) * 16 + 15, (row - 1) * 16 + 15, clr)
    end for
end for

var mx, my, md, x, y : int
loop
    mousewhere (mx, my, md)
    if md = 1 then
        x := mx div 16
        y := my div 16
        if tile (x + 1, y + 1) = 1 then
            tile (x + 1, y + 1) := 0
            drawfillbox ((x) * 16, (y) * 16, (x) * 16 + 15, (y) * 16 + 15, 53)
        else
            tile (x + 1, y + 1) := 1
            drawfillbox ((x) * 16, (y) * 16, (x) * 16 + 15, (y) * 16 + 15, 43)
        end if
        delay (200)
    end if
    exit when hasch
end loop

put "what is the name of the map???"
var mapName : string
get mapName
var mapFile : int

open : mapFile, mapName, put

put : mapFile, rows
put : mapFile, cols

cls
for col : 1 .. cols
    for row : 1 .. rows
        if row < rows then
            put : mapFile, tile (col, row) ..
            put : mapFile, " " ..
        else
            put : mapFile, tile (col, row)
        end if
    end for
end for

put "map saved"


updated version which works with user made maps:


setscreen ("graphics:593;593")

var mapCols := 20
var mapRows := 20
var mapDensity := 2.7
var tileSize := 16

var players : int := 1
var playerSize : int := 3
var playerTurnSpeed : real := 2
var playerMaxSpeed : real := 0.5
var playerMinSpeed : real := -0.2
var playerMoveSpeed : array 1 .. players of real
var playerSpeeds : array 1 .. players, 1 .. 2 of real
var playerCoords : array 1 .. players, 1 .. 2 of real
playerCoords (1, 1) := tileSize + tileSize / 2
playerCoords (1, 2) := tileSize + tileSize / 2
var playerAng : array 1 .. players of real
for i : 1 .. players
    playerAng (i) := 0
end for

var mapPic : int

var map : array 1 .. 1000, 1 .. 1000 of int

procedure createMap (size : int, density : real, clr1, clr2 : int)
    var clr : real
    var mapType : string
    loop
        locate (1, 1)
        put "random or file?"
        get mapType
        exit when mapType = "random" or mapType = "file"
        cls
    end loop
    cls
    var cols : int := mapCols
    var rows : int := mapRows
    if mapType = "random" then
        for col : 1 .. cols
            for row : 1 .. rows
                if row = 1 or col = 1 or row = rows or col = cols then
                    clr := clr2
                elsif row = 2 or col = 2 or row = rows - 1 or col = cols - 1 then
                    clr := clr1
                else
                    clr := Rand.Real * density
                    if clr < density - 1 then
                        clr := clr1
                        map (col, row) := 0
                    else
                        clr := clr2
                        map (col, row) := 1
                    end if
                end if
                if clr = clr1 then
                    map (col, row) := 0
                else
                    map (col, row) := 1
                end if
                drawfillbox (col * size, row * size, col * size + size, row * size + size, round (clr))
            end for
        end for
    else
        var mapFile : int
        var mapFileName : string
        var tile : int
        var rows2, cols2 : int
        %load map here
        put "what is the map file name?"
        get mapFileName
        cls
        open : mapFile, mapFileName, get
        get : mapFile, mapRows
        get : mapFile, mapCols
        for col : 1 .. mapCols
            for row : 1 .. mapRows
                get : mapFile, tile
                if tile = 0 then
                    clr := clr1
                    map (col, row) := 0
                else
                    clr := clr2
                    map (col, row) := 1
                end if
                drawfillbox ((col - 1) * size, (row - 1) * size, (col - 1) * size + size, (row - 1) * size + size, round (clr))
            end for
        end for
    end if
    mapPic := Pic.New (0, 0, (mapCols - 1) * size + size, (mapRows - 1) * size + size)
    cls
end createMap

var move : array char of boolean
procedure getKeyStrokes (num : int)
    Input.KeyDown (move)
    if move (KEY_UP_ARROW) then
        playerMoveSpeed (num) := playerMaxSpeed
    elsif move (KEY_DOWN_ARROW) then
        playerMoveSpeed (num) := playerMinSpeed
    else
        playerMoveSpeed (num) := 0
    end if
    if move (KEY_RIGHT_ARROW) then
        playerAng (num) -= playerTurnSpeed
    elsif move (KEY_LEFT_ARROW) then
        playerAng (num) += playerTurnSpeed
    end if
    if playerAng (num) > 360 then
        playerAng (num) := 5
    elsif playerAng (num) < 0 then
        playerAng (num) := 355
    end if
end getKeyStrokes

procedure checkCollision (num : int)
    var x, y : real
    /***X AXIS***
     bottom left*/
    x := (playerCoords (num, 1) + tileSize + playerSpeeds (num, 1) - playerSize) div tileSize
    y := (playerCoords (num, 2) + tileSize - playerSize) div tileSize
    if map (round (x), round (y)) = 1 then
        playerSpeeds (num, 1) := 0
    end if
    %top left
    x := (playerCoords (num, 1) + tileSize + playerSpeeds (num, 1) - playerSize) div tileSize
    y := (playerCoords (num, 2) + tileSize + playerSize) div tileSize
    if map (round (x), round (y)) = 1 then
        playerSpeeds (num, 1) := 0
    end if
    %bottom right
    x := (playerCoords (num, 1) + tileSize + playerSpeeds (num, 1) + playerSize) div tileSize
    y := (playerCoords (num, 2) + tileSize - playerSize) div tileSize
    if map (round (x), round (y)) = 1 then
        playerSpeeds (num, 1) := 0
    end if
    %top right
    x := (playerCoords (num, 1) + tileSize + playerSpeeds (num, 1) + playerSize) div tileSize
    y := (playerCoords (num, 2) + tileSize + playerSize) div tileSize
    if map (round (x), round (y)) = 1 then
        playerSpeeds (num, 1) := 0
    end if

    /*Y AXIS
     bottom left*/
    x := (playerCoords (num, 1) + tileSize - playerSize) div tileSize
    y := (playerCoords (num, 2) + tileSize + playerSpeeds (num, 2) - playerSize) div tileSize
    if map (round (x), round (y)) = 1 then
        playerSpeeds (num, 2) := 0
    end if
    %top left
    x := (playerCoords (num, 1) + tileSize - playerSize) div tileSize
    y := (playerCoords (num, 2) + tileSize + playerSpeeds (num, 2) + playerSize) div tileSize
    if map (round (x), round (y)) = 1 then
        playerSpeeds (num, 2) := 0
    end if
    %bottom right
    x := (playerCoords (num, 1) + tileSize + playerSize) div tileSize
    y := (playerCoords (num, 2) + tileSize + playerSpeeds (num, 2) - playerSize) div tileSize
    if map (round (x), round (y)) = 1 then
        playerSpeeds (num, 2) := 0
    end if
    %top right
    x := (playerCoords (num, 1) + tileSize + playerSize) div tileSize
    y := (playerCoords (num, 2) + tileSize + playerSpeeds (num, 2) + playerSize) div tileSize
    if map (round (x), round (y)) = 1 then
        playerSpeeds (num, 2) := 0
    end if
end checkCollision

procedure movePlayer (num : int)
    playerSpeeds (num, 1) := cosd (playerAng (num)) * playerMoveSpeed (num)
    playerSpeeds (num, 2) := sind (playerAng (num)) * playerMoveSpeed (num)
    checkCollision (num)
    playerCoords (num, 1) += playerSpeeds (num, 1)
    playerCoords (num, 2) += playerSpeeds (num, 2)
    drawline (round (playerCoords (num, 1)), round (playerCoords (num, 2)), round (playerCoords (num, 1) + cosd (playerAng (num)) * (playerSize + 1.5)), round (playerCoords (num, 2) +
        sind (playerAng (num)) * (playerSize + 1.5)), 7)
    drawfilloval (round (playerCoords (num, 1)), round (playerCoords (num, 2)), playerSize, playerSize, grey)
    drawoval (round (playerCoords (num, 1)), round (playerCoords (num, 2)), playerSize, playerSize, 7)
end movePlayer

createMap (tileSize, mapDensity, 53, 43)

setscreen ("offscreenonly")

loop
    for plyr : 1 .. players
        getKeyStrokes (plyr)
        movePlayer (plyr)
    end for
    View.Update
    delay (5)
    Pic.Draw (mapPic, 0, 0, picCopy)
end loop


-zylum

-----------------------------------
recneps
Sat Feb 28, 2004 10:15 am


-----------------------------------
The collision is a little messed :\ ( idid random)

-----------------------------------
Cervantes
Sat Feb 28, 2004 12:47 pm


-----------------------------------
are you talking about collision in the first one he posted or this last one.  I've only looked at the first one and the collision is flawless for me

-----------------------------------
recneps
Sat Feb 28, 2004 4:49 pm


-----------------------------------
The second ones he posted ;)

-----------------------------------
Tony
Sat Feb 28, 2004 5:54 pm


-----------------------------------
plz try to upload the code as an attachment if you have a lot of it :roll: thx

-----------------------------------
shorthair
Sat Feb 28, 2004 6:22 pm


-----------------------------------
Well done , i like the effort you have put into this , that collision detection is way off in the second version , its almost as if it thinks its a different map , but great job anywhoo

-----------------------------------
poly
Sun Feb 29, 2004 10:17 am


-----------------------------------
yes i agree with everybody here, its pretty good (cant wait to see the final outcome), but collision is a bit messed up on the second version you posted. I would be walking around the blue area and all of a sudden it would act like there is a wall infront of me

-----------------------------------
zylum
Sun Feb 29, 2004 10:29 pm


-----------------------------------
hmm... thats odd. i havnt changed the collision detection at all...

-----------------------------------
zylum
Sun Feb 29, 2004 10:41 pm


-----------------------------------
oops, looks like i messed up the random map generator... heres an update for those of you who are interested...

[url=http://members.rogers.com/zylum/compsci/isu/engine.txt] game engine

[url=http://members.rogers.com/zylum/compsci/isu/map_editor.txt] map editor

*sorry about posting that long source

-zylum

-----------------------------------
the_short1
Sat Mar 06, 2004 10:37 pm


-----------------------------------
zylum... ur gona be a Software Engineer RIte.>??? if not... ur retarded.. cuz u got skillz...

good program....+ 4 bits

hope to see the final version with AI and all...

-----------------------------------
Jodo Yodo
Sat Mar 06, 2004 10:58 pm


-----------------------------------
This is awesome!
