Glad to see you're still having fun with the Nspire Also, nice application. I wonder, can you spoof the version number that the Student software detects ? That would be even cooler as you could trick the software that you have a newer version of the OS installed.
There shouldn't be a problem anymore, I think I fixed everything. So go everyone, and share your passwords in peace. Just keep in mind that I can see them anyway.
So you are saying that if you query everyone on OmnomIRC, and some of them start talking together you can view their convo ? Pretty bad. I'll see if I can understand Netham's code enough in order to create a fix.
-- Bloxorz by Purobaz -- 48h CPC #4 -- Planete-Casio.fr -- Thanks to Vebveb for LuaFX -- useful functions local prt=graydraw.text local sub=string.sub local tonb=base.tonumber local tostr=misc.tostring2 local wait=misc.wait -- variables local level=1 local loop,choice local nb local i,j,k -- map local map local map_info={} -- width, height, x, y local map_end={} -- block local block={} -- x, y, position (1~3) local block_move={ -- depend on keys {0,-1,1}, {2,0,3}, {0,1,1}, {-1,0,3} {0,-2,3}, {1,0,2}, {0,1,3}, {-1,0,2} {0,-1,2}, {1,0,1}, {0,2,2}, {-2,0,1} local block_pst={ {1,0}, {0,-1}, {0,0} local block_size={ {0,-6}, {-3,-6}, {0,-8} -- sprites local sprite_map={ local sprite_block={ --functions function load_map() if level==1 then map="111114352333350511111233" map_info={8,3,25,30} block={1,2,3} elseif level==2 then map="111114511455555555435335555404114555233112333" map_info={9,5,25,30} block={6,1,1} elseif level==3 then map="111111111143555455111111145533404533333333311233311111111111" map_info={15,4,25,42} block={12,2,2} elseif level==4 then map="1145511455435334043123311" map_info={5,5,25,30} block={5,2,3} elseif level==5 then map="45555433334111141111411112553512504112333" map_info={5,8,25,30} block={5,2,2} elseif level==6 then map="1455514043143311411123333" map_info={5,5,25,30} block={5,5,3} elseif level==7 then map="455111111145555511112555555551123335535511111250431111112331" map_info={10,6,25,30} block={2,2,3} elseif level==8 then map="111111455335511455511455114511455533333114555455511111114504233311111112555111111111111233" map_info={15,6,25,40} block={2,3,3} elseif level==9 then map="1411111114111111455114554553350423311233" map_info={8,5,25,30} block={2,1,3} end function draw_map() for j=1,map_info[2],1 do for i=1,map_info[1],1 do nb=tonb(sub(map,((j-1)*map_info[1]+i),((j-1)*map_info[1]+i))) if nb==0 then map_end={i,j} elseif nb>1 then spritexy map_info[3]+4*i+4*j,map_info[4]+4*j-3*i,sprite_map[nb-1] refresh wait(1) end end end function intro() local stage=" 8p8p 8p8p 8p8p ?p?p ?p?p ?p?p p80( ( P( (` 0P8p local number={ `5@=@ `5P=P `5@=@ `5@=@ clear nil spritexy 14, 20, stage spritexy 87, 20, number[int(level/10)+1] spritexy 100, 20, number[int(level%10)+1] refresh wait(30) function menu() local menu=" 8888( 8888 8888( @@@@ local cursor=" clear nil spritexy 10, 2, menu state(false) choice=0 i=1 repeat clear nil state(true) spritexy 33, 13+13*i, cursor refresh repeat wait(5) until key(5) or key(39) or key(38) or key(36) or key(44) if key(39) and i>1 then i=i-1 elseif key(38) and i<3 then i=i+1 elseif key(5) then choice=i elseif key(36) or key(44) then choice=4 end until choice~=0 -- end of the menu -- game function game() repeat intro() load_map() clear nil draw_map() state(false) loop=0 repeat clear nil state(true) spritexy map_info[3]+4*block[1]+4*block[2]+block_size[block[3]][1],map_info[4]+4*block[2]-3*block[1]+block_size[block[3]][2],sprite_block[block[3]] refresh repeat wait(5) until key(39) or key(40) or key(38) or key(37) or key(36) or key(44) or key(1) if key(1) then level=level+1 loop=1 elseif key(36) or key(44) then -- exit or menu loop=3 else if key(39) then k=1 elseif key(40) then k=2 elseif key(38) then k=3 elseif key(37) then k=4 end block={block[1]+block_move[block[3]][k][1],block[2]+block_move[block[3]][k][2],block_move[block[3]][k][3]} -- move the block
if block[1]==map_end[1] and block[2]==map_end[2] and block[3]==3 then -- winner level=level+1 loop=1 if level>9 then loop=3 end elseif ((block[2]-1)*map_info[1]+block[1])>=1 and ((block[2]-1)*map_info[1]+block[1])<=#map -- looser and ((block[2]-1+block_pst[block[3]][2])*map_info[1]+block[1]+block_pst[block[3]][1])>=1 and ((block[2]-1+block_pst[block[3]][2])*map_info[1]+block[1]+block_pst[block[3]][1])<=#map then if tonb(sub(map,((block[2]-1)*map_info[1]+block[1]),((block[2]-1)*map_info[1]+block[1])))==1 or tonb(sub(map,((block[2]+block_pst[block[3]][2]-1)*map_info[1]+block[1]+block_pst[block[3]][1]),((block[2]+block_pst[block[3]][2]-1)*map_info[1]+block[1]+block_pst[block[3]][1])))==1 then loop=2 end else loop=2 end end until loop~=0 -- end of the stage clear nil state(true) spritexy map_info[3]+4*block[1]+4*block[2]+block_size[block[3]][1],map_info[4]+4*block[2]-3*block[1]+block_size[block[3]][2],sprite_block[block[3]] refresh wait(10) until loop==3 -- end of the game -- main graydraw.setcolor(true) repeat menu() wait(5) if choice==1 then level=1 game() --elseif choice==2 then --elseif choice==3 then end until choice==4 graydraw.setcolor(false)
It might be a bit corrupted ^^ Anything you recognize ?
However, don't expect super complex and graphically advanced games to be possible It's still a calculator, and the Lua bindings are of course a bit slower than the C one. (This is why Ndless 3.2 will be awesome ). But a (good functioning) Angry Birds clone should be possible.
3.2 integrates the Chipmunk physics engine with Lua bindings. This allows us create fun games with the physics. However there is just one problem. It's pretty complex. So here is some useful info if you want to start programming.
2. The online chipmunk docs http://chipmunk-physics.net/release/Chipmunk-5.x/Chipmunk-5.3.4-Docs/ Even though it describes the C API, it shows how the concepts of the engine and how it's structured. And most Lua functions have similar names to the C ones. You will find yourself checking this resource often when you start programming with the engine ;)
self.shape:setRestitution(0.6) self.shape:setFriction(0.6) end
function pBox:paint(gc) local coords = self.shape:points() local polycoords = {} for k, vert in ipairs(coords) do table.insert(polycoords, vert:x()) table.insert(polycoords, vert:y()) end local x,y=coords[1]:x(),coords[1]:y() table.insert(polycoords, x) table.insert(polycoords, y)
gc:setColorRGB(self.color) gc:fillPolygon(polycoords) gc:setColorRGB(0,0,0) gc:drawPolyLine(polycoords) end
function getMidPoint(line) local xdif = math.abs(line[3]-line[1]) local ydif = math.abs(line[4]-line[2]) local x = math.min(line[3], line[1]) + xdif/2 local y = math.min(line[4], line[2]) + ydif/2 return x, y end
function terrain(bline, range, roughness, tms) local lines = {bline} local lines2 = {}
local midX, midY
for times=1, tms do for index, line in pairs(lines) do midX, midY = getMidPoint(line) midY = midY + math.random(-range, range)
table.insert(lines2, {line[1], line[2], midX, midY}) table.insert(lines2, {midX, midY, line[3], line[4]}) end lines = lines2 lines2 = {} range = range * (roughness*2^-roughness) end
return lines end
------------------------ -- Terrain to physics -- ------------------------
self.mass = LARGE self.body = physics.Body(1, 1) self.body:setMass(self.mass)
self.inertia = 0
local a, b, ss for index, line in ipairs(self.lines) do a = physics.Vect(line[1], line[2]) b = physics.Vect(line[3], line[4])
self.inertia = self.inertia + physics.misc.momentForSegment(self.mass/#self.lines, a, b) ss = physics.SegmentShape(self.body, a, b, 1) ss:setRestitution(0) ss:setFriction(1) table.insert(self.segments, ss) end
self.shape:setRestitution(e or 0.6) self.shape:setFriction(f or 0.6)
if group then self.shape:setGroup(group) end end
function pBox:paint(gc) local coords = self.shape:points() local polycoords = {} for k, vert in ipairs(coords) do table.insert(polycoords, vert:x()) table.insert(polycoords, vert:y()) end local x,y=coords[1]:x(),coords[1]:y() table.insert(polycoords, x) table.insert(polycoords, y)
gc:setColorRGB(self.color) gc:fillPolygon(polycoords) gc:setColorRGB(0,0,0) gc:drawPolyLine(polycoords) end
function getMidPoint(line) local xdif = math.abs(line[3]-line[1]) local ydif = math.abs(line[4]-line[2]) local x = math.min(line[3], line[1]) + xdif/2 local y = math.min(line[4], line[2]) + ydif/2 return x, y end
function terrain(bline, range, roughness, tms) local lines = {bline} local lines2 = {}
local midX, midY
for times=1, tms do for index, line in pairs(lines) do midX, midY = getMidPoint(line) midY = midY + math.random(-range, range)
table.insert(lines2, {line[1], line[2], midX, midY}) table.insert(lines2, {midX, midY, line[3], line[4]}) end lines = lines2 lines2 = {} range = range * (roughness*2^-roughness) end
return lines end
------------------------ -- Terrain to physics -- ------------------------
self.mass = LARGE self.body = physics.Body(1, 1) self.body:setMass(self.mass)
self.inertia = 0
local a, b, ss for index, line in ipairs(self.lines) do a = physics.Vect(line[1], line[2]) b = physics.Vect(line[3], line[4])
self.inertia = self.inertia + physics.misc.momentForSegment(self.mass/#self.lines, a, b) ss = physics.SegmentShape(self.body, a, b, 1) ss:setRestitution(0) ss:setFriction(1) table.insert(self.segments, ss) end
Windows has some weird things where it still can write to the empty space of a CD-R/DVD-R. So it prolly just is a way to mark both the computer and CD. Anyway, you probably can extract the movie out of the exe with some effort
Congratulations to all, there where some fine entries Regarding the votes of the other judges, are there any plans to open up the details on how they voted ?