summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2021-02-26 16:47:24 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-02-26 16:47:24 -0500
commitd5e3bc615b300eb985d59b91ebd1f2f1a4d4e107 (patch)
tree7356a6796ff166a85b8f7accb20e82596f200a63
parent46bf85e7b85b8d3e61f0d2b276450c4f439b5c30 (diff)
downloadtanetane-d5e3bc615b300eb985d59b91ebd1f2f1a4d4e107.tar.gz
tanetane-d5e3bc615b300eb985d59b91ebd1f2f1a4d4e107.tar.bz2
tanetane-d5e3bc615b300eb985d59b91ebd1f2f1a4d4e107.zip
Added first underwater map
Also spruced up the event that takes you there. Also fixed an issue where transplantParty wouldn't take the medium of the new position into consideration. Also added a constructor to the lua version of vec2i.
-rw-r--r--res/maps/underwater.tsx1179
-rw-r--r--res/maps/underwater_start.tmx136
-rw-r--r--res/maps/underwater_tiles.pngbin0 -> 41392 bytes
-rw-r--r--res/scripts/common.lua21
-rw-r--r--res/scripts/hallucination_hot_spring.lua26
-rw-r--r--res/scripts/underwater.lua21
-rw-r--r--res/scripts/underwater_start.lua8
-rw-r--r--src/character_system.cpp3
-rw-r--r--src/script_system.cpp4
9 files changed, 1377 insertions, 21 deletions
diff --git a/res/maps/underwater.tsx b/res/maps/underwater.tsx new file mode 100644 index 0000000..92bb02a --- /dev/null +++ b/res/maps/underwater.tsx
@@ -0,0 +1,1179 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<tileset version="1.4" tiledversion="1.4.3" name="underwater" tilewidth="16" tileheight="16" tilecount="350" columns="10">
3 <image source="underwater_tiles.png" width="160" height="560"/>
4 <tile id="2">
5 <properties>
6 <property name="solid" type="bool" value="true"/>
7 </properties>
8 </tile>
9 <tile id="3">
10 <properties>
11 <property name="solid" type="bool" value="true"/>
12 </properties>
13 </tile>
14 <tile id="4">
15 <properties>
16 <property name="solid" type="bool" value="true"/>
17 </properties>
18 </tile>
19 <tile id="5">
20 <properties>
21 <property name="solid" type="bool" value="true"/>
22 </properties>
23 </tile>
24 <tile id="6">
25 <properties>
26 <property name="solid" type="bool" value="true"/>
27 </properties>
28 </tile>
29 <tile id="8">
30 <properties>
31 <property name="solid" type="bool" value="true"/>
32 </properties>
33 </tile>
34 <tile id="9">
35 <properties>
36 <property name="solid" type="bool" value="true"/>
37 </properties>
38 </tile>
39 <tile id="11">
40 <properties>
41 <property name="solid" type="bool" value="true"/>
42 </properties>
43 </tile>
44 <tile id="13">
45 <properties>
46 <property name="solid" type="bool" value="true"/>
47 </properties>
48 </tile>
49 <tile id="14">
50 <properties>
51 <property name="solid" type="bool" value="true"/>
52 </properties>
53 </tile>
54 <tile id="15">
55 <properties>
56 <property name="solid" type="bool" value="true"/>
57 </properties>
58 </tile>
59 <tile id="16">
60 <properties>
61 <property name="solid" type="bool" value="true"/>
62 </properties>
63 </tile>
64 <tile id="17">
65 <properties>
66 <property name="solid" type="bool" value="true"/>
67 </properties>
68 </tile>
69 <tile id="18">
70 <properties>
71 <property name="solid" type="bool" value="true"/>
72 </properties>
73 </tile>
74 <tile id="20">
75 <properties>
76 <property name="solid" type="bool" value="true"/>
77 </properties>
78 </tile>
79 <tile id="21">
80 <properties>
81 <property name="solid" type="bool" value="true"/>
82 </properties>
83 </tile>
84 <tile id="23">
85 <properties>
86 <property name="solid" type="bool" value="true"/>
87 </properties>
88 </tile>
89 <tile id="24">
90 <properties>
91 <property name="solid" type="bool" value="true"/>
92 </properties>
93 </tile>
94 <tile id="27">
95 <properties>
96 <property name="solid" type="bool" value="true"/>
97 </properties>
98 </tile>
99 <tile id="28">
100 <properties>
101 <property name="solid" type="bool" value="true"/>
102 </properties>
103 </tile>
104 <tile id="29">
105 <properties>
106 <property name="solid" type="bool" value="true"/>
107 </properties>
108 </tile>
109 <tile id="31">
110 <properties>
111 <property name="solid" type="bool" value="true"/>
112 </properties>
113 </tile>
114 <tile id="32">
115 <properties>
116 <property name="solid" type="bool" value="true"/>
117 </properties>
118 </tile>
119 <tile id="33">
120 <properties>
121 <property name="solid" type="bool" value="true"/>
122 </properties>
123 </tile>
124 <tile id="35">
125 <properties>
126 <property name="solid" type="bool" value="true"/>
127 </properties>
128 </tile>
129 <tile id="36">
130 <properties>
131 <property name="solid" type="bool" value="true"/>
132 </properties>
133 </tile>
134 <tile id="37">
135 <properties>
136 <property name="solid" type="bool" value="true"/>
137 </properties>
138 </tile>
139 <tile id="38">
140 <properties>
141 <property name="solid" type="bool" value="true"/>
142 </properties>
143 </tile>
144 <tile id="39">
145 <properties>
146 <property name="solid" type="bool" value="true"/>
147 </properties>
148 </tile>
149 <tile id="40">
150 <properties>
151 <property name="solid" type="bool" value="true"/>
152 </properties>
153 </tile>
154 <tile id="41">
155 <properties>
156 <property name="solid" type="bool" value="true"/>
157 </properties>
158 </tile>
159 <tile id="44">
160 <properties>
161 <property name="solid" type="bool" value="true"/>
162 </properties>
163 </tile>
164 <tile id="45">
165 <properties>
166 <property name="solid" type="bool" value="true"/>
167 </properties>
168 </tile>
169 <tile id="48">
170 <properties>
171 <property name="solid" type="bool" value="true"/>
172 </properties>
173 </tile>
174 <tile id="51">
175 <properties>
176 <property name="solid" type="bool" value="true"/>
177 </properties>
178 </tile>
179 <tile id="52">
180 <properties>
181 <property name="solid" type="bool" value="true"/>
182 </properties>
183 </tile>
184 <tile id="55">
185 <properties>
186 <property name="solid" type="bool" value="true"/>
187 </properties>
188 </tile>
189 <tile id="56">
190 <properties>
191 <property name="solid" type="bool" value="true"/>
192 </properties>
193 </tile>
194 <tile id="57">
195 <properties>
196 <property name="solid" type="bool" value="true"/>
197 </properties>
198 </tile>
199 <tile id="58">
200 <properties>
201 <property name="solid" type="bool" value="true"/>
202 </properties>
203 </tile>
204 <tile id="59">
205 <properties>
206 <property name="solid" type="bool" value="true"/>
207 </properties>
208 </tile>
209 <tile id="60">
210 <properties>
211 <property name="solid" type="bool" value="true"/>
212 </properties>
213 </tile>
214 <tile id="62">
215 <properties>
216 <property name="solid" type="bool" value="true"/>
217 </properties>
218 </tile>
219 <tile id="63">
220 <properties>
221 <property name="solid" type="bool" value="true"/>
222 </properties>
223 </tile>
224 <tile id="65">
225 <properties>
226 <property name="solid" type="bool" value="true"/>
227 </properties>
228 </tile>
229 <tile id="67">
230 <properties>
231 <property name="solid" type="bool" value="true"/>
232 </properties>
233 </tile>
234 <tile id="68">
235 <properties>
236 <property name="solid" type="bool" value="true"/>
237 </properties>
238 </tile>
239 <tile id="70">
240 <properties>
241 <property name="solid" type="bool" value="true"/>
242 </properties>
243 </tile>
244 <tile id="78">
245 <properties>
246 <property name="solid" type="bool" value="true"/>
247 </properties>
248 </tile>
249 <tile id="79">
250 <properties>
251 <property name="solid" type="bool" value="true"/>
252 </properties>
253 </tile>
254 <tile id="80">
255 <properties>
256 <property name="solid" type="bool" value="true"/>
257 </properties>
258 </tile>
259 <tile id="81">
260 <properties>
261 <property name="solid" type="bool" value="true"/>
262 </properties>
263 </tile>
264 <tile id="82">
265 <properties>
266 <property name="solid" type="bool" value="true"/>
267 </properties>
268 </tile>
269 <tile id="83">
270 <properties>
271 <property name="solid" type="bool" value="true"/>
272 </properties>
273 </tile>
274 <tile id="84">
275 <properties>
276 <property name="solid" type="bool" value="true"/>
277 </properties>
278 </tile>
279 <tile id="85">
280 <properties>
281 <property name="solid" type="bool" value="true"/>
282 </properties>
283 </tile>
284 <tile id="86">
285 <properties>
286 <property name="solid" type="bool" value="true"/>
287 </properties>
288 </tile>
289 <tile id="87">
290 <properties>
291 <property name="solid" type="bool" value="true"/>
292 </properties>
293 </tile>
294 <tile id="90">
295 <properties>
296 <property name="solid" type="bool" value="true"/>
297 </properties>
298 </tile>
299 <tile id="91">
300 <properties>
301 <property name="solid" type="bool" value="true"/>
302 </properties>
303 </tile>
304 <tile id="95">
305 <properties>
306 <property name="solid" type="bool" value="true"/>
307 </properties>
308 </tile>
309 <tile id="96">
310 <properties>
311 <property name="solid" type="bool" value="true"/>
312 </properties>
313 </tile>
314 <tile id="97">
315 <properties>
316 <property name="solid" type="bool" value="true"/>
317 </properties>
318 </tile>
319 <tile id="98">
320 <properties>
321 <property name="solid" type="bool" value="true"/>
322 </properties>
323 </tile>
324 <tile id="99">
325 <properties>
326 <property name="solid" type="bool" value="true"/>
327 </properties>
328 </tile>
329 <tile id="100">
330 <properties>
331 <property name="solid" type="bool" value="true"/>
332 </properties>
333 </tile>
334 <tile id="101">
335 <properties>
336 <property name="solid" type="bool" value="true"/>
337 </properties>
338 </tile>
339 <tile id="102">
340 <properties>
341 <property name="solid" type="bool" value="true"/>
342 </properties>
343 </tile>
344 <tile id="107">
345 <properties>
346 <property name="solid" type="bool" value="true"/>
347 </properties>
348 </tile>
349 <tile id="108">
350 <properties>
351 <property name="solid" type="bool" value="true"/>
352 </properties>
353 </tile>
354 <tile id="109">
355 <properties>
356 <property name="solid" type="bool" value="true"/>
357 </properties>
358 </tile>
359 <tile id="110">
360 <properties>
361 <property name="solid" type="bool" value="true"/>
362 </properties>
363 </tile>
364 <tile id="111">
365 <properties>
366 <property name="solid" type="bool" value="true"/>
367 </properties>
368 </tile>
369 <tile id="118">
370 <properties>
371 <property name="solid" type="bool" value="true"/>
372 </properties>
373 </tile>
374 <tile id="119">
375 <properties>
376 <property name="solid" type="bool" value="true"/>
377 </properties>
378 </tile>
379 <tile id="120">
380 <properties>
381 <property name="solid" type="bool" value="true"/>
382 </properties>
383 </tile>
384 <tile id="121">
385 <properties>
386 <property name="medium" value="ladder"/>
387 </properties>
388 </tile>
389 <tile id="123">
390 <properties>
391 <property name="solid" type="bool" value="true"/>
392 </properties>
393 </tile>
394 <tile id="124">
395 <properties>
396 <property name="medium" value="ladder"/>
397 </properties>
398 </tile>
399 <tile id="125">
400 <properties>
401 <property name="solid" type="bool" value="true"/>
402 </properties>
403 </tile>
404 <tile id="126">
405 <properties>
406 <property name="medium" value="ladder"/>
407 </properties>
408 </tile>
409 <tile id="127">
410 <properties>
411 <property name="solid" type="bool" value="true"/>
412 </properties>
413 </tile>
414 <tile id="130">
415 <properties>
416 <property name="solid" type="bool" value="true"/>
417 </properties>
418 </tile>
419 <tile id="131">
420 <properties>
421 <property name="solid" type="bool" value="true"/>
422 </properties>
423 </tile>
424 <tile id="132">
425 <properties>
426 <property name="solid" type="bool" value="true"/>
427 </properties>
428 </tile>
429 <tile id="133">
430 <properties>
431 <property name="solid" type="bool" value="true"/>
432 </properties>
433 </tile>
434 <tile id="134">
435 <properties>
436 <property name="solid" type="bool" value="true"/>
437 </properties>
438 </tile>
439 <tile id="135">
440 <properties>
441 <property name="solid" type="bool" value="true"/>
442 </properties>
443 </tile>
444 <tile id="136">
445 <properties>
446 <property name="solid" type="bool" value="true"/>
447 </properties>
448 </tile>
449 <tile id="137">
450 <properties>
451 <property name="solid" type="bool" value="true"/>
452 </properties>
453 </tile>
454 <tile id="138">
455 <properties>
456 <property name="solid" type="bool" value="true"/>
457 </properties>
458 </tile>
459 <tile id="140">
460 <properties>
461 <property name="solid" type="bool" value="true"/>
462 </properties>
463 </tile>
464 <tile id="141">
465 <properties>
466 <property name="solid" type="bool" value="true"/>
467 </properties>
468 </tile>
469 <tile id="143">
470 <properties>
471 <property name="solid" type="bool" value="true"/>
472 </properties>
473 </tile>
474 <tile id="144">
475 <properties>
476 <property name="solid" type="bool" value="true"/>
477 </properties>
478 </tile>
479 <tile id="145">
480 <properties>
481 <property name="solid" type="bool" value="true"/>
482 </properties>
483 </tile>
484 <tile id="146">
485 <properties>
486 <property name="solid" type="bool" value="true"/>
487 </properties>
488 </tile>
489 <tile id="147">
490 <properties>
491 <property name="solid" type="bool" value="true"/>
492 </properties>
493 </tile>
494 <tile id="148">
495 <properties>
496 <property name="solid" type="bool" value="true"/>
497 </properties>
498 </tile>
499 <tile id="152">
500 <properties>
501 <property name="solid" type="bool" value="true"/>
502 </properties>
503 </tile>
504 <tile id="154">
505 <properties>
506 <property name="solid" type="bool" value="true"/>
507 </properties>
508 </tile>
509 <tile id="155">
510 <properties>
511 <property name="solid" type="bool" value="true"/>
512 </properties>
513 </tile>
514 <tile id="157">
515 <properties>
516 <property name="solid" type="bool" value="true"/>
517 </properties>
518 </tile>
519 <tile id="158">
520 <properties>
521 <property name="solid" type="bool" value="true"/>
522 </properties>
523 </tile>
524 <tile id="164">
525 <properties>
526 <property name="solid" type="bool" value="true"/>
527 </properties>
528 </tile>
529 <tile id="165">
530 <properties>
531 <property name="solid" type="bool" value="true"/>
532 </properties>
533 </tile>
534 <tile id="166">
535 <properties>
536 <property name="solid" type="bool" value="true"/>
537 </properties>
538 </tile>
539 <tile id="171">
540 <properties>
541 <property name="solid" type="bool" value="true"/>
542 </properties>
543 </tile>
544 <tile id="173">
545 <properties>
546 <property name="solid" type="bool" value="true"/>
547 </properties>
548 </tile>
549 <tile id="175">
550 <properties>
551 <property name="solid" type="bool" value="true"/>
552 </properties>
553 </tile>
554 <tile id="176">
555 <properties>
556 <property name="solid" type="bool" value="true"/>
557 </properties>
558 </tile>
559 <tile id="177">
560 <properties>
561 <property name="solid" type="bool" value="true"/>
562 </properties>
563 </tile>
564 <tile id="178">
565 <properties>
566 <property name="solid" type="bool" value="true"/>
567 </properties>
568 </tile>
569 <tile id="179">
570 <properties>
571 <property name="solid" type="bool" value="true"/>
572 </properties>
573 </tile>
574 <tile id="180">
575 <properties>
576 <property name="solid" type="bool" value="true"/>
577 </properties>
578 </tile>
579 <tile id="181">
580 <properties>
581 <property name="solid" type="bool" value="true"/>
582 </properties>
583 </tile>
584 <tile id="182">
585 <properties>
586 <property name="solid" type="bool" value="true"/>
587 </properties>
588 </tile>
589 <tile id="183">
590 <properties>
591 <property name="solid" type="bool" value="true"/>
592 </properties>
593 </tile>
594 <tile id="184">
595 <properties>
596 <property name="solid" type="bool" value="true"/>
597 </properties>
598 </tile>
599 <tile id="185">
600 <properties>
601 <property name="solid" type="bool" value="true"/>
602 </properties>
603 </tile>
604 <tile id="186">
605 <properties>
606 <property name="solid" type="bool" value="true"/>
607 </properties>
608 </tile>
609 <tile id="187">
610 <properties>
611 <property name="solid" type="bool" value="true"/>
612 </properties>
613 </tile>
614 <tile id="188">
615 <properties>
616 <property name="solid" type="bool" value="true"/>
617 </properties>
618 </tile>
619 <tile id="189">
620 <properties>
621 <property name="solid" type="bool" value="true"/>
622 </properties>
623 </tile>
624 <tile id="191">
625 <properties>
626 <property name="solid" type="bool" value="true"/>
627 </properties>
628 </tile>
629 <tile id="192">
630 <properties>
631 <property name="solid" type="bool" value="true"/>
632 </properties>
633 </tile>
634 <tile id="193">
635 <properties>
636 <property name="solid" type="bool" value="true"/>
637 </properties>
638 </tile>
639 <tile id="194">
640 <properties>
641 <property name="solid" type="bool" value="true"/>
642 </properties>
643 </tile>
644 <tile id="195">
645 <properties>
646 <property name="solid" type="bool" value="true"/>
647 </properties>
648 </tile>
649 <tile id="197">
650 <properties>
651 <property name="solid" type="bool" value="true"/>
652 </properties>
653 </tile>
654 <tile id="198">
655 <properties>
656 <property name="solid" type="bool" value="true"/>
657 </properties>
658 </tile>
659 <tile id="200">
660 <properties>
661 <property name="solid" type="bool" value="true"/>
662 </properties>
663 </tile>
664 <tile id="201">
665 <properties>
666 <property name="solid" type="bool" value="true"/>
667 </properties>
668 </tile>
669 <tile id="203">
670 <properties>
671 <property name="solid" type="bool" value="true"/>
672 </properties>
673 </tile>
674 <tile id="204">
675 <properties>
676 <property name="solid" type="bool" value="true"/>
677 </properties>
678 </tile>
679 <tile id="205">
680 <properties>
681 <property name="solid" type="bool" value="true"/>
682 </properties>
683 </tile>
684 <tile id="206">
685 <properties>
686 <property name="solid" type="bool" value="true"/>
687 </properties>
688 </tile>
689 <tile id="208">
690 <properties>
691 <property name="solid" type="bool" value="true"/>
692 </properties>
693 </tile>
694 <tile id="210">
695 <properties>
696 <property name="solid" type="bool" value="true"/>
697 </properties>
698 </tile>
699 <tile id="213">
700 <properties>
701 <property name="solid" type="bool" value="true"/>
702 </properties>
703 </tile>
704 <tile id="214">
705 <properties>
706 <property name="solid" type="bool" value="true"/>
707 </properties>
708 </tile>
709 <tile id="215">
710 <properties>
711 <property name="solid" type="bool" value="true"/>
712 </properties>
713 </tile>
714 <tile id="217">
715 <properties>
716 <property name="solid" type="bool" value="true"/>
717 </properties>
718 </tile>
719 <tile id="218">
720 <properties>
721 <property name="solid" type="bool" value="true"/>
722 </properties>
723 </tile>
724 <tile id="219">
725 <properties>
726 <property name="solid" type="bool" value="true"/>
727 </properties>
728 </tile>
729 <tile id="220">
730 <properties>
731 <property name="solid" type="bool" value="true"/>
732 </properties>
733 </tile>
734 <tile id="221">
735 <properties>
736 <property name="solid" type="bool" value="true"/>
737 </properties>
738 </tile>
739 <tile id="222">
740 <properties>
741 <property name="solid" type="bool" value="true"/>
742 </properties>
743 </tile>
744 <tile id="224">
745 <properties>
746 <property name="solid" type="bool" value="true"/>
747 </properties>
748 </tile>
749 <tile id="225">
750 <properties>
751 <property name="solid" type="bool" value="true"/>
752 </properties>
753 </tile>
754 <tile id="226">
755 <properties>
756 <property name="solid" type="bool" value="true"/>
757 </properties>
758 </tile>
759 <tile id="227">
760 <properties>
761 <property name="solid" type="bool" value="true"/>
762 </properties>
763 </tile>
764 <tile id="228">
765 <properties>
766 <property name="solid" type="bool" value="true"/>
767 </properties>
768 </tile>
769 <tile id="229">
770 <properties>
771 <property name="solid" type="bool" value="true"/>
772 </properties>
773 </tile>
774 <tile id="230">
775 <properties>
776 <property name="solid" type="bool" value="true"/>
777 </properties>
778 </tile>
779 <tile id="231">
780 <properties>
781 <property name="solid" type="bool" value="true"/>
782 </properties>
783 </tile>
784 <tile id="232">
785 <properties>
786 <property name="solid" type="bool" value="true"/>
787 </properties>
788 </tile>
789 <tile id="233">
790 <properties>
791 <property name="solid" type="bool" value="true"/>
792 </properties>
793 </tile>
794 <tile id="234">
795 <properties>
796 <property name="solid" type="bool" value="true"/>
797 </properties>
798 </tile>
799 <tile id="235">
800 <properties>
801 <property name="solid" type="bool" value="true"/>
802 </properties>
803 </tile>
804 <tile id="236">
805 <properties>
806 <property name="solid" type="bool" value="true"/>
807 </properties>
808 </tile>
809 <tile id="239">
810 <properties>
811 <property name="solid" type="bool" value="true"/>
812 </properties>
813 </tile>
814 <tile id="240">
815 <properties>
816 <property name="solid" type="bool" value="true"/>
817 </properties>
818 </tile>
819 <tile id="241">
820 <properties>
821 <property name="solid" type="bool" value="true"/>
822 </properties>
823 </tile>
824 <tile id="242">
825 <properties>
826 <property name="solid" type="bool" value="true"/>
827 </properties>
828 </tile>
829 <tile id="243">
830 <properties>
831 <property name="solid" type="bool" value="true"/>
832 </properties>
833 </tile>
834 <tile id="245">
835 <properties>
836 <property name="solid" type="bool" value="true"/>
837 </properties>
838 </tile>
839 <tile id="246">
840 <properties>
841 <property name="solid" type="bool" value="true"/>
842 </properties>
843 </tile>
844 <tile id="247">
845 <properties>
846 <property name="solid" type="bool" value="true"/>
847 </properties>
848 </tile>
849 <tile id="248">
850 <properties>
851 <property name="solid" type="bool" value="true"/>
852 </properties>
853 </tile>
854 <tile id="252">
855 <properties>
856 <property name="solid" type="bool" value="true"/>
857 </properties>
858 </tile>
859 <tile id="253">
860 <properties>
861 <property name="solid" type="bool" value="true"/>
862 </properties>
863 </tile>
864 <tile id="256">
865 <properties>
866 <property name="solid" type="bool" value="true"/>
867 </properties>
868 </tile>
869 <tile id="260">
870 <properties>
871 <property name="solid" type="bool" value="true"/>
872 </properties>
873 </tile>
874 <tile id="266">
875 <properties>
876 <property name="solid" type="bool" value="true"/>
877 </properties>
878 </tile>
879 <tile id="267">
880 <properties>
881 <property name="solid" type="bool" value="true"/>
882 </properties>
883 </tile>
884 <tile id="268">
885 <properties>
886 <property name="solid" type="bool" value="true"/>
887 </properties>
888 </tile>
889 <tile id="271">
890 <properties>
891 <property name="solid" type="bool" value="true"/>
892 </properties>
893 </tile>
894 <tile id="274">
895 <properties>
896 <property name="solid" type="bool" value="true"/>
897 </properties>
898 </tile>
899 <tile id="275">
900 <properties>
901 <property name="solid" type="bool" value="true"/>
902 </properties>
903 </tile>
904 <tile id="276">
905 <properties>
906 <property name="solid" type="bool" value="true"/>
907 </properties>
908 </tile>
909 <tile id="277">
910 <properties>
911 <property name="solid" type="bool" value="true"/>
912 </properties>
913 </tile>
914 <tile id="278">
915 <properties>
916 <property name="solid" type="bool" value="true"/>
917 </properties>
918 </tile>
919 <tile id="279">
920 <properties>
921 <property name="solid" type="bool" value="true"/>
922 </properties>
923 </tile>
924 <tile id="282">
925 <properties>
926 <property name="solid" type="bool" value="true"/>
927 </properties>
928 </tile>
929 <tile id="283">
930 <properties>
931 <property name="medium" value="ladder"/>
932 </properties>
933 </tile>
934 <tile id="284">
935 <properties>
936 <property name="solid" type="bool" value="true"/>
937 </properties>
938 </tile>
939 <tile id="285">
940 <properties>
941 <property name="solid" type="bool" value="true"/>
942 </properties>
943 </tile>
944 <tile id="286">
945 <properties>
946 <property name="solid" type="bool" value="true"/>
947 </properties>
948 </tile>
949 <tile id="287">
950 <properties>
951 <property name="medium" value="ladder"/>
952 </properties>
953 </tile>
954 <tile id="288">
955 <properties>
956 <property name="solid" type="bool" value="true"/>
957 </properties>
958 </tile>
959 <tile id="289">
960 <properties>
961 <property name="medium" value="ladder"/>
962 </properties>
963 </tile>
964 <tile id="290">
965 <properties>
966 <property name="solid" type="bool" value="true"/>
967 </properties>
968 </tile>
969 <tile id="291">
970 <properties>
971 <property name="solid" type="bool" value="true"/>
972 </properties>
973 </tile>
974 <tile id="292">
975 <properties>
976 <property name="solid" type="bool" value="true"/>
977 </properties>
978 </tile>
979 <tile id="294">
980 <properties>
981 <property name="solid" type="bool" value="true"/>
982 </properties>
983 </tile>
984 <tile id="295">
985 <properties>
986 <property name="solid" type="bool" value="true"/>
987 </properties>
988 </tile>
989 <tile id="296">
990 <properties>
991 <property name="solid" type="bool" value="true"/>
992 </properties>
993 </tile>
994 <tile id="297">
995 <properties>
996 <property name="solid" type="bool" value="true"/>
997 </properties>
998 </tile>
999 <tile id="298">
1000 <properties>
1001 <property name="solid" type="bool" value="true"/>
1002 </properties>
1003 </tile>
1004 <tile id="299">
1005 <properties>
1006 <property name="solid" type="bool" value="true"/>
1007 </properties>
1008 </tile>
1009 <tile id="300">
1010 <properties>
1011 <property name="solid" type="bool" value="true"/>
1012 </properties>
1013 </tile>
1014 <tile id="301">
1015 <properties>
1016 <property name="solid" type="bool" value="true"/>
1017 </properties>
1018 </tile>
1019 <tile id="304">
1020 <properties>
1021 <property name="solid" type="bool" value="true"/>
1022 </properties>
1023 </tile>
1024 <tile id="305">
1025 <properties>
1026 <property name="solid" type="bool" value="true"/>
1027 </properties>
1028 </tile>
1029 <tile id="306">
1030 <properties>
1031 <property name="solid" type="bool" value="true"/>
1032 </properties>
1033 </tile>
1034 <tile id="307">
1035 <properties>
1036 <property name="medium" value="ladder"/>
1037 </properties>
1038 </tile>
1039 <tile id="308">
1040 <properties>
1041 <property name="solid" type="bool" value="true"/>
1042 </properties>
1043 </tile>
1044 <tile id="309">
1045 <properties>
1046 <property name="solid" type="bool" value="true"/>
1047 </properties>
1048 </tile>
1049 <tile id="310">
1050 <properties>
1051 <property name="solid" type="bool" value="true"/>
1052 </properties>
1053 </tile>
1054 <tile id="311">
1055 <properties>
1056 <property name="medium" value="ladder"/>
1057 </properties>
1058 </tile>
1059 <tile id="312">
1060 <properties>
1061 <property name="solid" type="bool" value="true"/>
1062 </properties>
1063 </tile>
1064 <tile id="313">
1065 <properties>
1066 <property name="solid" type="bool" value="true"/>
1067 </properties>
1068 </tile>
1069 <tile id="314">
1070 <properties>
1071 <property name="solid" type="bool" value="true"/>
1072 </properties>
1073 </tile>
1074 <tile id="315">
1075 <properties>
1076 <property name="medium" value="ladder"/>
1077 </properties>
1078 </tile>
1079 <tile id="316">
1080 <properties>
1081 <property name="solid" type="bool" value="true"/>
1082 </properties>
1083 </tile>
1084 <tile id="317">
1085 <properties>
1086 <property name="solid" type="bool" value="true"/>
1087 </properties>
1088 </tile>
1089 <tile id="318">
1090 <properties>
1091 <property name="solid" type="bool" value="true"/>
1092 </properties>
1093 </tile>
1094 <tile id="322">
1095 <properties>
1096 <property name="solid" type="bool" value="true"/>
1097 </properties>
1098 </tile>
1099 <tile id="324">
1100 <properties>
1101 <property name="solid" type="bool" value="true"/>
1102 </properties>
1103 </tile>
1104 <tile id="325">
1105 <properties>
1106 <property name="solid" type="bool" value="true"/>
1107 </properties>
1108 </tile>
1109 <tile id="326">
1110 <properties>
1111 <property name="solid" type="bool" value="true"/>
1112 </properties>
1113 </tile>
1114 <tile id="327">
1115 <properties>
1116 <property name="solid" type="bool" value="true"/>
1117 </properties>
1118 </tile>
1119 <tile id="328">
1120 <properties>
1121 <property name="solid" type="bool" value="true"/>
1122 </properties>
1123 </tile>
1124 <tile id="329">
1125 <properties>
1126 <property name="solid" type="bool" value="true"/>
1127 </properties>
1128 </tile>
1129 <tile id="330">
1130 <properties>
1131 <property name="solid" type="bool" value="true"/>
1132 </properties>
1133 </tile>
1134 <tile id="331">
1135 <properties>
1136 <property name="solid" type="bool" value="true"/>
1137 </properties>
1138 </tile>
1139 <tile id="332">
1140 <properties>
1141 <property name="solid" type="bool" value="true"/>
1142 </properties>
1143 </tile>
1144 <tile id="333">
1145 <properties>
1146 <property name="solid" type="bool" value="true"/>
1147 </properties>
1148 </tile>
1149 <tile id="334">
1150 <properties>
1151 <property name="solid" type="bool" value="true"/>
1152 </properties>
1153 </tile>
1154 <tile id="335">
1155 <properties>
1156 <property name="solid" type="bool" value="true"/>
1157 </properties>
1158 </tile>
1159 <tile id="336">
1160 <properties>
1161 <property name="solid" type="bool" value="true"/>
1162 </properties>
1163 </tile>
1164 <tile id="337">
1165 <properties>
1166 <property name="solid" type="bool" value="true"/>
1167 </properties>
1168 </tile>
1169 <tile id="338">
1170 <properties>
1171 <property name="solid" type="bool" value="true"/>
1172 </properties>
1173 </tile>
1174 <tile id="339">
1175 <properties>
1176 <property name="solid" type="bool" value="true"/>
1177 </properties>
1178 </tile>
1179</tileset>
diff --git a/res/maps/underwater_start.tmx b/res/maps/underwater_start.tmx new file mode 100644 index 0000000..161bb3e --- /dev/null +++ b/res/maps/underwater_start.tmx
@@ -0,0 +1,136 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="32" height="32" tilewidth="16" tileheight="16" infinite="0" nextlayerid="4" nextobjectid="4">
3 <tileset firstgid="1" source="underwater.tsx"/>
4 <layer id="1" name="Lower" width="32" height="32">
5 <data encoding="csv">
6283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
7283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
8283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
9283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
10283,283,283,283,283,283,283,283,283,283,283,308,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
11283,283,283,283,283,283,283,283,309,310,311,312,309,310,311,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
12283,283,283,283,283,283,283,283,313,314,315,316,313,314,315,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
13283,283,283,283,283,283,283,283,317,318,319,320,317,318,319,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
14283,283,283,283,283,283,283,283,321,321,321,321,321,321,321,309,310,311,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
15283,283,283,283,283,283,283,283,283,321,321,321,321,322,323,313,314,315,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
16283,283,283,283,283,283,283,283,283,283,321,321,321,324,325,326,327,328,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
17283,283,283,283,283,283,283,283,283,283,321,321,321,2147483969,321,321,321,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
18283,283,283,283,283,283,283,2147483959,2147483958,2147483957,321,2147483969,321,321,321,321,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
19283,283,283,283,283,283,283,2147483963,2147483962,2147483961,2147483971,2147483970,321,321,322,323,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
20283,283,283,283,283,283,283,2147483967,2147483975,2147483974,2147483973,2147483972,321,321,324,325,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
21283,283,283,283,283,283,283,321,321,321,321,2147483969,321,321,321,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
22283,283,283,283,283,283,283,2147483971,2147483970,321,321,321,321,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
23283,283,283,283,283,283,283,2147483973,2147483972,321,321,322,323,283,283,283,283,283,283,308,283,283,283,283,283,283,283,283,283,283,283,283,
24283,283,283,283,283,283,2147483957,321,321,321,321,324,325,309,310,311,309,310,311,312,309,310,283,283,283,283,283,283,283,283,283,283,
25283,283,283,283,283,283,2147483961,2147483971,2147483970,2147483969,321,322,323,313,314,315,313,314,315,316,313,314,283,283,283,283,283,283,283,283,283,283,
26283,283,283,283,283,283,2147483974,2147483973,2147483972,2147483969,321,324,325,326,327,328,317,318,319,320,317,318,283,283,283,283,283,283,283,283,283,283,
27283,283,283,283,283,283,283,283,321,321,321,321,321,321,321,321,321,321,321,321,321,283,283,283,283,283,283,283,283,283,283,283,
28283,283,283,283,283,283,283,283,283,321,321,321,321,321,321,321,321,321,321,321,283,283,283,283,283,283,283,283,283,283,283,283,
29283,283,283,283,283,283,283,283,283,283,283,321,321,321,321,321,321,321,321,283,283,283,283,283,283,283,283,283,283,283,283,283,
30283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
31283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
32283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
33283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
34283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
35283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
36283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,
37283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283
38</data>
39 </layer>
40 <layer id="3" name="Lower (solid ornamentation)" width="32" height="32">
41 <data encoding="csv">
42129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
43129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
44129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
45129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
46129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
47129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
48129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
49129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
50129,129,129,129,129,129,129,129,283,129,129,129,129,129,335,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
51129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
52129,129,129,129,129,129,129,129,129,129,2147483979,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
53129,129,129,129,129,129,129,129,129,129,2147483981,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
54129,129,129,129,129,129,129,129,129,129,2147483983,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
55129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
56129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
57129,129,129,129,129,129,129,2147483985,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
58129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
59129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
60129,129,129,129,129,129,129,2147483983,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
61129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
62129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
63129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
64129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
65129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
66129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
67129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
68129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
69129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
70129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
71129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
72129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
73129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129
74</data>
75 </layer>
76 <objectgroup id="2" name="Objects">
77 <object id="1" name="spawn" type="warp" x="280.212" y="352.31">
78 <point/>
79 </object>
80 <object id="2" name="fish1" type="sprite" x="216.923" y="198.462">
81 <properties>
82 <property name="animation" value="../res/sprites/fish_anim.txt"/>
83 <property name="collisionHeight" type="int" value="8"/>
84 <property name="collisionOffsetX" type="int" value="-8"/>
85 <property name="collisionOffsetY" type="int" value="-8"/>
86 <property name="collisionWidth" type="int" value="12"/>
87 <property name="enclosureZone" value="fish1_enclosure"/>
88 <property name="interactionScript" value="talk_to_fish1"/>
89 <property name="movementSpeed" type="int" value="1"/>
90 <property name="shadow" type="bool" value="true"/>
91 <property name="wander" type="bool" value="true"/>
92 </properties>
93 <point/>
94 </object>
95 <object id="3" name="fish1_enclosure" type="zone" x="176" y="144" width="80" height="96"/>
96 </objectgroup>
97 <layer id="1" name="Upper" width="32" height="32">
98 <properties>
99 <property name="above" type="bool" value="true"/>
100 </properties>
101 <data encoding="csv">
102129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
103129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
104129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
105129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
106129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
107129,129,129,129,129,129,129,129,2147483977,129,129,129,129,129,330,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
108129,129,129,129,129,129,129,129,2147483979,129,129,129,129,129,331,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
109129,129,129,129,129,129,129,129,2147483980,129,129,129,129,129,333,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
110129,129,129,129,129,129,129,129,283,2147483982,129,129,129,129,335,129,129,330,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
111129,129,129,129,129,129,129,129,283,283,2147483984,129,129,129,129,129,129,331,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
112129,129,129,129,129,129,129,129,129,283,2147483979,129,129,129,129,129,129,332,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
113129,129,129,129,129,129,129,129,129,129,2147483981,129,129,129,129,129,334,283,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
114129,129,129,129,129,129,129,2147483977,129,129,2147483983,129,129,129,129,336,283,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
115129,129,129,129,129,129,129,2147483979,129,129,129,129,129,129,129,331,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
116129,129,129,129,129,129,129,2147483981,129,129,129,129,129,129,129,332,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
117129,129,129,129,129,129,129,2147483985,129,129,129,129,129,334,338,283,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
118129,129,129,129,129,129,129,2147483979,129,129,129,129,336,283,283,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
119129,129,129,129,129,129,129,2147483981,129,129,129,129,331,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
120129,129,129,129,283,283,2147483979,2147483983,129,129,129,129,335,129,129,129,129,129,129,129,129,330,129,129,129,129,129,129,129,129,129,129,
121129,129,129,129,129,129,2147483980,129,129,129,129,129,129,129,129,129,129,129,129,129,129,331,129,129,129,129,129,129,129,129,129,129,
122129,129,129,129,129,129,283,2147483982,129,129,129,129,129,129,129,129,129,129,129,129,129,332,129,129,129,129,129,129,129,129,129,129,
123129,129,129,129,129,129,129,283,2147483982,129,129,129,129,129,129,129,129,129,129,129,334,283,129,129,129,129,129,129,129,129,129,129,
124129,129,129,129,129,129,129,129,283,338,2147483982,129,129,129,129,129,129,129,129,334,283,129,129,129,129,129,129,129,129,129,129,129,
125129,129,129,129,129,129,129,129,129,129,283,2147483987,2147483954,306,339,2147483987,2147483954,306,339,283,129,129,129,129,129,129,129,129,129,129,129,129,
126129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
127129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
128129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
129129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
130129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
131129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
132129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
133129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129
134</data>
135 </layer>
136</map>
diff --git a/res/maps/underwater_tiles.png b/res/maps/underwater_tiles.png new file mode 100644 index 0000000..3841a6f --- /dev/null +++ b/res/maps/underwater_tiles.png
Binary files differ
diff --git a/res/scripts/common.lua b/res/scripts/common.lua index af25333..e95f6f1 100644 --- a/res/scripts/common.lua +++ b/res/scripts/common.lua
@@ -34,6 +34,10 @@ CutsceneOptions = {
34 DO_NOT_CHANGE_ANIMATION = 1 -- Prevents player party animation being set to "frozen" at the start of a cutscene or "still" at the end 34 DO_NOT_CHANGE_ANIMATION = 1 -- Prevents player party animation being set to "frozen" at the start of a cutscene or "still" at the end
35} 35}
36 36
37ChangeMapOptions = {
38 DO_NOT_FADE = 1 -- Prevents fading to and from black
39}
40
37gamestate = {} 41gamestate = {}
38 42
39--- Yields until the specified amount of time has passed. 43--- Yields until the specified amount of time has passed.
@@ -129,6 +133,11 @@ function GetPosition(spriteName)
129 return sprite.loc 133 return sprite.loc
130end 134end
131 135
136function SetPosition(spriteName, x, y)
137 local spriteId = getSpriteByAlias(spriteName)
138 transform():moveSprite(spriteId, vec2i.new(x, y))
139end
140
132function SetDirection(spriteName, dir) 141function SetDirection(spriteName, dir)
133 local spriteId = getSpriteByAlias(spriteName) 142 local spriteId = getSpriteByAlias(spriteName)
134 animation():setSpriteDirection(spriteId, dir) 143 animation():setSpriteDirection(spriteId, dir)
@@ -239,18 +248,24 @@ function SetPartyAnimation(spriteId, animName)
239 end 248 end
240end 249end
241 250
242function ChangeMap(map, warp) 251function ChangeMap(map, warp, options)
252 options = options or 0
253
243 local playerId = getPlayerSprite() 254 local playerId = getPlayerSprite()
244 local playerSprite = getSprite(playerId) 255 local playerSprite = getSprite(playerId)
245 local direction = playerSprite.dir 256 local direction = playerSprite.dir
246 257
247 playerSprite.controllable = false 258 playerSprite.controllable = false
248 FadeToBlack(150) 259 if (options & ChangeMapOptions.DO_NOT_FADE == 0) then
260 FadeToBlack(150)
261 end
249 loadMap(map) 262 loadMap(map)
250 character():transplantParty(playerId, getWarpPoint(warp), direction) 263 character():transplantParty(playerId, getWarpPoint(warp), direction)
251 264
252 coroutine.yield() 265 coroutine.yield()
253 RemoveFadeout(150) 266 if (options & ChangeMapOptions.DO_NOT_FADE == 0) then
267 RemoveFadeout(150)
268 end
254 playerSprite.controllable = true 269 playerSprite.controllable = true
255end 270end
256 271
diff --git a/res/scripts/hallucination_hot_spring.lua b/res/scripts/hallucination_hot_spring.lua index df4084c..4e3ca44 100644 --- a/res/scripts/hallucination_hot_spring.lua +++ b/res/scripts/hallucination_hot_spring.lua
@@ -15,15 +15,20 @@ end
15 15
16function hallucination_hot_spring.enter_hot_spring() 16function hallucination_hot_spring.enter_hot_spring()
17 if gamestate.ionia_in_water then 17 if gamestate.ionia_in_water then
18 StartCutscene(CutsceneOptions.DO_NOT_CHANGE_ANIMATION) 18 -- Soft cutscene start; don't show bars but do take away control
19 getSprite(getPlayerSprite()).controllable = false
20 character():halt(getPlayerSprite())
21
22 -- Leave the rest of the party behind and have Lucas wade into the hot spring
19 character():breakUpParty(getPlayerSprite()) 23 character():breakUpParty(getPlayerSprite())
20 getSprite(getPlayerSprite()).paused = false
21 character():moveInDirection(getPlayerSprite(), Direction.UP) 24 character():moveInDirection(getPlayerSprite(), Direction.UP)
22 Delay(500) 25 Delay(500)
23 character():stopDirecting(getPlayerSprite()) 26 character():stopDirecting(getPlayerSprite())
24 getSprite(getPlayerSprite()).paused = true
25 SetDirection("lucas", Direction.DOWN) 27 SetDirection("lucas", Direction.DOWN)
26 Delay(1000) 28 Delay(1000)
29
30 -- Show the cutscene bars when he gets surprised
31 StartCutscene(CutsceneOptions.DO_NOT_CHANGE_ANIMATION)
27 ShowExpression("lucas", "surprise") 32 ShowExpression("lucas", "surprise")
28 Delay(1000) 33 Delay(1000)
29 RemoveExpression("lucas") 34 RemoveExpression("lucas")
@@ -32,6 +37,21 @@ function hallucination_hot_spring.enter_hot_spring()
32 Delay(200) 37 Delay(200)
33 PlaySound("splash_submerge.wav") 38 PlaySound("splash_submerge.wav")
34 WaitForAnimation("lucas") 39 WaitForAnimation("lucas")
40 Delay(1000)
41
42 -- After we fade to black, move the rest of the party offscreen.
43 -- We need to remove control again right after the map change because
44 -- ChangeMap automatically gives it back.
45 FadeToBlack(1000)
46 HideCutsceneBars()
47 SetPosition("kuma", -100, -100)
48 SetPosition("duster", -100, -100)
49 SetPosition("boney", -100, -100)
50 ChangeMap("underwater_start", "spawn", ChangeMapOptions.DO_NOT_FADE)
51 getSprite(getPlayerSprite()).controllable = false
52 Delay(500)
53 RemoveFadeout(1000)
54 getSprite(getPlayerSprite()).controllable = true
35 end 55 end
36end 56end
37 57
diff --git a/res/scripts/underwater.lua b/res/scripts/underwater.lua index cc6d085..602c8d4 100644 --- a/res/scripts/underwater.lua +++ b/res/scripts/underwater.lua
@@ -1,57 +1,50 @@
1underwater = {} 1underwater = {}
2 2
3function underwater.fish1()
4 StartCutscene()
5 DisplayMessage("* You deserved what she did to you.", "Fish", SpeakerType.BOY)
6 WaitForEndOfMessages()
7 HideCutsceneBars()
8end
9
10function underwater.fish2() 3function underwater.fish2()
11 StartCutscene() 4 StartCutscene()
12 DisplayMessage("* What are you complaining about?\nYou're so powerful now...\n\fYou owe it all to her.", "Fish", SpeakerType.BOY) 5 DisplayMessage("* What are you complaining about?\nYou're so powerful now...\n\fYou owe it all to her.", "Fish", SpeakerType.BOY)
13 WaitForEndOfMessages() 6 WaitForEndOfMessage()
14 HideCutsceneBars() 7 HideCutsceneBars()
15end 8end
16 9
17function underwater.fish3() 10function underwater.fish3()
18 StartCutscene() 11 StartCutscene()
19 DisplayMessage("* You wanted to become stronger, and now you're stronger. Quit crying.\n\f* Oh wait, that wasn't you.\n\fThat was Claus.\n\fYou were totally willing to stay at home and cry.", "Fish", SpeakerType.BOY) 12 DisplayMessage("* You wanted to become stronger, and now you're stronger. Quit crying.\n\f* Oh wait, that wasn't you.\n\fThat was Claus.\n\fYou were totally willing to stay at home and cry.", "Fish", SpeakerType.BOY)
20 WaitForEndOfMessages() 13 WaitForEndOfMessage()
21 HideCutsceneBars() 14 HideCutsceneBars()
22end 15end
23 16
24function underwater.fish4() 17function underwater.fish4()
25 StartCutscene() 18 StartCutscene()
26 DisplayMessage("* You think it hurt when your PSI unlocked?\n\fJust picture what it was like for Claus.", "Fish", SpeakerType.BOY) 19 DisplayMessage("* You think it hurt when your PSI unlocked?\n\fJust picture what it was like for Claus.", "Fish", SpeakerType.BOY)
27 WaitForEndOfMessages() 20 WaitForEndOfMessage()
28 HideCutsceneBars() 21 HideCutsceneBars()
29end 22end
30 23
31function underwater.fish5() 24function underwater.fish5()
32 StartCutscene() 25 StartCutscene()
33 DisplayMessage("* What did Aeolia do to your brother?\n\fStrangle him?\n\fPush him down a flight of stairs?\n\fMaybe it was in the hot spring just like you.", "Fish", SpeakerType.BOY) 26 DisplayMessage("* What did Aeolia do to your brother?\n\fStrangle him?\n\fPush him down a flight of stairs?\n\fMaybe it was in the hot spring just like you.", "Fish", SpeakerType.BOY)
34 WaitForEndOfMessages() 27 WaitForEndOfMessage()
35 HideCutsceneBars() 28 HideCutsceneBars()
36end 29end
37 30
38function underwater.fish6() 31function underwater.fish6()
39 StartCutscene() 32 StartCutscene()
40 DisplayMessage("* Still, you're probably eager to get your revenge. You don't fool me.\n\f* You have everyone else fooled but you can't fool yourself.", "Fish", SpeakerType.BOY) 33 DisplayMessage("* Still, you're probably eager to get your revenge. You don't fool me.\n\f* You have everyone else fooled but you can't fool yourself.", "Fish", SpeakerType.BOY)
41 WaitForEndOfMessages() 34 WaitForEndOfMessage()
42 HideCutsceneBars() 35 HideCutsceneBars()
43end 36end
44 37
45function underwater.fish7() 38function underwater.fish7()
46 StartCutscene() 39 StartCutscene()
47 DisplayMessage("* There's only three left.\nAnd after Mixolydia, it'll be her.", "Fish", SpeakerType.BOY) 40 DisplayMessage("* There's only three left.\nAnd after Mixolydia, it'll be her.", "Fish", SpeakerType.BOY)
48 WaitForEndOfMessages() 41 WaitForEndOfMessage()
49 HideCutsceneBars() 42 HideCutsceneBars()
50end 43end
51 44
52function underwater.fish8() 45function underwater.fish8()
53 StartCutscene() 46 StartCutscene()
54 DisplayMessage("* I bet you can't wait to wrap your hands around her needle,\n\fand\n\fpull\n\fas\n\fhard\n\fas\n\fyou\n\fcan.", "Fish", SpeakerType.BOY) 47 DisplayMessage("* I bet you can't wait to wrap your hands around her needle,\n\fand\n\fpull\n\fas\n\fhard\n\fas\n\fyou\n\fcan.", "Fish", SpeakerType.BOY)
55 WaitForEndOfMessages() 48 WaitForEndOfMessage()
56 HideCutsceneBars() 49 HideCutsceneBars()
57end 50end
diff --git a/res/scripts/underwater_start.lua b/res/scripts/underwater_start.lua new file mode 100644 index 0000000..fe582ab --- /dev/null +++ b/res/scripts/underwater_start.lua
@@ -0,0 +1,8 @@
1underwater_start = {}
2
3function underwater_start.talk_to_fish1()
4 StartCutscene()
5 DisplayMessage("* You deserved what she did to you.", "Fish", SpeakerType.BOY)
6 WaitForEndOfMessage()
7 HideCutsceneBars()
8end \ No newline at end of file
diff --git a/src/character_system.cpp b/src/character_system.cpp index d18c592..a24bdcc 100644 --- a/src/character_system.cpp +++ b/src/character_system.cpp
@@ -46,10 +46,12 @@ void CharacterSystem::addSpriteToParty(int leaderId, int followerId) {
46void CharacterSystem::transplantParty(int leaderId, vec2i pos, Direction dir) { 46void CharacterSystem::transplantParty(int leaderId, vec2i pos, Direction dir) {
47 Sprite& leader = game_.getSprite(leaderId); 47 Sprite& leader = game_.getSprite(leaderId);
48 CharacterState oldState = leader.characterState; 48 CharacterState oldState = leader.characterState;
49 CharacterMedium newMedium = game_.getSystem<TransformSystem>().getMediumAtPosition(leaderId, pos);
49 50
50 std::vector<int> followers = leader.followers; 51 std::vector<int> followers = leader.followers;
51 leader.followers.clear(); 52 leader.followers.clear();
52 leader.trailsAreHalved = false; 53 leader.trailsAreHalved = false;
54 leader.characterMedium = newMedium;
53 55
54 game_.getSystem<TransformSystem>().moveSprite(leaderId, pos); 56 game_.getSystem<TransformSystem>().moveSprite(leaderId, pos);
55 game_.getSystem<AnimationSystem>().setSpriteDirection(leaderId, dir); 57 game_.getSystem<AnimationSystem>().setSpriteDirection(leaderId, dir);
@@ -60,6 +62,7 @@ void CharacterSystem::transplantParty(int leaderId, vec2i pos, Direction dir) {
60 62
61 game_.getSystem<TransformSystem>().moveSprite(followerId, pos); 63 game_.getSystem<TransformSystem>().moveSprite(followerId, pos);
62 game_.getSystem<AnimationSystem>().setSpriteDirection(followerId, dir); 64 game_.getSystem<AnimationSystem>().setSpriteDirection(followerId, dir);
65 follower.characterMedium = newMedium;
63 addSpriteToParty(leaderId, followerId); 66 addSpriteToParty(leaderId, followerId);
64 } 67 }
65 68
diff --git a/src/script_system.cpp b/src/script_system.cpp index 0d82436..31b8bee 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp
@@ -17,6 +17,7 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) {
17 17
18 engine_.new_usertype<vec2i>( 18 engine_.new_usertype<vec2i>(
19 "vec2i", 19 "vec2i",
20 sol::constructors<vec2i(int, int)>(),
20 "x", [] (const vec2i& v) { return v.x(); }, 21 "x", [] (const vec2i& v) { return v.x(); },
21 "y", [] (const vec2i& v) { return v.y(); }); 22 "y", [] (const vec2i& v) { return v.y(); });
22 23
@@ -70,7 +71,8 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) {
70 "initSprite", [] (TransformSystem& transform, int spriteId, int x, int y, SpriteLayer layer) { 71 "initSprite", [] (TransformSystem& transform, int spriteId, int x, int y, SpriteLayer layer) {
71 transform.initSprite(spriteId, vec2i{x, y}, layer); 72 transform.initSprite(spriteId, vec2i{x, y}, layer);
72 }, 73 },
73 "undoCollision", &TransformSystem::undoCollision); 74 "undoCollision", &TransformSystem::undoCollision,
75 "moveSprite", &TransformSystem::moveSprite);
74 76
75 engine_.new_usertype<EffectSystem>( 77 engine_.new_usertype<EffectSystem>(
76 "effect", 78 "effect",