changeset 3:755951b7ec90

First creep
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Tue, 01 Dec 2015 00:28:57 +0100
parents c4895760a38b
children 010d229c6d6d
files tote.hex tote.py
diffstat 2 files changed, 376 insertions(+), 205 deletions(-) [+]
line wrap: on
line diff
--- a/tote.hex	Mon Nov 30 23:48:59 2015 +0100
+++ b/tote.hex	Tue Dec 01 00:28:57 2015 +0100
@@ -11935,192 +11935,301 @@
 :10E9B000910D0000C91F0100C52F01003D34010069
 :04E9C000650D0000E1
 :020000040003F7
-:10E000004D509C0B696D706F7274206D6174680A5D
+:10E000004D507B12696D706F7274206D6174680A77
 :10E01000696D706F7274207374727563740A0A6626
 :10E02000726F6D206D6963726F62697420696D70C3
-:10E030006F7274206932630A0A0A646566205F732E
-:10E040006F6C76655F747269616E676C6528612CB0
-:10E0500020622C2063293A0A2020202022222243F9
-:10E06000616C63756C61746520616E20616E676CB4
-:10E0700065206F66206120747269616E676C65202F
-:10E080007573696E6720746865206C6177206F66B0
-:10E0900020636F73696E65732E2222220A2020206E
-:10E0A00020612C20622C2063203D20616273286156
-:10E0B000292C206162732862292C206162732863F5
-:10E0C000290A2020202069662061202B2062203C24
-:10E0D0002063206F722061202B2063203C2062206F
-:10E0E0006F722062202B2063203C20613A0A20209E
-:10E0F00020202020202072616973652056616C7594
-:10E10000654572726F722822496D706F7373696210
-:10E110006C6520747269616E676C653A2025722C9B
-:10E120002025722C2025722220252028612C206297
-:10E130002C206329290A20202020636F73203D2092
-:10E14000666C6F61742861202A2A2032202B20629D
-:10E15000202A2A2032202D2063202A2A203229201A
-:10E160002F202832202A2061202A2062290A2020FC
-:10E17000202072657475726E206D6174682E616303
-:10E180006F7328636F73290A0A0A646566205F6EDD
-:10E190006F726D28612C2062293A0A2020202022EB
-:10E1A000222243616C63756C61746520746865201C
-:10E1B0006C656E677468206F662061207665637495
-:10E1C0006F722E2222220A2020202072657475721E
-:10E1D0006E206D6174682E737172742861202A2A12
-:10E1E0002032202B2062202A2A2032290A0A0A63A0
-:10E1F0006C617373204C65673A0A2020202023202D
-:10E200004C656E67746873206F66206C6567207359
-:10E2100065676D656E74732C20696E206D6D0A20C4
-:10E22000202020636F7861203D2020313220202083
-:10E230002023206265747765656E207468652068A8
-:10E24000697020616E6420746865206B6E65650A74
-:10E250002020202066656D7572203D2034322020FC
-:10E26000202023206265747765656E2074686520C0
-:10E270006B6E656520616E642074686520616E6BED
-:10E280006C650A202020207469626961203D20337A
-:10E29000382E35202023206265747765656E2074E2
-:10E2A000686520616E6B6C6520616E6420746865C2
-:10E2B00020666F6F740A2020202062617365203D04
-:10E2C0002020323120202020232066726F6D2074A0
-:10E2D00068652063656E746572206F6620626F6486
-:10E2E000790A0A20202020646566205F5F696E69D4
-:10E2F000745F5F2873656C662C206869705F736556
-:10E3000072766F2C206B6E65655F736572766F2C0D
-:10E3100020616E6B6C655F736572766F2C20785F21
-:10E320006469722C20795F646972293A0A2020207E
-:10E33000202020202073656C662E736572766F73C3
-:10E34000203D20286869705F736572766F2C206BA2
-:10E350006E65655F736572766F2C20616E6B6C65A0
-:10E360005F736572766F290A2020202020202020EC
-:10E3700073656C662E785F646972203D20785F64F7
-:10E3800069720A202020202020202073656C662ED0
-:10E39000795F646972203D20795F6469720A202088
-:10E3A0002020202020205351525432203D206D61E6
-:10E3B00074682E737172742832290A20202020205C
-:10E3C00020202073656C662E78203D202873656CB4
-:10E3D000662E636F7861202B2073656C662E6665F0
-:10E3E0006D757229202F2053515254320A2020205B
-:10E3F000202020202073656C662E79203D20287314
-:10E40000656C662E636F7861202B2073656C662EB9
-:10E4100066656D757229202F2053515254320A209F
-:10E420002020202020202073656C662E7A203D203D
-:10E430002D73656C662E74696269610A0A2020205A
-:10E4400020646566206D6F76655F746F2873656CF8
-:10E45000662C20783D4E6F6E652C20793D4E6F6E98
-:10E46000652C207A3D4E6F6E65293A0A20202020C7
-:10E47000202020202222224D6F766520746865209E
-:10E48000666F6F7420746F207468652073706563A5
-:10E49000696669656420706F696E742E0A0A2020AF
-:10E4A000202020202020496620616E79206F662080
-:10E4B00074686520636F6F7264696E617465732040
-:10E4C0006973204E6F6E652C206E6F206D6F7665C0
-:10E4D0006D656E742077696C6C20626520646F6E68
-:10E4E0006520696E20746861740A20202020202035
-:10E4F0002020617869732E0A2020202020202020EF
-:10E500002222220A20202020202020206966207834
-:10E51000206973204E6F6E653A0A2020202020204B
-:10E5200020202020202078203D2073656C662E78E6
-:10E530000A2020202020202020696620792069736D
-:10E54000204E6F6E653A0A202020202020202020B7
-:10E5500020202079203D2073656C662E790A2020CA
-:10E560002020202020206966207A206973204E6FA9
-:10E570006E653A0A20202020202020202020202004
-:10E580007A203D2073656C662E7A0A202020202098
-:10E5900020202066203D205F6E6F726D28782C2031
-:10E5A0007929202D2073656C662E636F78610A20AF
-:10E5B0002020202020202064203D205F6E6F726D7F
-:10E5C00028662C207A290A2020202020202020695B
-:10E5D000662064203E2073656C662E66656D7572DC
-:10E5E000202B2073656C662E74696269613A0A207B
-:10E5F00020202020202020202020207261697365A7
-:10E600002056616C75654572726F7228224F757461
-:10E61000206F6620726561636822290A202020200D
-:10E6200020202020686970203D206D6174682E6173
-:10E6300074616E3228792C2078290A20202020202D
-:10E640002020206B6E6565203D205F736F6C7665C2
-:10E650005F747269616E676C652873656C662E669F
-:10E66000656D75722C20642C2073656C662E746940
-:10E6700062696129202D206D6174682E6174616E5C
-:10E6800032282D7A2C2066290A20202020202020C4
-:10E6900020616E6B6C65203D205F736F6C76655FEB
-:10E6A000747269616E676C652873656C662E666549
-:10E6B0006D75722C2073656C662E74696269612CAD
-:10E6C0002064290A0A202020202020202068697048
-:10E6D000203D206D6174682E6465677265657328DE
-:10E6E00068697029202D2034350A20202020202020
-:10E6F00020206B6E6565203D206D6174682E646519
-:10E700006772656573286B6E6565290A2020202075
-:10E7100020202020616E6B6C65203D206D61746847
-:10E720002E6465677265657328616E6B6C65292060
-:10E730002D2039300A2020202020202020666F72D2
-:10E7400020736572766F2C20616E676C6520696E30
-:10E75000207A69702873656C662E736572766F73A4
-:10E760002C20286869702C206B6E65652C20616EEA
-:10E770006B6C6529293A0A202020202020202020A7
-:10E780002020206932632E777269746528307830D2
-:10E7900034203C3C20312C0A202020202020202026
-:10E7A00020202020202020202020202020207374C2
-:10E7B000727563742E7061636B28273C4242662732
-:10E7C0002C20736572766F2C20302C206D6174685C
-:10E7D0002E72616469616E7328616E676C652929A8
-:10E7E000290A202020202020202073656C662E78A6
-:10E7F000203D20780A202020202020202073656CD6
-:10E80000662E79203D20790A2020202020202020FB
-:10E8100073656C662E7A203D207A0A0A202020201B
-:10E82000646566206D6F76655F62792873656C66D6
-:10E830002C2064783D302C2064793D302C20647A83
-:10E840003D30293A0A202020202020202022222288
-:10E850004D6F76652074686520666F6F74206279ED
-:10E8600020746865207370656369666965642061FA
-:10E870006D6F756E742E2222220A20202020202007
-:10E88000202073656C662E6D6F76655F746F2873DC
-:10E89000656C662E78202B2064782C2073656C665E
-:10E8A0002E79202B2064792C2073656C662E7A20BB
-:10E8B0002B20647A290A0A202020206465662072B1
-:10E8C0006F746174655F62792873656C662C20646F
-:10E8D000656772656573293A0A2020202020202070
-:10E8E00020222222526F7461746520746865206C46
-:10E8F00065672061726F756E64207468652063655A
-:10E900006E746572206F662074686520626F64792A
-:10E9100020686F72697A6F6E74616C6C792E222236
-:10E92000220A202020202020202072616469616E4C
-:10E9300073203D206D6174682E72616469616E732D
-:10E940002864656772656573290A202020202020CD
-:10E95000202078203D2073656C662E78202B207354
-:10E96000656C662E626173650A20202020202020BD
-:10E970002079203D2073656C662E79202B207365ED
-:10E980006C662E626173650A2020202020202020E2
-:10E990006E78203D2078202A206D6174682E636F88
-:10E9A000732872616469616E7329202D2079202A91
-:10E9B000206D6174682E73696E2872616469616E7E
-:10E9C0007329202D2073656C662E626173650A20A1
-:10E9D000202020202020206E79203D2078202A2011
-:10E9E0006D6174682E73696E2872616469616E73FB
-:10E9F00029202B2079202A206D6174682E636F7383
-:10EA00002872616469616E7329202D2073656C66BC
-:10EA10002E626173650A202020202020202073654B
-:10EA20006C662E6D6F76655F746F286E782C206E25
-:10EA300079290A0A0A636C61737320526F626F74DA
-:10EA40003A0A20202020646566205F5F696E697441
-:10EA50005F5F2873656C66293A0A202020202020F9
-:10EA6000202073656C662E6C656773203D205B0A01
-:10EA70002020202020202020202020204C656728D6
-:10EA800020322C2020312C20302C202D312C202005
-:10EA900031292C0A20202020202020202020202066
-:10EAA0004C65672820352C2020342C20332C202D39
-:10EAB000312C202D31292C0A20202020202020201C
-:10EAC000202020204C65672820382C2020372C203F
-:10EAD000362C2020312C202D31292C0A20202020DA
-:10EAE00020202020202020204C65672831312C2038
-:10EAF00031302C20392C2020312C202031292C0A97
-:10EB000020202020202020205D0A0A2020202064B0
-:10EB10006566206D6F76655F62792873656C662C1B
-:10EB20002064783D302C2064793D302C20647A3D7F
-:10EB300030293A0A2020202020202020666F7220D1
-:10EB40006C656720696E2073656C662E6C656773F3
-:10EB50003A0A2020202020202020202020206C6520
-:10EB6000672E6D6F76655F6279286478202A206C45
-:10EB700065672E785F6469722C206479202A206C86
-:10EB800065672E795F6469722C20647A290A0A0A03
-:10EB9000726F626F74203D20526F626F7428290A71
-:10EBA0000000000000000000000000000000000065
+:10E030006F7274206932630A696D706F7274206D3B
+:10E040006963726F6269740A0A0A646566205F73A5
+:10E050006F6C76655F747269616E676C6528612CA0
+:10E0600020622C2063293A0A20202020612C206283
+:10E070002C2063203D206162732861292C2061627D
+:10E08000732862292C206162732863290A202020CA
+:10E090002069662061202B2062203C2063206F7263
+:10E0A0002061202B2063203C2062206F72206220A0
+:10E0B0002B2063203C20613A0A20202020202020B1
+:10E0C0002072616973652056616C75654572726F67
+:10E0D000722822496D706F737369626C6520747267
+:10E0E00069616E676C653A2025722C2025722C20A0
+:10E0F00025722220252028612C20622C20632929CA
+:10E100000A20202020636F73203D20666C6F6174AD
+:10E110002861202A2A2032202B2062202A2A20321D
+:10E12000202D2063202A2A203229202F2028322047
+:10E130002A2061202A2062290A202020207265746A
+:10E1400075726E206D6174682E61636F7328636FE2
+:10E1500073290A0A0A646566205F6E6F726D286112
+:10E160002C2062293A0A2020202072657475726E74
+:10E17000206D6174682E737172742861202A2A20C0
+:10E1800032202B2062202A2A2032290A0A0A636CB4
+:10E19000617373204C65673A0A2020202023204CAD
+:10E1A000656E67746873206F66206C6567207365A1
+:10E1B000676D656E74732C20696E206D6D0A20206A
+:10E1C0002020636F7861203D2020313220202020E4
+:10E1D00023206265747765656E20746865206869C0
+:10E1E0007020616E6420746865206B6E65650A201E
+:10E1F00020202066656D7572203D2034322020205D
+:10E200002023206265747765656E20746865206BD5
+:10E210006E656520616E642074686520616E6B6C4C
+:10E22000650A202020207469626961203D2033380E
+:10E230002E35202023206265747765656E20746812
+:10E240006520616E6B6C6520616E6420746865206A
+:10E25000666F6F740A2020202062617365203D2064
+:10E2600020323120202020232066726F6D207468B8
+:10E27000652063656E746572206F6620626F6479D5
+:10E280000A0A20202020646566205F5F696E697439
+:10E290005F5F2873656C662C206869705F736572B8
+:10E2A000766F2C206B6E65655F736572766F2C20C0
+:10E2B000616E6B6C655F736572766F2C20785F643E
+:10E2C00069722C20795F646972293A0A2020202023
+:10E2D0002020202073656C662E736572766F732024
+:10E2E0003D20286869705F736572766F2C206B6EB5
+:10E2F00065655F736572766F2C20616E6B6C655F10
+:10E30000736572766F290A20202020202020207338
+:10E31000656C662E785F646972203D20785F646961
+:10E32000720A202020202020202073656C662E7920
+:10E330005F646972203D20795F6469720A20202041
+:10E34000202020202073656C662E686F6D65203D4F
+:10E35000202873656C662E636F7861202B207365AF
+:10E360006C662E66656D757229202F206D6174684C
+:10E370002E737172742832290A2020202020202038
+:10E380002073656C662E78203D2073656C662E6860
+:10E390006F6D650A202020202020202073656C6688
+:10E3A0002E79203D2073656C662E686F6D650A209E
+:10E3B0002020202020202073656C662E7A203D20AE
+:10E3C0002D73656C662E74696269610A0A202020CB
+:10E3D00020646566206D6F76655F746F2873656C69
+:10E3E000662C20782C20792C207A293A0A202020AB
+:10E3F000202020202066203D205F6E6F726D2878DF
+:10E400002C207929202D2073656C662E636F78612E
+:10E410000A202020202020202064203D205F6E6FD5
+:10E42000726D28662C207A290A20202020202020A6
+:10E430002069662064203E2073656C662E66656DDB
+:10E440007572202B2073656C662E74696269613A5F
+:10E450000A202020202020202020202020726169F6
+:10E4600073652056616C75654572726F7228224F14
+:10E470007574206F6620726561636822290A202006
+:10E48000202020202020686970203D206D61746864
+:10E490002E6174616E3228792C2078290A20202080
+:10E4A00020202020206B6E6565203D205F736F6CFF
+:10E4B00076655F747269616E676C652873656C66FA
+:10E4C0002E66656D75722C20642C2073656C662E2B
+:10E4D000746962696129202D206D6174682E6174F0
+:10E4E000616E32282D7A2C2066290A2020202020D7
+:10E4F000202020616E6B6C65203D205F736F6C7611
+:10E50000655F747269616E676C652873656C662EF1
+:10E5100066656D75722C2073656C662E7469626910
+:10E52000612C2064290A0A20202020202020206835
+:10E530006970203D206D6174682E64656772656541
+:10E54000732868697029202D2034350A2020202066
+:10E55000202020206B6E6565203D206D6174682E43
+:10E5600064656772656573286B6E6565290A20208E
+:10E57000202020202020616E6B6C65203D206D6185
+:10E5800074682E6465677265657328616E6B6C656F
+:10E5900029202D2039300A2020202020202020660C
+:10E5A0006F7220736572766F2C20616E676C6520C8
+:10E5B000696E207A69702873656C662E7365727651
+:10E5C0006F732C20286869702C206B6E65652C2079
+:10E5D000616E6B6C6529293A0A20202020202020BA
+:10E5E00020202020206932632E77726974652830DC
+:10E5F000783034203C3C20312C0A20202020202060
+:10E60000202020202020202020202020202020200A
+:10E610007374727563742E7061636B28273C424279
+:10E6200066272C20736572766F2C20302C206D614C
+:10E6300074682E72616469616E7328616E676C65BF
+:10E640002929290A202020202020202073656C669B
+:10E650002E78203D20780A202020202020202073A2
+:10E66000656C662E79203D20790A2020202020200C
+:10E67000202073656C662E7A203D207A0A0A2020BD
+:10E680002020646566206D6F76655F62792873650A
+:10E690006C662C2064783D302C2064793D302C2031
+:10E6A000647A3D30293A0A2020202020202020733F
+:10E6B000656C662E6D6F76655F746F2873656C662A
+:10E6C0002E78202B2064782C2073656C662E7920A0
+:10E6D0002B2064792C2073656C662E7A202B2064A5
+:10E6E0007A290A0A2020202064656620726F7461EE
+:10E6F00074655F62792873656C662C206465677247
+:10E70000656573293A0A202020202020202072618C
+:10E710006469616E73203D206D6174682E7261645E
+:10E7200069616E732864656772656573290A2020C4
+:10E7300020202020202078203D2073656C662E78D4
+:10E74000202B2073656C662E626173650A20202081
+:10E75000202020202079203D2073656C662E7920B2
+:10E760002B2073656C662E626173650A2020202061
+:10E77000202020206E78203D2078202A206D617492
+:10E78000682E636F732872616469616E7329202D2E
+:10E790002079202A206D6174682E73696E28726159
+:10E7A0006469616E7329202D2073656C662E626129
+:10E7B00073650A20202020202020206E79203D2013
+:10E7C00078202A206D6174682E73696E28726164E6
+:10E7D00069616E7329202B2079202A206D6174686D
+:10E7E0002E636F732872616469616E7329202D2016
+:10E7F00073656C662E626173650A202020202020DC
+:10E80000202073656C662E6D6F76655F746F286E61
+:10E81000782C206E792C2073656C662E7A290A0A72
+:10E820000A636C61737320526F626F743A0A20201E
+:10E830002020646566205F5F696E69745F5F28737E
+:10E84000656C66293A0A202020202020202073654C
+:10E850006C662E6C656773203D205B0A20202020AB
+:10E8600020202020202020204C65672820322C20CA
+:10E8700020312C20302C202D312C202031292C0A25
+:10E880002020202020202020202020204C656728C8
+:10E8900020352C2020342C20332C202D312C202DE1
+:10E8A00031292C0A20202020202020202020202058
+:10E8B0004C65672820382C2020372C20362C20202F
+:10E8C000312C202D31292C0A20202020202020200E
+:10E8D000202020204C65672831312C2031302C201D
+:10E8E000392C2020312C202031292C0A20202020D6
+:10E8F000202020205D0A0A20202020646566206DEB
+:10E900006F76655F62792873656C662C2064783D4C
+:10E91000302C2064793D302C20647A3D30293A0A2D
+:10E920002020202020202020666F72206C65672028
+:10E93000696E2073656C662E6C6567733A0A2020D9
+:10E94000202020202020202020206C65672E6D6F45
+:10E9500076655F6279286478202A206C65672E7856
+:10E960005F6469722C206479202A206C65672E7997
+:10E970005F6469722C20647A290A0A2020202064AE
+:10E98000656620726F746174655F62792873656C67
+:10E99000662C2064656772656573293A0A20202019
+:10E9A0002020202020666F72206C656720696E2011
+:10E9B00073656C662E6C6567733A0A2020202020F0
+:10E9C000202020202020206C65672E726F746174D7
+:10E9D000655F62792864656772656573290A0A0A4A
+:10E9E000636C6173732043726565703A0A2020205E
+:10E9F000207370656564203D20310A20202020733B
+:10EA00007472696465203D2031340A20202020730F
+:10EA100068696674203D20380A20202020736869C8
+:10EA200066745F7374657073203D20320A20202065
+:10EA30002072616973655F6C6567203D2031300A23
+:10EA40002020202072616973655F73746570732084
+:10EA50003D20330A202020206E6578745F6C656746
+:10EA6000203D20280A202020202020202028322C71
+:10EA700020302C20332C2031292C202020232066EC
+:10EA80006F72776172640A202020202020202028C5
+:10EA9000312C20332C20302C2032292C20202023F4
+:10EAA000206261636B776172640A2020202020203D
+:10EAB000202028312C20322C20332C2030292C20CF
+:10EAC00020202320636C6F636B776973650A2020B5
+:10EAD00020202020202028332C20302C20312C20D6
+:10EAE00032292C2020202320636F756E7465722DCF
+:10EAF000636C6F636B776973650A20202020202088
+:10EB0000202028322C20332C20312C2030292C207E
+:10EB1000202023206C6566740A20202020202020DD
+:10EB20002028332C20322C20302C2031292C20205E
+:10EB300020232072696768740A20202020290A0A8D
+:10EB400020202020646566205F5F696E69745F5FC6
+:10EB50002873656C662C20726F626F74293A0A20E4
+:10EB60002020202020202073656C662E726F626F3B
+:10EB700074203D20726F626F740A202020202020B4
+:10EB8000202073656C662E73686966745F78203D1B
+:10EB900020300A202020202020202073656C662E43
+:10EBA00073686966745F79203D20300A2020202038
+:10EBB0002020202073656C662E6F6E5F67726F7504
+:10EBC0006E64203D206C69737428726F626F742EBE
+:10EBD0006C656773290A202020202020202073657F
+:10EBE0006C662E6478203D20300A202020202020D2
+:10EBF000202073656C662E6479203D20310A202028
+:10EC000020202020202073656C662E726F74617442
+:10EC1000696F6E203D20300A2020202020202020F7
+:10EC200073656C662E737072656164203D20300AD6
+:10EC300020202020202020206C6567203D20726F3E
+:10EC4000626F742E6C6567735B305D0A2020202034
+:10EC50002020202073656C662E68656967687420C3
+:10EC60003D206C65672E74696269610A0A20202064
+:10EC700020646566206D6F76652873656C66293A39
+:10EC80000A2020202020202020666F72206C6567DB
+:10EC900020696E2073656C662E6F6E5F67726F758C
+:10ECA0006E643A0A202020202020202020202020CE
+:10ECB0006C65672E6D6F76655F746F286C65672E67
+:10ECC00078202D2073656C662E6478202A206C6570
+:10ECD000672E785F646972202A2073656C662E73D4
+:10ECE000706565642C0A2020202020202020202010
+:10ECF00020202020202020202020202020206C6583
+:10ED0000672E79202D2073656C662E6479202A2069
+:10ED10006C65672E795F646972202A2073656C6662
+:10ED20002E73706565642C0A20202020202020206E
+:10ED300020202020202020202020202020202020D3
+:10ED40002D73656C662E686569676874290A2020D2
+:10ED5000202020202020202020206C65672E726F2C
+:10ED6000746174655F6279282D73656C662E726FAD
+:10ED7000746174696F6E202A206C65672E785F64F9
+:10ED80006972202A206C65672E795F646972202F72
+:10ED90002032290A0A2020202064656620737465C9
+:10EDA000702873656C662C206C6567293A0A2020F0
+:10EDB0002020202020206478203D20286C65672EAC
+:10EDC000785F646972202A2073656C662E736869A7
+:10EDD0006674202D2073656C662E73686966745F97
+:10EDE0007829202F2073656C662E73686966745FBE
+:10EDF00073746570730A20202020202020206479FD
+:10EE0000203D20286C65672E795F646972202A2076
+:10EE100073656C662E7368696674202D2073656C4B
+:10EE2000662E73686966745F7929202F2073656C7C
+:10EE3000662E73686966745F73746570730A202048
+:10EE4000202020202020666F722073746570206956
+:10EE50006E2072616E67652873656C662E736869D3
+:10EE600066745F7374657073293A0A20202020202D
+:10EE700020202020202020726F626F742E6D6F760C
+:10EE8000655F62792864782C2064792C2030290A07
+:10EE900020202020202020202020202073656C6648
+:10EEA0002E73686966745F78202B3D2064780A2091
+:10EEB000202020202020202020202073656C662E1A
+:10EEC00073686966745F79202B3D2064790A20207D
+:10EED000202020202020202020207969656C640AD1
+:10EEE000202020202020202073656C662E6F6E5F0E
+:10EEF00067726F756E642E72656D6F7665286C65CE
+:10EF000067290A2020202020202020666F7220738D
+:10EF100074657020696E2072616E67652873656C18
+:10EF2000662E72616973655F7374657073293A0A3E
+:10EF30002020202020202020202020206C65672EEB
+:10EF40006D6F76655F627928302C20302C207365D8
+:10EF50006C662E72616973655F6C6567290A202093
+:10EF6000202020202020202020207969656C640A40
+:10EF700020202020202020206C65672E6D6F766574
+:10EF80005F746F280A2020202020202020202020AD
+:10EF900020286C65672E686F6D65202B2073656C6B
+:10EFA000662E73686966745F78202B2073656C66C3
+:10EFB0002E6478202A0A20202020202020202020B3
+:10EFC00020202073656C662E737472696465292035
+:10EFD0002A206C65672E785F646972202B20736528
+:10EFE0006C662E7370726561642C0A2020202020CC
+:10EFF00020202020202020286C65672E686F6D65FA
+:10F00000202B2073656C662E73686966745F7920A7
+:10F010002B2073656C662E6479202A0A202020201C
+:10F0200020202020202020202073656C662E737401
+:10F030007269646529202A206C65672E795F64698E
+:10F0400072202B2073656C662E7370726561642C60
+:10F050000A20202020202020202020202073656CE2
+:10F06000662E72616973655F6C6567202A2073651F
+:10F070006C662E72616973655F7374657073202DA1
+:10F080002073656C662E6865696768740A202020A5
+:10F090002020202020290A20202020202020207924
+:10F0A00069656C640A202020202020202079696571
+:10F0B0006C640A2020202020202020666F7220739C
+:10F0C00074657020696E2072616E67652873656C67
+:10F0D000662E72616973655F7374657073202D208D
+:10F0E00031293A0A20202020202020202020202002
+:10F0F0006C65672E6D6F76655F627928302C2030E5
+:10F100002C202D73656C662E72616973655F6C656A
+:10F1100067290A202020202020202020202020795C
+:10F1200069656C640A202020202020202073656CF3
+:10F13000662E6F6E5F67726F756E642E617070659C
+:10F140006E64286C6567290A20202020202020205A
+:10F150007969656C640A0A20202020646566207243
+:10F16000756E2873656C662C207374657073293A0C
+:10F170000A20202020202020206C65675F696E64B3
+:10F180006578203D20300A20202020202020206685
+:10F190006F72207374657020696E2072616E67658E
+:10F1A000287374657073293A0A20202020202020BB
+:10F1B00020202020206C6567203D20726F626F74D4
+:10F1C0002E6C6567735B6C65675F696E6465785DFF
+:10F1D0000A202020202020202020202020666F725E
+:10F1E000206672616D6520696E2073656C662E7392
+:10F1F000746570286C6567293A0A20202020202039
+:10F200002020202020202020202073656C662E6D79
+:10F210006F766528290A2020202020202020202009
+:10F220002020202020206D6963726F6269742E7324
+:10F230006C656570283230290A202020202020208B
+:10F2400020202020206C65675F696E646578203D12
+:10F250002073656C662E6E6578745F6C65675B30D5
+:10F260005D5B6C65675F696E6465785D0A0A0A724A
+:10F270006F626F74203D20526F626F7428290A00FC
 :0400000500011C6D6D
 :00000001FF
--- a/tote.py	Mon Nov 30 23:48:59 2015 +0100
+++ b/tote.py	Tue Dec 01 00:28:57 2015 +0100
@@ -2,10 +2,10 @@
 import struct
 
 from microbit import i2c
+import microbit
 
 
 def _solve_triangle(a, b, c):
-    """Calculate an angle of a triangle using the law of cosines."""
     a, b, c = abs(a), abs(b), abs(c)
     if a + b < c or a + c < b or b + c < a:
         raise ValueError("Impossible triangle: %r, %r, %r" % (a, b, c))
@@ -14,7 +14,6 @@
 
 
 def _norm(a, b):
-    """Calculate the length of a vector."""
     return math.sqrt(a ** 2 + b ** 2)
 
 
@@ -29,23 +28,12 @@
         self.servos = (hip_servo, knee_servo, ankle_servo)
         self.x_dir = x_dir
         self.y_dir = y_dir
-        SQRT2 = math.sqrt(2)
-        self.x = (self.coxa + self.femur) / SQRT2
-        self.y = (self.coxa + self.femur) / SQRT2
+        self.home = (self.coxa + self.femur) / math.sqrt(2)
+        self.x = self.home
+        self.y = self.home
         self.z = -self.tibia
 
-    def move_to(self, x=None, y=None, z=None):
-        """Move the foot to the specified point.
-
-        If any of the coordinates is None, no movement will be done in that
-        axis.
-        """
-        if x is None:
-            x = self.x
-        if y is None:
-            y = self.y
-        if z is None:
-            z = self.z
+    def move_to(self, x, y, z):
         f = _norm(x, y) - self.coxa
         d = _norm(f, z)
         if d > self.femur + self.tibia:
@@ -65,17 +53,15 @@
         self.z = z
 
     def move_by(self, dx=0, dy=0, dz=0):
-        """Move the foot by the specified amount."""
         self.move_to(self.x + dx, self.y + dy, self.z + dz)
 
     def rotate_by(self, degrees):
-        """Rotate the leg around the center of the body horizontally."""
         radians = math.radians(degrees)
         x = self.x + self.base
         y = self.y + self.base
         nx = x * math.cos(radians) - y * math.sin(radians) - self.base
         ny = x * math.sin(radians) + y * math.cos(radians) - self.base
-        self.move_to(nx, ny)
+        self.move_to(nx, ny, self.z)
 
 
 class Robot:
@@ -91,5 +77,81 @@
         for leg in self.legs:
             leg.move_by(dx * leg.x_dir, dy * leg.y_dir, dz)
 
+    def rotate_by(self, degrees):
+        for leg in self.legs:
+            leg.rotate_by(degrees)
+
+
+class Creep:
+    speed = 1
+    stride = 14
+    shift = 8
+    shift_steps = 2
+    raise_leg = 10
+    raise_steps = 3
+    next_leg = (
+        (2, 0, 3, 1),   # forward
+        (1, 3, 0, 2),   # backward
+        (1, 2, 3, 0),   # clockwise
+        (3, 0, 1, 2),   # counter-clockwise
+        (2, 3, 1, 0),   # left
+        (3, 2, 0, 1),   # right
+    )
+
+    def __init__(self, robot):
+        self.robot = robot
+        self.shift_x = 0
+        self.shift_y = 0
+        self.on_ground = list(robot.legs)
+        self.dx = 0
+        self.dy = 1
+        self.rotation = 0
+        self.spread = 0
+        leg = robot.legs[0]
+        self.height = leg.tibia
+
+    def move(self):
+        for leg in self.on_ground:
+            leg.move_to(leg.x - self.dx * leg.x_dir * self.speed,
+                        leg.y - self.dy * leg.y_dir * self.speed,
+                        -self.height)
+            leg.rotate_by(-self.rotation * leg.x_dir * leg.y_dir / 2)
+
+    def step(self, leg):
+        dx = (leg.x_dir * self.shift - self.shift_x) / self.shift_steps
+        dy = (leg.y_dir * self.shift - self.shift_y) / self.shift_steps
+        for step in range(self.shift_steps):
+            robot.move_by(dx, dy, 0)
+            self.shift_x += dx
+            self.shift_y += dy
+            yield
+        self.on_ground.remove(leg)
+        for step in range(self.raise_steps):
+            leg.move_by(0, 0, self.raise_leg)
+            yield
+        leg.move_to(
+            (leg.home + self.shift_x + self.dx *
+             self.stride) * leg.x_dir + self.spread,
+            (leg.home + self.shift_y + self.dy *
+             self.stride) * leg.y_dir + self.spread,
+            self.raise_leg * self.raise_steps - self.height
+        )
+        yield
+        yield
+        for step in range(self.raise_steps - 1):
+            leg.move_by(0, 0, -self.raise_leg)
+            yield
+        self.on_ground.append(leg)
+        yield
+
+    def run(self, steps):
+        leg_index = 0
+        for step in range(steps):
+            leg = robot.legs[leg_index]
+            for frame in self.step(leg):
+                self.move()
+                microbit.sleep(20)
+            leg_index = self.next_leg[0][leg_index]
+
 
 robot = Robot()