ofs | hex dump | ascii |
---|
0000 | 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 04 00 00 00 04 00 08 06 00 00 00 7f 1d 2b | .PNG........IHDR...............+ |
0020 | 83 00 00 00 09 70 48 59 73 00 00 0b 13 00 00 0b 13 01 00 9a 9c 18 00 00 00 61 74 45 58 74 46 69 | .....pHYs................atEXtFi |
0040 | 6c 65 00 2f 68 6f 6d 65 2f 6d 6f 72 69 74 7a 2f 5f 2e 6d 69 6e 65 74 65 73 74 2f 6d 6f 64 73 2f | le./home/moritz/_.minetest/mods/ |
0060 | 6d 6f 6e 6f 73 5f 6d 6f 64 73 5f 6d 70 2f 61 64 76 74 72 61 69 6e 73 2f 6d 6f 64 65 6c 73 2f 62 | monos_mods_mp/advtrains/models/b |
0080 | 6c 65 6e 64 65 72 2f 6d 62 62 2f 73 69 67 6e 61 6c 28 32 29 5f 68 6f 63 68 2e 62 6c 65 6e 64 e3 | lender/mbb/signal(2)_hoch.blend. |
00a0 | 0a 6c c8 00 00 00 18 74 45 58 74 44 61 74 65 00 32 30 31 36 2f 30 39 2f 31 32 20 32 32 3a 31 30 | .l.....tEXtDate.2016/09/12.22:10 |
00c0 | 3a 30 36 ce 41 0b b8 00 00 00 10 74 45 58 74 54 69 6d 65 00 30 30 3a 30 30 3a 30 30 3a 30 31 ec | :06.A......tEXtTime.00:00:00:01. |
00e0 | c3 26 c2 00 00 00 07 74 45 58 74 46 72 61 6d 65 00 31 af 92 b4 26 00 00 00 12 74 45 58 74 43 61 | .&.....tEXtFrame.1...&....tEXtCa |
0100 | 6d 65 72 61 00 75 76 5f 74 65 6d 70 5f 63 61 6d 71 4e bb ca 00 00 00 0d 74 45 58 74 53 63 65 6e | mera.uv_temp_camqN......tEXtScen |
0120 | 65 00 75 76 5f 74 65 6d 70 d8 0d 1b 8f 00 00 00 13 74 45 58 74 52 65 6e 64 65 72 54 69 6d 65 00 | e.uv_temp........tEXtRenderTime. |
0140 | 30 30 3a 30 30 2e 32 38 9c da b4 f1 00 00 20 00 49 44 41 54 78 01 ec dd 09 bc 5d 65 7d 37 fa 9c | 00:00.28........IDATx.....]e}7.. |
0160 | bd cf 90 93 79 62 32 01 32 31 28 33 c8 10 10 01 21 80 5e 41 c5 01 41 40 db aa 2d f7 85 d2 d6 d2 | ....yb2.21(3....!.^A..A@..-..... |
0180 | 4f 15 bd da f7 b5 9f b7 45 a8 e2 8b c5 a2 f4 aa 08 b5 16 5b e4 2a 83 20 83 8c 09 63 18 02 21 80 | O.......E..........[.*.....c..!. |
01a0 | 24 24 82 21 13 90 9c e4 8c fb 3e 8b 12 84 e4 24 39 cf c9 3e 6b af 67 ef ef f9 7c 76 cf 39 7b 3f | $$.!......>....$9..>k.g...|v.9{? |
01c0 | 6b 3d ff f5 fd 1f 53 d6 6f 4d c3 86 f9 22 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 | k=....S.oM..."@........@........ |
01e0 | 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 | @........@........@........@.... |
0200 | 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 | ....@........@........@........@ |
0220 | 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 | ........@........@........@..... |
0240 | 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 | ...@........@........@........@. |
0260 | 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 | .......@........@........@...... |
0280 | 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 | ..@........@........@........@.. |
02a0 | 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 | ......@........@........@....... |
02c0 | 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 | .@........@........@........@... |
02e0 | 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 | .....@........@........@........ |
0300 | 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 | @........@........@........@.... |
0320 | 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 | ....@........@........@........@ |
0340 | 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 | ........@........@........@..... |
0360 | 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 | ...@........@........@........@. |
0380 | 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 | .......@........@........@...... |
03a0 | 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 00 | ..@........@........@........@.. |
03c0 | 01 02 04 08 10 20 40 80 00 01 02 04 08 10 20 40 80 40 01 04 9a 0a 50 83 12 1a 57 a0 2d 6c 7a 77 | ......@........@.@....P...W.-lzw |
03e0 | 0a 9b 3f 79 f2 e4 a6 ce ce ce de e5 cb 97 a7 50 ae 1a 09 10 20 40 80 00 01 02 04 08 10 20 b0 89 | ..?y...........P.....@.......... |
0400 | 40 f3 26 ef 78 83 40 3e 02 d9 ce ff ff 3b 71 e2 c4 e9 6b d6 ac 29 55 2a 95 c2 86 51 2d 2d 2d 7d | @.&.x.@>.....;q...k..)U*...Q---} |
0420 | e5 72 b9 e7 fd ef 7f ff 3f fd f8 c7 3f fe 59 a8 35 1f 21 b3 10 20 40 80 00 01 02 04 08 10 20 40 | .r......?...?.Y.5.!...@........@ |
0440 | a0 8a 02 02 80 2a 62 5a 55 94 40 cf a4 49 93 66 7e e1 0b 5f b8 75 c6 8c 19 bf ed eb eb 2b 72 00 | .....*bZU.@..I.f~.._.u.......+r. |
0460 | d0 73 e3 8d 37 7e e8 7b df fb de e1 61 0b 7f 16 b5 95 06 13 20 40 80 00 01 02 04 08 10 20 40 a0 | .s..7~.{....a........@........@. |
0480 | 20 02 02 80 82 34 a2 11 cb e8 e8 e8 28 ed b6 db 6e cf 1e 73 cc 31 0b 7a 7b 7b 0b 1b 00 b4 b7 b7 | .....4......(...n..s.1.z{{...... |
04a0 | f7 dc 73 cf 3d ef 09 3d 2a 35 62 9f 6c 33 01 02 04 08 10 20 40 80 00 01 02 f5 21 20 00 a8 8f 3e | ..s.=..=*5b.l3......@.....!....> |
04c0 | 26 b9 15 e1 a8 ff b0 ec c8 7f b6 f3 5f e4 00 a0 c8 67 27 24 d9 78 45 13 20 40 80 00 01 02 04 08 | &..........._....g'$.xE..@...... |
04e0 | 10 20 50 13 01 47 34 6b c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f | ..P..G4k.nR.....@............._o |
0500 | b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 | ...@........@.......j.nR.....@.. |
0520 | 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 | ..........._o...@........@...... |
0540 | 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 | .j.nR.....@............._o...@.. |
0560 | 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 | ......@.......j.nR.....@........ |
0580 | 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 | ....._o...@........@.......j.nR. |
05a0 | 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 | ....@............._o...@........ |
05c0 | 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f | @.......j.nR.....@............._ |
05e0 | 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 | o...@........@.......j.nR.....@. |
0600 | 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 | ............_o...@........@..... |
0620 | 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 | ..j.nR.....@............._o...@. |
0640 | 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 | .......@.......j.nR.....@....... |
0660 | 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 | ......_o...@........@.......j.nR |
0680 | 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 | .....@............._o...@....... |
06a0 | 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 | .@.......j.nR.....@............. |
06c0 | 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 | _o...@........@.......j.nR.....@ |
06e0 | 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a | ............._o...@........@.... |
0700 | 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 | ...j.nR.....@............._o...@ |
0720 | 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 | ........@.......j.nR.....@...... |
0740 | 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e | ......._o...@........@.......j.n |
0760 | 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 | R.....@............._o...@...... |
0780 | 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 | ..@.......j.nR.....@............ |
07a0 | 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 | ._o...@........@.......j.nR..... |
07c0 | 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 | @............._o...@........@... |
07e0 | 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 08 10 20 90 af 80 00 20 5f 6f b3 11 20 | ....j.nR.....@............._o... |
0800 | 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 08 00 6a c2 6e 52 02 04 08 10 20 40 80 00 01 02 04 | @........@.......j.nR.....@..... |
0820 | 08 10 20 90 af 80 00 20 5f 6f b3 11 20 40 80 00 01 02 04 08 10 20 40 80 00 81 9a 08 34 d7 64 56 | ........_o...@........@.....4.dV |
0840 | 93 12 18 36 ac b7 a5 a5 a5 a7 b5 b5 b5 67 c4 88 11 3d bd bd bd 4d 45 45 c9 ea 2b 95 4a bd 45 ad | ...6.........g...=...MEE..+.J.E. |
0860 | 4f 5d 04 08 10 20 40 80 00 01 02 04 08 10 18 88 40 ad 02 80 4f 86 e2 a6 85 57 b6 d3 57 d8 1d bf | O]....@.........@...O....W..W... |
0880 | 50 5b 25 bc fa c2 2b fb ca ce 96 28 72 ad 59 8d 1b 76 52 b3 3a 8b 7e 76 47 e9 b5 d7 5e db ed 86 | P[%...+....(r.Y..vR.:.~vG...^... |
08a0 | 1b 6e 38 f1 ce 3b ef 3c bc 52 a9 14 d6 b6 5c 2e f7 3c f9 e4 93 07 06 d3 5f 67 c8 be 08 10 20 40 | .n8..;.<.R....\..<......_g.....@ |
08c0 | 80 00 01 02 04 08 10 20 90 a2 40 2d 02 80 d6 00 f5 e5 8f 7e f4 a3 6b 26 4e 9c f8 bb f0 73 61 77 | ..........@-.......~..k&N....saw |
08e0 | 54 b3 a3 be f3 e7 cf 3f 20 6b ec bb de f5 ae 87 fa fa fa 6a e1 95 4d 3f 90 af ca ab af be 3a fe | T......?.k.........j..M?......:. |
0900 | 81 07 1e 38 e4 98 63 8e b9 b9 a9 a9 29 0b 2f 0a fb 15 ea eb b9 e3 8e 3b ca cb 96 2d db 31 1c fd | ...8..c.....)./........;...-.1.. |
0920 | 2f 17 3d 00 08 61 c5 d8 80 59 d8 bf d5 c2 36 5a 61 04 08 10 20 40 80 00 01 02 04 08 14 46 a0 16 | /.=..a...Y....6Za....@.......F.. |
0940 | 3b b4 bd e3 c7 8f 5f fb a9 4f 7d ea 7b b3 67 cf 7e aa c8 a7 7e b7 b7 b7 f7 7e f1 8b 5f fc 93 8e | ;....._..O}.{.g.~...~....~.._... |
0960 | 8e 8e 91 df fa d6 b7 be bd 7e fd fa 72 61 3a b7 51 21 e1 28 75 65 ee dc b9 3b 2f 5d ba 74 a7 0b | .........~..ra:.Q!.(ue...;/].t.. |
0980 | 2e b8 e0 db e3 c6 8d eb dc 68 48 a1 7e ed ec ec 2c 9f 76 da 69 7b 9e 79 e6 99 3f 4c e1 ef 20 98 | .........hH.~...,.v.i{.y..?L.... |
09a0 | 7e 3e 04 16 85 32 54 0c 01 02 04 08 10 20 40 80 00 01 02 04 62 04 6a 11 00 0c 5b b7 6e 5d b9 a7 | ~>...2T.......@.....b.j...[.n].. |
09c0 | a7 a7 1c be 37 17 39 00 08 47 a9 87 85 a3 fe a5 50 63 4b b6 f3 9f d5 1b 83 9b e7 d8 2c 00 e8 ee | ....7.9..G......PcK.........,... |
09e0 | ee 2e 87 57 4b 78 95 8a 5c 6b e6 92 f5 3d ab 35 95 bf 83 37 ce 50 28 ec 65 0a 79 fe ad 99 8b 00 | ...WKx..\k...=.5...7.P(.e.y..... |
0a00 | 01 02 04 08 10 20 40 80 00 81 34 05 9c d2 9c 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 | ......@...4....f.TM........@.... |
0a20 | 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 | .....Q\...@........@...4...i.M.. |
0a40 | 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 | ...@........@.J@...e0......@.... |
0a60 | 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c | ...HS@..f.TM........@.........Q\ |
0a80 | 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 | ...@........@...4...i.M.....@... |
0aa0 | 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 | .....@.J@...e0......@.......HS@. |
0ac0 | 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 | .f.TM........@.........Q\...@... |
0ae0 | 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 | .....@...4...i.M.....@........@. |
0b00 | 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 | J@...e0......@.......HS@..f.TM.. |
0b20 | 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 | ......@.........Q\...@........@. |
0b40 | 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 | ..4...i.M.....@........@.J@...e0 |
0b60 | 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 | ......@.......HS@..f.TM........@ |
0b80 | 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 | .........Q\...@........@...4...i |
0ba0 | f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 | .M.....@........@.J@...e0......@ |
0bc0 | 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 | .......HS@..f.TM........@....... |
0be0 | 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 | ..Q\...@........@...4...i.M..... |
0c00 | 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 | @........@.J@...e0......@....... |
0c20 | 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 | HS@..f.TM........@.........Q\... |
0c40 | 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 | @........@...4...i.M.....@...... |
0c60 | 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df | ..@.J@...e0......@.......HS@..f. |
0c80 | 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 | TM........@.........Q\...@...... |
0ca0 | 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 | ..@...4...i.M.....@........@.J@. |
0cc0 | 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 | ..e0......@.......HS@..f.TM..... |
0ce0 | 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 | ...@.........Q\...@........@...4 |
0d00 | 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 | ...i.M.....@........@.J@...e0... |
0d20 | 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 | ...@.......HS@..f.TM........@... |
0d40 | 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 | ......Q\...@........@...4...i.M. |
0d60 | 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 | ....@........@.J@...e0......@... |
0d80 | 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 | ....HS@..f.TM........@.........Q |
0da0 | 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 | \...@........@...4...i.M.....@.. |
0dc0 | 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 | ......@.J@...e0......@.......HS@ |
0de0 | 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 | ..f.TM........@.........Q\...@.. |
0e00 | 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 | ......@...4...i.M.....@........@ |
}
/******************************************************************************/
void TextDestGuiEngine::gotText(const StringMap &fields)
{
m_engine->getScriptIface()->handleMainMenuButtons(fields);
}
/******************************************************************************/
void TextDestGuiEngine::gotText(std::wstring text)
{
m_engine->getScriptIface()->handleMainMenuEvent(wide_to_utf8(text));
}
/******************************************************************************/
/** MenuTextureSource */
/******************************************************************************/
MenuTextureSource::MenuTextureSource(video::IVideoDriver *driver)
{
m_driver = driver;
}
/******************************************************************************/
MenuTextureSource::~MenuTextureSource()
{
for (std::set<std::string>::iterator it = m_to_delete.begin();
it != m_to_delete.end(); ++it) {
const char *tname = (*it).c_str();
video::ITexture *texture = m_driver->getTexture(tname);
m_driver->removeTexture(texture);
}
}
/******************************************************************************/
video::ITexture* MenuTextureSource::getTexture(const std::string &name, u32 *id)
{
if(id)
*id = 0;
if(name.empty())
return NULL;
m_to_delete.insert(name);
#ifdef __ANDROID__
video::IImage *image = m_driver->createImageFromFile(name.c_str());
if (image) {
image = Align2Npot2(image, m_driver);
video::ITexture* retval = m_driver->addTexture(name.c_str(), image);
image->drop();
return retval;
}
#endif
return m_driver->getTexture(name.c_str());
}
/******************************************************************************/
/** MenuMusicFetcher */
/******************************************************************************/
void MenuMusicFetcher::fetchSounds(const std::string &name,
std::set<std::string> &dst_paths,
std::set<std::string> &dst_datas)
{
if(m_fetched.count(name))
return;
m_fetched.insert(name);
std::string base;
base = porting::path_share + DIR_DELIM + "sounds";
dst_paths.insert(base + DIR_DELIM + name + ".ogg");
int i;
for(i=0; i<10; i++)
dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg");
base = porting::path_user + DIR_DELIM + "sounds";
dst_paths.insert(base + DIR_DELIM + name + ".ogg");
for(i=0; i<10; i++)
dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg");
}
/******************************************************************************/
/** GUIEngine */
/******************************************************************************/
GUIEngine::GUIEngine( irr::IrrlichtDevice* dev,
JoystickController *joystick,
gui::IGUIElement* parent,
IMenuManager *menumgr,
scene::ISceneManager* smgr,
MainMenuData* data,
bool& kill) :
m_device(dev),
m_parent(parent),
m_menumanager(menumgr),
m_smgr(smgr),
m_data(data),
m_texture_source(NULL),
m_sound_manager(NULL),
m_formspecgui(0),
m_buttonhandler(0),
m_menu(0),
m_kill(kill),
m_startgame(false),
m_script(0),
m_scriptdir(""),
m_irr_toplefttext(0),
m_clouds_enabled(true),
..4...i.M.....@........@.J@...e0 | |
1680 | 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 | ......@.......HS@..f.TM........@ |
16a0 | 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 | .........Q\...@........@...4...i |
16c0 | f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 | .M.....@........@.J@...e0......@ |
16e0 | 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 | .......HS@..f.TM........@....... |
1700 | 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 | ..Q\...@........@...4...i.M..... |
1720 | 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 | @........@.J@...e0......@....... |
1740 | 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 | HS@..f.TM........@.........Q\... |
1760 | 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 | @........@...4...i.M.....@...... |
1780 | 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df | ..@.J@...e0......@.......HS@..f. |
17a0 | 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 | TM........@.........Q\...@...... |
17c0 | 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 | ..@...4...i.M.....@........@.J@. |
17e0 | 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 | ..e0......@.......HS@..f.TM..... |
1800 | 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 | ...@.........Q\...@........@...4 |
1820 | 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 | ...i.M.....@........@.J@...e0... |
1840 | 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 | ...@.......HS@..f.TM........@... |
1860 | 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 | ......Q\...@........@...4...i.M. |
1880 | 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 | ....@........@.J@...e0......@... |
18a0 | 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 | ....HS@..f.TM........@.........Q |
18c0 | 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 | \...@........@...4...i.M.....@.. |
18e0 | 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 | ......@.J@...e0......@.......HS@ |
1900 | 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 | ..f.TM........@.........Q\...@.. |
1920 | 01 02 04 08 10 20 40 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 | ......@...4...i.M.....@........@ |
1940 | 20 4a 40 00 10 c5 65 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 | .J@...e0......@.......HS@..f.TM. |
1960 | 00 01 02 04 08 10 20 40 80 00 01 02 04 a2 04 04 00 51 5c 06 13 20 40 80 00 01 02 04 08 10 20 40 | .......@.........Q\...@........@ |
1980 | 80 00 81 34 05 04 00 69 f6 4d d5 04 08 10 20 40 80 00 01 02 04 08 10 20 40 20 4a 40 00 10 c5 65 | ...4...i.M.....@........@.J@...e |
19a0 | 30 01 02 04 08 10 20 40 80 00 01 02 04 08 10 48 53 40 00 90 66 df 54 4d 80 00 01 02 04 08 10 20 | 0......@......
m_script->setMainMenuData(&m_data->script_data);
m_data->script_data.errormessage = "";
if (!loadMainMenuScript()) {
errorstream << "No future without main menu!" << std::endl;
abort();
}
run();
} catch (LuaError &e) {
errorstream << "Main menu error: " << e.what() << std::endl;
m_data->script_data.errormessage = e.what();
}
m_menu->quitMenu();
m_menu->drop();
m_menu = NULL;
}
/******************************************************************************/
bool GUIEngine::loadMainMenuScript()
{
// Set main menu path (for core.get_mainmenu_path())
m_scriptdir = g_settings->get("main_menu_path");
if (m_scriptdir.empty()) {
m_scriptdir = porting::path_share + DIR_DELIM + "builtin" + DIR_DELIM + "mainmenu";
}
// Load builtin (which will load the main menu script)
std::string script = porting::path_share + DIR_DELIM "builtin" + DIR_DELIM "init.lua";
try {
m_script->loadScript(script);
// Menu script loaded
return true;
} catch (const ModError &e) {
errorstream << "GUIEngine: execution of menu script failed: "
<< e.what() << std::endl;
}
return false;
}
/******************************************************************************/
void GUIEngine::run()
{
// Always create clouds because they may or may not be
// needed based on the game selected
video::IVideoDriver* driver = m_device->getVideoDriver();
cloudInit();
unsigned int text_height = g_fontengine->getTextHeight();
while(m_device->run() && (!m_startgame) && (!m_kill))
{
//check if we need to update the "upper left corner"-text
if (text_height != g_fontengine->getTextHeight()) {
updateTopLeftTextSize();
text_height = g_fontengine->getTextHeight();
}
driver->beginScene(true, true, video::SColor(255,140,186,250));
if (m_clouds_enabled)
{
cloudPreProcess();
drawOverlay(driver);
}
else
drawBackground(driver);
drawHeader(driver);
drawFooter(driver);
m_device->getGUIEnvironment()->drawAll();
driver->endScene();
if (m_clouds_enabled)
cloudPostProcess();
else
sleep_ms(25);
m_script->step();
#ifdef __ANDROID__
m_menu->getAndroidUIInput();
#endif
}
}
/******************************************************************************/
GUIEngine::~GUIEngine()
{
video::IVideoDriver* driver = m_device->getVideoDriver();
FATAL_ERROR_IF(driver == 0, "Could not get video driver");
if(m_sound_manager != &dummySoundManager){
delete m_sound_manager;
m_sound_manager = NULL;
}
infostream<<"GUIEngine: Deinitializing scripting"<<std::endl;
delete m_script;
m_irr_toplefttext->setText(L"");
//clean up texture pointers
for (unsigned int i = 0; i < TEX_LAYER_MAX; i++) {
if (m_textures[i].texture != NULL)
driver->removeTexture(m_textures[i].texture);
}
delete m_texture_source;
if (m_cloud.clouds)
m_cloud.clouds->drop();
}
/******************************************************************************/
void GUIEngine::cloudInit()
{
m_cloud.clouds = new Clouds(m_smgr->getRootSceneNode(),
m_smgr, -1, rand(), 100);
m_cloud.clouds->update(v2f(0, 0), video::SColor(255,200,200,255));
m_cloud.camera = m_smgr->addCameraSceneNode(0,
v3f(0,0,0), v3f(0, 60, 100));
m_cloud.camera->setFarValue(10000);
m_cloud.lasttime = m_device->getTimer()->getTime();
}
/******************************************************************************/
void GUIEngine::cloudPreProcess()
{
u32 time = m_device->getTimer()->getTime();
if(time > m_cloud.lasttime)
m_cloud.dtime = (time - m_cloud.lasttime) / 1000.0;
else
m_cloud.dtime = 0;
m_cloud.lasttime = time;
m_cloud.clouds->step(m_cloud.dtime*3);
m_cloud.clouds->render();
m_smgr->drawAll();
}
/******************************************************************************/
void GUIEngine::cloudPostProcess()
{
float fps_max = g_settings->getFloat("pause_fps_max");
// Time of frame without fps limit
u32 busytime_u32;
// not using getRealTime is necessary for wine
u32 time = m_device->getTimer()->getTime();
if(time > m_cloud.lasttime)
busytime_u32 = time - m_cloud.lasttime;
else
busytime_u32 = 0;
// FPS limiter
u32 frametime_min = 1000./fps_max;
if(busytime_u32 < frametime_min) {
u32 sleeptime = frametime_min - busytime_u32;
m_device->sleep(sleeptime);
}
}
/******************************************************************************/
void GUIEngine::drawBackground(video::IVideoDriver* driver)
{
v2u32 screensize = driver->getScreenSize();
video::ITexture* texture = m_textures[TEX_LAYER_BACKGROUND].texture;
/* If no texture, draw background of solid color */
if(!texture){
video::SColor color(255,80,58,37);
core::rect<s32> rect(0, 0, screensize.X, screensize.Y);
driver->draw2DRectangle(color, rect, NULL);
return;
}
v2u32 sourcesize = texture->getOriginalSize();
if (m_textures[TEX_LAYER_BACKGROUND].tile)
{
v2u32 tilesize(
MYMAX(sourcesize.X,m_textures[TEX_LAYER_BACKGROUND].minsize),
MYMAX(sourcesize.Y,m_textures[TEX_LAYER_BACKGROUND].minsize));
for (unsigned int x = 0; x < screensize.X; x += tilesize.X )
{
for (unsigned int y = 0; y < screensize.Y; y += tilesize.Y )
{
draw2DImageFilterScaled(driver, texture,
core::rect<s32>(x, y, x+tilesize.X, y+tilesize.Y),
core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
NULL, NULL, true);
}
}
return;
}
/* Draw background texture */
draw2DImageFilterScaled(driver, texture,
core::rect<s32>(0, 0, screensize.X, screensize.Y),
core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
NULL, NULL, true);
}
/******************************************************************************/
void GUIEngine::drawOverlay(video::IVideoDriver* driver)
{
v2u32 screensize = driver->getScreenSize();
video::ITexture* texture = m_textures[TEX_LAYER_OVERLAY].texture;
/* If no texture, draw nothing */
if(!texture)
return;
/* Draw background texture */
v2u32 sourcesize = texture->getOriginalSize();
draw2DImageFilterScaled(driver, texture,
core::rect<s32>(0, 0, screensize.X, screensize.Y),
core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
NULL, NULL, true);
}
/******************************************************************************/
void GUIEngine::drawHeader(video::IVideoDriver* driver)
{
core::dimension2d<u32> screensize = driver->getScreenSize();
video::ITexture* texture = m_textures[TEX_LAYER_HEADER].texture;
/* If no texture, draw nothing */
if(!texture)
return;
f32 mult = (((f32)screensize.Width / 2.0)) /
((f32)texture->getOriginalSize().Width);
v2s32 splashsize(((f32)texture->getOriginalSize().Width) * mult,
((f32)texture->getOriginalSize().Height) * mult);
// Don't draw the header if there isn't enough room
s32 free_space = (((s32)screensize.Height)-320)/2;
if (free_space > splashsize.Y) {
core::rect<s32> splashrect(0, 0, splashsize.X, splashsize.Y);
splashrect += v2s32((screensize.Width/2)-(splashsize.X/2),
((free_space/2)-splashsize.Y/2)+10);
video::SColor bgcolor(255,50,50,50);
draw2DImageFilterScaled(driver, texture, splashrect,
core::rect<s32>(core::position2d<s32>(0,0),
core::dimension2di(texture->getOriginalSize())),
NULL, NULL, true);
}
}
/******************************************************************************/
void GUIEngine::drawFooter(video::IVideoDriver* driver)
{
core::dimension2d<u32> screensize = driver->getScreenSize();
video::ITexture* texture = m_textures[TEX_LAYER_FOOTER].texture;
/* If no texture, draw nothing */
if(!texture)
return;
f32 mult = (((f32)screensize.Width)) /
((f32)texture->getOriginalSize().Width);
v2s32 footersize(((f32)texture->getOriginalSize().Width) * mult,
((f32)texture->getOriginalSize().Height) * mult);
// Don't draw the footer if there isn't enough room
s32 free_space = (((s32)screensize.Height)-320)/2;
if (free_space > footersize.Y) {
core::rect<s32> rect(0,0,footersize.X,footersize.Y);
rect += v2s32(screensize.Width/2,screensize.Height-footersize.Y);
rect -= v2s32(footersize.X/2, 0);
draw2DImageFilterScaled(driver, texture, rect,
core::rect<s32>(core::position2d<s32>(0,0),
core::dimension2di(texture->getOriginalSize())),
NULL, NULL, true);
}
}
/******************************************************************************/
bool GUIEngine::setTexture(texture_layer layer, std::string texturepath,
bool tile_image, unsigned int minsize)
{
video::IVideoDriver* driver = m_device->getVideoDriver();
FATAL_ERROR_IF(driver == 0, "Could not get video driver");
if (m_textures[layer].texture != NULL)
{
driver->removeTexture(m_textures[layer].texture);
m_textures[layer].texture = NULL;
}
if ((texturepath == "") || !fs::PathExists(texturepath))
{
return false;
}
m_textures[layer].texture = driver->getTexture(texturepath.c_str());
m_textures[layer].tile = tile_image;
m_textures[layer].minsize = minsize;
if (m_textures[layer].texture == NULL)
{
return false;
}
return true;
}
/******************************************************************************/
bool GUIEngine::downloadFile(std::string url, std::string target)
{
#if USE_CURL
std::ofstream target_file(target.c_str(), std::ios::out | std::ios::binary);
if (!target_file.good()) {
return false;
}
HTTPFetchRequest fetch_request;
HTTPFetchResult fetch_result;
fetch_request.url = url;
fetch_request.caller = HTTPFETCH_SYNC;
fetch_request.timeout = g_settings->getS32("curl_file_download_timeout");
httpfetch_sync(fetch_request, fetch_result);
if (!fetch_result.succeeded) {
return false;
}
target_file << fetch_result.data;
return true;
#else
return false;
#endif
}
/******************************************************************************/
void GUIEngine::setTopleftText(const std::string &text)
{
m_toplefttext = utf8_to_wide(text);
updateTopLeftTextSize();
}
/******************************************************************************/
void GUIEngine::updateTopLeftTextSize()
{
core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(m_toplefttext.c_str()),
g_fontengine->getTextHeight());
rect += v2s32(4, 0);
m_irr_toplefttext->remove();
m_irr_toplefttext =
addStaticText(m_device->getGUIEnvironment(), m_toplefttext,
rect, false, true, 0, -1);
}
/******************************************************************************/
s32 GUIEngine::playSound(SimpleSoundSpec spec, bool looped)
{
s32 handle = m_sound_manager->playSound(spec, looped);
return handle;
}
/******************************************************************************/
void GUIEngine::stopSound(s32 handle)
{
m_sound_manager->stopSound(handle);
}
/******************************************************************************/
unsigned int GUIEngine::queueAsync(std::string serialized_func,
std::string serialized_params)
{
return m_script->queueAsync(serialized_func, serialized_params);
}
|