My first game jam ever! A simple puzzle game made for Newbies Game Jam (2022 - 1), minimalism was the required theme!
OneTwo is now published (and obviously free to play) at OneTwo in itch.io!
Uncover, find and match all the pairs of adjacent blocks of the same color. Try to solve the puzzle by minimizing your moves counter.
First game jam ever and the third "complete" game I have ever published! This time, my goals are focused on time management and deadline stuff. I will not try to tackle too many completely new things. After the voting deadline, I will do some much-needed code refactoring and some game updates expansion....maybe.
Because of my ignorance in music/audio/font, I downloaded the following free assets:
- Font: https://www.dafont.com/it/louis-george-caf.font
- Music: https://uppbeat.io/t/sky-toes/the-long-ride-home (License code: PSLYCCVB9DCLRBZ9)
- Sound effects at https://mixkit.co/free-sound-effects/
- Created project repository
- Create base scenes:
Block,Grid,MainandGameUI - Created base block mechanics: select block, swap two adjoint blocks
- Created grid generation: creates the grid as a matrix and select corrisponding color from a random list of
colorId-> if grid is a NxM matrix (rows and columns), there will be N different color; column with index 0 is fixed, always showned and as N unique color; columns with indexes 1 to M are hidden, in these there are a total of M-1 blocks with a specific color - Created a
RestartButton: re-randomize the grid - Created a
Globalsscript containing:RandomManagerstruct, some to be filledenums,ColorPalettestatic class
The code is already a mess... Grid.cs is the most chaotic scripts ever... too many edge-cases, too many async/await, state machine not utilized enough, too many if, too many row of code in a single file... as now, I'm good with this delirious mess... it works... I will refactor in the future, maybe post jam!
- Completed base game-mechanics (at least a solid base), the mess in
Grid.csI talked about: movements, win-condition, edge-cases, valid-movement-condition, collapsing, check if same color - Created connection between
GridandGameUIto update moves counter - Added
GRIDSTATE: basically IDLE versusTween/Timeractivating - Some game balancing: supermoves (click one and then swap after one color is shown) count 2 moves
Now the game is quite solid respect different screen size and orientation (portrait for mobile). Mechanichs and structure of the core part of the game is done. Now I can focus on graphics, main theme, UI structure, possible menus type, more complex animation/tween and also balancing-difficulty, possible game mode (moves count mode, timed mode, different level, increasing number of color/columns, specific challenges).
- Added adjustable
_cellBorderparamater - Now compatible with every number of color and column (every NxM grid)
- Now compatible with mobile/touch device, tested on Android
- Now adative to multiple screen size: on mobile is portrait and
Gridis rotate 90 degrees; blocks size auto-change to fill screen size (constrainted by some borders) Gridnow as a separeteCanvasLayerandControlnode: can control anchors, programmatically placed in the middle- Shifted the
Gridcenter to be in the middle of the grid itself -> programmatically calculates this offset and setup all the paramaters that depends on that; now is easier to rotate the grid - Added some function
Initto have more control toGridinitialization inMain
Change my mind a few times meanwhile...totally abstract or not? I tried a themed base solution (a stylized building, blocks are windows, and select/match colors corresponds to turning on/off light), but I changed my mind and decided to go fully abstract that closer to what my actual style should (once renormalized my incompetence).
- Begin to create itch.io page (now draft state)
- Changes some core mechanics of the game: now matching color blocks don't disappear and blocks don't collapse, instead they become inactive and remain in the grid. This block can be moved/swapped with active blocks.
- Refactored a lot of
Gridcode: still a mess but at least I can read it without throwing up - Changed
Gridcreation and initialization: now it easier to modify things and keep track of row-column-xAxis-yAxis-arrayOrder relationship - In
Globalsadded aUtilitiesstatic class and aGridInfostatic class - Refactored input flow of
Gridusing more blocks and grid state and less await/async - Created
TweenManagerstatic class to handle all tweens setup and start/stop: inGridcan call specific methods ofTweenManager(corrisponding to specific animation) that stacks tween setup function (mainly interpolate). Then inGridcan callTweenManager.Start(_tween, params Block[] blocks), this adds to tween setup aInterpolateCallBackto set blocks state back toIDLEwhen tween is finished (can be at different times for different block). This way a I can combine (using a delay time param) what ever animation I want on whatever block I want. - I DON'T KNOW IF THIS METHOD IS GOOD FOR PERFORMANCE, BUT AT LEAST IT WORKS...AT LEAST FOR NOW
- Now while a tween animation is running you can still play with all the blocks that are not running a animation
- Created tween animations: swapping, selecting, unselecting, inactivating/switch-off, appering of the grid
- Created
ControlTemplate: makes easier to apply tween to control node (some problem if screen is too wide, my game will be played in portrait mode anyways) - Created
SettingsControl, created (but not implemented yet) the connection withMain(_on_SettingsControl_button_pressed), implemented connection only withBackButton - Created a
ChangeControlSwapanimation: same as swap animation between two block but applied to control mode - Created
FakeGrid: parent ofGrid, a grid without interaction feature (no input function), used only to recreate some tween animation on it, can create a specific grid based on a fixed color list (and on/off list) - Created
HelpControl: show some tween animations with the rules of the game, composed of aFakeGrid(where animations takes place), some button to go to the next/previsous help/tip/rule, a label with some short explanations - Connected
HelpControltoMain - Implemented
SaveManager.cs: save and load highscore, connected withSettingsControlandGrid - Some refactoring
- Some changes in some specific tween animations
Time is ticking! Only 1.5 days left... Clean, elegant, general and reusable code is now only a vanished dream! A lot of bug solved brutally! Remain the biggest bug of all: HTML5 export doesn't work, work fine in the editor and on Android
- Completed
HelpControltween animation - Created win animation and win/winning state
- Fixes a lot of bugs with input and grid/block state
- Created a (probably not so efficient)
AudioManager: handle all audio effect (not music), if audio is already playing, create a newAudioStreamPlayerand when finished delete it - Added sound effect to block animation and to win animation
- Added background music
- Create all icons for UI buttons
- Selected and added a color pallette: added a
ColorPaletteclass and aColorManagerstatic class inGlobals - Selected a name for this game: "OneTwo"
- Connected music and audio settings to
AudioManager - Added a save functions and file for settings
- Update itch.io page: create a cover image, prepared some gifs/screenshoots
- Selected a font
- Fixed problem with moves counter and moves label
- Created a background pattern
- Fixed a lot of small bugs: highscore label, grid size,
PackedSceneloading and some cleaning - Added a
TitleScreen - Published and free to play on itch.io: HTML5 version and APK file for Android version






