Added link checker

This commit is contained in:
2024-05-13 10:35:57 +01:00
parent 6b69380e85
commit 4239e9626f
22 changed files with 582 additions and 523 deletions

View File

@@ -1,27 +1,27 @@
{ {
"background": "BlueBlobs", "background": "BlueBlobs",
"data": [ "data": [
" ", " ",
" BWR ", " BWR ",
" BBWRR ", " BBWRR ",
" GBWWWRY ", " GBWWWRY ",
" GBWWWRY ", " GBWWWRY ",
" GBBWWWRRY ", " GBBWWWRRY ",
" GBBWWWRRY ", " GBBWWWRRY ",
" GBBWWWRRY ", " GBBWWWRRY ",
" GBBWWWRRY ", " GBBWWWRRY ",
" GBWWWRY ", " GBWWWRY ",
" GBWWWRY ", " GBWWWRY ",
" sBBWRRs ", " sBBWRRs ",
" s BWR s ", " s BWR s ",
" s s s ", " s s s ",
" s s s ", " s s s ",
" ggg ", " ggg ",
" ggg ", " ggg ",
" ggg " " ggg "
], ],
"left": "TIC TAC", "left": "TIC TAC",
"name": "BALLOON", "name": "BALLOON",
"right": "X-BOX", "right": "X-BOX",
"tint": "FFFFFF" "tint": "FFFFFF"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "BlueBlobs", "background": "BlueBlobs",
"data": [ "data": [
" ", " ",
" ", " ",
" gg gg ", " gg gg ",
" g g ", " g g ",
" CCC ", " CCC ",
" CCCCC ", " CCCCC ",
" CCGCC ", " CCGCC ",
" ggggYYYgggg ", " ggggYYYgggg ",
"g GGGGG g", "g GGGGG g",
" YYY ", " YYY ",
" gggGGGggg ", " gggGGGggg ",
" g YYYYY g ", " g YYYYY g ",
" GGG ", " GGG ",
" ggYYYgg ", " ggYYYgg ",
" g GGG g ", " g GGG g ",
" G ", " G ",
" gg gg ", " gg gg ",
" g g " " g g "
], ],
"left": "GRILLE", "left": "GRILLE",
"name": "CRAWLY", "name": "CRAWLY",
"right": "THOPTER", "right": "THOPTER",
"tint": "FFFFFF" "tint": "FFFFFF"
} }

View File

@@ -1,26 +1,26 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
"WWOOCCgGGRRBB", "WWOOCCgGGRRBB",
"WWOOCCgGGRRBB", "WWOOCCgGGRRBB",
"OOCCGGgRRBBMM", "OOCCGGgRRBBMM",
"OOCCGGgRRBBMM", "OOCCGGgRRBBMM",
"CCGGRRgBBMMYY", "CCGGRRgBBMMYY",
"CCGGRRgBBMMYY", "CCGGRRgBBMMYY",
"GGRRBBgMMYYWW", "GGRRBBgMMYYWW",
"GGRRBBgMMYYWW", "GGRRBBgMMYYWW",
"RRBBMMgYYWWOO", "RRBBMMgYYWWOO",
"RRBBMMgYYWWOO", "RRBBMMgYYWWOO",
"BBMMYYgWWOOCC", "BBMMYYgWWOOCC",
"BBMMYYgWWOOCC", "BBMMYYgWWOOCC",
"MMYYWWgOOCCGG", "MMYYWWgOOCCGG",
"MMYYWWgOOCCGG", "MMYYWWgOOCCGG",
" ", " ",
" " " "
], ],
"left": "TOWER", "left": "TOWER",
"name": "CUBISM", "name": "CUBISM",
"right": "SNOWCAP" "right": "SNOWCAP"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "BlueBlobs", "background": "BlueBlobs",
"data": [ "data": [
" ", " ",
" ", " ",
"sssssssssssss", "sssssssssssss",
"YYYBYYsCCRCCC", "YYYBYYsCCRCCC",
"YYBBYYsCCRRCC", "YYBBYYsCCRRCC",
"YBBBBBsRRRRRC", "YBBBBBsRRRRRC",
"BBBBBBsRRRRRR", "BBBBBBsRRRRRR",
"YBBBBBsRRRRRC", "YBBBBBsRRRRRC",
"YYBBYYsCCRRCC", "YYBBYYsCCRRCC",
"YYYBYYsCCRCCC", "YYYBYYsCCRCCC",
"ssisssssssiss", "ssisssssssiss",
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" " " "
], ],
"left": "RAINBOW", "left": "RAINBOW",
"name": "DUNKANOID", "name": "DUNKANOID",
"right": "CUBISM", "right": "CUBISM",
"tint": "FFFFFF" "tint": "FFFFFF"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "Pipes", "background": "Pipes",
"data": [ "data": [
" ", " ",
" ", " ",
" OORRRRRRROO ", " OORRRRRRROO ",
" OORRRRROO ", " OORRRRROO ",
" OORRROO ", " OORRROO ",
"C OOROO C", "C OOROO C",
"CC OOO CC", "CC OOO CC",
"BCC O CCB", "BCC O CCB",
"BBCC CCBB", "BBCC CCBB",
"BBBCC i CCBBB", "BBBCC i CCBBB",
"BBCC CCBB", "BBCC CCBB",
"BCC O CCB", "BCC O CCB",
"CC OOO CC", "CC OOO CC",
"C OOROO C", "C OOROO C",
" OORRROO ", " OORRROO ",
" OORRRRROO ", " OORRRRROO ",
" OORRRRRRROO ", " OORRRRRRROO ",
"isssssgsssssi" "isssssgsssssi"
], ],
"left": "TENNIS", "left": "TENNIS",
"name": "FOCAL POINT", "name": "FOCAL POINT",
"right": "BALLOON", "right": "BALLOON",
"tint": "0000FF" "tint": "0000FF"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "Pipes", "background": "Pipes",
"data": [ "data": [
" ", " ",
" ", " ",
" ggg ggg ", " ggg ggg ",
" gWWWgWWWg ", " gWWWgWWWg ",
" gWWWgWWWg ", " gWWWgWWWg ",
" gWWBgBWWg ", " gWWBgBWWg ",
" gWWBgBWWg ", " gWWBgBWWg ",
" RRRRRRR ", " RRRRRRR ",
" RRWWRWWRR ", " RRWWRWWRR ",
" RWsWWsWWsWR ", " RWsWWsWWsWR ",
"RsWsWWsWWsWsR", "RsWsWWsWWsWsR",
"RsWsWWsWWsWsR", "RsWsWWsWWsWsR",
"RWsWssWssWsWR", "RWsWssWssWsWR",
" RRWssWssWRR ", " RRWssWssWRR ",
" RRRRRRR ", " RRRRRRR ",
" Y ", " Y ",
" RYR ", " RYR ",
" " " "
], ],
"left": "CRAWLY", "left": "CRAWLY",
"name": "GOOBER", "name": "GOOBER",
"right": "TINSEL", "right": "TINSEL",
"tint": "4444CC" "tint": "4444CC"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" OOsssssssOO ", " OOsssssssOO ",
"BYYCCCCCCCYYB", "BYYCCCCCCCYYB",
"WWWWWWWWWWWWW", "WWWWWWWWWWWWW",
"BYYWWWWWWWYYB", "BYYWWWWWWWYYB",
"COOCCCCCCCOOC", "COOCCCCCCCOOC",
"CRRsssssssRRC", "CRRsssssssRRC",
"CRRsssssssRRC", "CRRsssssssRRC",
" RRsssssssRR ", " RRsssssssRR ",
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" " " "
], ],
"left": "SWEET", "left": "SWEET",
"name": "GRILLE", "name": "GRILLE",
"right": "PLATFORM", "right": "PLATFORM",
"tint": "00FF00" "tint": "00FF00"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "Pipes", "background": "Pipes",
"data": [ "data": [
" ", " ",
" ", " ",
" sOs ", " sOs ",
" sOs ", " sOs ",
" ggggsOsggg", " ggggsOsggg",
" g sOs ", " g sOs ",
" gBBBsOsBBB", " gBBBsOsBBB",
" gCggsOsggg", " gCggsOsggg",
" gCg sOs ", " gCg sOs ",
" gCg sOs ", " gCg sOs ",
"sssgCgssOs ", "sssgCgssOs ",
" gCg Os ", " gCg Os ",
"RRRgCgRRRs ", "RRRgCgRRRs ",
"sssgCgssss ", "sssgCgssss ",
" gCg ", " gCg ",
" gCg ", " gCg ",
" ", " ",
" " " "
], ],
"left": "CRAWLY", "left": "CRAWLY",
"name": "KNOT", "name": "KNOT",
"right": "TINSEL", "right": "TINSEL",
"tint": "4444CC" "tint": "4444CC"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
" ", " ",
" ", " ",
"ggggggggggggg", "ggggggggggggg",
" Y g M g Y ", " Y g M g Y ",
" gW g g Wg ", " gW g g Wg ",
" g g g g ", " g g g g ",
" g gR Bg g ", " g gR Bg g ",
" g g g g ", " g g g g ",
" g Og gO g ", " g Og gO g ",
" g g g g ", " g g g g ",
" g g g g ", " g g g g ",
" g g G g g ", " g g G g g ",
" g g g g ", " g g g g ",
" gC Cg ", " gC Cg ",
" g Y g ", " g Y g ",
" ggggggggggg " " ggggggggggg "
], ],
"left": "FOCAL POINT", "left": "FOCAL POINT",
"name": "PLATFORM", "name": "PLATFORM",
"right": "SANDS OF TIME", "right": "SANDS OF TIME",
"tint": "FFFFFF" "tint": "FFFFFF"
} }

View File

@@ -1,26 +1,26 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
" RRRRR ", " RRRRR ",
" RRRRRRR ", " RRRRRRR ",
" RROOOOORR ", " RROOOOORR ",
" RROOOOORR ", " RROOOOORR ",
" RROOYYYOORR ", " RROOYYYOORR ",
" ROOYBBBYOOR ", " ROOYBBBYOOR ",
" ROYBBBBBYOR ", " ROYBBBBBYOR ",
"RROYB BYORR", "RROYB BYORR",
"ROYBg gBYOR", "ROYBg gBYOR",
"ROYB BYOR", "ROYB BYOR",
"ROYB BYOR", "ROYB BYOR",
"ROYB BYOR", "ROYB BYOR",
"ROYB BYOR", "ROYB BYOR",
"ROYB BYOR", "ROYB BYOR",
"sssss s sssss", "sssss s sssss",
" " " "
], ],
"left": "TOWER", "left": "TOWER",
"name": "RAINBOW", "name": "RAINBOW",
"right": "SNOWCAP" "right": "SNOWCAP"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "Pipes", "background": "Pipes",
"data": [ "data": [
" ", " ",
" ", " ",
"W W", "W W",
"CW WC", "CW WC",
"MCW WCM", "MCW WCM",
"RRCW WCRR", "RRCW WCRR",
"OOOCW WCOOO", "OOOCW WCOOO",
"YYYYCW WCYYYY", "YYYYCW WCYYYY",
"ggggggWgggggg", "ggggggWgggggg",
" W ", " W ",
" W ", " W ",
" W ", " W ",
" g W g ", " g W g ",
" ggCCCgg ", " ggCCCgg ",
" gCCCCCg ", " gCCCCCg ",
" gBBBBBg ", " gBBBBBg ",
" ggggggg ", " ggggggg ",
" " " "
], ],
"left": "TENNIS", "left": "TENNIS",
"name": "SANDS OF TIME", "name": "SANDS OF TIME",
"right": "BALLOON", "right": "BALLOON",
"tint": "0000FF" "tint": "0000FF"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
" WWWWW ", " WWWWW ",
" ggggg ", " ggggg ",
" ", " ",
" WWWWWWWWW ", " WWWWWWWWW ",
" ggggggggg ", " ggggggggg ",
" ", " ",
" WWWWWWWWWWW ", " WWWWWWWWWWW ",
" ggggggggggg ", " ggggggggggg ",
" ", " ",
" WWWWWWWWW ", " WWWWWWWWW ",
" ggggggggg ", " ggggggggg ",
" ", " ",
" WWWWWWW ", " WWWWWWW ",
" ggggggg ", " ggggggg ",
" ", " ",
" " " "
], ],
"left": "KNOT", "left": "KNOT",
"name": "SNOWCAP", "name": "SNOWCAP",
"right": "GOOBER", "right": "GOOBER",
"tint": "00FF00" "tint": "00FF00"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" gsssg ", " gsssg ",
" gYYYYYg ", " gYYYYYg ",
"O gYYYYYYYg O", "O gYYYYYYYg O",
"O gYYYYYYYg O", "O gYYYYYYYg O",
"O gYYYYYYYg O", "O gYYYYYYYg O",
"O gYYYYYYYg O", "O gYYYYYYYg O",
"O gsgYYYgsg O", "O gsgYYYgsg O",
"O g CgggC g O", "O g CgggC g O",
"O g C B C g O", "O g C B C g O",
"O g C B C g O", "O g C B C g O",
"O g C B C g O", "O g C B C g O",
"OgggC B CgggO", "OgggC B CgggO",
" ", " ",
" " " "
], ],
"left": "DUNKANOID", "left": "NOTFOUND",
"name": "SPIDER", "name": "SPIDER",
"right": "DUNKANOID", "right": "NOTFOUND",
"tint": "FFFFFF" "tint": "FFFFFF"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" C C ", " C C ",
" R g g R ", " R g g R ",
" g g ", " g g ",
" RR ", " RR ",
" RWRR ", " RWRR ",
" G RRRR G ", " G RRRR G ",
" g RRRRCC g ", " g RRRRCC g ",
" RRRRCCC ", " RRRRCCC ",
" RRCCCC ", " RRCCCC ",
" GGGCCCC ", " GGGCCCC ",
" G GGGCCCC G ", " G GGGCCCC G ",
" g GGGGCC g ", " g GGGGCC g ",
" GGGG ", " GGGG ",
" GG ", " GG ",
" R R ", " R R ",
" g C C g ", " g C C g ",
" g g " " g g "
], ],
"left": "FOCAL POINT", "left": "FOCAL POINT",
"name": "SWEET", "name": "SWEET",
"right": "SANDS OF TIME", "right": "SANDS OF TIME",
"tint": "FFFFFF" "tint": "FFFFFF"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "BlueBlobs", "background": "BlueBlobs",
"data": [ "data": [
" ", " ",
" ", " ",
" sss ", " sss ",
" sB Bs ", " sB Bs ",
" sCCCCCs ", " sCCCCCs ",
" s B B s ", " s B B s ",
" sCCCCCs ", " sCCCCCs ",
" s B B s ", " s B B s ",
" sCCCCCs ", " sCCCCCs ",
" sB Bs ", " sB Bs ",
" sss ", " sss ",
" s ", " s ",
" s gg ", " s gg ",
" s gggg ", " s gggg ",
" g gggg ", " g gggg ",
" g gggg ", " g gggg ",
" g gggg ", " g gggg ",
" g gg " " g gg "
], ],
"left": "TIC TAC", "left": "TIC TAC",
"name": "TENNIS", "name": "TENNIS",
"right": "X-BOX", "right": "X-BOX",
"tint": "FFFFFF" "tint": "FFFFFF"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" R ", " R ",
" s ", " s ",
" R ", " R ",
" s ", " s ",
" R ", " R ",
" R ", " R ",
" R ", " R ",
" R ", " R ",
" R ", " R ",
" RRRRgRgRRRR ", " RRRRgRgRRRR ",
"sssssRRRsssss", "sssssRRRsssss",
" gRg ", " gRg ",
"RRRRRRRRRRRRR", "RRRRRRRRRRRRR",
"sssssgRgsssss", "sssssgRgsssss",
" R ", " R ",
" gg gg ", " gg gg ",
" gg gg ", " gg gg ",
" gg gg " " gg gg "
], ],
"left": "SWEET", "left": "SWEET",
"name": "THOPTER", "name": "THOPTER",
"right": "PLATFORM", "right": "PLATFORM",
"tint": "00FF00" "tint": "00FF00"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
" sss sss sss ", " sss sss sss ",
" sMs sYs sBs ", " sMs sYs sBs ",
" sMs sYs sBs ", " sMs sYs sBs ",
" sss sss sss ", " sss sss sss ",
" g g ", " g g ",
" sss ggg sss ", " sss ggg sss ",
" sCs sRs sGs ", " sCs sRs sGs ",
" sCs sRs sGs ", " sCs sRs sGs ",
" sss ggg sss ", " sss ggg sss ",
"g g", "g g",
" gsg sss gsg ", " gsg sss gsg ",
" gOg sWs gOg ", " gOg sWs gOg ",
" gOg sWs gOg ", " gOg sWs gOg ",
" gsg sss gsg ", " gsg sss gsg ",
" ", " ",
" " " "
], ],
"left": "WINGS", "left": "WINGS",
"name": "TIC TAC", "name": "TIC TAC",
"right": "SPIDER", "right": "SPIDER",
"tint": "00FF00" "tint": "00FF00"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "BlueBlobs", "background": "BlueBlobs",
"data": [ "data": [
" ", " ",
" ", " ",
" g g ", " g g ",
" gg gg ", " gg gg ",
" ggg ggg ", " ggg ggg ",
" gOgg ggBg ", " gOgg ggBg ",
" gOgggggggBg ", " gOgggggggBg ",
" g gCgggRg g ", " g gCgggRg g ",
" g gCgGgRg g ", " g gCgGgRg g ",
" g g gGg g g ", " g g gGg g g ",
" g g g g g g ", " g g g g g g ",
" g g g g g g ", " g g g g g g ",
" g g g g g g ", " g g g g g g ",
" g g g g g g ", " g g g g g g ",
" g g g g ", " g g g g ",
" g g g g ", " g g g g ",
" g g ", " g g ",
" g g " " g g "
], ],
"left": "GRILLE", "left": "GRILLE",
"name": "TINSEL", "name": "TINSEL",
"right": "THOPTER", "right": "THOPTER",
"tint": "FFFFFF" "tint": "FFFFFF"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" sss ", " sss ",
" CCC ", " CCC ",
" GGG ", " GGG ",
" RRR ", " RRR ",
" BBB ", " BBB ",
" MMM ", " MMM ",
" sss ", " sss ",
" ", " ",
" g g g ", " g g g ",
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" " " "
], ],
"left": "KNOT", "left": "KNOT",
"name": "TOWER", "name": "TOWER",
"right": "GOOBER", "right": "GOOBER",
"tint": "00FF00" "tint": "00FF00"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
" ", " ",
" g g ", " g g ",
" Rg gR ", " Rg gR ",
" RGg gGR ", " RGg gGR ",
" RGCg gCGR ", " RGCg gCGR ",
" RGCOg gOCGR ", " RGCOg gOCGR ",
" RGCOWsWOCGR ", " RGCOWsWOCGR ",
" RGCOW WOCGR ", " RGCOW WOCGR ",
" RGCOW WOCGR ", " RGCOW WOCGR ",
" gGCOW WOCGg ", " gGCOW WOCGg ",
" gCOW WOCg ", " gCOW WOCg ",
" gOW WOg ", " gOW WOg ",
" gW Wg ", " gW Wg ",
" gig ", " gig ",
" ", " ",
" " " "
], ],
"left": "DUNKANOID", "left": "NOTFOUND",
"name": "WINGS", "name": "WINGS",
"right": "DUNKANOID", "right": "NOTFOUND",
"tint": "FFFFFF" "tint": "FFFFFF"
} }

View File

@@ -1,27 +1,27 @@
{ {
"background": "RedBoxes", "background": "RedBoxes",
"data": [ "data": [
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" ", " ",
" sssssssssss ", " sssssssssss ",
" ssssg gssss ", " ssssg gssss ",
" sG sgsgs Ys ", " sG sgsgs Ys ",
" ss sg gs ss ", " ss sg gs ss ",
" sC sgsgs Ms ", " sC sgsgs Ms ",
" ss g ss ", " ss g ss ",
" sO sgsgs Bs ", " sO sgsgs Bs ",
" ss sg gs ss ", " ss sg gs ss ",
" sW sgsgs Rs ", " sW sgsgs Rs ",
" ssssg gssss ", " ssssg gssss ",
" sssssssssss " " sssssssssss "
], ],
"left": "WINGS", "left": "WINGS",
"name": "X-BOX", "name": "X-BOX",
"right": "SPIDER", "right": "SPIDER",
"tint": "00FF00" "tint": "00FF00"
} }

59
Levels/links Executable file
View File

@@ -0,0 +1,59 @@
#!/usr/bin/php
<?php
$links = [
"DUNKANOID" => ["RAINBOW", "CUBISM"],
"RAINBOW" => ["TOWER", "SNOWCAP"],
"CUBISM" => ["TOWER", "SNOWCAP"],
"TOWER" => ["KNOT", "GOOBER"],
"SNOWCAP" => ["KNOT", "GOOBER"],
"KNOT" => ["CRAWLY", "TINSEL"],
"GOOBER" => ["CRAWLY", "TINSEL"],
"CRAWLY" => ["GRILLE", "THOPTER"],
"TINSEL" => ["GRILLE", "THOPTER"],
"GRILLE" => ["SWEET", "PLATFORM"],
"THOPTER" => ["SWEET", "PLATFORM"],
"SWEET" => ["FOCAL POINT", "SANDS OF TIME"],
"PLATFORM" => ["FOCAL POINT", "SANDS OF TIME"],
"FOCAL POINT" => ["TENNIS", "BALLOON"],
"SANDS OF TIME" => ["TENNIS", "BALLOON"],
"TENNIS" => ["TIC TAC", "X-BOX"],
"BALLOON" => ["TIC TAC", "X-BOX"],
"TIC TAC" => ["WINGS", "SPIDER"],
"X-BOX" => ["WINGS", "SPIDER"],
"WINGS" => ["NOTFOUND", "NOTFOUND"],
"SPIDER" => ["NOTFOUND", "NOTFOUND"],
];
foreach ($links as $file=>$out) {
fix_file($file, $out[0], $out[1]);
}
function fix_file($file, $left, $right) {
if (!file_exists($file . ".json")) {
print("Source not found: $file\n");
return;
}
if (!file_exists($left . ".json")) {
print("Left not found: $left\n");
return;
}
if (!file_exists($right . ".json")) {
print("Right not found: $right\n");
return;
}
$json = json_decode(file_get_contents($file . ".json"));
$json->left = $left;
$json->right = $right;
file_put_contents($file . ".json", json_encode($json, JSON_PRETTY_PRINT));
}