From 99f3648d083c1f2cdc28d0dba3777776688f3a44 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Tue, 3 Jun 2025 14:01:39 +0200 Subject: [PATCH] - [NEW] Ara cada actor pot tindre la seua propia surface. - [WRK] Treballant en el editor de jailmojis. --- data/actor-base.gif | Bin 482 -> 484 bytes data/actor-hair.gif | Bin 0 -> 722 bytes data/actors.lua | 11 ++- data/jailmoji.lua | 158 +++++++++++++++++++++++++++++++++++++++++++- data/main.lua | 7 +- data/sprites.gif | Bin 5510 -> 5699 bytes 6 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 data/actor-hair.gif diff --git a/data/actor-base.gif b/data/actor-base.gif index b101ea13615a02e6331483c502c138688e546733..1b245c4d4625d29966c192dd36ee4f803d905e38 100644 GIT binary patch delta 377 zcmV-<0fzqK1LOmcNfrM90Du4hAOHYBKtTWh0RMmh0094yUN3(}CeKF7wr8ASJSNw$ z87;W$@qQ(p5lM;}mq3y7$y8ws&mK1F%=)-K3_`=xAi}_{_j(LCqI97|~@8(jZq@wJ>Dwm#~mRyVUksLiTuy0?CN|p>(*;0_7JU*NpKD^fs z7$z9ASj@_i(S?R6{yPIh!6lfacZyq delta 375 zcmaFD{D^sirzit9FfmTQzD@bO+o^5oZ*2Z3U*909yW{o8I@P&?o?VjD9VUJ{8Dh(G zUe4^*nO{5hu`^Y>wlqe+|7sQ0d6Mn(Dp|SDkDjaDw8-E6HZ?p@E84s@moLxXLd%}1 ze}YvE8&g|eLO2uSY{seORTHL$22E=-(4Jjjz{O?0ra5=LxuwPCEgSTA?y9faw%g2U zvF9>NBk#^52X+J>+i=?MxUXyEg`lG$S2E+GJF;%XU%HYO=KVmd$c*Is4&{_f}u7te&Lx{M!pMlbYyc&PHj-{ES&lJ;Z)_Bo*8m8JKZl#pJTE3VdG+*iIVfp zcFPpDXS|p@rADb}^~ovX2N+aNHu^M)ik>Xi+3;_d(zh$2>Op_s+*su#c5UlgjddN} S8yC6m3cLL2lCcsCgEatF1*_ly diff --git a/data/actor-hair.gif b/data/actor-hair.gif new file mode 100644 index 0000000000000000000000000000000000000000..254229d41c19a462a89a4e72dbb495e9b860a896 GIT binary patch literal 722 zcmV;@0xkVVNk%v~VW0po0K@KVl(51xJXabVELLoW^z`&QUCFUN zQzND+Kr_bdm_iepo z?wR&@zmFs5U2s@gT3mNVhf;oWQ-^kWf_EZ`e3e6lD{3T7gqmmucO{{EXm%)hq@9DF zOBtuESgs=(g_gEEv3R3STA`q{slTVRyoj%gyW;jGD;ZsR_Edsix4zfH#m2D~@xU%_Yz-&8CzB(A|Sq8v?I81UpWmn+B3 z+_&RogC2o|p16hdXB?%!r2fddwd>cgW6PdRySDAyxO0o9DPy$f)lYb99DY=yY8DF} zpRBB$=VBZxwLFi5m8!1lhNtT7{3#9`6Oj2P{>8*4HnY+aW`ZpJurlx6Mm+_87#$T1 zm+7DGXLN9{E1JRg7Z?ogv{0x5{&jy(40mV^KR EJ7GdrN&o-= literal 0 HcmV?d00001 diff --git a/data/actors.lua b/data/actors.lua index 68eb0a1..c78ee55 100644 --- a/data/actors.lua +++ b/data/actors.lua @@ -3,14 +3,22 @@ actors={ updating=false, main={}, under_cursor="", + surface=0, + should_free_surf=false, init=function() + for i,actor in ipairs(actors.list) do + if actor.should_free_surf then + surf.free(actor.surface) + end + end actors.list={} actors.updating=false end, add=function(actor) actor.dx,actor.dy=0,0 + actor.surface=surf.load("sprites.gif") table.insert(actors.list, actor) end, @@ -60,7 +68,8 @@ actors={ actors.under_cursor=v.name pal.subpal(1,16,8) end - + + surf.source(v.surface) if v.o=='u' then draw.surf(v.gfx.x+frame,v.gfx.y+16,16,16,x*8+v.dx*2,y*8-12+v.dy*2,16,16,v.dy>1) elseif v.o=='d' then diff --git a/data/jailmoji.lua b/data/jailmoji.lua index 1342c8b..1c4efa3 100644 --- a/data/jailmoji.lua +++ b/data/jailmoji.lua @@ -1,3 +1,159 @@ jailmoji={ - + surface=-1, + gendata={}, + + generate=function(genstring) + if genstring then + for i=1,#genstring do jailmoji.gendata[i]=genstring:byte(i)-65 end + end + + local surf_base = surf.load("actor-base.gif") + local surf_hair = surf.load("actor-hair.gif") + if jailmoji.surface ~= -1 then surf.free(jailmoji.surface) end + + jailmoji.surface = surf.new(32,48) + surf.target(jailmoji.surface) + + pal.subpal(20,jailmoji.gendata[2]+1) -- vestit1 + pal.subpal(21,jailmoji.gendata[3]+1) -- vestit2 + pal.subpal(22,jailmoji.gendata[4]+1) -- sabates + pal.subpal(24,jailmoji.gendata[5]+1) -- pell1 + pal.subpal(25,jailmoji.gendata[6]+1) -- pell2 + pal.subpal(23,jailmoji.gendata[15]+1) -- monyo + pal.subpal(26,jailmoji.gendata[11]+1) -- ulls + + surf.source(surf_base) + draw.surf(0,0,32,48,0,0) + surf.source(surf_hair) + local dx=jailmoji.gendata[1]*16 + draw.surf(dx,0,16,48,0,0) + draw.surf(dx,0,16,48,16,1) + pal.subpal() + + surf.target(0) + end, + + editor={ + old_update=nil, + view=0, + animated=false, + changed=false, + + show=function() + jailmoji.editor.old_update=update + update=jailmoji.editor.update + --jailmoji.surface = surf.load("actor-base.gif") + jailmoji.generate("AABJONAAAAAAAAAAA") + end, + + text_button=function(x, y, label, current_value, own_value) + local rect,color = draw.rect, 8 + local mx,my = mouse.pos() + + if current_value==own_value then rect,color = draw.rectf, 5 else rect,color = draw.rect, 8 end + rect(x,y,9,9,8) + draw.text(label,x+3,y+2,color) + if mx>=x and mx=y and my=x and mx=y and my max_value then + return 0 + else + return current_value+1 + end + end + return current_value + end, + + color_button=function(x, y, current_value) + local c1,c2,c3 = current_value+1,6,8 + local mx,my = mouse.pos() mx,my = view.tolocal(mx,my) + local hover = mx>=x and mx=y and my 15 then + return 0 + else + return current_value+1 + end + end + return current_value + end, + + update=function() + local self = jailmoji.editor + draw.rectf(10,10, 140, 120,5) + draw.rect(10,10, 140, 120,8) + draw.text("JAILMOJI EDITOR",20,14,8) + draw.rectf(19,23, 50, 50,7) + draw.rect(19,23, 50, 50,8) + surf.source(jailmoji.surface) + + local vx = 0 if self.animated then vx = 16 end + local vy = self.view * 16 + draw.surf(vx,vy,16,16,28,32,32,32) + + local rect,color = draw.rect, 8 + local mx,my = mouse.pos() + + self.view=self.text_button(19,74,"F",self.view, 0) + self.view=self.text_button(29,74,"B",self.view, 1) + self.view=self.text_button(39,74,"S",self.view, 2) + self.animated=self.text_button(60,74,"A",self.animated, not self.animated) + + view.origin(-70,-23) + draw.text("Vestit:",1,2,8) + + jailmoji.gendata[1] = self.spin_button(28,0,jailmoji.gendata[1],10) + jailmoji.gendata[2] = self.color_button(38,0,jailmoji.gendata[2]) + jailmoji.gendata[3] = self.color_button(48,0,jailmoji.gendata[3]) + jailmoji.gendata[4] = self.color_button(58,0,jailmoji.gendata[4]) + + draw.text("Pell:",1,12,8) + jailmoji.gendata[5] = self.color_button(28,10,jailmoji.gendata[5]) + jailmoji.gendata[6] = self.color_button(38,10,jailmoji.gendata[6]) + + draw.text("Cara:",1,22,8) + jailmoji.gendata[7] = self.spin_button(28,20,jailmoji.gendata[7],10) + jailmoji.gendata[8] = self.spin_button(38,20,jailmoji.gendata[8],10) + jailmoji.gendata[9] = self.spin_button(48,20,jailmoji.gendata[9],10) + + draw.text("Ulls:",1,32,8) + jailmoji.gendata[10] = self.spin_button(28,30,jailmoji.gendata[10],10) + jailmoji.gendata[11] = self.color_button(38,30,jailmoji.gendata[11]) + jailmoji.gendata[12] = self.spin_button(48,30,jailmoji.gendata[12],10) + jailmoji.gendata[13] = self.color_button(58,30,jailmoji.gendata[13]) + + draw.text("Monyo:",1,42,8) + jailmoji.gendata[14] = self.spin_button(28,40,jailmoji.gendata[14],10) + jailmoji.gendata[15] = self.color_button(38,40,jailmoji.gendata[15]) + + draw.text("Motxilla:",1,52,8) + jailmoji.gendata[16] = self.spin_button(38,50,jailmoji.gendata[16],10) + jailmoji.gendata[17] = self.color_button(48,50,jailmoji.gendata[17]) + + view.origin(0,0) + + if jailmoji.editor.changed then + jailmoji.editor.changed = false + jailmoji.generate() + end + + end, + }, } \ No newline at end of file diff --git a/data/main.lua b/data/main.lua index 4ca5f5b..3d3feba 100644 --- a/data/main.lua +++ b/data/main.lua @@ -2,6 +2,7 @@ require "fade" require "game" require "editor" require "menu" +require "jailmoji" function mini.init() menu_option=0 @@ -35,7 +36,11 @@ end function main_init() --set_update(menu_update) second_menu = {{"PEIV", function() end},{"TORNAR",show_main_menu}} - main_menu = { {"JUGAR", game.restart}, {"EDITOR", editor.init}, {"EIXIR", sys.quit}, {"TEST", function() menu.show(second_menu) end } } + main_menu = { {"JUGAR", game.restart}, + {"EDITOR", editor.init}, + {"JAILMOJI", jailmoji.editor.show}, + {"EIXIR", sys.quit}, + {"TEST", function() menu.show(second_menu) end } } show_main_menu() end diff --git a/data/sprites.gif b/data/sprites.gif index 93819a115e2168544f840c91390f513a0e62e579..5ebc466592af37f502b2286375b426057714cfc4 100644 GIT binary patch delta 5506 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 EJJrZ&M*si- delta 5316 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 W>I|6IL$C9+UfEF3?*kYZ0suS71pws$