— Level maker for R U I N —
After creating a level, copy it’s code and past it on the end of the levels()
function (at the end of the program) :
else : return [] #insert your lvl code here
Download the game
Controls:
-Arrows: move/resize platforms -[OK]: switch editing mode -[Power]: add platform -[(] and [)]: previous and next platform -[+] and [-]: incrase and decrase ennemy number\n -Backspace: delete current platform -[exe]:print level hash -[0]:Quit (will also print the hash)
Interface:
-Left-Up:Platform data (x,y,w,h,enemy number) -Left-down:Current mode and level size
-Red:current platform -Orange:spawn platform -Green:door’s platform
Pro tip: use the key to see the available functions
from ion import * from kandinsky import * from time import monotonic as cTime,sleep def printLvl(): try:print("\nLevel hash:\n"+__compressLvl(),end="\n\n") except:print("\nNo lvl loaded\n") def doc(): print(""" --- Level maker for R U I N --- Controls: -Arrows: move/resize platforms -[OK]: switch editing mode -[Power]: add platform -[(] and [)]: previous and next platform -[+] and [-]: incrase and decrase ennemy number\n -Backspace: delete current platform -[exe]:print level hash -[0]:Quit (will also print the hash) Interface: -Left-Up:Platform data (x,y,w,h,enemy number) -Left-down:Current mode and level size -Red:current platform -Orange:spawn platform -Green:door's platform Pro tip: use the <var> key to see the available functions """) def __update(): draw_string("Platform {}, Number :{}".format(select,len(lvl)),0,0) draw_string("Mode:"+["Position","Size"][mode],0,202) draw_string(str(lvl[select]),0,20) draw_string("{} bytes".format(len(lvl)*9),0,181) for id,arg in enumerate(lvl): if id==select:c="red" elif id==0:c="orange" elif id==len(lvl)-1:c="green" else :c="blue" fill_rect(*arg[0:-1]+[c]) def __compressLvl(): string="" for i in lvl: x,y,w,h,nb_nmy=i x,y,w,h=x//5,y//5,w//5,h//5 for j in [x,y,w,h]: string+=("0" if j<16 else "")+hex(j)[2:] string+=str(nb_nmy) return string def __uncompressLvl(string): Hex2Int=lambda n:int("0x"+n) platforms=[] for i in range(0,len(string),9): ptf_str=string[i:i+9] plat=[] for j in range(0,8,2):plat+=[Hex2Int(ptf_str[j:j+2])*5] plat.append(int(ptf_str[-1])) platforms.append(plat) return platforms def launch(): print("\n---Press button---\n") print(" 1-New Level\n 2-Load level from hash") lvl,loop=[[160,110,30,5,0]],1 while loop: for i in (42,43): if keydown(i): loop=0 break del loop if i==43: print(">Load level...") try:lvl=__uncompressLvl(input("\nPaste level code:\n")) except:print("\n>Error: unable to load from hash") else:print(">New level...") print("\n>>>Launching editor") __editor(lvl) def __editor(in_lvl): global lvl,mode,select lvl,select,mode=in_lvl,0,0 __update() while True: if keydown(48): break for i in (0,1,2,3,4,8,16,17,33,34,45,46,52): if keydown(i): fill_rect(0,0,320,222,"white") if i==0:lvl[select][mode*2]-=5 if i==3:lvl[select][mode*2]+=5 if i==1:lvl[select][mode*2+1]-=5 if i==2:lvl[select][mode*2+1]+=5 if i==4:mode=int(not mode) if i==8: lvl.insert(select,list(lvl[select])) select,mode=select+1,0 if i==17 and len(lvl)>1: lvl.pop(select) select-=1 if i==33:select=(select-1)%len(lvl) if i==34:select=(select+1)%len(lvl) if i==45:lvl[select][4]+=1 if i==46:lvl[select][4]-=1 for j,l in enumerate((320,222,320,20)): lvl[select][j]=lvl[select][j]%(l-5) if i==52:printLvl() lvl[select][4]=lvl[select][4]%10 __update() press_time=cTime() while keydown(i): if cTime()-press_time>(0.2,0.02)[i<4 and not keydown(6)]:break fill_rect(0,0,320,222,"white") draw_string("Press back to leave",65,101) printLvl() print("\nLevel size:{} bytes\nPlatforms number:{}\nCompression ratio:{}".format( len(lvl)*9,len(lvl),round(len(str(lvl))/len(__compressLvl()),2))) while keydown(4):pass doc() #launch()