It's been a long time since my last papercraft, but here is a new one. This time it's Juan, the main character from the great game Guacamelee.
Saturday, January 4 2014
By Mr_Qqn on Saturday, January 4 2014, 15:58
Tuesday, May 21 2013
By Mr_Qqn on Tuesday, May 21 2013, 23:10
Last week I bought the Adventure Time comic book, and inside were 2 messages coded with strange characters.
I made the character list, there are 26 of them: so it's seems to be a simple alphabet transposition. I give each character a random letter so I can write the message on the computer. Now, I have to transpose this alphabet to a new one to find the meaning of the message.
- Technique #1: brute-forcing by dictionary, but if there are proper nouns it probably won't work. Moreover I have the french version, and I have no idea if this part was translated, and it would mean brute-forcing with english and french, and it would take a lot a time...
- Technique #2: manually find specific words and improve the result step by step.
So I made a tool which is able to find the different matching alphabets transposition in order to find specific words in the message. The algorithm is really easy, simply based on a tree-path-like one.
The hardest part is to find the first word or the first word sequence (fortunately there was a clue). And once found, the remaining is easily found with simple deduction and some dozens of tries. :)
The tool is here : http://mrqqn.net/decypher/
For the people who want to try, the message was:
amobwozegirkezmepexxzarpwgkrimtmquezzwm-kfijmxetm eu'ztejmuraflmfdiemtcorwstrpez fxpfozcrpturifgpeuaorw-kfijmxetm
Saturday, April 20 2013
By Mr_Qqn on Saturday, April 20 2013, 16:36
And here it is ! Another bravest Bravest Warriors papercraft. This time it take its inspiration from final scene of the Butter Lettuce episode.
It took me around 2 weeks (at a few hours each day) to make the 3D model and 2 full days to build it. I'm starting to understand a lot of different little trick to make better model and build something cleaner even if it's far from being perfect. For instance I had to make a little surgery on the back of the unicorn-man : a lot of little gaps were accumulated which resulted in a much bigger gap of ~3 mm and it was impossible to glue the final part directly. Fortunately it's on a hidden place, so it's ok ^^. The model was also so big (over than 30x30x20 cm) that I had to put some polystyrene on its base to consolidate it... and here it is !
Son for the bravest of you, there is 16 pages to print + a fix (I had flipped polys and figured it out too late, so I wasn't able to fix it in the original file without being forcer to build the entire layout again...). I'm sorry, but I haven't made any instruction : you had to help yourself with the 3D model in the PDO file (but nothing really complicated).
If someone make it, I would be very glad to see it :) !
Sunday, March 24 2013
By Mr_Qqn on Sunday, March 24 2013, 20:49
I made another papercraft! This time it's Impossibear and his gas powered stick, another character from Bravest Warriors like Catbug. I wanted to position him in a fun way, so I decided to make him trying to take out the stick (which now is some kind of relic) from a pedestal, much like in the legend of king Arthur.
Friday, March 22 2013
By Mr_Qqn on Friday, March 22 2013, 01:33
I had a lot of fun modeling this character in 3D, and this is the first time I made something this complex, so I'm kinda proud of it. However, I should have reduced the number of polygones or enlarge the papercraft, because some parts were really a pain to glue... (And I also need to buy better tools)
FYI: Instead of the paper, I used a little wood stick for the broomstick. I tought I could wrap thick paper to make a 5mm roll, what a dumb idea...
Saturday, March 16 2013
By Mr_Qqn on Saturday, March 16 2013, 19:51
Download instructions : PNG
Thursday, February 28 2013
By Mr_Qqn on Thursday, February 28 2013, 15:31
It has been 2 weeks... With the job searches and a nice flu, I didn't progressed as fast as expected, but I have at least finished the "editor" part of the editor. Here is what have been added since the last time :
Notes are glued on a circle division (a circle has 16 divisions) and on a beat division. Each beat can be divided in 1, 2, 3, 4, 6, 8, 12 or 16 divisions with the slider on the left.
Anchors allows to handle tempo and signature (number of beats per measure) variation. I allowed the selection of only 3 different signatures : 3/4, 4/4, 5/4 to simplify the GUI and because by playing with the division size, it's possible to reproduce different signatures. For instance :
- 6/4, 6/8, etc... => 3/4
- 2/2, 2/4, 4/8, etc... => 4/4
- 10/4, 5/8, etc... => 5/4 (not really used in modern music, but it's possible to encounter it one day or another, so better implement it now)
I faced 2 issues when I implemented anchor edition :
In my data model, every event (note or anchor) is dependent of the previous anchor, has a reference to this one and vice-versa. When we need to change the anchors order, the child anchor become parent of its parent anchor and vice-versa, and for a short time during the "switch" algorithm, an anchor could have 2 child anchors, which triggered an infinite loop. I first enforced the model to be sure that every anchor could have only one child anchor, by throwing an exception once a second anchor is added. But that leaded to an "hyper-static" model : each event has a mandatory parent anchor (which is essential to compute its exact time position), and it wasn't possible to switch 2 anchors at all. So, I transformed this constraint into an assertion at th end of the switch algorithm and I could simply debug the algorithm.
Moral: don't put to much constraints on the data model.
For obvious space reasons, song positions are stored with only an Int thank to scala value classes (I'll explain this concept in another post) and were encoded like this :
| measure | division | | 16 bits | 16 bits |
measure is the measure index and
division the note position into the measure. For instance, if division = 16384 : 16384/65536 = 1/4, so the note start at 1/4 from the measure beginning. The main issue is that if we start editing a song and later we notice that the song is not in 4/4 but in 3/4, changing signature will move every note by "compressing" them.
I had to recode position depending on the beat instead of the measure. This way, we can change signature without moving notes.
| beat | division | | 16 bits | 16 bits |
But that leaded to another issue : with 2^16 beats, the maximum represented duration is relatively short : at 200 BPM the maximum duration is of 5.46 minutes. I increased the number of bits for the beat representation, but by diminishing the number of bits for the division we also reduce the precision. For intance, at 200 BPM and with 8 bits for the division, each division has a duration of 1.17 ms which is really acceptable, but at 10 BPM, the precision diminished to 23.44 ms, which is now not acceptable. So I had to find a bits repartition in a way that the maximum duration is enough long at high BPM and with a acceptable precision at low BPM. Finally, I splited the integer this way :
| beat | division | | 20 bits | 12 bits |
It give a maximum duration of 87.38 minutes at 200 BPM and a division precision of 1.46 ms at 10 BPM, a good compromise !
3 edition panels which are accessible by touching an element (which will then appear highlighted):
- Song : used to edit the main anchor and the song offset
- Note : used to edit the note angle and position
- Anchor : used to edit the anchor BPM, signature and position
What took me most of the time, was building every edition component and moreover improving the engine touch event management.
But, these panel pointed out the first limits of the engine : since I mix geometric shapes and text, I have to often switch the openGL shader, which cause an FPS drop... For now, the performance still remains acceptable so I will prioritize functionalities over performances and go on with the game development. And once I have a playable game, I'll go back to the engine improvement.
- Double-tap on edit buttons : the 3 buttons of the left (add, move and delete) have 2 modes : note et anchor. We tap one time to activate note mode and two time for the anchor mode. And to reduce manipulation errors : the mode is only active while the button is pressed. It will avoid us to modify a note if we instead only wanted to move into the song.
- Zoom limits
- Position limits
- Automatic deletion of identical events
Nothing really complicated.
The next step is now to add a play mode into the editor and then a game mode. Once it will be done, I'll let you test all of it : :)
Thursday, February 14 2013
By Mr_Qqn on Thursday, February 14 2013, 12:36
I'm not sure if it's correct to say "open sourcing"...
For those who might be interested, I opened the source of 2 of my old games :
- Koto: a rhythm game made in scala https://bitbucket.org/mr_qqn/koto
- Yokai's Song: a small game made for a gamejolt jam https://bitbucket.org/mr_qqn/yokai-... (you can play it here)
I'll later open the sources of my current game engine once it will be more stable and dependent from the game. But I'm not sure if it will be useful compared to a great engine like libGDX.
By Mr_Qqn on Thursday, February 14 2013, 12:28
Few days ago, I started the devblog for my new game project, but as it may interest non-french speakers, I'll also write an english one.
So, later this month I started developing a new game called Revolbeat, but with only a couple of hour every evening it never progressed well. Unfortunately, I lost my job as game developer at Mandala last week, and now that I am unemployed, I decided to use this first week to work completely on the project.
As it is my first android game, I don't want to make something completely unknown. I'm a huge rhythm game player and also made another rhythm game called Koto 2 years ago which as the particularity to use the whole keyboard as an input. It was so mad I left this game unpolished... (You can find screenshots and a video of it in the french section of my blog : /fr/tag/koto, and even try it if you're brave enough). So this one will also be a rhythm game. I had the idea of making this game after being frustrated by playing Cytus on a tablet : almost 50% of the time, my hand were hiding some parts of the screen. And, unless I had played a song at least a few time before in order to remember these hidden notes, I couldn't hit them. I also love the look of Super Hexagon, and when I mix both, it give me a rhythm game based on a circle where the notes came from the center and goes to the border. By having the note coming from the center and taping on the outside of the circle, whether you use your thumbs on a phone or you hands on a tablet, the action zone will never be hidden. I will confirm that once the game is more advanced, but I'm very confident on this point.
The gameplay will remain a classic beatmania-like, you tap the right notes at the right time, nothing more. The fun from this type of game comes from the high difficulty due to the very high number of APM. But without any sensitive feedback on tablet and mobile (I know I could use the vibrator of cellphones but it don't even have one-tenth of the feedback of a real button, and tablets generally don't have one) the song charts can't be as intense as in a more classic rhythm game. So, in order to keep the game hard enough without being too frustrating I'll change some execution difficulty into reading difficulty, pretty much like Super Hexagon, by adding spins, flashes, etc...
This game won't change radically the rhythm or mobile games, but it's not my goal either. For this first mobile game I decided to put the major part of my work into the feeling of the game. That means that I want the game to be hard and that the player rage, but only because he doesn't still have enough skills no because the game is unfair (bad timings, wrong hitzones, imposible gesture, etc...).
So, this is the main idea.
For the development, I first wanted to make it in Haxe with NME as it could be directly deployed on Android and iOS, but as I don't really know what's going on behind this engine and needed a good reactivity, I was not fully satisfied with this option. This is after the discovery of Avian (a tool that compile JVM code into native code, including for iOS), that I decided to make my own one in Scala.
I build the engine as I need new functionalities in the game. That keeps away useless and too generics components (which are so generic that they don't do a thing anymore). Currently, I have basic 2D scene engine which handle, shapes, sprites and texts, and also dispatch touch event. I worked a lot with flash the past 2 years, so it is clearly influenced by it. I put some effort to make the allocation of object during the rendering to 0, but as Scala has some overhead (like for loop which are in reality anonymous functions called N times) it's not yet perfect. The next things I'll add on the engine will be caching to a texture, which will be useful for long text retracing and a better use of VBOs. But, the rendering speed at this point seems ok, so I'll put more work into it once I really need to.
On my previous rhythm game, Koto, I made a mistake that made me abandon it : I never made a song editor. Instead for writing song, I used a custom text format which (I think) was not bad since it was mostly clear and human comprehensible. But editing the song on a text file, then going back to the game, then refreshing the song and finally testing it, took so much time, even for a basic thing. So, for this one, I decided to make the song editor as I make the game.
Currently I have made solid parts on which I'll build the game later:
- a chart model, which can be edited in real time (for instance, if you change the tempo, all the note after will be updated to their new time)
- an editor in which you can
- move and zoom
- add, move and delete notes
And before I start working on the game part, I need to polish the basic editor functionalities:
- anchors edition: for song with changing tempo
- main offset edition
- magnetism edition: to "glue" notes on divisions like 1/2, 1/3, 1/4, etc...
- automatically remove duplicate elements: only one note at the same place
- add boundaries to the position and zoom: so you can be at -1 min or have 5 min of song on the screen
Once all of this is done, I'll start making the game part in a way that it will be directly playable in the editor so that the cycles edition/test are really short.
That's all for now, I'll try to make at least an update per week, and for the next one (I hope) a finished editor. :)