by hugeping on 2020-09-08 18:49:46
Мне повезло, программировать я начал в лет 13, когда у нас в стране появились доступные компьютеры. Я был счастливым обладателем машины под названием БК0010–01. Конечно, сейчас даже стыдно озвучивать её характеристики. Но главное — на этом можно было программировать! Вообще, в каком то смысле было проще. В то время всё было просто. Железо — простое. Программы — простые. Сегодня, между человеком и машиной столько слоёв абстракции, что пробиться сквозь них очень тяжело. А в то время, ты мог программировать прямо в машинных кодах. Или вообще, на листке бумаги… Аналоговый мир впервые встретился с цифровым. (Кстати, успех таких проектов как PICO-8 или TIC-80 объясняется, как мне кажется, попыткой снова придать программированию простоту и радость творчества, которую у нас забрали.)
Так вот, я из тех людей, которые научились программировать благодаря играм. Я играл в игры и хотел делать такие же. Это и было основным стимулом для изучения возможностей БК. Одной из первых игр, в которые я играл была игра Bolder Dash.
/* XPM */ static char * bolder_xpm[] = { "128 128 33 1", " c None", ". c #000100", "+ c #000029", "@ c #270000", "# c #250028", "$ c #022002", "% c #8C0200", "& c #1A11FA", "* c #8D0026", "= c #8C0138", "- c #1120E1", "; c #1525BF", "> c #F60206", ", c #EF0C26", "' c #FE1100", ") c #DF2300", "! c #BF25B4", "~ c #009418", "{ c #0087BC", "] c #008C8F", "^ c #0186E0", "/ c #008F8C", "( c #028DB5", "_ c #15BD00", ": c #BC890D", "< c #0BB68A", "[ c #05B6B7", "} c #BD8688", "| c #E1861B", "1 c #ACA803", "2 c #00E200", "3 c #00D985", "4 c #8BB78B", "%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%%:1:::)%", ":222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222'", ":_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__'", ":_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__'", ":_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__'", "122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'", ")_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1'", "%''''''%%>'>>>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%>'''>'%%''''''%", "%:1:::)%.@_~~_@..@)'')@..@)'')@..@)'')@..@)'')@..@)'')@..@)'')@..@)'')@..@)'')@..@)'')@..@)'')@..@)'')@..@)'')@..@)'')@.%:1:::)%", ":222222>@.~22~..@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@:222222'", ":_2_2__>@.$22$..@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@:_2_2__'", ":_2_2__>@$_22_$.@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@:_2_2__'", ":_2_2__>@.~22~..@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@:_2_2__'", "122222_>@.$2_...@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@122222_'", ")_2_2_1'@.$__...@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@)_2_2_1'", "%''''''%++~_2++++#,,,,#++#,,,,#++#,,,,#++#,,,,#++#,,,,#+.@)'')@..@)'')@.+#,,,,#++#,,,,#++#,,,,#++#,,,,#++#,,,,#++#,,,,#+%''''''%", "%:1:::)*-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&+@)'')@..@)'')@+-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-#)'''')@@)'''')#[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&#'>!!>'@@'>!!>'#{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-#'>[[|'@@'>[[|'#{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-#'>[[|'@@'>[[|'#[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&#''}4''@@''}4''#{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-#)'>|')@@)'>|')#{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&+@)'')@..@)'')@+^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&+@)'')@..@)'')@+-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-#)'''')@@)'''')#[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&#'>!!>'@@'>!!>'#{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-#'>[[|'@@'>[[|'#{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-#'>[[|'@@'>[[|'#[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&#''}4''@@''}4''#{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-#)'>|')@@)'>|')#{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&+@)'')@..@)'')@+^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&+@)'')@..@)'')@+-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-#)'''')@@)'''')#[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&#'>!!>'@@'>!!>'#{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-#'>[[|'@@'>[[|'#{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-#'>[[|'@@'>[[|'#[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&#''}4''@@''}4''#{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-#)'>|')@@)'>|')#{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&+@)'')@..@)'')@+^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&-^^;^^{&+#,,,,#++#,,,,#++#,,,,#+.@)'')@..@)'')@.+#,,,,#++#,,,,#++#,,,,#+-^^;^^{&-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-[/][/](-#)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')@@)'''')#[/][/](-[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&{][/][/&#'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'#{][/][/&{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-{[/][/<-#'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'#{[/][/<-{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-[/][/](-#'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'#[/][/](-[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&{][/][/&#''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''@@''}4''#{][/][/&{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-{[/][/<-#)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')@@)'>|')#{[/][/<-{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&^;^^;^-&+@)'')@.+#,,,,#++#,,,,#++#,,,,#++#,,,,#++#,,,,#++#,,,,#+.@)'')@+^;^^;^-&^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&-^^;^^{&+@)'')@+-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&+@)'')@+-^^;^^{&-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-[/][/](-#)'''')#[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-#)'''')#[/][/](-[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&{][/][/&#'>!!>'#{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&#'>!!>'#{][/][/&{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-{[/][/<-#'>[[|'#{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-#'>[[|'#{[/][/<-{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-[/][/](-#'>[[|'#[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-#'>[[|'#[/][/](-[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&{][/][/&#''}4''#{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&#''}4''#{][/][/&{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-{[/][/<-#)'>|')#{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-#)'>|')#{[/][/<-{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&^;^^;^-&+@)'')@+^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&+@)'')@+^;^^;^-&^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&-^^;^^{&+@)'')@+-^^;^^{&++++++++++++++++++++++++++++++++-^^;^^{&+@)'')@+-^^;^^{&-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-[/][/](-#)'''')#[/][/](-+..............................+[/][/](-#)'''')#[/][/](-[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&{][/][/&#'>!!>'#{][/][/&+..............................+{][/][/&#'>!!>'#{][/][/&{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-{[/][/<-#'>[[|'#{[/][/<-+..............................+{[/][/<-#'>[[|'#{[/][/<-{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-[/][/](-#'>[[|'#[/][/](-+..............................+[/][/](-#'>[[|'#[/][/](-[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&{][/][/&#''}4''#{][/][/&+..............................+{][/][/&#''}4''#{][/][/&{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-{[/][/<-#)'>|')#{[/][/<-+..............................+{[/][/<-#)'>|')#{[/][/<-{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&^;^^;^-&+@)'')@+^;^^;^-&+...........$.......$..........+^;^^;^-&+@)'')@+^;^^;^-&^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&-^^;^^{&+@)'')@+-^^;^^{&+..........~2$.....~2$.........+-^^;^^{&+@)'')@+-^^;^^{&-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-[/][/](-#)'''')#[/][/](-+.........~3[<$...~3[<$........+[/][/](-#)'''')#[/][/](-[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&{][/][/&#'>!!>'#{][/][/&+........{body}lt;[3[~..{body}lt;[3[~........+{][/][/&#'>!!>'#{][/][/&{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-{[/][/<-#'>[[|'#{[/][/<-+........~([[[_$.~([[[_$.......+{[/][/<-#'>[[|'#{[/][/<-{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-[/][/](-#'>[[|'#[/][/](-+.......{body}lt;<(3<(~{body}lt;<(3<(~.......+[/][/](-#'>[[|'#[/][/](-[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&{][/][/&#''}4''#{][/][/&+.......~([<3([_~([<3([_$......+{][/][/&#''}4''#{][/][/&{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-{[/][/<-#)'>|')#{[/][/<-+......._[-[[[[[_[-[[[[[$......+{[/][/<-#)'>|')#{[/][/<-{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&^;^^;^-&+@)'')@+^;^^;^-&+...$...$2[3333~$2[3333~....$..+^;^^;^-&+@)'')@+^;^^;^-&^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&-^^;^^{&+@)'')@+-^^;^^{&+..~2$...$~2$..$~2$....~2$.+-^^;^^{&+@)'')@+-^^;^^{&-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-[/][/](-#)'''')#[/][/](-+.~3[<$...~3[<$...~3[<$...~3[<$+[/][/](-#)'''')#[/][/](-[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&{][/][/&#'>!!>'#{][/][/&+{body}lt;[3[~..{body}lt;[3[~..{body}lt;[3[~..{body}lt;[3[~+{][/][/&#'>!!>'#{][/][/&{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-{[/][/<-#'>[[|'#{[/][/<-+~([[[_$.~([[[_$.~([[[_$.~([[[_.{[/][/<-#'>[[|'#{[/][/<-{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-[/][/](-#'>[[|'#[/][/](-.<<(3<(~{body}lt;<(3<(~{body}lt;<(3<(~{body}lt;<(3<(~[/][/](-#'>[[|'#[/][/](-[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&{][/][/&#''}4''#{][/][/&~([<3([_~([<3([_~([<3([_~([<3([~{][/][/&#''}4''#{][/][/&{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-{[/][/<-#)'>|')#{[/][/<-~[-[[[[[_[-[[[[[_[-[[[[[_[-[[[[[([/][/<-#)'>|')#{[/][/<-{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&^;^^;^-&+@)'')@+^;^^;^-&$2[3333~$2[3333~$2[3333~$2[3333~^;^^;^-&+@)'')@+^;^^;^-&^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&=:1:::,*%:1:::)%*:1:::,*%:1:::)%%:1:::)%%:1:::)%%:1:::)%*:1:::,*%:1:::)%*:1:::,=-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-:222222':222222':222222':222222':222222':222222':222222':222222':222222':222222,[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&:_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__,{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-:_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__,{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-:_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__,[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_,{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-,_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1,{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&*>>>>>'%%>>>>>'%%>>>>>'%%>>>>>'%%>>>>>'%%>>>>>'%%>>>>>'%%>>>>>'%%>>>>>'%%>>>>>'*^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&+@@@@@@..@@@@@@..@@@@@@..@@@@@@..@@@@@@..@@@@@@..@@@@@@..@@@@@@..@@@@@@..@@@@@@+-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-+..............................................................................+[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&+..............................................................................+{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-+..............................................................................+{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-+........$_$_$................................................................+[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&+.........$11$.................................................................+{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-+........$~))~$................................................................+{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&+........__::__................................................................+^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&+........_2112_................................................................+-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-+........__::__................................................................+[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&+........$~))~$................................................................+{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-+.........$~~$.................................................................+{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-+..............................................................................+[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&+..............................................................................+{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-+..............................................................................+{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&+.@@@@....@@@@....@@@@....@@@@......$.......$.....@@@@....@@@@....@@@@....@@@@.+^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&+@)'')@..@)'')@..@)'')@..@)'')@....~2$.....~2$...@)'')@..@)'')@..@)'')@..@)'')@+-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-#)'''')@@)'''')@@)'''')@@)'''')@..~3[<$...~3[<$.@)'''')@@)'''')@@)'''')@@)'''')#[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&#'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'@.{body}lt;[3[~..{body}lt;[3[~.@'>!!>'@@'>!!>'@@'>!!>'@@'>!!>'#{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-#'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@.~([[[_$.~([[[_$@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'#{[/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-#'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'@{body}lt;<(3<(~{body}lt;<(3<(~@'>[[|'@@'>[[|'@@'>[[|'@@'>[[|'#[/][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&#''}4''@@''}4''@@''}4''@@''}4''@~([<3([_~([<3([_@''}4''@@''}4''@@''}4''@@''}4''#{][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-#)'>|')@@)'>|')@@)'>|')@@)'>|')@_[-[[[[[_[-[[[[[$)'>|')@@)'>|')@@)'>|')@@)'>|')#{[/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&+#,,,,#++#,,,,#++#,,,,#++#,,,,#+$_[3333~$_[3333~+#,,,,#++#,,,,#++#,,,,#++#,,,,#+^;^^;^-&^;^^;^-&*''''''%", "%:1:::)*-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^(&-^^;^^(&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&-^^;^^{&*:1:::)%", ":222222,[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-:222222'", ":_2_2__,{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/]{4-{][/][/&{][/][/&:_2_2__'", ":_2_2__,{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][(${([/][/<-{[/][/<-:_2_2__'", ":_2_2__,[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/](-[/][/{..</][/](-[/][/](-:_2_2__'", "122222_,{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/][/&{][/]{}.]][/][/&{][/][/&122222_'", ")_2_2_1,{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][/<-{[/][]/^][/][/<-{[/][/<-,_2_2_1'", "%''''''*^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&^;^^;^-&*''''''%", "%:1:::)%*:1:::,**:1:::,**:1:::,**:1:::,**:1:::,**:1:::,**:1:::,**:1:::,**:1:::,**:1:::,**:1:::,**:1:::,**:1:::,**:1:::,*%:1:::)%", ":222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222':222222'", ":_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__'", ":_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__'", ":_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__':_2_2__'", "122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'122222_'", ")_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1')_2_2_1'", "%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%%''''''%"};
Конечно, я тогда не мог знать, что Bolder Dash не самобытная игра на БК. Игра поразила меня своей сложностью. В то время я едва смог пройти несколько уровней, но не оставлял попыток пройти игру дальше.
Интересно, что потом, когда у меня появился уже x86 компьютер и я познакомился с разными вариантами Bolder Dash, я каждый раз был разочарован. Да, в этих играх человечек тоже толкал камни в разные стороны, но… Игра была абсолютно иной! В ней не было интеллектуальности! Скорее, рутинные уровни. Тяжёлое впечатление, словно ты играешь в sudoku или разгадываешь кроссворд. Каждый раз я с теплом вспоминал болдера с “бэкашки”…
В одной из версий INSTEAD, я добавил возможность создавать простые 2-D игры. Вот тогда (или чуть позже) я и вспомнил про Bolder Dash.
Мне хотелось сделать не просто клон, а точную копию игры. Поэтому, я вооружился дизассемблером PDP-11 и… Начал реверсить код.
Кстати, в то время я уже знал, что автор игры на БК (Мелентьев А.В.) был вдохновлён игрой Bolder Dash на Atari. Но он не играл в неё, а просто видел. После этого, он по памяти написал свою реализацию. Как здорово, что он не скопировал оригинал, и получилась совершенно новая игра!
Реверс кода PDP-11 оказался приятной и несложной задачей, буквально за несколько дней я воссоздал оригинальный алгоритм на Lua. С некоторыми улучшениями. :) Интересно, но я обратил внимание на тот факт, что функции часто начинались с “красивых” адресов, а между блоками кода часто были пропуски. Тогда я не мог этого понять, но ответ оказался простым! Игра писалась непосредственно в машинных кодах! Без использования ассемблера!
Кстати, вот так выглядит первый уровень игры в Lua реализации.
--$Name:STANDARD --$Name(ru):СТАНДАРТ maps = { -- 0 "################", "#+@@@@@@@@@@@@@#", "#::::::@@::::::#", "#::::::@@::::::#", "#::::::@@::::::#", "#:::@@@@@@@@:::#", "#:::@::::::@:::#", "#:::@: $ :@:::#", "#:::@: $ :@:::#", "#:::@: $ :@:::#", "#::##########::#", "#:: % ::#", "#:: ::#", "#::@@@@$@@@@::#", "#::::::::::::::#", "################",
Ещё несколько дней, и болдер даш заработал на INSTEAD!
Когда я рассказывал об игре знакомым и говорил, что это “Болдер Даш”, всегда происходил эффект ложного узнавания. Люди думали, что понимают о чём идёт речь, и это мешало. Так как этот “Болдер” совершенно самобытная игра. Поэтому, я назвал игру “Miner Bold”.
Прямо сейчас, вы можете поиграть в Miner Bold. А я пока продолжу.
Так в чём же уникальность гнёмплея этой игры, по сравнению с оригинальным Bolder Dash, которого мы все знаем?
Фактически, это аркадная головоломка. Игра — набор простых с виду уровней, каждый из которых имеет индивидуальные особенности. Каждый из которых проходится за пару минут (если знать — как). Но если не проявить смекалку, каждый уровень может стать блокадой.
В физике тоже есть нюансы. Например, вы можете толкать камни вверх. А также, делать это на лету… В некоторых ситуациях… :) В некоторых ситуациях, можно даже “пугать” врагов. Конечно, эта механика следствие очень простого кода, но и она придаёт игре свой шарм.
Кроме оригинальных уровней, я добавил библиотеку дополнительных лабиринтов. Игра пишет демки успешных прохождений, которыми можно потом обмениваться (Пишутся они в каталог с сейвами). Если не нажимать на кнопки при старте, то игра покажет уже записанные демки. Также запустить демку можно кнопочкой “d” из меню выбора уровня (предварительно записав демку или взяв ее у товарища и подложив в каталог с игрой).
В игру можно играть на Android с помощью жестов. Только играйте двумя руками одновременно, тогда управление становится не хуже клавиатурного. Проверено мной и сыном, игра проходима. :)
Всем БКшникам — привет! :)
https://www.youtube.com/watch?v=ghZ3iQQj0iI [1]