Version 3.2.10(252)

@RonJeffries Heres an example showing some coding for different sized screens.

viewer.mode=FULLSCREEN

function setup()  
    print(WIDTH,HEIGHT)
    device={"iPad Pro","iPad Air","iPhone7 Plus",
            "iPhone7","iPhone 5","Watch 42mm","Watch 38mm"}
    rectMode(CENTER)
    fontSize(40)
    font("Baskerville-SemiBoldItalic")
    x,y=300,100
    xv,yv=3,3
    dev=1
    if WIDTH<HEIGHT then
        tab={vec2(1024,1366),vec2(768,1024),vec2(414,736),
                vec2(375,667),vec2(320,568),vec2(156,195),vec2(136,170)}
    else
        tab={vec2(1366,1024),vec2(1024,768),vec2(736,414),
                vec2(667,375),vec2(568,320),vec2(195,156),vec2(170,136)}
    end 
    currW=WIDTH
    currH=HEIGHT 
end

function orientationChanged()
    setup()
end

function draw()
    background(0)
    fill(255)   
    stroke(255)
    strokeWidth(3)

    -- same code for all devices
    w=tab[dev].x    -- width of device from table
    h=tab[dev].y    -- height of device from table
    ar=(w/h)/(currW/currH)    -- aspect ratio
    scale(w/currW,h/currH)    -- scale of device to largest screen

    sprite(asset.builtin.Planet_Cute.Character_Pink_Girl,x,y,101,171*ar)
    sprite(asset.builtin.Planet_Cute.Character_Cat_Girl,100,600,101,171*ar)

    text("Tap screen to show different sizes.",currW*.45,currH*.25)
    text(device[dev],currW*.2,currH*.45)
    text(tab[dev].x.."  "..tab[dev].y,currW*.2,currH*.4)

    noFill()
    ellipse(currW/2,currH/2,50,50*ar)
    ellipse(currW*.75,currH*.75,100,100*ar)

    line(currW/2,currH/2,0,currH)
    line(currW*.75,currH*.75,200,100)

    rect(currW/2,currH/2,currW,currH)
    rect(200,100,100,100*ar)
    -- end of same code for all devices

    -- calculate motion of sprite
    x=x+xv
    y=y+yv
    if x>=currW or x<=0 then
        xv=-xv
    end
    if y>=currH or y<=0 then
        yv=-yv
    end    
end

function touched(t) -- display different device size
    if t.state==BEGAN then
        dev=dev+1
        if dev>#device then
            dev=1
        end
    end
end

hm, interesting. nice, thanks!

@RonJeffries Here are the changes I made to your dungeon code to put the direction buttons in the bottom center of the screen and to have the health boxes display on either side of the direction buttons. This works in either portrait or landscape mode. I didn’t want to dig thru your code too much, so these changes probably aren’t the best ways to accomplish this, but it worked for me. This would probably work on most screen sizes.

This puts the health boxes on either side of the direction buttons.

function AttributeSheet:drawParchment()
    local sheetW = 250
    local sheetH = 200
    local margin = 20
    local corner = vec2(WIDTH-sheetW-margin-self.inward, margin)

    if corner.x<WIDTH/2 then
        corner.x=WIDTH/2-400
    else
        corner.x=WIDTH/2+150
    end

    fill(136, 129, 107)
    stroke(0,0,0,0)
    rect(corner.x, corner.y, sheetW, sheetH)
    noFill()
    stroke(0)
    strokeWidth(2)
    rect(corner.x + 5, corner.y + 5, sheetW-10, sheetH-10)
    translate(corner.x + 10, corner.y + sheetH-30)
end

This puts the direction buttons in the bottom center of the screen.
The below changes are in function GameRunner:createLevel(count)

--[[
    table.insert(self.buttons, Button("left",100,200, 64,64, asset.builtin.UI.Blue_Slider_Left))
    table.insert(self.buttons, Button("up",200,250, 64,64, asset.builtin.UI.Blue_Slider_Up))
    table.insert(self.buttons, Button("right",300,200, 64,64, asset.builtin.UI.Blue_Slider_Right))
    table.insert(self.buttons, Button("down",200,150, 64,64, asset.builtin.UI.Blue_Slider_Down))
--]]

table.insert(self.buttons, Button("left",WIDTH/2-70,100, 64,64, asset.builtin.UI.Blue_Slider_Left))
table.insert(self.buttons, Button("up",WIDTH/2,150, 64,64, asset.builtin.UI.Blue_Slider_Up))
table.insert(self.buttons, Button("right",WIDTH/2+70,100, 64,64, asset.builtin.UI.Blue_Slider_Right))
table.insert(self.buttons, Button("down",WIDTH/2,50, 64,64, asset.builtin.UI.Blue_Slider_Down))
    self:runCrawl(self.initialCrawl, false)

@RonJeffries Here’s what you game looks like on my iPad Air 3 in landscape and portrait mode. The changes I made above allows me to play in either landscape or portrait mode with no problems.

Thanks, this will be useful to help me sort out what to do and how to do it.

Doesn’t look quite right in the first pic, with buttons below the info sheet. And does it work when she goes down to the bottom of the screen for a southern room? I’d think not. I think I’ll need to restrict drawing of the dungeon and reserve screen area for the buttons etc.

Improving this is on my list but not a top priority, although it’s great to see people trying the game.

Thanks!

@Simeon - could you tell me which version of Lua is used in the latest version of Codea - that’s established and beta.

@Bri_G Put this in setup()

    print(_VERSION)

@dave1707 - thanks for that, good news - was hoping it was 5.3. Do you know if the Codea website docs have been updated to reflect that ?

@Bri_G I don’t know if they’ve been updated. That’s a question for @Simeon. I just remember seeing the _VERSION keyword sometime ago.

@Simeon @John - had a lot of trouble recently whilst trying to set up another video for my Elite homage site. Mentioned this before but there are oddities in loading models - notably the _obj appendage to model names without it I noticed some of the builtin models alteady seem to have this. Also the asset path rejects the existing folder name (containing capitals) but accepts the lower case version (which doesn’t exist).

Also finding some vertex shaded models now load - probably down to format requirements.