PDA

View Full Version : lua help



crait
August 11th, 2006, 17:18
ok, im programming a kirby game, and i need some help :(

whenever i jump in the air, and i press down while facing left, i do not go into "pount mode", but instead the picture changes to player2 and it moves about 1-2 pixels to the left
another thing, is whenever i enter pound mode, while facing right, and jumpstate = ground, then you press right, it messes up, and displays an error
heres the error
./game.lua:51: bad argument #2 to 'blit' (Image expected, got table)


yet when you are on the ground in "pound mode" and press left, your image turns to player2

this is my code....
---------------------------------------------------------------
--Kirby's Lua Adventure
--By crait
--Version 0.35
white = Color.new(255,255,255)
green = Color.new(0,255,0)
red = Color.new(255,0,0)
black = Color.new(0,0,0)
Music.stop()
healthbar = {}
healthbar.y = 10
Player1 = Image.load("kirby.png")
Player2 = Image.load("kirby2.png")
Playerc = Image.load("crouch.png")
Playerc2 = Image.load("crouch2.png")
Playerp = Image.load("kirbyp.png")
Playerp2 = Image.load("kirbyp2.png")
Punch = Image.load("punch.png")
Punch2 = Image.load("punch2.png")
Playerj = Image.load("kirbyj.png")
Playerj2 = Image.load("kirbyj2.png")
kirbyPoint = 0
Player = {}
Player.lives = 4
Player.health = 200
Player.image = Player1
Player.gravity = 200
Player.y = 200
Player.x = 30
Player.jumpspeed = 10
Player.jumpstate = "ground"
spawnpoint = {}
spawnpoint.y = 300
spawnpoint.x = 30
playerHeight = 32
playerWidth = 32


function reSpawn()
Player.image = Player1
Player.x = spawnpoint.x
Player.y = spawnpoint.y
Player.health = 200
Player.lives = Player.lives - 1
end

background=Image.load("bg.png")

while true do

screen:blit(0,0,background,false)
screen:blit(Player.x,Player.y,Player.image,true)
pad=Controls.read()

if pad:cross() and Player.jumpstate == "ground" and Player.image ~= Playerc and Player.image ~= Playerp and Player.image ~= Playerc2 and Player.image ~= Playerp2 then
Player.jumpstate = "jumping"
end

if pad:r()then
if Player.image == Player1 or Player.image == Playerj then
Player.image = Punch
end
if Player.image == Player2 or Player.image == Playerj2 then
Player.image = Punch2
end
end

if Player.image == Punch then
kirbyPoint = kirbyPoint + 1
end
if Player.image == Punch2 then
kirbyPoint = kirbyPoint + 1
end

if Player.image == Punch and kirbyPoint == 14 then
Player.image = Player1
kirbyPoint = 0
end
if Player.image == Punch2 and kirbyPoint == 14 then
Player.image = Player2
kirbyPoint = 0
end

if pad:up()then
if Player.image == Playerc or Player.image == Playerp and Player.jumpstate == "ground" then
Player.image = Player1
end
if Player.image == Playerc2 or Player.image == Playerp2 and Player.jumpstate == "ground" then
Player.image = Player2
end
end

if pad:down() and Player.image == Player1 and Player.jumpstate == "ground" then
Player.image = Playerc
end
if pad:down() and Player.jumpstate == "jumping" and Player.image == Playerj then
Player.image = Playerp
Player.jumpstate = "pound"
end
if pad:down() and Player.image == Player2 and Player.jumpstate == "ground" then
Player.image = Playerc2
end
if pad:down() and Player.jumpstate == "jumping" and Player.image == Playerj2 then
Player.image = Playerp2
Player.jumpstate = "pound"
end


if pad:right() and Player.image ~= Playerp and Player.image ~= Playerp2 then
Player.image = Player1
Player.x = Player.x+4
end

if pad:left() and Player.image ~= Playerp and Player.image ~= Playerp2 then
Player.image = Player2
Player.x=Player.x-4
end

if pad:left() and Player.jumpstate == "ground" and Player.image == Playerp or Player.image == Playerp2 then
Player.image = Player2
Player.x=Player.x-4
end

if pad:right() and Player.jumpstate == "ground" and Player.image == Playerp or Player.image == Playerp2 then
Player.image = Player
Player.x=Player.x+4
end

if pad:l() and Player.health > 0 then
Player.health = Player.health - 20
end

screen:fillRect(0,242,480,30,black)
screen:fillRect(29,259,202,12,white)
screen:fillRect(30,260,200,10,red)
screen:fillRect(30,260,Player.health, healthbar.y, green)
screen:print(30,250, "Health:" .. Player.health,green)
screen:print(260,250,"Lives left:",green)
screen:print(260,260,Player.lives,green)
screen:print(430,252,"V 0.35",white)
screen:print(415,262,"By crait",white)

if Player.health <= -1 then
Player.health = Player.health + 1
end

if Player.lives <= 0 then
dofile("./go.lua")
end

if Player.health <= 0 and Player.lives > 0 then
reSpawn()
end

if Player.lives == -1 then
Player.lives = Player.lives + 1
end

if Player.jumpstate == "jumping" then
Player.jumpspeed = Player.jumpspeed - 0.5
Player.gravity = Player.gravity - Player.jumpspeed
end

if Player.jumpstate == "pound" then
Player.jumpspeed = Player.jumpspeed - 0.5
Player.gravity = Player.gravity - Player.jumpspeed
end

if Player.gravity < 200 and Player.jumpstate == "falling" then
Player.gravity = Player.gravity + (Player.jumpspeed + 3)
end

if Player.gravity == 200 then
Player.jumpspeed = 10
Player.jumpstate = "ground"
end

if Player.jumpstate == "jumping" and Player.image == Player1 then
Player.image = Playerj
end
if Player.jumpstate == "jumping" and Player.image == Player2 then
Player.image = Playerj2
end
if Player.jumpstate == "ground" and Player.image == Playerj then
Player.image = Player1
end
if Player.jumpstate == "ground" and Player.image == Playerj2 then
Player.image = Player2
end

if Player.gravity > 200 then Player.gravity = 200
end

Player.y = Player.gravity

screen.flip()
screen.waitVblankStart()
end

---------------------------------------------------------------

yaustar
August 11th, 2006, 20:54
Whats the error message that comes up?
Can you also zip up everything including images to download?

crait
August 11th, 2006, 21:26
i updated my post
lol, i cant believe i forgot to put error message up

oh, also, i cannot upload the files... two reasons
1 i dont want anyone to have the update before its released
2 my 300 mhz compy takes about 5 hours to upload 1 meg

yaustar
August 11th, 2006, 21:31
Well, considering that you have just posted the entire code, we already have the update, just no images.

The error is caused by:

if pad:right() and Player.jumpstate == "ground" and Player.image == Playerp or Player.image == Playerp2 then
Player.image = Player
Player.x=Player.x+4
end
You are changing an image variable to a table

crait
August 11th, 2006, 21:42
LMFAO!
I can't believe I did that!
omg lol

thanks soooo much yaustar
your amazing!

also, do you know whats up with the not being able to go into "pound mode" whilst in the air, facing left

yaustar
August 11th, 2006, 21:49
The logic looks fine. Check what kirbyp2.png actually looks like.

crait
August 11th, 2006, 21:55
it looks like its supposed to
i also searched my code many times for where it makes the picture move a few pixels to the left, but i cant even find that!
as soon as i fix this one error, ill release
also, there are many new things that are not in the gameplay itself, like the game over screen

yaustar
August 11th, 2006, 21:59
I can't do anything here unless I have the whole code and iamges to play about with.

crait
August 11th, 2006, 22:04
get on msn, and ill send the files to you

yaustar
August 11th, 2006, 22:33
Can't uni firewall blocks all file transfers.

crait
August 11th, 2006, 22:37
man, thats dum, ill upload, then pm you with a link

yaustar
August 11th, 2006, 22:51
Nevermind, I fixed the error:

if pad:left() and Player.jumpstate == "ground" and (Player.image == Playerp or Player.image == Playerp2) then
Player.image = Player2
Player.x=Player.x-4
end

if pad:right() and Player.jumpstate == "ground" and (Player.image == Playerp or Player.image == Playerp2) then
Player.image = Player1
Player.x=Player.x+4
end

Add the brackets. The problem is that lua is reading that left to right so it reads:

if (a and b) or c

By putting the brackets round an expression means you are saying that it needs to be evaluated first before anything else. It falls down to order of operation. eg maths

a * b + c == (a * b) + c

but if you wanted b + c to be done first then:

a * (b + c)

crait
August 11th, 2006, 23:00
makes total since

crait
August 11th, 2006, 23:01
Thanks!