Insane error driving me crazy

Since Lime aint working properly with Corona, I decided to have a go creating a level the hard way, coding it tile by tile. But, there´s this error that I absolutely can´figure out. I´m in the process of coding 2 rows ontop of eachother using the same tile, first line goes fine but when I come to tile number 25 in the second, I get a runtime error in the simulator. I can´t figure out what´s causing this and I´ve gone through the code letter by letter, symbol by symbol and it looks 100% ok.

If I remove everything that has to do with “A25, A26, A27 and A28” then everything works fine.

The code for the level can be seen below:
module(…, package.seeall)

–Load the physics data, scale factor is set to 1.0
local physicsData = (require “shapedefs”).physicsData(1.0)
local physics = require(“physics”)
physics.start()

physics.setScale( 60 )
–Initial gravity points downwards
physics.setGravity( 0, 0 )

–Set accelerometer to maximum responsiveness
system.setAccelerometerInterval( 100 )

– GROUPS

local localGroup


– ADDING SOUNDS

local knockSound = audio.loadSound(“sounds/Wood_impact.wav”)


– BACKGROUND TILE IMAGES


–IMAGES IN ROW 1

local A1 = display.newImage( “images/brickwall/stone1.png” )
local A2 = display.newImage( “images/brickwall/stone1.png” )
local A3 = display.newImage( “images/brickwall/stone1.png” )
local A4 = display.newImage( “images/brickwall/stone1.png” )
local A5 = display.newImage( “images/brickwall/stone1.png” )
local A6 = display.newImage( “images/brickwall/stone1.png” )
local A7 = display.newImage( “images/brickwall/stone1.png” )
local A8 = display.newImage( “images/brickwall/stone1.png” )
local A9 = display.newImage( “images/brickwall/stone1.png” )
local A10 = display.newImage( “images/brickwall/stone1.png” )
local A11 = display.newImage( “images/brickwall/stone1.png” )
local A12 = display.newImage( “images/brickwall/stone1.png” )
local A13 = display.newImage( “images/brickwall/stone1.png” )
local A14 = display.newImage( “images/brickwall/stone1.png” )
local A15 = display.newImage( “images/brickwall/stone1.png” )
local A16 = display.newImage( “images/brickwall/stone1.png” )
local A17 = display.newImage( “images/brickwall/stone1.png” )
local A18 = display.newImage( “images/brickwall/stone1.png” )
local A19 = display.newImage( “images/brickwall/stone1.png” )
local A20 = display.newImage( “images/brickwall/stone1.png” )
local A21 = display.newImage( “images/brickwall/stone1.png” )
local A22 = display.newImage( “images/brickwall/stone1.png” )
local A23 = display.newImage( “images/brickwall/stone1.png” )
local A24 = display.newImage( “images/brickwall/stone1.png” )
local A25 = display.newImage( “images/brickwall/stone1.png” )
local A26 = display.newImage( “images/brickwall/stone1.png” )
local A27 = display.newImage( “images/brickwall/stone1.png” )
local A28 = display.newImage( “images/brickwall/stone1.png” )


–IMAGES IN ROW 2

local B1 = display.newImage( “images/brickwall/stone1.png” )
local B2 = display.newImage( “images/brickwall/stone1.png” )
local B3 = display.newImage( “images/brickwall/stone1.png” )
local B4 = display.newImage( “images/brickwall/stone1.png” )
local B5 = display.newImage( “images/brickwall/stone1.png” )
local B6 = display.newImage( “images/brickwall/stone1.png” )
local B7 = display.newImage( “images/brickwall/stone1.png” )
local B8 = display.newImage( “images/brickwall/stone1.png” )
local B9 = display.newImage( “images/brickwall/stone1.png” )
local B10 = display.newImage( “images/brickwall/stone1.png” )
local B11 = display.newImage( “images/brickwall/stone1.png” )
local B12 = display.newImage( “images/brickwall/stone1.png” )
local B13 = display.newImage( “images/brickwall/stone1.png” )
local B14 = display.newImage( “images/brickwall/stone1.png” )
local B15 = display.newImage( “images/brickwall/stone1.png” )
local B16 = display.newImage( “images/brickwall/stone1.png” )
local B17 = display.newImage( “images/brickwall/stone1.png” )
local B18 = display.newImage( “images/brickwall/stone1.png” )
local B19 = display.newImage( “images/brickwall/stone1.png” )
local B20 = display.newImage( “images/brickwall/stone1.png” )
local B21 = display.newImage( “images/brickwall/stone1.png” )
local B22 = display.newImage( “images/brickwall/stone1.png” )
local B23 = display.newImage( “images/brickwall/stone1.png” )
local B24 = display.newImage( “images/brickwall/stone1.png” )
local B25 = display.newImage( “images/brickwall/stone1.png” )
local B26 = display.newImage( “images/brickwall/stone1.png” )
local B27 = display.newImage( “images/brickwall/stone1.png” )
local B28 = display.newImage( “images/brickwall/stone1.png” )


–IMAGES IN ROW 3


–IMAGES IN ROW 4


–IMAGES IN ROW 5

local player1 = display.newImage(“images/player/ball1.png”)

local box01 = display.newImage( “images/crates/box01.png” )


– FUNCTIONS


– Camera follows player automatically

local function moveCamera()
– if (player1.x > 80 and player1.x < 1100) then
localGroup.x = -player1.x + 230
localGroup.y = -player1.y + 170
end

–Accelerometer-based gravity
function onTilt( event )
physics.setGravity( ( 9.8 * event.xGravity ), ( -9.8 * event.yGravity ) )
end

– Adding sound when hitting box
local function onBounce ( self, event )
audio.play( knockSound )
end


–A basic function for dragging physics objects

local function startDrag( event )
local t = event.target

local phase = event.phase
if “began” == phase then
display.getCurrentStage():setFocus( t )
t.isFocus = true

– Store initial position
t.x0 = event.x - t.x
t.y0 = event.y - t.y

– Make body type temporarily “kinematic” (to avoid gravitional forces)
event.target.bodyType = “kinematic”

– Stop current motion, if any
event.target:setLinearVelocity( 0, 0 )
event.target.angularVelocity = 0

elseif t.isFocus then
if “moved” == phase then
t.x = event.x - t.x0
t.y = event.y - t.y0

elseif “ended” == phase or “cancelled” == phase then
display.getCurrentStage():setFocus( nil )
t.isFocus = false

– Switch body type back to “dynamic”, unless we’ve marked this sprite as a platform
if ( not event.target.isPlayer ) then
event.target.bodyType = “dynamic”
end
end
end
– Stop further propagation of touch event!
return true
end


– INIT VARIABLES

local function initVars ()


– INSERT ROW 1

localGroup:insert( A1 )
localGroup:insert( A2 )
localGroup:insert( A3 )
localGroup:insert( A4 )
localGroup:insert( A5 )
localGroup:insert( A6 )
localGroup:insert( A7 )
localGroup:insert( A8 )
localGroup:insert( A9 )
localGroup:insert( A10 )
localGroup:insert( A11 )
localGroup:insert( A12 )
localGroup:insert( A13 )
localGroup:insert( A14 )
localGroup:insert( A15 )
localGroup:insert( A16 )
localGroup:insert( A17 )
localGroup:insert( A18 )
localGroup:insert( A19 )
localGroup:insert( A20 )
localGroup:insert( A21 )
localGroup:insert( A22 )
localGroup:insert( A23 )
localGroup:insert( A24 )
localGroup:insert( A25 )
localGroup:insert( A26 )
localGroup:insert( A27 )
localGroup:insert( A28 )–[[
–]]

– INSERT ROW 2

localGroup:insert( B1 )
localGroup:insert( B2 )
localGroup:insert( B3 )
localGroup:insert( B4 )
localGroup:insert( B5 )
localGroup:insert( B6 )
localGroup:insert( B7 )
localGroup:insert( B8 )
localGroup:insert( B9 )
localGroup:insert( B10 )
localGroup:insert( B11 )
localGroup:insert( B12 )
localGroup:insert( B13 )
localGroup:insert( B14 )
localGroup:insert( B15 )
localGroup:insert( B16 )
localGroup:insert( B17 )
localGroup:insert( B18 )
localGroup:insert( B19 )
localGroup:insert( B20 )
localGroup:insert( B21 )
localGroup:insert( B22 )
localGroup:insert( B23 )
localGroup:insert( B24 )
localGroup:insert( B25 )
localGroup:insert( B26 )
localGroup:insert( B27 )
localGroup:insert( B28 )


– Positions

localGroup.x = 128
localGroup.y = 128


–INSERT POSITIONS FOR ROW 1

A1.x = localGroup.x * 1
A1.y = localGroup.y * 1

A2.x = localGroup.x * 2
A2.y = localGroup.y * 1

A3.x = localGroup.x * 3
A3.y = localGroup.y * 1

A4.x = localGroup.x * 4
A4.y = localGroup.y * 1

A5.x = localGroup.x * 5
A5.y = localGroup.y * 1

A6.x = localGroup.x * 6
A6.y = localGroup.y * 1

A7.x = localGroup.x * 7
A7.y = localGroup.y * 1

A8.x = localGroup.x * 8
A8.y = localGroup.y * 1

A9.x = localGroup.x * 9
A9.y = localGroup.y * 1

A10.x = localGroup.x * 10
A10.y = localGroup.y * 1

A11.x = localGroup.x * 11
A11.y = localGroup.y * 1

A12.x = localGroup.x * 12
A12.y = localGroup.y * 1

A13.x = localGroup.x * 13
A13.y = localGroup.y * 1

A14.x = localGroup.x * 14
A14.y = localGroup.y * 1

A15.x = localGroup.x * 15
A15.y = localGroup.y * 1

A16.x = localGroup.x * 16
A16.y = localGroup.y * 1

A17.x = localGroup.x * 17
A17.y = localGroup.y * 1

A18.x = localGroup.x * 18
A18.y = localGroup.y * 1

A19.x = localGroup.x * 19
A19.y = localGroup.y * 1

A20.x = localGroup.x * 20
A20.y = localGroup.y * 1

A21.x = localGroup.x * 21
A21.y = localGroup.y * 1

A22.x = localGroup.x * 22
A22.y = localGroup.y * 1

A23.x = localGroup.x * 23
A23.y = localGroup.y * 1

A24.x = localGroup.x * 24
A24.y = localGroup.y * 1

A25.x = localGroup.x * 25
A25.y = localGroup.y * 1

A26.x = localGroup.x * 26
A26.y = localGroup.y * 1

A27.x = localGroup.x * 27
A27.y = localGroup.y * 1

A28.x = localGroup.x * 28
A28.y = localGroup.y * 1


–INSERT POSITIONS FOR ROW 2

B1.x = localGroup.x * 1
B1.y = localGroup.y * 2

B2.x = localGroup.x * 2
B2.y = localGroup.y * 2

B3.x = localGroup.x * 3
B3.y = localGroup.y * 2

B4.x = localGroup.x * 4
B4.y = localGroup.y * 2

B5.x = localGroup.x * 5
B5.y = localGroup.y * 2

B6.x = localGroup.x * 6
B6.y = localGroup.y * 2

B7.x = localGroup.x * 7
B7.y = localGroup.y * 2

B8.x = localGroup.x * 8
B8.y = localGroup.y * 2

B9.x = localGroup.x * 9
B9.y = localGroup.y * 2

B10.x = localGroup.x * 10
B10.y = localGroup.y * 2

B11.x = localGroup.x * 11
B11.y = localGroup.y * 2

B12.x = localGroup.x * 12
B12.y = localGroup.y * 2

B13.x = localGroup.x * 13
B13.y = localGroup.y * 2

B14.x = localGroup.x * 14
B14.y = localGroup.y * 2

B15.x = localGroup.x * 15
B15.y = localGroup.y * 2

B16.x = localGroup.x * 16
B16.y = localGroup.y * 2

B17.x = localGroup.x * 17
B17.y = localGroup.y * 2

B18.x = localGroup.x * 18
B18.y = localGroup.y * 2

B19.x = localGroup.x * 19
B19.y = localGroup.y * 2

B20.x = localGroup.x * 20
B20.y = localGroup.y * 2

B21.x = localGroup.x * 21
B21.y = localGroup.y * 2

B22.x = localGroup.x * 22
B22.y = localGroup.y * 2

B23.x = localGroup.x * 23
B23.y = localGroup.y * 2

B24.x = localGroup.x * 24
B24.y = localGroup.y * 2

B25.x = localGroup.x * 25
B25.y = localGroup.y * 2

B26.x = localGroup.x * 26
B26.y = localGroup.y * 2

B27.x = localGroup.x * 27
B27.y = localGroup.y * 2

B28.x = localGroup.x * 28
B28.y = localGroup.y * 2

–Insert row 3


–Insert row 4


–Insert row 5

localGroup:insert( player1 )
localGroup:insert( box01 )

player1.x = 320
player1.y = 200
player1.xScale = 0.7
player1.yScale = 0.7
player1.isPlayer = true

box01.x = 240
box01.y = 300
box01.collision = onBounce
box01.rotation = 20


– Player tiles Physics

physics.addBody( player1, { density=0.9, friction=0.5, bounce=0.5, radius=22 } )


– Physics Walls


– Object physics

physics.addBody( box01, “static”, physicsData:get(“box01”))


– Colors


– Listeners

Runtime:addEventListener( “enterFrame”, moveCamera )
Runtime:addEventListener( “accelerometer”, onTilt )
box01:addEventListener( “collision”, box01 )
player1:addEventListener( “touch”, startDrag )

end


– CLEAN

function clean ( event )
print(“2 cleaned”)
end


– NEW

function new()
localGroup = display.newGroup()

– Initiate variables

initVars()


– MUST return a display.newGroup()

return localGroup

end
[import]uid: 44742 topic_id: 8727 reply_id: 308727[/import]

Adding new display objects to the localGroup also prokoves a runtime error, to me it now seems that there´s a max limit of around 50 objects to be grouped together, can any of you please confirm this? [import]uid: 44742 topic_id: 8727 reply_id: 31812[/import]

This is the error that the terminal outputs when it happens:

Runtime error: error loading module ‘stage1’ from file ‘/Users/smaugs_treasure/Desktop/CoronaNewProjects/Mazeball3/stage1.lua’:
/Users/smaugs_treasure/Desktop/CoronaNewProjects/Mazeball3/stage1.lua:505: function at line 182 has more than 60 upvalues

The Director function is the initVars() containing the x and y coordinates and inserts for each tile. When I made several initVars functions, so that each new initVarsA, initVarsB, initVarsC etc contains less than 60 upvalues, the level now works fine. [import]uid: 44742 topic_id: 8727 reply_id: 31840[/import]

Firstly when posting that amount of code it’s best to use the < code > tag to make it easier to read :slight_smile:

And on to the code, that is a rather odd way of creating the tiles, loops and spritesheets are your friend :slight_smile:

I have created a simple demo showing how to make a basic map from a 1D array of tile ids and a spritesheet, it is linked in your other thread - http://developer.anscamobile.com/forum/2011/04/09/creating-levels-using-tiled-maps-without-using-lime#comment-31909 [import]uid: 5833 topic_id: 8727 reply_id: 31910[/import]

Yeah I totally agree with you there. I just started learning programming a few months ago, C++ first, then DragonFire SDK, then iTorque2D and now Corona SDK. That said, I´m just a beginner and there is a “lack of simple and spot on” tutorials targeting the basics of game creation. It might be that I´m simply not looking in the right places.

I know Lime has some mighty fine examples, but until it runs smoothly with Corona…
It´s taken me a day to rig a 28x28 tile scene using only Corona, and I´m not even done yet *sighs* [import]uid: 44742 topic_id: 8727 reply_id: 31913[/import]

Have a look at the code I provided in the other thread, it doesn’t use anything from Lime or Tiled and allows for easy tile placement. [import]uid: 5833 topic_id: 8727 reply_id: 31917[/import]