From db2607cabb62f80aa7e959174cc406a35039623f Mon Sep 17 00:00:00 2001 From: ac-stef Date: Thu, 20 Jul 2017 16:07:42 +0200 Subject: [PATCH] fix embedded scores in screenshots embed game description and player scores in png and jpg comments update enet.lib --- source/enet/enet_dll.cbp | 15 +++++++++++++- source/lib/enet.lib | Bin 45296 -> 44644 bytes source/src/jpegenc.h | 42 +++++++++++++++++++++++++++++--------- source/src/main.cpp | 15 ++++++++------ source/src/scoreboard.cpp | 23 +++++++++++---------- 5 files changed, 67 insertions(+), 28 deletions(-) diff --git a/source/enet/enet_dll.cbp b/source/enet/enet_dll.cbp index 961274c7..7d8f8c9d 100644 --- a/source/enet/enet_dll.cbp +++ b/source/enet/enet_dll.cbp @@ -31,10 +31,23 @@ + + - diff --git a/source/lib/enet.lib b/source/lib/enet.lib index 0af1d82c82cc61be637e2a1146877201e0a9ea10..5bc0497759f544c05f857aa752898c9ce95c58f4 100644 GIT binary patch literal 44644 zcmeIbe|%h3nLmCfnWobadLss?Zma>un%DpdMCj0f(@cH=0a9ApDwVc084{Z&F`1+V ziX^==X%ClivkJ(n>*B6{KCHS6yJEv{^P|nQDAFGSr6^WbCDTxBLEE%I^L@Y1x%bXY zCIvt4em~#+<2$d{-22?;o*&P7&U2pgoag+w=asMNSle_}_QeIMztS?_g0f34x#Y78 z3JOZ(tK@4zLFwf_g(z5^t!Y|7(`HsA{%72%X;c3f1U2o0{+E?$+SI@AJDN82?{C+% z|BnAEucjsczd504|2_XzjjfHLRn4uursz*0wb?cHp|cy`!c7{6IZl5m2j>a`1JFBL) z&XALbqB1E9E4B)h7OkN%ISVVL*4D(BDbt+X~gg7Qy zaeZTJN&w{9)xHX`Zfj$*sK527mE=@a5+4-8E+AsJ2Agl|>Tvi#m;C|l90%T5Nzq{Y_f`CwT#BK>sB>(qfTt9Bp$-t-MrT3VnW+k zaT^-bP^|h@w>8>TD<4s{R)jST4OBI#iqI-%Fa?cx61}Rq{WNbZbZ47vC$}~`HELnl zU{R;nYyVUbc+zPb%)fY9a39V5mdCkFf6T-Z1h0DaVUn?2B z=vMR}AM)!#xQo&Me%P--D_MPUsV^m19-g*ZdD<_KufKPb*FBlx(#%S)r`u=dM)rn^ z&02S4SEyK=&4A)eH?F4N6B!K6_-7B`IMMyl$L8^F*1Hkq;Nz3{jYPXOCK-!o5>(pKHpdgMW6mO)0_Mhv+H+$#M!@^K;Vjk!cfEd3rmX% zK6_E=MJ1Z{3A~(zf0lNE16}MuD;=oYfxhNIWTlQjd828$_-AR%{UZ`0jb};dqF^&R zE%iG!scE;l64JER!t*xQf?ZmH29{3yyUM~slr+}8rd^GHJ^nHl5!y2R`|($pWJzP9 znXU(LrFuB zmXaMvV%FT+hHl;Z5px${S+yNVnNtN;&~!uX z15(qnq3@;5W~qaM57P&im6nt#g^o4JL&qsj~CPjC9)N$`kGE3*c?f|qh0=A z(Fge!ZFb(&2g{a}9up(Ro9^+m`=gK`=9r;Tq*jD~YaWjO}i5!1#r%ocBpxzyVb6q~$PMF#czMk0sx`-VI}(<3_})@I1NI&w@8Kds>Q%#b%^ zjJcpv3J`mB>EY5>ODCV8SjQ^8Io7?9r4u16zy)&;`M--IX@ey;p$^nIK8*@U?hXM}Yv5Zaq93x#=OE)8eV{8lNFIieU(olGZma{K4?HLKm+n1&R3CT^{LeS*ydM3L{qc55 zZdFbYy~H{1Y69qJJ+eYNeYG-P6^b&bN0!Kko3h1A!98yky^RprF3@>XPS8M1O^=j; zNBY3}*+ai~XM!W-iXM6U)a0ZryuNKH2s+PUE$Rb)mFBfj#VAA0lT=ovhs6<#HIf|} zDEeM90+orn1ABI%`iVgWHGvEDv%!_jXD9^okt#~GdT0Wn7lAwCh%xAra)L||7VJmP zZk9SIa!Ew#UVWfFN9;e2wxEcr&t|=z|?GQ_*bU)2X*_3i2SdFi0Bz3%2)R()|K_?N|h zj3S(fKmKf@{gCLP*WIPZT!-{+kiIK2I$QLC3U|<`$UvhU?D{h3&tc6;PNz!Pv#2%* zczZ_aF>)0Gb&NvRo-IWk+-jdKMoV`Uy#&63!$YTRQ3KOD-0}O~NB#93ltNM=b;O!r zW=96<$u%5r1q&!`lsYLm%3d%=XBfjXgQ8330RchFIw#nBQbS5FFuegKQsIBa15+9s zYX%qN-@zmG(Fc@ST

2yA;!=`I0PREs7fOOu^kn%O8#R($k5sH}eQ zvmmld4*YCm=IkfOFy=M4)g`ElCCs_)#1Pk};SWyi%JC zit3yVv)Fd>PHNqsWl(*fUbX!LDtREmP&7NbWsMy z4DTy40B=RC-Sa`0F+5u=g&sl+lnNmzvZOW&w=nU6x25(u1{B04y+XNmy`&o3 z5$Gb<@$s`+|9???t3|3w?ImuarY!Bjbj7G@Dp|U54}?S?s0LZp8JSX*(Yj?(5iqCp zunZ`kLkr7blSs|2MR<$Rs*PPpD*J3pxTQyNpK0d;5Wa6#`yCbw2icKtz& zp{Cp8=dm2p4qyj3_M_tnI~>oIO?w%nqgo1*crjY*D%ugP$PBt#P)d{#9cLUOFN2^3 zZLN0Ahp>yc$(%2q1OeN?8||j$uuxt#-fS@+^Y-A`412fY78EPJx0v^O!+_Df!Ek`} zFznfxIPNJz5vLbOW#|=Q4rF(A~vKmc5j8TQhk2k1vLE%vGSdidiQ zWQZZLU;NA-AL#?vqJ!QQ+5qz^C+OP~M7t^IY-a002aR@Cx)-Uq#aPi1J_UV4Vp#86 zrc4m%g*}kl68(|k@$(hG#F69s^?|{m-+O#7bfOP9*NC}hy*PBxGxP^fG%u_4?Ow1J zebsAMva9N*RX5xGwzmh=Lg-!ld58w>w3KbAWv_@q-xf-; zROQ6CgY8!P6i29lv!yu+))}KN*M7w~WhH`f%Am}iYEZK0ul2xGlmOHk4auSd(sn#I zx^XrH3+!72lWtM=jA%Xj@Wn6;(Q$Ww20X+o%Wk`ZU7HNMI9t3J+;f<=>SAdRF3wRQ zYiFaRQTNBFV<{@Woq9Nr(OQ^}GLOTTfRPMNF&q{{)Wq3WWa!41P<_c3jviqf7Dvbs zS#}h=^srU%CV(tBZ31+9$OHWy$_e`sh#av4a8}WavdGy(@2j$-rGLpCpM+Kn_G9Sc zDSD2A&z6`AbsQ>329%2HUHhp+Agubp0TiPaV3|I!0>d5D0AF}rKMVR+dUHEIhK?Tw z(%!Cm+I}t4_EYUs-&Ttu)E<4{XGN^}vaL(Kb;zhvkKPJJqYo^F2{KIOgjDO@9A!O2 zhU^}HK*h&{BmtN(`$v7-N1}^dL$A;A#l(wx-`~wZBHI?ZqKjdc<<8pSds*)bD_ll& zaVGSD!nG@0rZME6wIiON(D!;@pOj8%-*qh$N1h=M$!l;yvfJi#hT=5Xnne~jWtSe7 zT%Qfoi)?mVZ1&h}21mb?6@L&t1CoNp_;E12A0XPFdn|MmM&D2H4h^7COh7WcCYk{x zzra*Yfn3fF3J+vt0R+hpAu_(ho@~$s8>8F>y^1$dY+#n_eO*#+(6B6}K>7zNUDAxY z1!hzs%_zO^`zW5H;YxQ+Rqw0`7RG8lXia!h))e&)9<2Ujm(zRHqo8Qqpr$x}>I8&3 z?Cn7&PJ=l{@qI41=TOle@tj3mG@PqUz{L=xMHsdz?U1QdY<$1$WKkBfOC>k{j|mt& zE0Yo`Mo>g35NI?SBpjp;a5xUm>DxZ)8rr(ln;l*H5m(TMUZ&%0d#Jx0Nilw|Yh?Tv z`nGFbTkE`)80Y8%7$H7abaY{z*Gt2_4*y#HtFJ;NX!EL(K7@2o4-cS(NCgQ*VOo^C z;@?Eo$jYG56rdiSW4ewsO(Fq{pEm8YW$&bH`-{f><%pLAAcY9BdH{T8DJg$bw#_; z=}u1}=8jMg?eKW94vT7%+z$B$C4ohe!y?5_fzV)LWvkW8t?T7>N!vJ`T~h z1O?TW6W=m{rXV%kHP9CoE;+u7HfM;qc(Lf$Td#4URe|wAadGsH*?RZ}^y<{6!7JZ| zpk0@P_AiI+TNdL*yb2eqzmOV6>MDKP916zuP&e#=^=&J?b*uw%fS7uh&DN#flA$rT zl%;JDFKD?U+(ytkD_s~7NY($ykp9Rk=rBK#++V&-`{TpL4vR%8`a2O~414Kc;F8lQHGi{3~ z%>+7(t{W!MZ>UgESlVuJ@{ytq>%ER5A!QsrQKe!P%v89;_FJssP_OPJ_`)>B~6m!W_4~bo}$#^4L%3qyHfip(j008+V{dK+11F6Vxe4cc4!KLIA`NxX~Y< zr%mI9w|%&45y1H+d*M&#PM`2GjKnhr~VgC+IC4_NyGdh1#=QlALf_uynX$xm>tDTB;4@! zedycT|^3SHt30yxL z>t`fC)8_Nz=sAEoer+MGbSMVllL7tRTA%niK*T~>xZr36D8T1s2k?L*h} z7dpB`#PskEV4L6J6eskDhc9u5DGNPf=?_t+^hjh-)Ohvqy@&ui!ZS4(lExcL%}q>- znR<8`5SS4N(`Sv5klRiX2FKRSN9gG;G!m%7UY(8JV$HFgjJW#HHEBdbCuV%-#4Ng-$H0{01k~i zJ)?oMCyREE2J$9jfdVEnG?CFf_>VWg{!4VCv!li!Pu>Yhx4mJQ=UmmQFg2=H@r?lF;2o+>-qV}Y?f@8(;i86u&SIlG^d4J50@ zRQ@;18;4ZSypr<&Q(pAy37f`NuWQV=qvNCTTrjG42P?_9LpL(;WZvY(z<7LJtQ=Ip z)+m;>2jws#stWb+Zx9rjgvs~2iept?W{p(`rY5T9nAQ2>rhFRj0IG7$>RgUJo<@+N zvD~49Iaex8MH4?3c?=Ob%WonNN^56(>7W`|WKy)3z(NibMgzq`aqT>t$I*Zz>ZOCx zYqMhk*=7;a9Svl~0_QVLFv%-;23vu4u-v+c(_tHuK7?Dl|sQ!Fo6o zs%B##QnDEr%qd!J2$QWGnw9C>s?NqR=rY{%aKGG)Jc@*pLLtxsQx+o`Sx%;vOQs#8;bj~&I^v>uSLzluy z9yj!eBoPT9nep9F_Ymw^PzZ`%ge$QgWcyI<6An$ZQLkxO%}Y1GE}Pfh&jFJo#B`N29FkECl{{(s*=Qq$d;65i*M>LDMJ1@ZgH)aizg!-AS$_n@ zdv@P-x8@%IgSn_uyaez0BRhuP${HG*;T!E7fE)4U(!EIk_;G5I&6J)+?F$#RbY_Z0 zEg+&mWrb* zV#CnXz&x=O%Q5JL|%t(ggW-$gUh01oeVzJE^J#6s$s2*6eU*~JDqmJ zgn?~8pgSFph?hZ}H}0ksB&;T-rz^)FSA*v1#>^Z;U|@-H@3rzuXo-XCaByD%#AQ5r z+CSiWj)Z=S>$wu*SWiLkIMA8krNUhfh%SLV?OZgzk4cC#%?fI9pgSCBs{=jYK;Ltq z{{ZxHnaXbf{f&eU0iwGhPkY;e@}OoE1s6F`tpnZaKwk%>QlXPjrTi8km0r8s=Fo9K zislU1)e5>9&?jWRy@2Qw$kQHhpzk}-fCKGvpw}Gehy%?)zpqj`-+>kb`lL+xPk;&} zv>(I$^Ck30?6^=dW@6l@pi2O$7}q(t_nZ>tBkp-JZo02Sj!oC%Wy+7K@+W;1sLknq zB|!Ed4;e-V2;iCvo+U6`arh9*kie`1rU3LLFn0sfpMrT1m`77EKL%#EgGu*?d;z7t z6k!s-^p%T=cQ*8w`a||u5m0HT^@se*P89XUm5Yt*xwcyUY!8X-)FsNsyq^+_54yu` zJItrkFqfraYSJ(((lF~&FsqtEZLOXDGDU!-nV6Pj4Bu@`iABse(=b0s!$>90z#3Ej z1>S#{=SO)=l6O}~OzN_26)0sPxJ3Qm-e;2L2TF1NSj)qwTil+$EIxU;JD23wG=`Sq z<}b09pQdeQN!##YWtYmSB*#?JCXWx=p^>}?L+y1*P0`stK#KlPyjcrMEoT>3+7IOhqBgthUR zu0dc!7$4sLXV>6o2RJ9(&kj#XZHi6O8+&D3g+CjJSH=g+Oav_uL$t zp-E#$({5R1PnP`@324%-oeMuRy|WlQcrj2al%ryd89R=Tl1*Zyt1vRzRTlG;A}uD1 zDLUPBapuGVtO^X#b1_aC>4zRD5CPBl0oxB}c@p8v3V1@Ff{Nha?`hsK6r+8j9D3nH(E%FF<`08c``cXIc!fZN@rn*nagaXgrqZ7eXh z&$(F|FN)uM9HEM_<_1-HnIa16^>yZSW-+Nyj_Azcq@FB=NOdsAp@Dq+~!=YDm&2miD17m zj71ukR7?)VF)=)NX-;`rM2?wIu z{wV%=Xqz@fYmZ`+r!4@aMqtej#MQMb#*0q4gU;LIfK(o(XxR#?1EfZ8Uv_ZcaG-7{ zZhB8(X&)-+q+jyL;B>Q~)cO2Trd9L3f{&=a1f~v%hwyi4ww=2gPkzvoz;ppaOCfikK{sa1GrtO7ESbLNi(6BPd^iS`Q<)ef&8&Y!$6WhxE7RzrT1vLXgX|5m25cpeGdQsN{_ah ziA?$R{2%maiY18zq=x~tJ*m26Ifu_4ZMt2R_6{#QHp4C97OFy1^Nn6V|!tWCie}8Zd|@hye#v{9sh(G zs7&b#^1b36*^&89g)T5JMXw>B%q6wxfc6@nadkZ}tf`)Hnz~A@!u+&)t|jQBJmzK& z@XdQ3!qvC4``U$Y<#&JFyk=A8H7$>$@-*`c?Y>vUH7(tl;tMUHFQ>M2kgHd_-!Us% z%zJuNybFqUii#Gg{Sij>{ANWvaB%ut{c)_K1%WjyP!KjXXT0dBH=}h>N)M&ub_TqX(Z1aTH3{w~_-AxJ(Y}KO53wKWV;Q0k z@H*y0F!Po|^zE3hDF)rXb%W({TIy!(LJ1T{mlThk%`kzo=#nx_AdSt$)4J;7a&uXs zoXI<2b0StU%ls_i;{+l}>VHT}4i;BA0<; z6<&3dEjLyn{SL8;1qxZNZhm#ERJU4nV@HAL_3E}%-BzgEN_AVUZVl?zq;4$*xW_8m z)h(ou8`W(SIt4AZxd>g#m3v#~Rzb70{m`gt5){0xG~iwz(fy_4YnMCFqu7QiN5w zZv#ijtnkD(KZFPVVw=CG06-4|QbB)Y;Y>dkl|T6>JVl>;57(f$=V?CNGl6St^W(Vk zXT0%VZ1ZD;dWg1NF-0fD=0|~qX%+7Yip|F)JQUA}ZDxG_Vw*#th`)D!NDFIK{8q>b z>L26LCrJw=vrV5WQAV22iE7; z$(bj~5Tqsya)-mwgk@;YpmBuHDlUz4?&Ai~ySWdJl z7wc7r4q<=7wLtETUX!I)?7%Jq-;jQ9FA|4IU5?ur{wRUi5xT>uuJq^wlf9#ZK#7eW zm}FJ3EZv;6g)v!`X9jXOpBu;(RrzKhPgE6{fjOeeYX&f}TWAIfL{+gF@QSJuGf*h1 zU=J6Iss)%Na@&$FFkhf1=xAAbe7p6(4MF13>fh*}Qa)^AEihXP^=)^aXSZl94b6A$ zc2!sQ+wCjN^mq<~&4V0aMr zeVM+MRo6Rukg1`bk|!a}Yf=57tFcNPRRT#}f`!8YPrL;zkgM3U#~((+xAYk@q99|L z{Gcl+B+SsLLY5(ZIU-?EC02;zZGFc0zv%;>(n&nYb@G@e$GYn!2#qDKcV@?DA$0HP z{%L4(^ryvt$i-3wgNT(;#4sD?w`2qpMC1!P= z2$Y%Cb3|YP=luiaW;KRe(4Jlqzzlbx2%rsvFYPxO38J%(xG#MU}*sn}!uHq$tfp@(mW1~y)I=@DA`LF3L0w2}xw z@S|iV1Sg3HT+MJutn#8=|QIL_#8RkNL3x`dpYUAK6W5RwJCi-KHuHn77^4HW~-JQH*!p+rp~Fo|VBHITy`)?rd**OZ_pUE@-S`KqQYitSez z+`D1VNi5?a6-xCcu>awKG>g>f3*IDaWbR(ZqRWjLoZIs z(mh?4=oQsec6W0Rc2@X5kOYh0Es_K~-g!yXFw57Fr7E&*|HcAddhW*KR{b%fp7Hw~ z{SKbU?eoq8g6=c1-a|T!;sp@wXg|9LpS*_7iut`9B8siFl$06Le^9>Xwd-KCf2Vxn zwQKMAPl8teU5sohp^W|JiZX~zo-xQ@mF-{nqk%*jcHEUt;hVut#m^k2%4i!`yDE8@~n8h+&`1Vc09ijx68%dh{;P zX`bO5L8^09G;@htwjqwxV7J*)U_NjJ(J{ul1qRLtw|?o7E|ecbr(8W;$z*7Rd z*ZCudyL>QeU|Rou-Iil||fz zVM``C9nV8}ly6SxI-DDXRe9i1Tm$ZdXp}^192`Mr4ZBQ*3KZBE!hmoi83=x<^ z<{*LGDGd70BeE2^@lk|Jlvnki#gKqXMD&|&#nBDLsK7bCKkMQDO{P`(ISBkVKz*QQ zUUUVvM19eN-NQhLvGI?ZEBujHyEbBXpC@_^-u&T}N8kCdfo}P{ zuJ2iIMwo%cK19F*$Z6zY{Cnx;XW6k&2YNFr)WM@%z!5*p+sv9m9E$-G^lh2OLA@L; zW*1tNK5*kaeV{W#yeN*cfegj5wFcY5^?^g;1>akph0)v5P}tPaREDyACpLY;7|SZp z+Hekfkx6d^%!3I4c@1L6Sbpa(Ver*O4u{S|BY>*_=IU(ZUu&L=(@?@b+80X9;YkNt zj;^qz=nyEbH7|`E>pBSKL?TsN0pNs3SC!l^(}Vz9$WwiwX`b&bfnDnhkO9)2W7aG% zVr9OG&^7wDGay)%VxRF_ecT)L?c0#&duhXk9kXFXXJbcPzHXE-lHcu{(8FVBTs

KRLfCMwH)HEnnmBi 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 b>$}#iNyDmgR#{j9FZH#TcQ0-YBmVyfN{ng( diff --git a/source/src/jpegenc.h b/source/src/jpegenc.h index 7ed4de9a..a3a46750 100644 --- a/source/src/jpegenc.h +++ b/source/src/jpegenc.h @@ -51,6 +51,22 @@ struct APP0infotype }; }; +struct APP1infotype +{ + WORD marker; + WORD length; + const char *sig1, *sig2; + APP1infotype() + { + marker = 0xFFE1; + length = 46; + sig1 = "Exif\0\0MM"; + sig2 = "\0\x2a\0\0\0\10\0\1\1\x31\0\2\0\0\0\14" + "\0\0\0\x1a\0\0\0\0\101\x73\x73\141\165" + "\154\164\103\165\142\145"; + }; +}; + struct SOF0infotype { WORD marker; @@ -189,6 +205,7 @@ class jpegenc static WORD mask[]; APP0infotype APP0info; + APP1infotype APP1info; SOF0infotype SOF0info; DQTinfotype DQTinfo; SOSinfotype SOSinfo; @@ -198,6 +215,7 @@ class jpegenc SBYTE bytepos; void write_APP0info(void); + void write_APP1info(void); void write_SOF0info(void); void write_DQTinfo(void); void set_quant_table(BYTE *basic_table, BYTE scale_factor, BYTE *newtable); @@ -205,7 +223,7 @@ class jpegenc void write_DHTinfo(void); void set_DHTinfo(void); void write_SOSinfo(void); - void write_comment(BYTE *comment); + void write_comment(const char *comment); void writebits(bitstring bs); void compute_Huffman_table(BYTE *nrcodes, BYTE *std_table, bitstring *HT); void init_Huffman_tables(void); @@ -255,7 +273,7 @@ class jpegenc stream *fp_jpeg_stream; - int encode(const char *filename, SDL_Surface *image, int jpegquality); + int encode(const char *filename, SDL_Surface *image, int jpegquality, const char *comment); }; BYTE jpegenc::zigzag[64] = { @@ -347,11 +365,6 @@ BYTE jpegenc::std_ac_chrominance_values[162] = { WORD jpegenc::mask[16] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768}; - -//****************************************************************************** -//****************************************************************************** -// Toca: TODO: the following goes into jpegenc.cpp or some other .cpp file - void jpegenc::write_APP0info() //Nothing to overwrite for APP0info { writeword(APP0info.marker); @@ -370,6 +383,14 @@ void jpegenc::write_APP0info() //Nothing to overwrite for APP0info writebyte(APP0info.thumbnheight); } +void jpegenc::write_APP1info() +{ + writeword(APP1info.marker); + writeword(APP1info.length); + loopi(8) writebyte(APP1info.sig1[i]); + loopi(APP1info.length - 10) writebyte(APP1info.sig2[i]); +} + void jpegenc::write_SOF0info() { writeword(SOF0info.marker); @@ -500,7 +521,7 @@ void jpegenc::write_SOSinfo() //Nothing to overwrite for SOSinfo writebyte(SOSinfo.Bf); } -void jpegenc::write_comment(BYTE *comment) +void jpegenc::write_comment(const char *comment) { WORD i, length; writeword(0xFFFE); @@ -811,7 +832,7 @@ void jpegenc::main_encoder() } } -int jpegenc::encode(const char *filename, SDL_Surface *image, int jpegquality) +int jpegenc::encode(const char *filename, SDL_Surface *image, int jpegquality, const char *comment) { RGB_buffer = (BYTE *)image->pixels; width = image->w; @@ -842,7 +863,8 @@ int jpegenc::encode(const char *filename, SDL_Surface *image, int jpegquality) writeword(0xFFD8); write_APP0info(); - // write_comment("Cris made this JPEG with his own encoder"); + write_APP1info(); + if(comment) write_comment(comment); write_DQTinfo(); write_SOF0info(); write_DHTinfo(); diff --git a/source/src/main.cpp b/source/src/main.cpp index 6331e59d..f238473c 100644 --- a/source/src/main.cpp +++ b/source/src/main.cpp @@ -175,16 +175,16 @@ void setprocesspriority(bool high) VARP(pngcompress, 0, 9, 9); -void writepngchunk(stream *f, const char *type, uchar *data = NULL, uint len = 0) +void writepngchunk(stream *f, const char *type, const void *data = NULL, uint len = 0) { f->putbig(len); f->write(type, 4); - f->write(data, len); + if(data) f->write(data, len); uint crc = crc32(0, Z_NULL, 0); - crc = crc32(crc, (const Bytef *)type, 4); - if(data) crc = crc32(crc, data, len); - f->putbig(crc); + crc = ~crc32(crc, (const Bytef *)type, 4); + if(data) loopi(len) enet_crc32_inc(&crc, ((const uchar *)data)[i]); + f->putbig(~crc); } int save_png(const char *filename, SDL_Surface *image) @@ -194,6 +194,7 @@ int save_png(const char *filename, SDL_Surface *image) stream *f = openfile(filename, "wb"); if(!f) { conoutf("could not write to %s", filename); return -1; } + const char *scores = asciiscores(true); uchar signature[] = { 137, 80, 78, 71, 13, 10, 26, 10 }; f->write(signature, sizeof(signature)); @@ -261,6 +262,8 @@ int save_png(const char *filename, SDL_Surface *image) f->seek(0, SEEK_END); f->putbig(crc); + writepngchunk(f, "tEXt", "\123o\165rc\145\0\101ss\141" "\165\154\164\103\165\142\145", 18); + writepngchunk(f, "tEXt", scores - 8, strlen(scores) + 8); writepngchunk(f, "IEND"); delete f; @@ -367,7 +370,7 @@ void mapscreenshot(const char *imagepath, bool mapshot, int fileformat, float sc case 1: // jpeg { jpegenc jpegencoder; - jpegencoder.encode(imagepath, image, quality); + jpegencoder.encode(imagepath, image, quality, asciiscores(true)); break; } case 2: // png diff --git a/source/src/scoreboard.cpp b/source/src/scoreboard.cpp index bf5f0fa8..b6aa43c7 100644 --- a/source/src/scoreboard.cpp +++ b/source/src/scoreboard.cpp @@ -439,7 +439,7 @@ void renderscores(void *menu, bool init) #define MAXJPGCOM 65533 // maximum JPEG comment length -void addstr(char *dest, const char *src) { if(strlen(dest) + strlen(src) < MAXJPGCOM) strcat(dest, src); } +static void addstr(char *&dest, const char *end, const char *src) { size_t l = strlen(src); if(dest + l < end) copystring(dest, src, l + 1), dest += l; } const char *asciiscores(bool destjpg) { @@ -455,16 +455,17 @@ const char *asciiscores(bool destjpg) loopv(players) if(players[i]) scores.add(players[i]); scores.sort(scorecmp); - buf[0] = '\0'; + copystring(buf, "Comment", MAXJPGCOM); // include PNG keyword and skip it (which looks like a hack because it is one) + char *t = buf + 8, *e = buf + MAXJPGCOM; if(destjpg) { formatstring(text)("AssaultCube Screenshot (%s)\n", asctimestr()); - addstr(buf, text); + addstr(t, e, text); } if(getclientmap()[0]) { formatstring(text)("\n\"%s\" on map %s", modestr(gamemode, 0), getclientmap()); - addstr(buf, text); + addstr(t, e, text); } if(multiplayer(NULL)) { @@ -474,15 +475,15 @@ const char *asciiscores(bool destjpg) string sdesc; filtertext(sdesc, s->sdesc, FTXT__SERVDESC | FTXT_NOCOLOR); formatstring(text)(", %s:%d %s", s->name, s->port, sdesc); - addstr(buf, text); + addstr(t, e, text); } } if(destjpg) - addstr(buf, "\n"); + addstr(t, e, "\n"); else { formatstring(text)("\n%sfrags deaths cn%s name\n", m_flags ? "flags " : "", m_teammode ? " team" : ""); - addstr(buf, text); + addstr(t, e, text); } loopv(scores) { @@ -495,7 +496,7 @@ const char *asciiscores(bool destjpg) else formatstring(text)("%s %4d %4d %2d%s %s%s\n", m_flags ? flags : "", d->frags, d->deaths, d->clientnum, m_teammode ? team : "", d->name, d->clientrole==CR_ADMIN ? " (admin)" : d==player1 ? " (you)" : ""); - addstr(buf, text); + addstr(t, e, text); } discscores.sort(discscorecmp); loopv(discscores) @@ -508,15 +509,15 @@ const char *asciiscores(bool destjpg) formatstring(text)("%s(disconnected)%s (%s%d/%d)\n", d.name, m_teammode ? team : "", m_flags ? flags : "", d.frags, d.deaths); else formatstring(text)("%s %4d %4d --%s %s(disconnected)\n", m_flags ? flags : "", d.frags, d.deaths, m_teammode ? team : "", d.name); - addstr(buf, text); + addstr(t, e, text); } if(destjpg) { extern int minutesremaining; formatstring(text)("(%sfrags/deaths), %d minute%s remaining\n", m_flags ? "flags/" : "", minutesremaining, minutesremaining == 1 ? "" : "s"); - addstr(buf, text); + addstr(t, e, text); } - return buf; + return buf + 8; } void consolescores()