From 8ccb4694ef5cfd59003bf1361eafdff0029cbd0b Mon Sep 17 00:00:00 2001 From: hkc Date: Fri, 6 Sep 2024 22:16:34 +0300 Subject: [PATCH] Silly mistakes --- chunk420.data | Bin 262144 -> 262144 bytes src/bot.c | 75 ++++++++++++++++++++++++++++++++++++++++++++-- src/live-1chunk.c | 32 +++++++++++++++++--- src/live.c | 2 +- 4 files changed, 102 insertions(+), 7 deletions(-) diff --git a/chunk420.data b/chunk420.data index 1a1b51b8251579f8f8725dcef3224aeca19271cc..4578c3372ccfafb51c276eb070eff7d3782dd98a 100644 GIT binary patch literal 262144 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%0DW9%!Wx-aS9q4vS6KI)2h{o4O3|E~SnXLnwF z71CeT(Zk2Wk#~N7vm0xFr`VSC?{JAtr0PqSWqH@XG{1p-*Z%CYJ2Jis>96YO;Tww> z@>syZ@Ds2>{EAhZ`rvo{^t}teYk&6Hof}_;^jCHC@WuPPy|LlFbuK~TTrom8I28P@$Lyn$B&Nj9vW6xp`f+XHQ<=_2=Gq ztiNl2_Su~oUxoBnb##1zI{EP|n4C(qZ!vOZQ8kJ!=v{v_zG?AY`?JsP*!U`>zpA6V zZw}U1gU(+8tEqbk*dXUntlHEEzw4*(UHD!5v(N6__$s8os-t&bpSb_#w zJZW)h=clgy=pc1Ci2hUf-REGxXR+O<{)I1px>q-^KPLWs?Di`oibnjD;UGG=)2V+q z>iNEUfA)J8W$bCf^W=w*gC^|uo89ZG>cd4H4x)oQo%(m9p6{#oXTN80o^Oo4!yvtC zM1<{jGk0B8jku`8L3D7ZQ~z$%^L_RH?Ds6n`P!KKr1NX{n9^0_yZw64@wMv1NgWQN zgFBu2ccY%~tM_NWXHm~5U;3>)hn~o8Kh1?#eOiZu+PBlGe>ZZ@@7kCBo<$jNKX!Vn zr{OQ(6Lxn zba1Cr|8CUtef9qA_bgsGUw;a;UM}B@%L|h!T4AhW7p}&+i@5FbUmHKmjt216}1ir z@xv9VE8;_kzYEC)$%QLw9S*9$;`jyIHvvBX=c;+)p9EFjyL35EJaFjMK3a!^^uZOW zE8;_kzYEC)$%QLw9S*9$;_heEjie<}r^OV>@wMTaYD9S-7$D^gd)hYo)ik_(ax zSJXNjRDZ?sJGSBX`7iJJ(`TZ}dzZePs}XY1;fh*^gZSZ!)D`ie!{3GEg5<&#wGIc> zU-9s>;1QU-f9Ox{4@Z@UKJE8b+7Aacti9tQE64XPBp=jV)pxw=r%$o@<6WP6 z#|MDH;WvT{nxi~r-CB}E6C6YbEB$I6AE$-|?!SK1F-`KN|n2iKX>ye)JqyIkEWRAUas- zSL^sd%~Ou=T}VEtxvKAY)lc6655Mna)T6#U2aOzZM9_0w<;38JgXmzTU#;TgYO?g8 zRC(x2-VLJta8RQv9pA2w4^+Q$eD6Z?LCsZt$E$w&6vLnXzrQhXpS{WPwx8zD=YQOb z*B0eGMl5x9*>QXz{tBBfjhn8i_UdXG4@MQ~I!O;rsaW|{hl4~^938|DqJ!v))Zc~V z@AB{|(pTwK{jr}90kEZv(UWKRnSZ_;&#jrmt{a~seU)C-cmC1WMtmH+&%NpG>Cl)1 zzq&t-m0xu@SoKp^#1HQ3l~4Qb@~gS{6xpxRtNN+`IBIX7a{mU<=WnI`18{YJ&QtkS zhl5o=bw&K(u3q`H?=HWZi%*gLD!r=L{yFW@8-g!_wduFD<|x0qKYf*7bvRh{Q&+?f z?&_6K`|k3qx%d>>uhOgfnV-@6SZQo%-2QmoU;5H4nxmW;)hk~4RfmJ*RU93}52AzU ziqzkQZDg_ouJ&s}2XNe(H+&!Ck%bY2RIbH5Z>E`&D{X zSAQRG40+NR^hi?6A!rqJf4CxD=*rO*@qtwx9iJlg@50^w)ZcX;@+ypd=Dhu*KgMka zNUt<@|NDRJBMZ)jtQ=htA6V7V@hMXOF5K-;{axoFuR`00@yps^D9RO zwXPhWB0jLHqvKPg{$04+pZdGbLtcfpk4<)+Zl^=brC3*a=$v0UI;eH!_!RMhRUI9l zBK7aW-Tu_ybsq9c)QxPyF=Z{zTA4QrbmD_6YF)Yd;rKvwP<6N>{_n!w{?y-f9`Y)b zeVQ%a`#c5Uv^J&6L&vNf9n`vVe2VzMs*a9Nk@|PxZhz|UIuCgjj(uXrHd>o*dqr~z zVt!j!dFUfId~n6Pe){PH(LvSWiuk_^cl%R+*LldRFs7V0T!uY~fBhf6Di57F<>;W+ zmE%*y2Uc}-e2Ub+3wQfdf7f})tB`%#l>KcT;DtH+uJhV(^Aowl2UjEpT{-$yq#wN6 zxAQ%lN8b*2`%@e}&7Nn@M}9kAI2J&q9@lPNQ;kQ0vO^T}ArAt9?7)vw8IGaJN5oa^O3} zUt#MXU+~ksZOPxhK`_1@R(a^0OF25Ib>;Z3BK_dizMb#cJoaD1${ z`Pztioj67RHzMPY&-FUjJHyx6@s)lm%F%aN^;P;V@7X&0?eN)r`pAcas>3TBed~V! zuulY=bblnmk{4ATdUYOj@UEXeMa`jJ>D1qi?6<>L_a$F*REJj>{mZQT1;$6S?!!>88Q-3#djvc+QqPqmQrj zQ&En-!>X^+cX`j&*>8u>=F>+$98?`%q4&)Pz~9pAVYgz-}w^MgcoMxT4mTtH0t^U!_+$uj=f#!*}hY zIqZuLudw^Zx4Q8J82D282=#guICR|~u1E~Ja`YWmeU-k;d$!JgJA5{uKJww9>hKEf zH~D<$_koYGd*odA-~I3^4_(iLUZMKoza6XVsr2f4@K^Op*S?CQAFu^8)3j_-QcpHN zWBY!tgffhtLwpE)hk{5Dvqw0X3rMu+rO)=%@*^a&>ZCv zriFs5AO731xSUe1u7`%IUg_FbadgG`*0&wT+yA&3(+`v8C?`VoimM;~+p)TyO0TX5 ze^sw^?W;JtqUGw;C!eduWM39GKb&`Ci?aIRza8TOE-tF;p}neCy7pBZU9sn;Ih!DK z@bLw4bZC(9?z;aEo*nMav+J+wyIks3KRP}`8+#x9T;;m2$Fo6yg@?Y2 z0(ok$boG4~=R7;yooCly)pxnntA6zE8$)$sU;i5Ke~4*lp6R2%!qj+cNuD-Uy86D0 zbDkaU&a>;U>bqR(RX_S1X`gLOI2Ju=&<1@)e}(LS7s=DUN>|@^an7^D-FbHXRehIB zz3NBDmry1@Dt+<{fBOY6<=t9V=c@Eu;cql^o*nMC-1S%WT`u*iA06MoW%di19~8~H z{|A8NUZ%yl;(5Cq^ukU<^3D&DVh^W{*nHJ9~V*zxNLG_kWDF(==xUL;wGUT=>1$^EuhQI}k&) zPk{ay@Gzv$g#Hvz@F(HkHXrvdy#xNXZUbf5%Z&3|ULJv8dO4qC-Ms_j0pQKw#~iQo zad63Ld-?qP|L$%6t^P57|MZt(kB8t){jFE?IoI7gaD3k%=iQa@?Qi^|xVz8C|4Z+H zz022;50<{|k57VZ{iRp)Io8cPkVc!HgZ?IuUkds8uyy-;bDNL-m)?Q=o}LfD_>k|T zo{va>4s80L`Tx>+-aXbBZVbGSc#gbU-QDNo|DAWh<~wJuzw>9Mn~ZnucV5lsRCn({ z_5SwfB0d$EdP9E%KA-=0@AGf<>-@(%e!kHc!+aoq>-Bujb?*-N$9ezQA0OyG~VTd(JHu6uXD$L;U`K307UcpUmK{`rjD z+vVf_t#@F~yMMEbd7mwKL|W75=WpDBHs&_fIauD|i1rwGH9rql{QUfhJ22+U7yEV8 zKIa(x_>TkK@+U6-a}hCbTQ~_N=DsY(L-2Y3|B+`W4|k4!c@m~Po)HuN$mRd%FJp{! zJO=z47}P%z()d}n4}s6m-?#(w%N?KWKKnW8ldpf~_#0RMxeCV1z~xJT%TY@o3!gjp zNA3U*0J9ZrSLuqqj=wJak*ojDUq&Cd{@#y=pwGH}+J|ywq3+;g5qyLh?^>#?f}S9Z z`PWtxLq9*~C?}UKM@Fc+SsX7yyEPhY+d+849DCd`TOzA3D0GBP(?P*_D9oO`vhQr1 zG3#hmOz88bOo`^WdP|Nn%OqIQDVkwk`_b5nf{XJd_jLcPwUu|Zm!*4>x$55Fc@gU+ z*+{yHZc5Iy?9ONoXIRo>5-wk){Iy`r+9P6=l^-2v%4ptYq;Ov*Zmo^_dF{p5Y_<3n z;yW_nkwMoH-9273CPJ*hU-u5DHVoT{8_-kS+WjY8ONTc!Q@Uo~eK9o>IdM)C{XT`& zJmKr=G)N(utVe63>nP7ItGTT&bl+(ltC=-dvngqGj$Eg0qweSj%g4iJ+DQsG@EHu*}mp>7KNlP3>q?XBB9R zAgM`CmMYk#t5H#=VBHi)l2g(0CbFLPw(5V}F%$YKmCh2H79F+-l2)^CR=egO!lR8E zm;$)n!x?!@F9a5z;qFLd!-k<@YseOdghhZjt}(fka_45<5KVrJ^~uanNRA*n^&)|X zQV6lYT4Hv_IxlQJc*vF}_im~6-BOoUS5B0xODU7Q=1fytZ)!ilIJcX|OI~MF1dTn-AFt83<_Bu>($R9Fr;^f>7wmQXT|QQ3x%(O)or7BhA$>hsR27rC4oTw#6f`e5z9Bd)=jjEmv0ssI z7@Ou+Kbn=}E?HH{++ZY)tf|jT*IK}=MGx96Mced*R4u&QUSh#|mDc{{l2R#OxCbt= zIk{J-GIoosQSVnCB+AKdMc+5yrDU{a?B@DpZ8ZtLr1T|MYpng1eR`E9&^PM4X^Zu* zwuL!iOJa=U0()(+MQr(u{d)nD+>$U(wu|(c1umZ6P zM%fpGg~++4K>JZSKiT1^9yl{LxPv1 z^_xMd<*@9nUKZ_e*>jhr*+|uzjngx?&-EEUR;_qiPogaoon&m*VeTAzEKMWAH5$XY zENBD!_Vd?O=(adcYsoUwc8iv@O3Sqj>o}R+(Z>AGh%{;LXUlFFTB=Q#dxDOh;D^Q7 z(sYeG@DSR<|8ya)-xlFH?6j7SzNB#7izEl^HF4xk`&qbw$xe?Wq<0RsiaGSK4(q)1 zko<}#JM}y@nlGc%gdR6Hy>m)8-po&-nqE-^{P$jLe%nX|aA zA}kiU?k9;YQsqob<*{5cqa_yIHE8q3gDDR4WvQ(*)pD;6heNpiK*mC`=JC_CA;&>N zXbWoC4bQY(4+A5$hW2;#wZ&mI9G*UlOXz{PFU(OMN-D7AYT(f_7SzW<-PT^RJ+Hkh z328Z#n}{CqrXbEm>v1tE#uJ&_#qH}=@d)il39&6?9dtQ#x5ZB5DDI60Ki=_-vZGOJ zX@5s&1PsOb*lO+=ZOJ}jdP5^45y#Z6mVaI7|A#npG z)ckSs+}zf^#}?isRac{Uvd!t1L>aOky%Tz2@>s=5X|~GpaD~+i&LYkC%DlgD0*C)8qLW^!0G9@1!wv%yc#c-%vC!qEeJIh*o2%x&Siy$nN#LEIR{B!&wO zQ` z@@7d~c4}Rz)H)gqK}xOA|L4KsTG&w6;yeh6XZ15}cJ|e&r;AHz+$X;j3SDz%FO5?1 z>?r7-%IWGMsoL^X|PyOvq~s>XxLsh|cDzK9+s}U#A+q z2W+0`i={2jn@y$C(awz`3#&xwuyYa?Q`_2k7V|o7HzH1}t2j3s`n-NH5-)3|TVCP0#rp4OU9ed4wM>ZvCFYVgwQo?PZuGA~$3?9YgW^+SR`MJVWm~cFv4)wKO%7d7lfdy%MkE3{=6j zAJx%Ixjt1}S*2I!h2fqxoQCp)S>#hXybZQp>s>faYvMff(IHzLC_5|}!$c|aIMM9sLbki&!ca%g0xdwQMpr4WVaTmzH7toi@H7m+YZSWE%F)vn#}nmh z_x3!0jp)T?nM>-ZPHpK6nFVO)AvhLYm^4H>=G_M)cW1&WiX@8xLtNeAQ`) zbR2MT%zG%;xzg6t|M(>yBBu}+Hl?)MRGZTemrgj3F)LF`(PNofkHx9jLFPC22=qmc zm}@=ytXOJiyp9@{hAig^(khCv7{zg}*qS=nZBcHtRr;S4KbLWxQ;L;muE89;ZJ>p< OZDsQSelnx!i2n~!>(wv- delta 11614 zcmeHNPiP!v6z6?YFtMplt1bDnDXSPep+ZNAIEQUJpoxo(WE%w+40Sz71CE-5hppYz z5G43#V?#&ss^qZrWb2C7ZT${LD56wjdJzwTQF z^S$@Y&V28Ce}2FB?bw((HfH)$6W{x}i7y*}%i6%=VoIe8wv!+~mX71%9C2<@#TxR} zv4bDEoGN6};{-?Dxq<_Zj2LOon zM&pK+v63E&&=gg(Y4I4vWn`9WTYjtIh$nE%SCqtdnf}7nD0^*m#NV5K6dHT&e*tRt z!^#bk5ohjG2`TTcc%s9Zhv+3PcBngoN|SG;1P|>o5_;CA{gSlq;u^}5Ar2Xly_zZK z4~t``l!JG>P;b&`_+|(ZyoB+z z-te*;X@b;o6l~x7CCW2fl|-<~kvC|8r%tJUxk~uiVnXV@h97R0+}Xu}h1TG$ZF&?0 zkjfPhDeFp5GKG%xF_xFaMO;?r3KQkxC&+QY_H}<(6Nr^tf&y;)4u)fwMr>X(n)vNG zwU51zXtWxSl?`m%S5v#d=Td$qozU}NP`AX^E^))U5FuaB)3JY7o4Sz!yyYY^8S#7= zX0zDqfzNwF#^*2gLbX`{-bS7i7hLQLo*3qZA&|4!H9F((OZOqgTOzS^W|5u`Idcs} z{_F*d^Olj|{wEEG^Ka1sY-JbsZy`rE*YCXi4CfC44`prvq|X)tag*rX$}Tr1FK3OU z6!nAB3AtS_+@>nMiqdYc6J@|~a}xo8ew|x(8%Zv{N2yW*$W25g2I^dn#M+~dR%3B! z5&;`&Hc|*yyR@YI{peUjF8%9hz+UV49!b2Wp6^pV#EGoBN5a^}ix1b04Cpl^vrz^C zNP@pkg}}CrKWwFeb*?|m^Dk3UqY^ZSh!`!1X>b6s4XP)2XiEK62FvxYit7Fm^=`P7 zl^>Zp_L@3R)3+KsV6p8wGOoS}pT0u6Y4uq^z`#zBF|ulcIQp}3w`^EVM6Mn>rA`q4 zfwm)}Th8xlFA@YDfS**rXlG&!e%t!L8cjtC3s+=Ob; zm<3CGevtO){vXt*lBe2v7H37PGL)W;5FUV~B|s$Elr7iPB3@!wDGRJ^9TKZkI_Jo@ zk)>yp@fel4oXN#=%GTa>b)-^#R$Y|PnQg`k)gG#jv>0E9r;#h9M2&4XPFL2v8lwk{ zYQ2|J?-a+5QY&YVmzk;bAJ{vi-4xCO@N@HXCe_LkI7}GPZ@s#9@ZmH6%GSqlb z6|ixv4{S^F#^jtD2==dh*44`16GnJyYHrkdCIjk8e;hEXbbx{bgJ+G$Z|Erx8dDp4 zl156HtK?-Jd(rqHr1VHuH-9AO7yi<7&DAa_w&q9dQ5WjP@Y>S^*t5|1EoP1E;K6em LzZYKK2Jid>N@roO diff --git a/src/bot.c b/src/bot.c index e67446d..86740c5 100644 --- a/src/bot.c +++ b/src/bot.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "obcb.h" #include "packets.h" @@ -9,6 +10,10 @@ unsigned char chunk_current[OBCB_CHUNK_SIZE_BYTES], chunk_target[OBCB_CHUNK_SIZE int dst_chunk_id = 420; +void rot(int n, int *x, int *y, int rx, int ry); +int xy2d(int n, int x, int y); +void d2xy(int n, int d, int *x, int *y); + const uint8_t shuffle[256] = { 0, 128, 64, 192, 32, 160, 96, 224, 16, 144, 80, 208, 48, 176, 112, 240, 8, @@ -44,6 +49,7 @@ const uint8_t shuffle[256] = { 159, 95, 223, 63, 191, 127, 255 }; +bool has_data = false; static void obcb_mg_handler(struct mg_connection *c, int ev, void *ev_data) { if (ev == MG_EV_OPEN) { printf("Connected to WebSocket\n"); @@ -58,6 +64,7 @@ static void obcb_mg_handler(struct mg_connection *c, int ev, void *ev_data) { struct obcb_msg_stats stats; memcpy(&stats, &wsm->data.buf[1], sizeof(stats)); } else if (wsm->data.buf[0] == OBCB_MSG_FULL_STATE_RESPONSE) { struct obcb_msg_full_state_response state; memcpy(&state, &wsm->data.buf[1], sizeof(state)); + has_data = true; if (state.chunk_index == dst_chunk_id) { memcpy(chunk_current, state.bitmap, OBCB_CHUNK_SIZE_BYTES); } @@ -110,12 +117,31 @@ int main(void) { int render_thread(void *_conn) { struct mg_connection *ws = _conn; - for (int i = 0; true; i = (i + 1) % (512 * 512)) { + srand(time(0)); + + while (!has_data) { + usleep(1000); // spin + } + + int failure = 0; + for (int i = (rand() % OBCB_CHUNK_SIZE); true; i = (i + 1) % OBCB_CHUNK_SIZE) { +#if 1 int blk_index = i / 256; int blk_pos = shuffle[i % 256]; int ox = blk_pos & 15, oy = blk_pos >> 4; +#if 1 + int x = (blk_index & 31) * 16 + ox; + int y = (blk_index >> 5) * 16 + oy; +#else int x = (blk_index & 31) + ox * 32; int y = (blk_index >> 5) + oy * 32; +#endif + +#else + int x, y; + d2xy(512, i, &x, &y); +#endif + int index = x + y * 512; int byte = index >> 3, bit = index & 7; @@ -123,7 +149,52 @@ int render_thread(void *_conn) { if ((chunk_current[byte] & mask) != (chunk_target[byte] & mask)) { obcb_send_toggle_bit(ws, index + dst_chunk_id * OBCB_CHUNK_SIZE); - usleep(5000); + usleep(2500); + } else if (failure++ > 1024) { + usleep(1000); + failure = 0; } } } + + +//convert (x,y) to d +int xy2d (int n, int x, int y) { + int rx, ry, s, d=0; + for (s=n/2; s>0; s/=2) { + rx = (x & s) > 0; + ry = (y & s) > 0; + d += s * s * ((3 * rx) ^ ry); + rot(n, &x, &y, rx, ry); + } + return d; +} + +//convert d to (x,y) +void d2xy(int n, int d, int *x, int *y) { + int rx, ry, s, t=d; + *x = *y = 0; + for (s=1; s #include #include +#include #include #include "obcb.h" #include "packets.h" @@ -12,6 +13,8 @@ struct mg_connection *ws = NULL; int chunk_id = 420; int connected_clients = 0; +double last_msg_time = 0; + static void obcb_mg_handler(struct mg_connection *c, int ev, void *ev_data) { if (ev == MG_EV_OPEN) { printf("Connected to WebSocket\n"); @@ -34,18 +37,20 @@ static void obcb_mg_handler(struct mg_connection *c, int ev, void *ev_data) { for (int i = 0; i < OBCB_CHUNK_SIZE; i++) { view[i] = state.bitmap[i >> 3] & (1 << (i & 7)) ? 0xff : 0x00; } + last_msg_time = GetTime(); } else if (wsm->data.buf[0] == OBCB_MSG_PARTIAL_STATE_UPDATE) { struct obcb_msg_partial_state_update update; memcpy(&update, &wsm->data.buf[1], sizeof(update)); + uint32_t chunk_index = update.offset / OBCB_CHUNK_SIZE_BYTES; uint32_t byte_offset = update.offset % OBCB_CHUNK_SIZE_BYTES; if (chunk_index != chunk_id) return; - printf("Got partial update: %d %d\n", chunk_index, byte_offset); unsigned char *view = c->fn_data; - for (int i = 0; i < OBCB_UPDATE_CHUNK_SIZE; i++) { + for (int i = 0; i < OBCB_UPDATE_CHUNK_SIZE * 8; i++) { view[i + byte_offset * 8] = update.chunk[i >> 3] & (1 << (i & 7)) ? 0xFF : 0x00; } + last_msg_time = GetTime(); } else { printf("UNHANDLED MESSAGE 0x%02x\n", wsm->data.buf[0]); } @@ -60,6 +65,8 @@ static int mongoose_thread(void *_mgr) { return 0; } +void DrawTextShadow(Font font, const char *txt, int x, int y, int size, Color color); + int main(void) { InitWindow(512, 512, "obcb-1chunk"); SetTargetFPS(60); @@ -67,6 +74,8 @@ int main(void) { thrd_t mongoose_manager_thrd; thrd_create(&mongoose_manager_thrd, mongoose_thread, 0); + Font font = LoadFontEx("/home/kc/.local/share/fonts/DepartureMono-Regular.otf", 14, 0, 512); + Image img = { .data = MemAlloc(512 * 512), .width = 512, @@ -80,17 +89,32 @@ int main(void) { struct mg_connection *ws = mg_ws_connect(&manager, "ws://bitmap-ws.alula.me/", obcb_mg_handler, img.data, "%s", "maidcore/4.2.0 (kc.is.being.pet)\r\n"); if (!ws) return 1; - obcb_send_full_state_request(ws, chunk_id); obcb_send_partial_subscription(ws, chunk_id); + obcb_send_full_state_request(ws, chunk_id); for (int frame = 0; !WindowShouldClose(); frame++) { - if ((frame % 512) == 511) { + if (IsKeyPressed(KEY_R)) { printf("Requesting state again\n"); obcb_send_full_state_request(ws, chunk_id); } + BeginDrawing(); UpdateTexture(tex, img.data); DrawTexture(tex, 0, 0, WHITE); + double time_since_msg = GetTime() - last_msg_time; + if (time_since_msg > 10) { + DrawTextShadow(font, TextFormat("%.1f seconds since last message", time_since_msg), 8, 8, 14, RED); + } EndDrawing(); } } + +void DrawTextShadow(Font font, const char *txt, int x, int y, int size, Color color) { + Vector2 pos = { x, y }; + for (int oy = -3; oy <= 3; oy++) { + for (int ox = -3; ox <= 3; ox++) { + DrawTextEx(font, txt, Vector2Add(pos, (Vector2) { ox, oy }), size, 0, BLACK); + } + } + DrawTextEx(font, txt, pos, size, 0, color); +} diff --git a/src/live.c b/src/live.c index 690af86..3cb6cda 100644 --- a/src/live.c +++ b/src/live.c @@ -109,7 +109,7 @@ static void obcb_mg_handler(struct mg_connection *c, int ev, void *ev_data) { } else if (wsm->data.buf[0] == OBCB_MSG_PARTIAL_STATE_UPDATE) { struct obcb_msg_partial_state_update update; memcpy(&update, &wsm->data.buf[1], sizeof(update)); printf("PARTIAL UPDATE AT %d\n", update.offset); - for (int i = 0; i < OBCB_UPDATE_CHUNK_SIZE; i++) { + for (int i = 0; i < OBCB_UPDATE_CHUNK_SIZE * 8; i++) { int index = update.offset * 8 + i; int x = index % 32768, y = index / 32768; int chunk_x = x / 1024, chunk_y = y / 1024;