Jigsaw Puzzles: Master Artists of Old will be entering Free-to-Play! To all those who purchased and played the game, thank you so much for the support and for enjoying this little Jigsaw Puzzle game and the beautiful artworks of our past. You will ever be appreciated.
I plan on no longer working on development and so I'm just allowing it all to be freely available.
Apologies for any wishes that the game would receive more updates and improvements. Perhaps in the future, I may take it up again, but do not trust to hope. It is a most tiny sliver of a chance.
December and some of January have been the first vacation we've had in like 5 years. It was strange to NOT do things, and we probably cheated by doing some work when boredom was at its highest. I promise to keep it a secret if you will ;)
The wind is picking up speed
Art-wise, we are doing a makeover on all the graphics. The reasons are:
There are some assets from week 1, which were made, integrated, and have since become stale.
The png files themselves are exported with old versions of Photoshop and our game engine prefers recent renders.
There are some assets that we aren't using anymore and need to be tracked down and removed.
To be clear, we're not chacking the art style, merely bringing it to 2022 Code-wise, there is much work to be done, and I will write it in a separate paragraph.
"Toto, I don't think we're in Kansas anymore."
Upgrading the framework to DOTS/ECS.
Until now, the entire game ran on internal modules. Small and numerous modules. This allowed programming to be easy to read, easy to write and if a bug happens, it won't collapse anybody but the system it's in. It also made fixing the bugs easy because they could only BE in a single place.
But now, most of the gameplay, especially the racing scene will be converted to ECS. Long story short, it's a way to organize data and game mechanics to the likings of modern computer hardware. With the current code, we can stay over 30fps but not guarantee 60fps. In a racing game, I would like to stay over 100fps if I could. We are talking about a few dozens of "things" interacting on the race track.
ECS technology allows hundreds of thousands of "things" to exist in the scene and the game engine wouldn't bat an eye, even if they do physics.
Unfortunately, I can't show anything here as it's just code. I will leave you with this video (time 24:52)
2D racing to 3D racing.
The original prototype called for simplicity and having a 2D sidescroller was easy to achieve. Our mistake was relying on the prototype and building what NOW is painfully obvious to be a shoddy foundation :( We are recreating the gameplay in a 3D world with all the trimmings:
Procedurally generated terrain, textures, and props (like trees, volcanos).
Biomes and props that you expect to be found there (forest, lava, arctic, etc.).
Fully physical world (like meteors in the background will hit trees and burn them).
Day/night lighting and weather (rain hitting the car)
Next up, the immediate step is to have a rudimentary ECS implementation. I want the cars (cubes) to spawn, accelerate, switch lanes, and the basic starting-line and finish-line lifetime of a race.
I already made the terrain and some trees procedural during the vacation. It's possible to random different biomes but for now, the forest biome will suffice.
On a personal note, both of us have overcome the financial difficulties that the 5 years invested in and the recent world crisis inflicted and can be in a healthy & creative mental space. It's not a lie to say that people supporting, praising, and even harshly criticizing us have given us energy and we hope to rely on you in the months to come.
The next update will be either in 2 weeks or 4 weeks, depending on how lucky we are with the ECS upgrade. Till then, stay safe, wish us luck, and have fun!
- Fix for a literal bug where a mantis limb would appear in place of the battle axe - Fix for enemies getting stuck on platforms in zone 1 - Minor audio adjustments and fixes
Huge thanks to everyone who has reported bugs and issue lately, and to everyone thanks for playing! I'm excited to bring a bigger content update in the coming weeks, which will expand the players max level (new starter items!), and bring more variety and customisation for when the player is transformed.
Happy new year! Here are some updates, mostly targeted towards mappers and modders.
Map Changes
Fixed a navigation issue near an optional supply room in Rydberg.
The fire extinguisher near the end of Rydberg now uses the new temporary pickup mechanic.
Stats
Fixed the stats option in briefing going to an obsolete website.
Fixed stats not being recorded for the 22A5 Heavy Assault Rifle, IAF Medical SMG, and TG-05 Gas Grenades.
Lobbies
Kicking a lobby's original leader no longer prevents them from creating lobbies for 5 minutes.
The lobby creation UI will remember whether the last lobby you created was public or friends-only.
Fixed a delay when restarting the mission if a player disconnected during the vote.
The "Take a Break" option on the ESC menu is now disabled if the server doesn't allow it to be used.
Dedicated Server
Added rd_adjust_mod_dont_load_vertices, which sets mod_dont_load_vertices on dedicated servers. This prevents the dedicated server from loading the vertices for models, reducing memory usage.
Enabled the rm_welcome_message and rm_welcome_message_delay cvars.
The server now performs a cleaner shutdown when rd_server_shutdown_after_num_secs is set.
Fixed the 64 FPS server limit on Windows 10 build 2004 and newer.
Fixed physics simulation issues when the tick rate is changed from the default.
Dedicated servers now update workshop items asynchronously at startup.(reverted for now)
Misc
Fixed the heal beacon's first heal reading uninitialized memory.
Fixed a sentry duplication exploit.
The game instructor will no longer suggest interacting with disabled button and computer areas.
Fix computers that have just been hacked not allowing options other than download data and remote turrets to be selected until the user logs out.
Added rd_prediction_strategy. Set this cvar to 1 to test the new prediction error handling, which works better on moving platforms but may be buggy.
Bot marines can now use the secondary fire on the IAF Medical SMG.
Fixed some cases where the game would try to write to the files of an unpacked addon rather than its own base directory.
If no env_tonemap_controller exists on the level, one will be automatically created and sent the input SetBloomScale 0.25.
The director will only warn once about a level not having a nodegraph.
Fixed escape chatter happening early if the escape objective was not last on the list.
Explicitly failing an optional objective no longer fails the mission.
"Keep Mouse Inside Window" is usable in exclusive fullscreen mode for multi-monitor setups.
Challenge ConVars
Added rd_biomass_damage_from_explosions for challenges; if set to 1 then biomass will take full damage from explosions.
asw_marine_friction, asw_marine_gravity, and asw_sv_maxspeed are now cheat cvars.
Added asw_turret_dmg_override to change the damage per shot of the remote turret.
Added asw_sentry_top_machinegun_dmg_override and asw_sentry_top_flamer_dmg_override.
Added asw_sentry_top_machinegun_fire_rate and asw_sentry_top_cannon_fire_rate.
Added asw_sentry_top_cannon_dmg_override. This affects the base damage. The actual damage is determined by the marine's explosives skill.
Modding / SDK
Weapons can be set as "temporary", which makes them use a new weapon slot and forces them to be dropped instead of stowed.
Added rd_weapon_generic_object, which can be used for generic carryable objects.
Added rd_tilegen_instance for further randomization of tilegen tiles.
Added trigger_asw_marine_melee for detecting a melee attack aimed at a target.
Reorganized trigger_asw_computer_area to put related fields closer together in Hammer.
Up to 3 cameras and remote turrets can be assigned to a trigger_asw_computer_area. The computer UI still has a limit of 6 options on the menu.
Fixed trigger_asw_door_area not using its Start Disabled field.
Added a field to trigger_asw_button_area that allows mappers to require a button be held down for an amount of time.
Added "Can Player Weld" to asw_door.
Added an Extinguish input to asw_alien_goo.
Added ResetMarineIntensity and SpawnHordeSoon inputs to asw_director_control.
Added OnStartedUsing and OnStoppedUsing outputs to asw_remote_turret.
Added outputs for failed fast hacks to trigger_asw_button_area and trigger_asw_computer_area.
Corrected the skins for many pickups in Hammer.
VRAD now runs with an automatic number of threads by default (previously 4).
Added several VScript functions to CDirector and many functions for nodes.
Added support for multi-layer minimaps.
Added a JumpUp VScript function for asw_parasite.
Added a field to asw_stylincam that allows changing the commander face sprite.
New VScript Functions
Global
Vector GetHullMins(int hullType) - Returns a Vector for the hull mins (hullType)
Vector GetHullMaxs(int hullType) - Returns a Vector for the hull maxs (hullType)
CDirector
void SpawnHordeSoon() - Queue a horde to spawn soon (the same logic as when a hack starts)
float GetTimeToNextHorde() - Get the current number of seconds until the director will try to spawn a horde
void SetTimeToNextHorde(float seconds) - Force the horde countdown timer to be set to this number of seconds
Vector FindHordePosition(bool north) - Get a random position where a horde can spawn (returns null on fail)
int IsSpawningHorde() - Get the number of aliens remaining to spawn in the current horde
InfoNodes
CAI_Node GetNearestNodeToPoint(CBaseEntity npc, Vector position) - Returns the node nearest to origin with optional npc parameter
int GetAllNearestNodes(CBaseEntity npc, Vector position, int maxNodes, table) - Fills a passed in table of x nearest nodes to origin with optional npc parameter
void GetAllNodes(table) - Fills a passed in table of all nodes
CAI_Link CreateLink(int srcID, int destID) - Creates a new link from srcID to destID and returns the link
CAI_Node
int GetId() - Get node ID
Vector GetOrigin() - Get node origin
Vector GetPosition(int hullType) - Hull specific position for a node
float GetYaw() - Get node Yaw
int GetZone() - Get node zone
void SetZone(int zone) - Set node zone
int GetType() - Get node type
void SetType(int type) - Set node type
bool IsLocked() - Returns true if node is locked
void Lock(float duration) - Locks the node for x seconds
void Unlock() - Unlocks the node
int NumLinks() - Number of links for node
void ClearLinks() - Clears all links from node
CAI_Link GetLink(int nodeID) - Get link to dest node ID
CAI_Link GetLinkByIndex(int index) - Get link by index
int GetInfo() - Get node info
void SetInfo(int info) - Set node info
void AddLink(CAI_Link newLink) - Adds a link to this node
void RemoveLink(CAI_Link link) - Removes a link from this node
void DebugDrawNode(int r, int g, int b, float duration) - Draw node as a box of the given color for x seconds
CAI_Link
int GetSrcNodeID() - Get the ID of the node that 'owns' this link
int GetDestNodeID() - Get the ID of the node on the other end of the link
int GetAcceptedMoveTypes(int hullType) - Get the Capability_T of motions acceptable for passed hull type
int GetLinkInfo() - Get other information about this link
float GetTimeStaleExpires() - Returns the amount of time until this link is available again
int GetDangerCount() - Returns how many dangerous things are near this link
void SetLinkInfo(int info) - Sets information about this link
void SetTimeStaleExpires(float duration) - Sets the amount of time until this link is available again
void SetDangerCount(int count) - Sets how many dangerous things are near this link
void SetAcceptedMoveTypes(int hullType, int moveType) - Set the Capability_T of motions acceptable for passed hull type
CAI_DynamicLink GetDynamicLink() - Returns the info_node_link entity for this link or null if it doesn't exist
CAI_DynamicLink
bool IsLinkValid() - Returns true if the dynamic link has a corresponding node link
void TurnOn() - Enables node link connections
void TurnOff() - Disables node link connections
CAI_Link FindLink() - Returns the node link or null if not found
CAI_Node GetSrcNode() - Returns the node that 'owns' this link
CAI_Node GetDestNode() - Returns the node on the other end of the link
Added the following enums to script:
AI_NODE_ZONE_UNKNOWN
AI_NODE_ZONE_SOLO
AI_NODE_ZONE_UNIVERSAL
AI_NODE_FIRST_ZONE
bits_LINK_STALE_SUGGESTED
bits_LINK_OFF
bits_LINK_PRECISE_MOVEMENT
bits_PREFER_AVOID
bits_LINK_ASW_BASHABLE
Multi-Layer Minimaps
The AS:RD version works similarly to the CS:GO version, apart from the following changes:
We use vmt and vtf files as usual, not dds.
The "default" section can be omitted and the previously-existing "material" field is used for any space that does not have a vertical section assigned to it.
Instead of "lower" and "higher" in the example being part of the material name, they are the entire material name.
If an altitude value is omitted, it takes the largest value (positive or negative) that a coordinate can have in Hammer.
Implementation details:
The altitude values correspond to the position of the player's feet.
There is a maximum of 64 "slices", which can be from 32 to 64 actual layers depending on whether the max matches the next one's min.
This does NOT affect the briefing or ingamebriefing maps, only the minimap.
Version 1.7.2 is now in public beta with several fixes and improvements
Built in support for LiveSplit
Pichón has gathered a very active community of speedrunners, and they requested autosplit support. This is normally done by players by using tools like Cheat Engine to track the memory locations of certain variables. Unfortunately, due to how the engine manages memory, this approach was unfeasible. However, there is something called LiveSplit Server which enables games to command LiveSplit directly, no funny ram business involved.
This version implements autosplit support via LiveSplit Server. Here's a tutorial on how to enable it:
Thanks to Ayden and ElNachoLV from the LV Gang Discord server for suggesting the feature, and to Dark and everyone at #auto-splitters in the Speedrun Tool Development Discord server for the help.
Multilanguage Support
New list of supported languages:
English
French (Français)
German (Deutch)
Spanish (Español)
Portuguese (Português)
Italian (Italiano)
Norwegian (Norsk)
Turkish (Türkçe)
Japanese (日本語)
How to participate
Open Steam Library
Right-click on Pichon and choose Properties
Go to "Betas" and choose "public beta" in the drop drown menu
⚠ WARNING: SAVES AND ACHIEVEMENTS ⚠
The new version saves are incompatible with the old version, so you will have to start a new game. Your old progress is not lost, it'll be there if you opt out of the beta. Additionally, achievements have been disabled in this version. They will be re-enabled in a big update coming in a few months.
Content update incoming
The game is being ported to Godot Engine and will be released on Nintendo Switch and as a premium game on Gotm.io. Steam users will get that update soon after, with better Achievements, more levels and a level editor.
The death screen has been updated, you will now see 25 new death messages that actually have something to do with the plot and aren't just random cliches! Definitely worth checking out.
Added links to the Discord, Twitter, and the Patreon onto the title screen! Those are all excellent places to get involved with the community, chat with me, share ideas, or support the game further!
Some other stuff I forgot :P
and now for the
Act 2 Updates
Act 2 is going REALLY well, I'm like 15% done with it. 15% in 2 months, not too bad. If everything goes perfectly smoothly, Act 2 should be ready hopefully by the end of this year, if not early next year. I'm a solo full-time college student dev, so it is tricky to work on it constantly, but I am doing my best! Act 2 is really really cool. There is about 10-15 minutes of gameplay so far! Act 2 will probably be something like 2-4 hours long!
OH! And as a little bonus, here is a cute little render I made of the new Cartoonist boss fight in 2.0 with Lucas!
Enjoy! Talk to you all soon! Thanks for playing, you guys are AMAZINGGG.
-Added cost to show the the UI tool tip of spells/projectiles. -Added a new craftable item Silver Personal Chest at level 15 Blacksmith. -Added new craftable item Gold Personal Chest at level 20 Blacksmith. -Added mouse sensitivity option. -Added runes to skeleton loot list. -Added session filter options to the find session menu. -Added charge checks to main interaction. -Added charge checks to hotbar scroll. -Added charge checks before charging. -Added a light to the mobile crafting cart. -Added XP to blueprint UI. -Added max crafting button. -Added ability to see future recipes in crafting stations. -Added single player chat command to change the time of day use /time (value between 0-2400 to adjust the game time, but have to be in an active land claim). -Added a gamma slider to the graphics settings. -Added throwing weapons energy cost to the UI tooltip. -Added /r to reply to most recent whisper.
-Adjusted all item stack sizes.
-Changed chicken items to reflect AI name of Curbie.
-Fixed respawn location not being saved in correct order. -Fixed players taking damage when falling into water. -Fixed fish trap to always be interactable. -Fixed bolts not having correct energy costs.
-Increased XP gain from crafting a shrine.
-Moved all enchanted items to enchanting shrines. -Moved bows and crossbows to weapons benches. -Moved summon staff to research table. -Moved t2 and t3 staffs to enchanting shrines.
-Updated magic hit radius. -Updated session password to allow pressing {Enter} to submit the password. -Updated projectiles to ignore damaging their owner.
-Reworked chest recipe requirements. -Reworked the mobile blacksmith furnace cart to require fuel and switched its crafting list to be equivalent to a t1 furnace.
-Tied each level of chest under blacksmithing level requirements.
-Tweaked chef XP gain. -Tweaked enchanting recipes for iron enchants. -Tweaked mortar station crafting recipe. -Tweaked Shrine crafting station recipes.