After one exciting year in Early Access, I am very pleased (and a little proud) to announce the [b]1.0 release of JOY OF PROGRAMMING[/b] and the conclusion of its Early Access phase. This does not mean 1.0 will be the final update. On the contrary: I plan to support JOY OF PROGRAMMING for the foreseeable future and add new levels whenever I have ideas for new challenges. Of course, I also hope the 1.0 release will bring in some new players and our little [url=https://discord.com/invite/2ZrdzkNeBP]community[/url] will grow with more user made levels (check out the level editor after you're comfortable with the game itself)!
I think it is more important than ever to deepen and widen your programming skills, and game-based learning is great opportunity to do just that.
Happy Coding!
Full changelog over the last year until today:
[code]version 1.0.0
- Added "tinygrad" (https://github.com/tinygrad/tinygrad) to third party modules for deep learning
- Increase virtual RAM upgrades (64->128, 128->256, 256->1024)
- Added new machine: VacuumRobot, automatically cleans up all objects with tag "Dirt".
- Added two new Machine Learning levels: Image Classification and Coin Detection
- Added two new Smart Home Levels: VacuumRobot0 and VacuumRobot1
- Improved documentation for several machines
version 0.9.0
- Added a new level:
- SQL Database (Machine Learning category)
- Preparations for 1.0 release
- Removed "Beta Map" feature.
- Cleaned up some obsolete UI
- Linux/Proton support: Please use Proton Experimental. All levels (including image processing levels) now work correctly under Proton Experimental (but not under Proton 9.03).
- Known issues:
- Localization: While the UI and the tutorials are fully localized in different languages, most other levels do not support localization. These are created with the included level editor which does not support easy localization. Unfortunately, this cannot be easily amended and will not change in the upcoming 1.0 release.
version 0.8.0
- Added new levels:
- Crane Lift (Logistics)
- Clock Synchronization (Smart Home)
- Hurdles (Driving)
- Improved AirliftCrane pickup handling
- Improved DataExchange handling
- Known issue under Linux/Proton: Image processing levels do not work correctly under Linux / Proton ("Sensor not available" error message and blank image)
version 0.7.3
- fixed nullptr exception in StopProcess under Proton (Windows was unaffected). JOY OF PROGRAMMING is now (experimentally) Linux-compatible by running the under Proton 9. It should run under Mac as well using Whisky.
- replaced python.exe with pythonw.exe. The background python process is now invisible.
version 0.7.2
- Fixed bug in "Bugged Phone" level, where the number 9 did not yield waveform data correctly
- Fixed another c++ related startup crash
- Fixed a bug in "Network Graph 1" level (added missing indicators for source and target nodes)
- Fixed a bug in "Maximum Image" level that was introduced by the recent, stricter sandboxing
version 0.7.1
- hotfix for potential startup crash if an older version of visual c++ was installed (recommended to install newest version from https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170)
- fixed "undo/redo" spanning different script tabs. Now undo history is reset upon script tab change.
version 0.7.0
- Added 4 new levels (several beta maps since release of the game):
- Artillery Shooting (Military)
- Flood Fill (Creative)
- Stocks Manipulation (Hacking)
- Card Counting (Hacking)
- Fixed bug in "Goldsmiths" level
- Fixed bug with ".astype" function being incorrectly flagged as unsafe
version 0.6.6
- Security fix (thanks Snudget and Loglet)
- Relocated histograms backend
- Weekly Map is now called Beta Map
version 0.6.5
- New level category: Machine Learning, starting with 2 new levels
- Added solution videos to both ML levels
- Fixed: Added missing code tooltips to SmartCamera
- Fixed: "UnlockedEverything" achievement now works
- Fixed: Added missing tooltips to AlarmClock
- Level Editor: added 4 new SpawnableVFX Rain, Distortion, Sparks, WaterJet
version 0.6.2
- Fixed Gold Leaderboard not being awarded correctly and some other issues with leadearboard achievements (unfortunetly leaderboard achievements cannot be granted retroactively)
version 0.6.1
- Added two new graph based levels to the "Algorithms" category
- Added two new "Coin Counter" image processing levels to the "Puzzles" category
- Added solution videos for: "Maximum" and "Image Maximum"
- Added "toggle sticky button" to console log window to prevent it from collapsing
- Added new entity: SurveillanceSatellite can get the exact world location of every object on the map using get_satellite_data().
- Added static distance_to_line method to Vector3 class
- Fixed MovablePlatform and AirliftCrane not always moving on a straight line
- Fixed "TinyHouse" potentially disappearing voxel data
- Fixed "E-Mail Validation" trivial solution
- Fixed bug / typo in docstring of PinHacker
version 0.6.0:
- Added 4 new "Algorithm" levels: Maximum Image, Swap Sort, Middle of Linked List, Majority Vote
- Added 1 new "Puzzle" level: E-Mail Validation
- Added 3 new factsheets to find
- Added MyDocuments/JoyOfProgramming/CustomLevels/* to Steam Cloud
- Added controls option to enable / disable edge scrolling and fixed edge scolling bug
- Added optional ignore_time_dilation argument to sleep() function to behave (almost) like regular time.sleep()
- Added editior_set_max_speed function to all conveyor belts enabling map creators to allow a conveyor speed of up to 25.
- Added editor_set_movement_speed and editor_set_rotation_speed to MovablePlatform, enabling map creators to adjust the speed.
- Fixed added another lines of code perk (now possible to write up to 200 lines of code)
- Fixed "open level" list not scrolling in level editor GUI
- Fixed FactBox sometimes spawning underground
- Fixed custom profile names not being used for leaderboards.
- Fixed InputBox set_text not accepting empty strings
- TriggerZones are now invisible in any in-game camera captures.
- API change: VoxelBuilder.build_voxel now defaults to simulate_physics=False instead of True.
version 0.5.6:
- Added two new solution videos (PianoLessons and BuggedPhone)
- reworked DeliveryContainer to "deliver" any item inside and fire an associated on_delivered event. Should be backwards compatible to old DeliveryContainer.
- removed "Deliverable" class from pyjop api (was useless anyway, SpawnableEntities.Deliverable for level editor still works as before)
- reworked KillZone to fire a proper event not just the rfid tag.
- Fixed Artillery (basically everything was broken and changed fire command to use proper muzzle velocity in m/s). Next weekly challenge will be about the Artillery.
- Added convenience random() function to Vector3 class
- HideHud command (Ctrl-J) now also hides cross-hair in first person view (press again in FPS view)
- Added draw_throw_prediction function to SimEnvManager that allows to visualize basic throwing arcs
- Added "Fix NiceGUI" button to main menu under Options->Game. Use this once if NiceGUI does not start for you.
- improved sandboxing / audithooks handling
- Added Statistics module to python module unlocks in the Perks Menu
- Added verbosity system for log messages. Change verbosity with SimEnvManager.first().set_verbosity_level(VerbosityLevels.Important)
- Added verbosity option to print() command. Defaults to Important.
- MovablePlatform stops moving on collision with static objects by default
- RobotArm stops moving on collision with static objects by default. Can also stop on collisions of carried object with another static object (uses bounding box of carried object for detection).
- Level Editor: Added option set_blocks_collision to MovablePlatform and RobotArm to allow clipping as before
- Level Editor: Removed auto-attaching on begin play of MovablePlatform. Best to call attach_entities on_reset. Also increased attach range by 5 cm
- Level Editor: Added large tooltip preview for all spawnables in level editor GUI
- Level Editor: Ensured optional goals always have value 0
- Level Editor: Improved default starter code
- Level Editor: Fixed MovablePlatform not accepting 0 limits for location / rotation
- Level Editor: Added 6 new SpawnableMeshes (Bench, Chair, OfficeChair, Table, TableRound, Postbox)
- Level Editor: Added cooldown system. Several entities now have configurable cooldowns for commands, e.g. Artillery and SniperRifle reload time for the fire command.
- Level Editor: Added scale support for most VFX emitters
version 0.5.5:
- Added Support for leaderboards / histograms for published workshop levels. Please update / re-publish your levels for this to work.
- Added "clear log" button to log window, disabled automatic clearing.
- Added toggleComment command to code editor. Ctrl-/ on US keyboard layout, Ctrl-# on EU layout (the key left of the Return key in both cases)
- Added 4 new solution videos (Tiny House; Shooting Range 0, 1 and 2)
- Added highlight to leaderboard for own entry (based on Steam / profile name)
- Improved RobotArm pickup, release and collision blocking
- Improved goal progress in GPS Racing level
- Mostly disabled automatic setting of time dilation
- Fixed construct code reload bug in level editor
- Fixed (for real now) leaderboard top10, top3, top2, top1 achievements not being awarded correctly (would only award highest instead of all)
- Fixed bug in code editor that caused it to get stuck on an old version of a script (happened after changing imports)
- Fixed level editor "clear button" resetting code to default player code instead of default level construct code.
- Fixed outdated info in VoxelBuilder docs. Correct command is "build_voxel", not "build".
- Fixed FactBox, was able to click quickly to receive multiple PerkPoints
- Fixed bug when clicking "Finish Level" too fast
- Fixed tooltip for Piano
- Fixed some rare issues with the MovablePlatform not respecting proper location and rotation limits
- Fixed swapped axis for the MovablePlatform in shooting range 2 (x/y and roll/pitch was swapped)
- Fixed leaderboard submit not possible on level retry
- Fixed bullet collision not having impact location set
version 0.5.4:
- Added mouse invert, mouse sensitivity and mouse lock settings
- Added user key customization for most actions
- Added draggable and resizable code window. Size and position is saved persistently.
- Holding Left ALT now highlights all entities in the current level.
- Added 1 new way to quit the game to the house level
- Added rate limit warnings if getters or setters are called repeatedly without sleep() or outside SimEnv.run_main()
- Added get_is_moving() to AirliftCrane
- Added small indicator cube to center of TriggerZone
- Improved log window: Will not minimize anymore while mouse hovering. Added manual minimize toggle as well.
- Improved workshop file handling. Changing title is now possible.
- Improved workshop subscription handling. Files should now download/update while the game is running.
- Improved stability of level editor to not lose level code on testing. Removed line highlighting during level construction.
- Fixed leaderboard top10, top3, top2, top1 achievements not being awarded correctly (would only award highest instead of all)
- Fixed histogram percentile achievements not being awarded correctly (would only award highest instead of all)
- Fixed not being able to import downloaded leaderboard scripts
- Fixed leaderboards showing a download script button even if there is no script attached
- Fixed rotation_limits not being clamped (on MovablePlatform for example)
- Fixed rare null pointer exception in first person mode
- Fixed PyramidPuzzle level getting stuck at 75%
- Fixed timing of Goals display (would sometimes not update on level complete)
- Fixed RobotArm not resetting to its initial position
- Fixed potential hang-up of code editor when importing modules
- Fixed ESC key not working properly when viewing certificates
- Fixed int getters not reading negative values (e.g. RaceCar get_gear)
- Planned: Support leaderboards / histograms for published workshop levels
version 0.5.3
- Added Python setup dialog. This shows up if there is a problem with Python access / Windows Defender on your system.
- Fixed command set_fov for ServiceDrone (was wrongly named set_camera_fov in API).
- Fixed typo in Track Follower level.
- Fixed RobotArm set_grabber_location to accept location as vector [1,2,0] or as args 1,2,0 without brackets.
- Updated GUI input for Vector / Rotator to accept brackets like [1,2,0] or (1,2,0) as well.
- Fixed two rare null pointer exceptions that could crash the game.
- Fixed a crash when printing images to the log console.
- Fixed allowing leaderboard submission without completing all stars in this current run.
- Fixed integer commands not accepting negative values (e.g. RaceCar.first().set_gear(-1))
- Increased lines of code (LOC) limit overall by 20 lines
- Fixed? GPS tracker decoupling from RaceCar in "GPS Racing" level.
- Fixed? Gametime achievements would instant unlock.
- Experimental: Enabled download of leaderboard scripts (not for the weekly map). Scripts will be downloaded to Documents/JoyOfProgramming/LeaderboardScripts/LEVEL_NAME and can be loaded from the code window. Use with caution and check downloaded scripts before execution.
Known issue: Button to download leader script always visible, even if no script available.
Known issue: When attaching script to leaderboard, the leaderboard does not update automatically but the score is uploaded regardless.
Known issue: Attaching script to leaderboard fails sometimes.
[/code]