From 4b740d52b652b5bdce801e116debaf5e219dbd4d Mon Sep 17 00:00:00 2001 From: Czirkos Zoltan Date: Fri, 13 Mar 2015 21:44:53 +0100 Subject: [PATCH] 20090122 --- Makefile.am | 2 +- Makefile.in | 4 +- TODO | 42 +- caves/Makefile.am | 2 +- caves/Makefile.in | 16 +- caves/various/Boulder_Dash_1.bd | 3 +- caves/various/Boulder_Dash_1.gds | Bin 1670 -> 1670 bytes caves/various/{Cws_Boulder.gds => CWS_Boulder.gds} | Bin caves/various/CWS_Boulder_2.bd | 1771 ++++++++++++ .../{Cws_Boulder_2.gds => CWS_Boulder_2.gds} | Bin config.h.in | 3 + configure | 150 +- configure.in | 5 +- docs/Makefile.am | 7 +- docs/Makefile.in | 8 +- docs/avidemux_codec.png | Bin 0 -> 60290 bytes docs/avidemux_fps.png | Bin 0 -> 16857 bytes docs/background.png | Bin 0 -> 8084 bytes docs/cave_style.css | 25 + docs/gdash.png | Bin 0 -> 1081 bytes docs/replay_to_avi.html | 151 + docs/style.css | 54 + engine_tests.bd | 274 +- gdash.nsi.in | 14 +- include/Makefile.in | 2 + include/boulder_rush.png | Bin 21924 -> 22422 bytes include/c64_gfx.h | 994 +++---- include/c64_gfx.png | Bin 11489 -> 11608 bytes include/gdash_screen.png | Bin 7424 -> 7543 bytes include/icons.h | 844 +++--- include/image.png | Bin 2058 -> 2381 bytes include/title.h | 472 +-- music/Makefile.in | 2 + po/de.gmo | Bin 133917 -> 165303 bytes po/de.po | 3021 ++++++++++++-------- po/gdash.pot | 2314 ++++++++------- po/hu.gmo | Bin 132583 -> 157302 bytes po/hu.po | 2854 ++++++++++-------- .../Boulder_Dash_1.bd => replays_example.bd | 201 +- sound/Makefile.in | 2 + src/IMG_savepng.c | 281 ++ src/IMG_savepng.h | 53 + src/Makefile.am | 52 +- src/Makefile.in | 396 ++- src/about.c | 3 +- src/bdcff.c | 10 +- src/c64import.c | 70 +- src/cave.c | 82 +- src/cave.h | 163 +- src/cavedb.c | 326 ++- src/caveengine.c | 587 ++-- src/caveset.c | 109 +- src/caveset.h | 2 + src/editor.c | 14 +- src/editorexport.c | 178 +- src/editorexport.h | 2 +- src/editorwidgets.c | 18 +- src/gameplay.c | 72 +- src/gameplay.h | 12 +- src/gtkgfx.c | 37 +- src/gtkgfx.h | 2 +- src/gtkmain.c | 87 +- src/gtkui.c | 18 +- src/help.c | 33 +- src/sdlgfx.c | 261 +- src/sdlgfx.h | 22 +- src/sdlmain.c | 602 +--- src/sdlreplay.c | 650 +++++ src/sdlui.c | 293 +- src/sdlui.h | 34 +- src/settings.c | 15 + src/settings.h | 7 + src/sound.c | 40 +- src/sound.h | 7 +- src/util.c | 14 + src/util.h | 2 + util/Makefile.in | 2 + 77 files changed, 11558 insertions(+), 6235 deletions(-) rename caves/various/{Cws_Boulder.gds => CWS_Boulder.gds} (100%) create mode 100644 caves/various/CWS_Boulder_2.bd rename caves/various/{Cws_Boulder_2.gds => CWS_Boulder_2.gds} (100%) create mode 100644 docs/avidemux_codec.png create mode 100644 docs/avidemux_fps.png create mode 100644 docs/background.png create mode 100644 docs/cave_style.css create mode 100644 docs/gdash.png create mode 100644 docs/replay_to_avi.html create mode 100644 docs/style.css rewrite include/boulder_rush.png (99%) rewrite include/c64_gfx.png (99%) rewrite include/gdash_screen.png (64%) rewrite include/image.png (99%) rewrite po/de.gmo (92%) rewrite po/hu.gmo (87%) copy caves/various/Boulder_Dash_1.bd => replays_example.bd (73%) create mode 100644 src/IMG_savepng.c create mode 100644 src/IMG_savepng.h create mode 100644 src/sdlreplay.c diff --git a/Makefile.am b/Makefile.am index abbf390..8e56706 100644 --- a/Makefile.am +++ b/Makefile.am @@ -11,5 +11,5 @@ desktop_DATA = gdash.desktop gdash.nsi: gdash.nsi.in sed s/GDASH-VERSION/$(PACKAGE_VERSION)/ <$^ >$@ -EXTRA_DIST = config.rpath mkinstalldirs m4/ChangeLog gdash.ico gdash.nsi.in $(desktop_DATA) engine_tests.bd COPYING.SDL COPYING.GTK README-SDL.txt +EXTRA_DIST = config.rpath mkinstalldirs m4/ChangeLog gdash.ico gdash.nsi.in $(desktop_DATA) engine_tests.bd replays_example.bd COPYING.SDL COPYING.GTK README-SDL.txt diff --git a/Makefile.in b/Makefile.in index ceba9a0..e9d1db2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -126,6 +126,8 @@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ @@ -209,7 +211,7 @@ SUBDIRS = po include src caves util docs sound music ACLOCAL_AMFLAGS = -I m4 desktopdir = $(datadir)/applications desktop_DATA = gdash.desktop -EXTRA_DIST = config.rpath mkinstalldirs m4/ChangeLog gdash.ico gdash.nsi.in $(desktop_DATA) engine_tests.bd COPYING.SDL COPYING.GTK README-SDL.txt +EXTRA_DIST = config.rpath mkinstalldirs m4/ChangeLog gdash.ico gdash.nsi.in $(desktop_DATA) engine_tests.bd replays_example.bd COPYING.SDL COPYING.GTK README-SDL.txt all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive diff --git a/TODO b/TODO index 640a8a8..f63047a 100644 --- a/TODO +++ b/TODO @@ -1,18 +1,20 @@ DONE ------ +----- +Could you list the difficulty level each replay was recorded at in SDash, as well as GDash? -REFUSED -------- +TO DO +----- +lehessen csak nézni is +fragile diamonds +How about a gate that shuts after a certain amount of diamonds have been collected? Just put the gate in front of the exit and have a number somewhere that counts down the diamonds until it closes. -TO DO ------ -c64 grafika tomb meretet ellenorizni, legalabb a szorzat meglegyen -I really like the new scrolling function, but at cave start a problem can appear. If the game is paused with the screen on the opposite side of the cave as the "start", Rockford will hatch offscreen before the scrolling catches up to him. Allowing a fast scroll at cave start - until hatch would fix it. +replay long comment +portable conveyor belts? destructible, convey each other. new elements sound @@ -20,56 +22,34 @@ Amoeba2 sound new slime sound replicator sound -flying diamonds, flying stones - -flying stone=baloon - - theme image glob pattern amikor bezárja az editor ablakot, akkor kéne egy replay checksum update? vagy a delete event, és akkor rákérdez -TITLE SCREEN - Animated intro screen would be nice. It's not necessary to see a complete game or so but animated walls, diamonds, butterflies, etc. would be nice. Same as in the original C64 games. - Maybe animate the intro screen? It might be cool to have a little background cave where the elements move around. Or something. - STATUS BAR As for the status bar in GDash: Maybe a little bit larger font would do the thing. There is enough space to use a larger font. -Maybe game notes can be displayed under the title screen as soon as the game is loaded. Optionally at least if someone does not like to show it automatically. - -Maybe a button to apply certain settings to all caves. We'd have to think of which may be appropriate. Timing maybe. Or color palette type. Dunno about this one. +Maybe game notes can be displayed under the title screen as soon as the game is loaded. Optionally at least if someone does not like to show it automatically. Already suggested I think: Atari sounds. -copy&paste elengedés után movera vált, - -brc slime permeability -if (random(slime*4)<4) and (tab[x,y+2]=0) then - Begin tab[x,y]:=0;col[x,y+2]:=col[x,y];tab[x,y+2]:=27;mat[x,y+2]:=9;Voice4:=2;end; -- Time bonus of -100 really seems odd. amoeba threshold - belül %-ban tárolódik, de az editor átállítja? -gtk verzióba {TypeBoolean, N_("Even lines vertical scroll"), N_("Even lines vertical scroll"), &gd_even_line_pal_emu_vertical_scroll, FALSE}, - bdcff beolvasás miért hash table? size és hasonló szarok miatt de tobb értéket is kéne tárolni esetleg, a hash table ezt akadályozza design tips? -extensive commenting - cow not perfect option "More than 1 bomb" in the cave settings compat: - *) magicwall breakscan; De Luxe Caves 1 Cave L, De Luxe Caves 2 Cave A, Deluxe Caves 3 Cave A + *) magicwall breakscan; De Luxe Caves 1 Cave L, De Luxe Caves 2 Cave A, Deluxe Caves 3 Cave A *) frustidash -portable conveyor belts? destructible, convey each other. diff --git a/caves/Makefile.am b/caves/Makefile.am index a0d6270..e01fb70 100644 --- a/caves/Makefile.am +++ b/caves/Makefile.am @@ -73,7 +73,7 @@ Prof_Knibble_CAVES = Prof_Knibble/Boulder_Dash_Thursday.gds Prof_Knibble/Knibble Prof_Knibble_DATA = $(Prof_Knibble_CAVES) variousdir = $(pkgdatadir)/caves/various -various_CAVES = various/Joker_Dash_1.gds various/Boulder_Dash_2_Atari.bd various/Achim_Haertel.gds various/Dididash_2.gds various/Fraggle_Dash_One.gds various/Rockford_Im_Nimmerland_2.gds various/Boulder_Dash_9_6.gds various/Boulder_Dash_2000.gds various/Cash_Dash.gds various/Boulder_Dash_12_Faj_Soft.gds various/Boulder_Dash_9_1.gds various/Boulder_Dash_9_7.gds various/Mjr_Boulder_Dash.gds various/Boulder_Dash_9.gds various/Angels_Boulder_2.gds various/Polish_Boulderdash.gds various/Boulder_Dash_8_Hacker.gds various/Cws_Boulder.gds various/Boulder_Dash_Pro.gds various/Boulder_Dash_9_3.gds various/Cup_Dash_4.gds various/Hooligan_Dash_01.gds various/Cheech_Und_Chongs_Boulder_1.gds various/Afl.gds various/Labyrinth_Dash.gds various/Falcon_Dash-the_Dark_Cave.gds various/Boulder_Dash_5_Artur_Losinski.gds various/Boulder_Dash_9_9.gds various/Orion_Dash_1.gds various/Boulderdash-ux.bd various/Mr_Rockford_Boulder_Dash_12.gds various/Boulder_Dash_3_Atari.gds various/Falcon_Dash-the_Big_Diamond.gds various/Boulder_Dash_3.bd various/Boulder_Dash_3.gds various/Metsemakers_Dash_1.brc various/3_Boulderdash_Games_B.gds various/Unknown_Boulderdash_12.gds various/Boulder_Dash_9_8.gds various/Boulder_Dash_1.gds various/Dr_Watson_4_No_One_Version.gds various/Ataraxy_Dash_01.gds various/Gods_Boulder_II.gds various/Blue_Wonder.gds various/Construction_Kit_Examples.gds various/Mb_Games_6.gds various/Boulder_Dash_2.bd various/New_Boulder_Dash_01.gds various/Mb_Games_1.gds various/Dididash_1.gds various/Falcon_Dash-the_Legend_Continues.gds various/Achim_Hofmann.gds various/Boulder_Dash_1_Atari.gds various/Boulder_Dash_Beginner.gds various/Afl_Posocopi.gds various/Mb_Games_8.gds various/Hooligan_Dash_03.gds various/Cws_Boulder_2.gds various/Giga_Boulder_1.gds various/Thomas_Boulder.gds various/Boulderdash-ux.gds various/Boulder_Dash_7_Madgame.gds various/Super_Boulder_Dash_1_Chaos.gds various/Boulder_Dash_9_4.gds various/Boulder_Dash_Iv.gds various/Lucky_Dash.gds various/Dr_Watson_4.gds various/Boulder_Dash_2_Atari.gds various/3_Boulderdash_Games_C.gds various/Frusti_Dash.gds various/Bouder_Dash_Geil.gds various/Boulder_Dash_1_Atari.bd various/Gods_Boulder.gds various/Mb_Games_4.gds various/Boulder_Dash_1.bd various/Blunder_Bash.gds various/Construction_Kit.gds various/Boulder_Dash_8_Artur_Losinski.gds various/Mb_Games_3.gds various/Masters_Boulder_Dash.gds various/Mr_Rockford_Boulder_Dash_13.gds various/Eclips_Dash_Part_B.gds various/Mb_Games_9.gds various/Mb_Games_0.gds various/Boulder_Dash_9_2.gds various/Angels_Boulder_1.gds various/Boulder_Dash_6_Padajici_Balvany.gds various/Mjman_S_Boulder_Dash.gds various/Mb_Games_5.gds various/3_Boulderdash_Games_A.gds various/Boulder_Dash_2.gds various/Arkanoid.gds various/Mb_Games_2.gds various/Joker_Dash_4.gds various/Boulder_Dash_11.gds various/Boulder_Dash_9_5.gds various/Boulder_Dash_The_Lost_Levels.gds various/Mb_Games_7.gds various/Boulder_Dash_Super_Prof.gds various/Cheech_Und_Chongs_Boulder_2.gds +various_CAVES = various/Joker_Dash_1.gds various/Boulder_Dash_2_Atari.bd various/Achim_Haertel.gds various/Dididash_2.gds various/Fraggle_Dash_One.gds various/Rockford_Im_Nimmerland_2.gds various/Boulder_Dash_9_6.gds various/Boulder_Dash_2000.gds various/Cash_Dash.gds various/Boulder_Dash_12_Faj_Soft.gds various/Boulder_Dash_9_1.gds various/Boulder_Dash_9_7.gds various/Mjr_Boulder_Dash.gds various/Boulder_Dash_9.gds various/Angels_Boulder_2.gds various/Polish_Boulderdash.gds various/Boulder_Dash_8_Hacker.gds various/Boulder_Dash_Pro.gds various/Boulder_Dash_9_3.gds various/Cup_Dash_4.gds various/Hooligan_Dash_01.gds various/CWS_Boulder_2.gds various/Cheech_Und_Chongs_Boulder_1.gds various/Afl.gds various/Labyrinth_Dash.gds various/Falcon_Dash-the_Dark_Cave.gds various/Boulder_Dash_5_Artur_Losinski.gds various/Boulder_Dash_9_9.gds various/Orion_Dash_1.gds various/Boulderdash-ux.bd various/Mr_Rockford_Boulder_Dash_12.gds various/Boulder_Dash_3_Atari.gds various/Falcon_Dash-the_Big_Diamond.gds various/Boulder_Dash_3.bd various/Boulder_Dash_3.gds various/Metsemakers_Dash_1.brc various/3_Boulderdash_Games_B.gds various/Unknown_Boulderdash_12.gds various/Boulder_Dash_9_8.gds various/Boulder_Dash_1.gds various/Dr_Watson_4_No_One_Version.gds various/Ataraxy_Dash_01.gds various/Gods_Boulder_II.gds various/Blue_Wonder.gds various/Construction_Kit_Examples.gds various/Mb_Games_6.gds various/Boulder_Dash_2.bd various/New_Boulder_Dash_01.gds various/Mb_Games_1.gds various/Dididash_1.gds various/Falcon_Dash-the_Legend_Continues.gds various/Achim_Hofmann.gds various/Boulder_Dash_1_Atari.gds various/Boulder_Dash_Beginner.gds various/Afl_Posocopi.gds various/Mb_Games_8.gds various/Hooligan_Dash_03.gds various/Giga_Boulder_1.gds various/Thomas_Boulder.gds various/Boulderdash-ux.gds various/CWS_Boulder_2.bd various/Boulder_Dash_7_Madgame.gds various/Super_Boulder_Dash_1_Chaos.gds various/Boulder_Dash_9_4.gds various/Boulder_Dash_Iv.gds various/CWS_Boulder.gds various/Lucky_Dash.gds various/Dr_Watson_4.gds various/Boulder_Dash_2_Atari.gds various/3_Boulderdash_Games_C.gds various/Frusti_Dash.gds various/Bouder_Dash_Geil.gds various/Boulder_Dash_1_Atari.bd various/Gods_Boulder.gds various/Mb_Games_4.gds various/Boulder_Dash_1.bd various/Blunder_Bash.gds various/Construction_Kit.gds various/Boulder_Dash_8_Artur_Losinski.gds various/Mb_Games_3.gds various/Masters_Boulder_Dash.gds various/Mr_Rockford_Boulder_Dash_13.gds various/Eclips_Dash_Part_B.gds various/Mb_Games_9.gds various/Mb_Games_0.gds various/Boulder_Dash_9_2.gds various/Angels_Boulder_1.gds various/Boulder_Dash_6_Padajici_Balvany.gds various/Mjman_S_Boulder_Dash.gds various/Mb_Games_5.gds various/3_Boulderdash_Games_A.gds various/Boulder_Dash_2.gds various/Arkanoid.gds various/Mb_Games_2.gds various/Joker_Dash_4.gds various/Boulder_Dash_11.gds various/Boulder_Dash_9_5.gds various/Boulder_Dash_The_Lost_Levels.gds various/Mb_Games_7.gds various/Boulder_Dash_Super_Prof.gds various/Cheech_Und_Chongs_Boulder_2.gds various_DATA = $(various_CAVES) Rolf_Rothdir = $(pkgdatadir)/caves/Rolf_Roth diff --git a/caves/Makefile.in b/caves/Makefile.in index 7f77fc0..fb7a152 100644 --- a/caves/Makefile.in +++ b/caves/Makefile.in @@ -175,6 +175,8 @@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ @@ -499,9 +501,9 @@ various_CAVES = various/Joker_Dash_1.gds \ various/Boulder_Dash_9_1.gds various/Boulder_Dash_9_7.gds \ various/Mjr_Boulder_Dash.gds various/Boulder_Dash_9.gds \ various/Angels_Boulder_2.gds various/Polish_Boulderdash.gds \ - various/Boulder_Dash_8_Hacker.gds various/Cws_Boulder.gds \ - various/Boulder_Dash_Pro.gds various/Boulder_Dash_9_3.gds \ - various/Cup_Dash_4.gds various/Hooligan_Dash_01.gds \ + various/Boulder_Dash_8_Hacker.gds various/Boulder_Dash_Pro.gds \ + various/Boulder_Dash_9_3.gds various/Cup_Dash_4.gds \ + various/Hooligan_Dash_01.gds various/CWS_Boulder_2.gds \ various/Cheech_Und_Chongs_Boulder_1.gds various/Afl.gds \ various/Labyrinth_Dash.gds \ various/Falcon_Dash-the_Dark_Cave.gds \ @@ -526,13 +528,13 @@ various_CAVES = various/Joker_Dash_1.gds \ various/Achim_Hofmann.gds various/Boulder_Dash_1_Atari.gds \ various/Boulder_Dash_Beginner.gds various/Afl_Posocopi.gds \ various/Mb_Games_8.gds various/Hooligan_Dash_03.gds \ - various/Cws_Boulder_2.gds various/Giga_Boulder_1.gds \ - various/Thomas_Boulder.gds various/Boulderdash-ux.gds \ + various/Giga_Boulder_1.gds various/Thomas_Boulder.gds \ + various/Boulderdash-ux.gds various/CWS_Boulder_2.bd \ various/Boulder_Dash_7_Madgame.gds \ various/Super_Boulder_Dash_1_Chaos.gds \ various/Boulder_Dash_9_4.gds various/Boulder_Dash_Iv.gds \ - various/Lucky_Dash.gds various/Dr_Watson_4.gds \ - various/Boulder_Dash_2_Atari.gds \ + various/CWS_Boulder.gds various/Lucky_Dash.gds \ + various/Dr_Watson_4.gds various/Boulder_Dash_2_Atari.gds \ various/3_Boulderdash_Games_C.gds various/Frusti_Dash.gds \ various/Bouder_Dash_Geil.gds various/Boulder_Dash_1_Atari.bd \ various/Gods_Boulder.gds various/Mb_Games_4.gds \ diff --git a/caves/various/Boulder_Dash_1.bd b/caves/various/Boulder_Dash_1.bd index 5c18665..b89ea1f 100644 --- a/caves/various/Boulder_Dash_1.bd +++ b/caves/various/Boulder_Dash_1.bd @@ -97,7 +97,6 @@ FrameTime=200 200 200 200 200 RandSeed=0 50 54 52 55 RandomFill=WALL 100 BOULDER 50 DIAMOND 9 SPACE 0 ActiveGuyIsFirst=false -AmoebaTime=0 0 0 0 0 MagicWallTime=0 0 0 0 0 SlimePermeabilityC64=0 0 0 0 0 AcidProperties=DIAMONDBIRTH5 0.0157 @@ -557,7 +556,7 @@ Intermission=false IntermissionProperties.instantlife=true IntermissionProperties.rewardlife=false Size=40 22 0 0 39 21 -Colors=Black Black Orange LightRed White White White +Colors=Black Black Gray2 LightRed White White White DiamondsRequired=19 19 14 16 21 DiamondValue=20 0 CaveTime=180 170 160 160 160 diff --git a/caves/various/Boulder_Dash_1.gds b/caves/various/Boulder_Dash_1.gds index ecd6edc61b17cfcf081790870933824a4013b865..80186b63232f9822eaf520cb25c6705c14ba92ac 100644 GIT binary patch delta 14 VcwTGcZR6eWfSHkJ^F!vPOaLZf1qA>A delta 14 VcwTGcZR6eWfSFNZ^F!vPOaLaS1rY!M diff --git a/caves/various/Cws_Boulder.gds b/caves/various/CWS_Boulder.gds similarity index 100% rename from caves/various/Cws_Boulder.gds rename to caves/various/CWS_Boulder.gds diff --git a/caves/various/CWS_Boulder_2.bd b/caves/various/CWS_Boulder_2.bd new file mode 100644 index 0000000..0fb3bc1 --- /dev/null +++ b/caves/various/CWS_Boulder_2.bd @@ -0,0 +1,1771 @@ +[BDCFF] +Version=0.5 +[mapcodes] +Length=1 +"=DIAMOND +)=ACID +!=FALLINGWALL +%=DIAMONDRELEASEKEY +$=TRAPPEDDIAMOND +#=CLOCK ++=SWEET +'=WAITINGBOULDER +(=BITERu +*=BOMB +[/mapcodes] +[game] +Name=CWS Boulder 2 +Levels=5 +TitleScreen=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 +TitleScreenScroll=iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABHNCSVQICAgIfAhkiAAAAF5JREFUGNNjVBBu/c/AwMCw/8Y3BgYGBoaGNDcGZMACY6BLwAAjAwPDfwYGBgYF4VYGBgYGBns7G1QT4gMPMuADLOgCBw8dYUB2EwsunTA3YSh48LYawjjUil0BupsASxIVmIoCm4gAAAAASUVORK5CYII= + +[cave] +Name=Dash 2 cave 01 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Green LightRed White White Green +DiamondsRequired=5 5 5 5 5 +DiamondValue=10 20 +CaveTime=40 40 40 40 40 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=2 2 2 2 2 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +Effect=AMOEBABOULDEReffect BOULDERBIRTH1 +Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WPWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +X......................................W +W.!!!!!.........!!!!!........!!!!!.....W +W.!!!!!.........!!!!!........!!!!!.....W +W.!!!!!..!!!!!..!!!!!..!!!!..!!!!!.....W +W.!!"!!..!!!!!..!!"!!..!!!!..!!"!!.....W +W.!!!!!..!!!!!..!!!!!..!!#!..!!!!!..!!!W +W.!!!!!..!!#!!..!!!!!..!!!!..!!!!!..!!!W +W.!!!!!..!!!!!..!!!!!..!!!!..!!!!!..!!!W +W........!!!!!.........!!!!.........!#!W +W........!!!!!......................!!!W +W...................................!!!W +W................!!!!!!!!..............W +W!!!!!!..........!!!!!!!!...!!!!!!!....W +W!!!!!!.!!!......!!!!!!!!...!!!!!!!....W +W!!"!!!.!!!.!!!..!!!!#!!!...!!!"!!!....W +W!!!!!!.!#!.!"!..!!!!!!!!...!!!!!!!....W +W!!!!!!.!!!.!!!..!!!!!!!!...!!!!!!!....W +W.......!!!......!!!!!!!!...!!!!!!!....W +W......................................W +W......................................W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 02 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Red Blue Yellow Yellow Red +DiamondsRequired=60 60 60 60 60 +DiamondValue=5 10 +CaveTime=100 100 100 100 100 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=7 7 7 7 7 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +Effect=AMOEBABOULDEReffect BOULDERBIRTH1 +Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 +MagicWallTime=55 55 55 55 55 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +Effect=BOMBEXPLOSIONeffect EXPLOSION1 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +X..rr......r.r.r.r..rr...r.r..r.rr...r.W +Wr..rr.r.rrrr...r..rrr...r.r.r.....r..rW +W..r...........r..rrr...r.rrr....rrrr..W +W.rrrr.rr....r.r...r..........r....r.r.W +W..r.r....rrr.r.r.rrrrr..rrrr.....rr...W +W....r..............r.......r...rrr.rr.W +W..rrrr.rr.rrrrr..r..r.r..r.r.....r.rrrW +W..r......r.rr..r.r.r....r.r.rr.....rrrW +W.r.rr.......r......rr...r.rr......rrr.W +W...rrr....r.r..r..rrrr.....rr.r.......W +W.....MMMMMMMMMMMMMMMMMMMMMMMMMMr..rrr.W +W..rr...rr.r......r..r.......rrr.....r.W +W....rr..rrrrr.rrrrrrrrrrr.rrrr.......rW +Wr.r.r.r..rrrrrrrrrr...rrrrr.rrr..r.rrrW +W..rrrrrr..rrrrrrrrr.r....rrrr.r.....r.W +W.....r.rr..rrrrrrr..rrrr....rrr..r.rrrW +W...rr.r.r..rrrrrrr.rr.rrrrr.r.r..r.rr.W +W..rrr.rr.r.rrrrr...rrrrrrrr.rrr..rrrrrW +W....r.rrrr...rrr.r.r..rrrrr.....r..rrrW +P.r.r.rrr.rr.......r.r.rrrr..rrrrrrrrrrW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 03 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Blue Orange White White Blue +DiamondsRequired=64 64 64 64 64 +DiamondValue=5 8 +CaveTime=180 180 180 180 180 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=8 8 8 8 8 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaThreshold=0.2841 0.2841 0.2841 0.2841 0.2841 +AmoebaTime=130 130 130 130 130 +Effect=AMOEBABOULDEReffect BOULDERBIRTH1 +Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWPWWWWW +W B B B B B B B B B BX +W rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr W +W .................................... W +W .................................... W +W .................................... W +W ..........WWWWWWWWWWWWWWWW.......... W +W ..........$..............$.......... W +W ..........W..............W.......... W +W ..........W......aa......W.......... W +W ..........W......aa......W.......... W +W ..........W..............W.......... W +W ..........$..............$.......... W +W ..........WWWWWWWWWWWWWWWW.......... W +W .................................... W +W .................................... W +W .................................... W +W ..........QQQQQQQ%QQQQQQQQ.......... W +W .................................... W +W .................................... W +W B B B B B B B B B B B B B B B B B B BW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Intermission 1 +Selectable=false +Intermission=true +Size=40 22 0 0 19 11 +Colors=Black Black LightBlue Red Green Green LightBlue +DiamondsRequired=5 5 5 5 5 +DiamondValue=10 20 +CaveTime=20 20 20 20 20 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=1 1 1 1 1 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +Effect=AMOEBABOULDEReffect BOULDERBIRTH1 +Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 +MagicWallTime=20 20 20 20 20 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +P..wr..r...rr..rrw.W...................W +W...w.rr.r..rr..w..W...................W +W....w...rr...rw...W...................W +W.....w.r..r.rw....W...................W +W......w..r..w.....W...................W +W.......w...w......W...................W +W........w.w.......W...................W +W..................W...................W +W.........M........W...................W +W..................X...................W +WWWWWWWWWWWWWWWWWWWW...................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 04 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Green Orange White White Green +DiamondsRequired=90 90 90 90 90 +DiamondValue=2 6 +CaveTime=175 175 175 175 175 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=5 5 5 5 5 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=30 30 30 30 30 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +Wb.........r.v......v.......... r......W +W r..b .v......vv..r......b ..r....W +W.. ......................r.r.....vv .rW +W.r v.....v......r.........v...........W +W.....r.v..v...... vv..b ..v..r.rr.r...W +Wr .........r .......r......vv.......v.W +W....v..... .b..r.................. vv.W +W......r.v..vb ..........r . r.. .b.. W +W ...v.............. .r.............r..W +W...vr.. r.. v.....v................v..W +Wb ........r..... . ...v. .r...r.vr..W +W...r...........r.....r....b...........W +W........b..v .......rv....r. v........W +W.. ..v.. ..............r...........v.W +W..r.vv......rvr. .v.v..............v..W +W..r...........r..r.......rr.v..r...rbbW +W.r.......v.r..........vr..r.....r.... W +W....v....r..v v... b.......r........ W +W.. ...rr......v.......v.v...rb .vv...rW +W.. b.r. .......r....vr.......r.......W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWPW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 05 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Blue Gray2 White White Blue +DiamondsRequired=25 25 25 25 25 +DiamondValue=2 4 +CaveTime=75 75 75 75 75 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=3 3 3 3 3 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +Effect=AMOEBABOULDEReffect BOULDERBIRTH1 +Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 +MagicWallTime=40 40 40 40 40 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +Wrr...r...r......rrr.r....rr...r......rW +W.rrr.rr...rrrr...rr...r..rrr....r.r.r.P +Wr.rrr.....r....r..r.r.r..rr.r..r..rr..W +Wr.rr..rr..rrrr..........r........rr...W +W.r.....r.rrrrr..rrrr..r.rrr..r.r.rrrr.W +Wr..r..r....r............r.rr..rr.rrr.rW +W.rrrr....rrrrr...rr...r.r..rrr....r...W +W......r.rr.....r..rrrr.r.rrrr....rrrr.W +W..rr.......r...r..........rr..rr..rr.rW +W.rrr...r..rrr.......r.r....r.....r.r..W +W!!!!!!!!!!!!!!!!!!w.w!!!!!!!!!!!!!!!!!W +W..rr....rr.r..r..........r.r..r......rW +Wr..rrrrrrr.r.......M.r.r...rr......r..W +W...rr...r...r....r.Q..r.....r...r....rW +W.rrrrr.r...rrrr.... .rr...rrr..r...r..W +W........rr......r.. .r...r.rrrrr..rrr.W +Wr...r.........r...r .........r...r.rr.W +W..r.r..rr.rrrr..... .....r..r......r..W +W....r.......rr..r.r .rr..rrr.r.r...r.rW +W.r.rrr...rr.rr.......r..r..r.....r....W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 06 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Yellow Orange White White Yellow +DiamondsRequired=99 99 99 99 99 +DiamondValue=3 5 +CaveTime=200 200 200 200 200 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=6 6 6 6 6 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaThreshold=0.2841 0.2841 0.2841 0.2841 0.2841 +AmoebaTime=135 135 135 135 135 +AmoebaGrowthProb=0.0156 0.0625 +Effect=AMOEBABOULDEReffect BOULDERBIRTH1 +Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +XPWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W........r.rr......r...a..........rr..QW +W.".....r..rr...rr..r"....r.."......r..W +Wr.............rr.r.r....."."....r.r...W +W.r.".....r.r......r.......r......r....W +W.r........."..."...rr....r.rrr.....r..W +W.."r.....rr.........."..".....r.....".W +W.."r.r....rr..r..."r....r..r..r.......W +W............".....r"r.....r.r......r..W +W...r..r.............r...r.r.r......r..W +W.....r.....rr.r......r...r.r........r.W +Wr..r.........r.....r.....r...."...r.r.W +W...r.......r.....r.rr......rr......r..W +W...r.r........"........r............r.W +W..".r.r.....r..............."r.....r..W +W....r....r.rr.......r....r.......r.r..W +W...r........".....rr"r...."r.r...."...W +W...rrr....r.......r.".......r..."r.rrrW +Wwwwwwwwwwr.......r.rr"...r...wwwwwwwwwW +WQQQQQQQQw........rr.r.....r".$bbbbbbbbW +W%QQQQQQQw..".".....".rrr.r...wbbbbbbbbW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Intermission 2 +Selectable=false +Intermission=true +Size=40 22 0 0 19 11 +Colors=Black Black LightBlue Purple Yellow Yellow LightBlue +DiamondsRequired=18 18 18 18 18 +DiamondValue=4 8 +CaveTime=35 35 35 35 35 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=4 4 4 4 4 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +MagicWallProperties=BUTTERFLYr DIAMONDf +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +X..................W...................W +W..""""....r.r.r.r.W...................W +W..................W...................W +W..MMMM.... . . . .W...................W +W.......... . . . .W...................W +W.. .... . . . .W...................W +W.......... . . . .W...................W +W.......... . . . .W...................W +W.......... . . . .W...................W +P..................W...................W +WWWWWWWWWWWWWWWWWWWW...................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 07 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black LightBlue Gray2 White White LightBlue +DiamondsRequired=99 99 99 99 99 +DiamondValue=2 4 +CaveTime=175 175 175 175 175 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=5 5 5 5 5 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaThreshold=0.2523 0.2523 0.2523 0.2523 0.2523 +AmoebaTime=100 100 100 100 100 +AmoebaGrowthProb=0.0156 0.1250 +Effect=AMOEBABOULDEReffect BOULDERBIRTH1 +Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WQr....rrr.rrr...........rr....r......PW +W.rr...r..rr...rr.....rrr.rrr.rr.rr.rrrW +W...rr......rr..rrr........r.r....r.r..W +W.....r.rrr..rr...r..rr.rr.r..rr....r..W +W.....rr.r.r.rrrr..rr.....rr.rrr......rW +Wr...r.rr.rr....r.rrr.r....rr...rrr.r..W +W...rrrr...r.ar.r..r..r.....r..r..r.r.rW +W.r.r...r......rr......rr...rrr..r..r..W +W........r........r......r.rrr.r.r.....W +W.r........rr.rrr.rr.rrrr...r..rrr....rW +W.r..rrr....rrr.....r......r......r..r.W +W.r.r..r.........r...r..............r..W +W..r....r.......r......r.r.....r...r...W +W..r....rr.rrr..r....r.r...r...r.....r.W +Wrr...rrr......r.....r..r.r.r.rrrr..rr.W +Wr....r...r..rr.rrr.rrr.rr.rr..r.......W +W....r.....r.r.......r.r.....rr.....r..W +W..r.......r....r....r......r....r.r..rW +WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW +WbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbX +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 08 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Gray1 Brown Yellow Yellow Gray1 +DiamondsRequired=36 36 36 36 36 +DiamondValue=2 4 +CaveTime=65 65 65 65 65 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=4 4 4 4 4 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=1 1 1 1 1 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=3 3 3 3 3 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W.r...Wr.r.rWr.......'.'....''.....rr.rW +Wr..r.Wr...rW............'.....r'......W +Wr.W..W..W.rW..W.r..................W.rW +W..W.rW.rW.rW.rW...'..rrrrrrr....'''W.rW +W.rW..W.rW..WrrW...'..rrrrrrr....'..W..W +W.rWr.Wr.Wr.W.rW..'...rrrrrrr.....'.Wr.W +W.rW..Wr.W..W.rW'...............'...Wr.W +W..W..Wr.Wr.W..W'.....sssssss.......Wr.W +W.rW.rW..W..W..W..................'.W..W +Wr.W..W.rW..W..W..'...MMMMMMM...'...W.rW +W..Wr.W.rW.rWrrW...'.. ..r..'.W..W +Wr.W..Wr.W..W.rW'..... .......Wr.W +W..W.rW..W..W.rW...'.. .'....'Wr.W +W.rW..W..W..W.rW.'.... ......'W..W +W.rW.rWr.W.rW..W..'...bbbbbbb...'..'W.rW +W..W.rWrrW.rW.rW'..'..MMMMMMM....''.W.rW +W.rW..W.rW..W.rW'...................W.rW +W..W..W..Wr.W..W''..............'...W.rW +W.rWr...rWr....W....'...'.'.....'...W..W +W.rWrrr..W..rr.W'....''.....'.....''Wr.X +WPWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 09 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black LightBlue LightRed White White LightBlue +DiamondsRequired=50 50 50 50 50 +DiamondValue=3 6 +CaveTime=135 135 135 135 135 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=8 8 8 8 8 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaTime=100 100 100 100 100 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W......................................W +W......................................W +W..........wwwwwwwwwwwwwwwwww..........W +W..........w w..........W +W..........w wwwwwwwwwwwwww w..........W +W..........w w P w w..........W +W.r.r.r.r..w w wwwwwwwwww w w..r.r.r.r.W +W.wwwwwww..w w wQQQQQQQQw w w..wwwwwww.W +W.w.....w..w w wQwwwwwwQw w w..w.....w.W +W.w.....w..w w wQwXbbbwQw w w..w.....w.W +W.w.aaa.w..w w wQwwwwbwQw w w..w.aaa.w.W +W.w.....w..w w wQQQbbbwQw w w..w.....w.W +W.w.....w..w w wwwwwwwwQw w w..w.....w.W +W.wwwwwww..w w w w w..wwwwwww.W +W..........w wwwwwwwwwwww w w..........W +W..........w w w..........W +W..........wwwwwwwwwwwwwwww w..........W +W.......... w..........W +W..........wwwwwwwwwwwwwwwwww..........W +W......................................W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Intermission 3 +Selectable=false +Intermission=true +Size=40 22 0 0 19 11 +Colors=Black Black Green Gray1 Yellow Yellow Green +DiamondsRequired=80 80 80 80 80 +DiamondValue=2 4 +CaveTime=20 20 20 20 20 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=3 3 3 3 3 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +Effect=AMOEBABOULDEReffect BOULDERBIRTH1 +Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W"""""""""""""""""(P...................W +W""""""""""""""""""W...................W +W""""""""""""""""""W...................W +W""""""""""""""""""W...................W +W""""""""""""""""""W...................W +W""""""""""""""""""W...................W +W""""""""""""""""""W...................W +W""""""""""""""""""W...................W +W""""""""""""""""""W...................W +X""""""""""""""""""W...................W +WWWWWWWWWWWWWWWWWWWW...................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 10 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Green Orange Blue Blue Green +DiamondsRequired=64 64 64 64 64 +DiamondValue=2 4 +CaveTime=120 120 120 120 120 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=6 6 6 6 6 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaThreshold=0.0682 0.0682 0.0682 0.0682 0.0682 +AmoebaTime=120 120 120 120 120 +AmoebaGrowthProb=0.0156 0.0156 +Effect=AMOEBABOULDEReffect AMOEBA +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WPWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W......................................W +W.wwwwwwwwwww.wwwwwwwww.r..wwwwwwwwwww.W +W. w.w.......wwrr.w W +Wwwwwwwwwww w.w.aaaaa..wwr.w wwwwwwwwwwW +W.w w w.w..aaaaa..ww.w w w.W +Wrw wwwww w w.ww...aaaa..w.w w wwwww w.W +Wrw w r.w w w..www..aaaa.w.w w w.r w w.W +Wrw w ..w w wr...ww.aaaa.w.w w w.. w wrW +W.w w ..w w w....rw.aaaa.w.w w w.. w w.W +W.w w w.w w wr....w.aaaa.w.w w w.M w wrW +Wrw w w.w w w.....w.aaaa.w.w w w.w w wrW +W.w w w.w w w.r...w.aaaa.w.w w w.w w w.W +W.w w w w w w....ww.aaaa.w.w w w w w w.W +W.w w wbw w w..www..aaaa.w.w w wQw w w.W +W.w w www w w.ww...aaaa..w.w w www w w.W +W.w w w w.w..aaaaa..ww.w w w wrW +W.w wwwwwww w.w.aaaaa..ww..w wwwwwww w.W +W.w w.w.......wwr..w w.W +W.wwwwwwwwwww.wwwwwwwww..r.wwwwwwwwwwwrW +W....rr.r..............................X +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 11 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Blue Orange Cyan Cyan Blue +DiamondsRequired=100 100 100 100 100 +DiamondValue=2 4 +CaveTime=125 125 125 125 125 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=5 5 5 5 5 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +Effect=AMOEBABOULDEReffect BOULDERBIRTH1 +Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=20 20 20 20 20 +AcidProperties=DIAMOND 0.0078 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W"""""""""""W"r"rrr"rr"r"rrWQ Q QW +W"""""""""""Wr"r""""""rr""rW...........W +W"""""""""""Wr"rr"rr"rrr"r"Wr..........W +W"""""""""""W"r""""rr""rrrrW.."rrrrrr..W +W"""""""""""Wrrrrr""rr""r"rW.."""rr"r..W +W"""""""""""W"rr"rrr""r""r"W.."rrrrrr..W +W"""""""""""W"""r""rr"rrrr"W..rrr"r"r..W +W"""""""""""Wrr""r"r"""r"r"W..r"rrrrr..W +W"""""""""""Wr""r"rrr"r"""rW..rrr"r"r..W +W"""")))""""W"r""r"""rrr"rrW..rrrrr"r..W +W"""")))""""Wrr"rr"rrr"r"rrW..r"r"r"r..W +W"""")))""""WssssssssssssssW..rrrrrrr..W +W"""""""""""v..............v..rrrrrrr..W +W"""""""""""w..............w..r"rr""r..W +W"""""""""""w..............w..rrrr"rr..W +W"""""""""""w..............w..rr"rr"r..W +W"""""""""""w..............w..r"rr"rr..W +W"""""""""""w..............w..rrrrrrr..W +W"""""""""""v..............v...........W +W"""""""""""v..............v...........P +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Dash 2 cave 12 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Gray2 Orange Cyan Cyan Gray2 +DiamondsRequired=40 40 40 40 40 +DiamondValue=6 10 +CaveTime=200 200 200 200 200 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=8 8 8 8 8 +BonusTime=20 20 20 20 20 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +Effect=BOMBEXPLOSIONeffect SPACE +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WX"W bW QW bW QW bW QW bW QW bW +W""W W W W W W W W W W +W""Wr..W*.#Wr..W*.#Wr..W*.#Wr..W*.#Wr..W +W""W...W*..W...W*..W...W*..W...W*..W...W +W""W...W...W...W...W...W...W...W...W...W +W""W...W...W...W...W...W...W...W...W...W +W""W...W...W...W...W...W...W...W...W...W +WwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwW +WrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrW +W......................................W +W......................................W +W......................................W +W.WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W..................P..................QW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW W +W.....................................QW +W.WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W.....................................QW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW W +W*....................................QW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Intermission 4 +Selectable=false +Intermission=true +Size=40 22 0 0 19 11 +Colors=Black Black Gray2 Red Yellow Yellow Gray2 +DiamondsRequired=6 6 6 6 6 +DiamondValue=10 15 +CaveTime=30 30 30 30 30 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=3 3 3 3 3 +BonusTime=0 0 0 0 0 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=0 0 0 0 0 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=20 20 20 20 20 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W.r.r.r......r.r.r.W...................W +W. . . ...... . . .W...................W +W. . . ...... . . .W...................W +W W...................W +W....... .......W...................W +W............MMMMM.W...................W +W....... .......W...................W +W.......QQQQ.......W...................W +W.......QQQQ.......W...................W +WP......QQQQ......+W...................W +WWWWWWWWWWWWWWWWWWXW...................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +W......................................W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 01 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Red Gray1 White White Red +DiamondsRequired=15 15 15 15 15 +DiamondValue=20 60 +CaveTime=80 80 80 80 80 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=7 7 7 7 7 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WP." . r......r..r.....rr..r.r......r"W +Wr..... ....r....r.r.. ..". r....r.rrrrW +W. .. . r.r..." .r.r. ...."....r......rW +W.r....Q..r.rr...rrr.r.rr.r.rr r.......W +Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.r..rW +W.......r.......r.r.".rr.r.rr...rr....rW +Wr..r.. ...rr................r.rr......W +W.r ...r..rr..rr..r. .r.r.."........r..W +W..r.... ..rr."r..r. .r..r.r........rr.W +Wrrr..wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwW +W"....r. ....rrr.r...rrr...rr....r...W +W"r ...r r.rr ."...r...r......rr......rW +W.r r...Q........r...r.rr. ..r.r..rrr.rW +W........r......rrrrr..r.rrrr.r.....r..W +Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww..r..W +W"r. ...r.rr...r........ ..r..r. rW +X.r..r.r. ...rr. r.. .r. .r..."..r.....W +W..... ....r..r..r... .r .r..r.r...r.r.W +Wr........r. .r..."..... rr..r.....r.. W +Wrr"rrr..r"...r. . ... Q.r..r.r.r..r.rW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 02 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Red Orange White White Red +DiamondsRequired=85 85 85 85 85 +DiamondValue=6 12 +CaveTime=150 150 150 150 150 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=6 6 6 6 6 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaTime=90 90 90 90 90 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=31 31 31 31 31 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W. b ..r..r.r.r.........r......P.....r.W +Wr............b r.......rr ............W +W. r.........rr...r.....r......r.r.r.W +W ..........b...........b..... r.r...r.W +W...r...........r...r..................W +W ... ....r....r.........r.............W +W. ...rbb................ ...r.....r..bW +Wb.r.... b... ...r...b...........r.....W +W.......rb . ..r ...r...r..r...r......rW +W.. ...... ..r.b.......................W +Wr............r. .......r.b........r.r.W +W....r.r.r.r. .r....r............. r...W +W.........b........r............. b. ..W +Wr. . .. r...r....rr.......r.r....r....W +W........... ........r.................W +W..r.r.....r...r........r............r.W +W.............r.r bb......r..r........W +W................r...b.r ..r.......r...W +Wrrr..rrr...r....... ...r..r..r.. .r..rW +WX....rr............a..r..... r.. ....W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 03 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Orange Gray1 White White Orange +DiamondsRequired=38 38 38 38 38 +DiamondValue=15 20 +CaveTime=100 100 100 100 100 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=8 8 8 8 8 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W.....r.".rW.. ........r....W......."..W +W "".......W."..............W.."..r....W +W."..r.rr..W.... .........r.W..... .r..W +W"."... ...w..r.....r.......w".".. .r..W +W... "...."w"..."..r...r..."w..........W +W..........W..."............W ...r...r.W +W.r.r.. ...W...r............W."..r.....W +W".......".W.......r.r..r.r.Wr.........W +W..........w.....rr..r......w....... .rW +Wr....."...w. ..........."..w..."......W +Wr..."...."W.r. "....r.. ...W......"...W +W..........W...r...........rW....r...".W +W..........W"...............W..........W +W...r.r. r.w. ......"..r....wr.... ....W +W....."....w..........r.r...w....r..r..W +W.r.."r..".W.r. ..r.........W..........W +W......r...W........".".....W.r..r.r...W +Wr....r....W..... .r... ..r.W......r...W +W....rr..r.w...... .........w......rr..W +W"r........wQ .XP. Qw". .. ..".W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 04 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black LightRed Gray2 White White LightRed +DiamondsRequired=99 99 99 99 99 +DiamondValue=5 10 +CaveTime=166 166 166 166 166 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=7 7 7 7 7 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaTime=111 111 111 111 111 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=31 31 31 31 31 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WQQQwrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrW +WQbQw..................................W +WQbQwQ.................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw ........................P.aaa....W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +WQbQw .................................W +XQQQw bW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 int 01 +Selectable=false +Intermission=true +Size=40 22 0 0 19 11 +Colors=Black Black Orange Brown Green Green Orange +DiamondsRequired=50 50 50 50 50 +DiamondValue=10 20 +CaveTime=40 40 40 40 40 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=6 6 6 6 6 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaTime=20 20 20 20 20 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W.r..............r.WWWWWWWWWWWWWWWWWWWWW +W..................WWWWWWWWWWWWWWWWWWWWW +W.......xMMx.......WWWWWWWWWWWWWWWWWWWWW +W..................WWWWWWWWWWWWWWWWWWWWW +W.......xMMx.......WWWWWWWWWWWWWWWWWWWWW +W..................WWWWWWWWWWWWWWWWWWWWW +W..................WWWWWWWWWWWWWWWWWWWWW +W..................WWWWWWWWWWWWWWWWWWWWW +W..................WWWWWWWWWWWWWWWWWWWWW +WP.......aa.......XWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 05 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Gray1 Gray2 Yellow Yellow Gray1 +DiamondsRequired=75 75 75 75 75 +DiamondValue=8 12 +CaveTime=80 80 80 80 80 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=9 9 9 9 9 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WPr"rrr."r.rrr"rr."..r.""r..r.rrr.r".rrW +W".r"rr"""r"r".""..r.rr"..""rrrr"rr"rr.W +W""""""rr..r...r..r"r"""rr..r"".".r"rrrW +Wr"rr"rr""..rrrrrr"...rrrr.rrrr."r".r..W +W""rr""""r""r..""."."".r..".r.rrr.rrr.rW +Wr.rrrrrrr.".rrr"""r.""""r"."rrr.."r".rW +W""r"r"""r""rrrrrrr."rrrrrr""r"r.r.."rrW +W"rr.""rrr.r"rrrr""r.rrr.rrr."r.rr.r""rW +W"rr".rr.r""r"rr"r"r""rrr.""".r"r"r.r.rW +W.""".r.."r"r"r"rrrr"r.rr"""""r...".r.rW +W.r.r.r"""".rrrr"."r".rr""r.rrr"rrr".r"W +W"rr""r.r"r"rr"r"rr..."r.r.r.".r.".r.rrW +W"rr"rr.""rrrr"""rr.rr..".r""""."."rrr.W +Wrr""rr"."rrr""r""rr.rrr"r."...r.rrrr..W +Wrr"rrr""rr"r"rrrr"r.."r"."r".r."r.".rrW +W.r"r.rrrrr"rr"".."r.rrrr."""."."...rr.W +Wr".rr""rrrrrrr"rr"""r""".rr"r"""rr.rr"W +Wr..r."".r.r.r.".rr"rr"r"rr"rrrrr"r.r.rW +Wr""".."r"rr.".rr"r""""r"""".rr"rrr""""W +W"rr"".""r.r.""r."""r"rrr.rr.rrrr"..rr"X +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 06 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Blue Orange White White Blue +DiamondsRequired=95 95 95 95 95 +DiamondValue=6 12 +CaveTime=135 135 135 135 135 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=7 7 7 7 7 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaTime=222 222 222 222 222 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=31 31 31 31 31 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WPr....rr..........aaar.r...r..r...r...X +W......r.........r..........rr.r...r.r.W +W..rr....................r...r.........W +Wr...r.r...r........r...r......rr......W +W.........r...............r............W +W.rr..r...................rrr..........W +W...........r.r......r............r....W +W..r.r..r...r....r.........r...........W +W.........r.....r............r.........W +W......r..r..r..........r..r....r......W +W....r......r.r.r...r..r......r..r.....W +W..r.....r.............................W +W.............r......r......r........r.W +W...r...r..................r......r....W +W.r.............r........r.............W +W..........rrr.....r.....r............rW +W..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM..rW +W..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...W +W..................rr.r.r.r.r...r......W +Wr........r....r.r...r.r.r...........r.W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 07 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Purple LightBlue Yellow Yellow Purple +DiamondsRequired=50 50 50 50 50 +DiamondValue=5 7 +CaveTime=130 130 130 130 130 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=6 6 6 6 6 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=159 159 159 159 159 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WP..r.r........r...r.r...........r..r..X +W..r...rr...............r..r.r.r.r..r..W +W...r...r....rrr......r..r....r.....r..W +W.rr..........r.....r..................W +W...r..r.......r.r...r.......r.r..r....W +Wwwwwwwwwww.r...r.........r..wwwwwwwwwwW +W....rr.r.rr..r....r................r..W +W.r..r.r.rrr........r...r.r.....r......W +W.........rr..r.r.......r..r...r......rW +W......................r....r.r..rrrr..W +Wr........rssssssssssssssssssr.......r.W +W......r.rrrr..r............r..........W +W.....r.......................r...rr...W +W..r........rr...r..r.......r..........W +W.r.. b...MMMMMMMMMMMMMMMMMM... Q.r..W +W...r .................r...... ....W +W.... ........r.r........rr... ..r.W +W.... ..r...r..r.r...r.r...... r...W +Wr.r.Q .....r....r.r.r.r.......b ..r.W +W......r.....r..r..............r......rW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 08 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Gray1 Red Green Green Gray1 +DiamondsRequired=55 55 55 55 55 +DiamondValue=5 8 +CaveTime=125 125 125 125 125 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=6 6 6 6 6 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W.rr.........rrr....r................. W +W..r...r...............rr...r....rrr..bW +W....r................................ W +Wr..r..r.....r.r................r.....bW +W..r..r...............r.r....rr...rr.. W +W..r..rr.r.........r..................bW +W...r...r.......r..........rr........r W +Wrr..r.......rr........r.......r......bW +W...r.....r..........r....r........... W +W...r......r..r..r...rr.....r.........bW +W......r...rr.r........r.....r...r.... W +W..............r..r...r..r............bW +W.r.....rrr...r......r...r.......r.... W +W..r...........r...r......r.........rrbW +W...r.....r.....r....r.....r.....r.... W +Wr.......r......r......r...r.r...r..r.bW +Wr...r........r..rr.r................. W +W..................r...r..............bW +W..........r........r.r........r....r. W +WPr....r.........r..r.....r..r......r.bX +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 int 02 +Selectable=false +Intermission=true +Size=40 22 0 0 19 11 +Colors=Black Black LightBlue Gray2 Yellow Yellow LightBlue +DiamondsRequired=6 6 6 6 6 +DiamondValue=30 60 +CaveTime=26 26 26 26 26 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=4 4 4 4 4 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W b WWWWWWWWWWWWWWWWWWWWW +W ................ WWWWWWWWWWWWWWWWWWWWW +W ................ WWWWWWWWWWWWWWWWWWWWW +W ................ WWWWWWWWWWWWWWWWWWWWW +W ........"....... WWWWWWWWWWWWWWWWWWWWW +W ........P....... WWWWWWWWWWWWWWWWWWWWW +W ................ WWWWWWWWWWWWWWWWWWWWW +W ................ WWWWWWWWWWWWWWWWWWWWW +W ................ WWWWWWWWWWWWWWWWWWWWW +W XWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 09 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Purple LightRed Yellow Yellow Purple +DiamondsRequired=80 80 80 80 80 +DiamondValue=4 8 +CaveTime=150 150 150 150 150 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=7 7 7 7 7 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W Q Q Q Q Q Q Q Q b b b b b b b b b bW +WQwwwwwwwwwwwwwwwww.wwwwwwwwwwwwwwwwww W +W wr..rr ..r..r .rr rrr....r. .rr... wbW +WQwr..r ...r..r.rr.. ... .r.... .r..rw W +W wr ......r..........r......r.......wbW +WQw.. ..r.....r..r..r...r. .....r.r..w W +W w... ..r ......rr....r....r.r.rr .wbW +WQw.r.. ...r....... ..r..r..r....r...w W +W w.........r. ...r.r.......r........wbW +WQ....... .........Pr.r..r............ X +W w..r...r ...r.r.r... ......r ....r.wbW +WQw.. ..... ..r....... .r..r..... ..rw W +W w.r......r.......r...r.............wbW +WQw.r.. ... ....r..r............r....w W +W w .....r...r.....r....r..r......r.rwbW +WQw.. ..... ... ..r.r..... ..r....r.rw W +W w.r.r....r.... ....r..r..... ..r...wbW +WQw.....r....rr.. . .. ...r... ... ..w W +W wwwwwwwwwwwwwwwww.wwwwwwwwwwwwwwwwwwbW +WQ Q Q Q Q Q Q Q Q b b b b b b b b b W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 10 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Green Gray1 White White Green +DiamondsRequired=75 75 75 75 75 +DiamondValue=4 6 +CaveTime=150 150 150 150 150 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=6 6 6 6 6 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaTime=100 100 100 100 100 +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +Wr..r..wr.....rrw..r.rw...r.....wrr..r.W +Wr.....w.....r..w.r..rwrrr..r...w......W +W.r....w.......rw.....w.........w......W +W..r...w......rrw.....w.r.......w....r.W +Waaa........r......r................aaaW +W..r...w....................r...w......W +W.....rw......r.w.....w......r..w.....rW +Wr.....w......r.w.r...w.r..r....wrr.r..W +W......w.....r..w.r...w.......r.w.rr...W +Wwwwwwwwwwwwwwwww.....wwwwwwwwwwwwwwwwwW +WQ Q Q Q Q Q Q Q...XP..Q Q Q Q Q Q Q Q W +Wwwwwwwwwwwwwwwww.....wwwwwwwwwwwwwwwwwW +W.r....w....r...w.....w....r..r.w....r.W +W......w.r...rr.w.....wrrr......w....r.W +W....r.w...r....w.....w.rr......w......W +Waaa...........r............r...r...aaaW +W.r....w........................wr.....W +W......w........w..r..wr..r.....w......W +W...r..w.rr..r..w.r...w.........w......W +W......w........w..r..w.r...r...w...r..W +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 11 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black Gray1 Orange White White Gray1 +DiamondsRequired=50 50 50 50 50 +DiamondValue=5 10 +CaveTime=110 110 110 110 110 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=8 8 8 8 8 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +Wwrrr.r.....r...r...P.r.r...r....rr...wW +Wrwrrr.r..r..r...rr..r.....r.....r.rrw.X +W.rwrr..r.rr.r...........rrr..r.rr.rw..W +Wrrrwr.r.r..r.r....r.......r.......wr..W +W.r..wrr.....rr...r..r..r..r.r....w....W +Wr..rrw.r.....r.r..rr.....r..r...w..r..W +Wrrrr.rwr.r.r.rrr........r...r..w.r....W +Wr.r.r.rwrr...rr.....rr.r.r....w...r...W +W.r.r.r..w.rr..r.r..r.....r.r.w....r..rW +W......r.rw.r......r...r...r.wr.rrr.r..W +Wr...rr..r.w....r....r..r...w.r........W +W....r......wr.............w.....rr..rrW +W.....r......wr.r...rr.r..w...r....r..rW +Wr..rr..rrrr.rwr....r....wr.r.....r....W +W.r...r...rr..rw....r...w...r..rr......W +W..rr....r.r.r.....r..r...r.r..r....r..W +Wr.rr.....rrr...MMMMMMMM....r.r....r...W +W..r.r....rr.r.r........r...r..r.rrr.rrW +W.r..r..r.........r........r..r.r..r..rW +W..r...r.r.......r.....r.rr..r..r.rr..rW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 cave 12 +Intermission=false +Size=40 22 0 0 39 21 +Colors=Black Black LightBlue Orange White White LightBlue +DiamondsRequired=75 75 75 75 75 +DiamondValue=4 6 +CaveTime=200 200 200 200 200 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=8 8 8 8 8 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WP.....x.b.....Q.........".b...."b..x..W +Wx....".".rx""r.b......."."."......br..W +Wx.....".x."...b.......r...x...x...."..W +W...".x...".x.........Q.".b...bx....Q".W +W..x.".....".".r.............Q......"rxW +W.x"......"..."."...xb.................W +W.."....r""Q."."....r.........."x.x....W +Wr"...x.r....r............b....."x.".".W +W".xr...."b......b.b....".......b.b".."W +W"..Q...b.........xrx...........Q.."...W +W"rb......xr."x..".....Q.....x...b..x..W +W...Q"b...............b....rb.".b"x..Q.W +W..b.x.Q".."..r....".b.r.....x....x"..xW +W.."..".b.".........Q."....."......""..W +W..xb"xx"..".r.r...x.rx"...b....."..b..W +W."...b.xr......r........".."x..."x.Q..W +W........r..".."rQ..r..b"........."....W +W....b......b.x.x...rr....rr....rQ.".r.W +W.."...x."x.r...r..x.".x."."...".."..."W +W....""...."b.".....xr......b..b.b...x.X +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] + +[cave] +Name=Cwsbd1 int 03 +Selectable=false +Intermission=true +Size=40 22 0 0 19 11 +Colors=Black Black Gray2 Orange Yellow Yellow Gray2 +DiamondsRequired=14 14 14 14 14 +DiamondValue=30 70 +CaveTime=25 25 25 25 25 +CaveScheduling=plck +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=10 10 10 10 10 +BonusTime=10 10 10 10 10 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +PenaltyTime=10 10 10 10 10 +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +MagicWallTime=0 0 0 0 0 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +SlimePermeabilityC64=0 0 0 0 0 +AcidProperties=DIRT 0.0000 +MagicWallProperties.sound=false +BorderProperties.lineshift=true +BorderProperties.objectwraparound=true +ShortExplosions=false + +[map] +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +W................."WWWWWWWWWWWWWWWWWWWWW +W.Q. . ..... . .Q."WWWWWWWWWWWWWWWWWWWWW +W. . . ..... . . ."WWWWWWWWWWWWWWWWWWWWW +W. " . ..... . " ."WWWWWWWWWWWWWWWWWWWWW +W. .Q. ..P.. .Q. ."WWWWWWWWWWWWWWWWWWWWW +W. . . ..X.. . . ."WWWWWWWWWWWWWWWWWWWWW +W. . " ..... " . ."WWWWWWWWWWWWWWWWWWWWW +W. . .Q.....Q. . ."WWWWWWWWWWWWWWWWWWWWW +W. . . ..... . . ."WWWWWWWWWWWWWWWWWWWWW +W................."WWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[/map] +[/cave] +[/game] +[/BDCFF] \ No newline at end of file diff --git a/caves/various/Cws_Boulder_2.gds b/caves/various/CWS_Boulder_2.gds similarity index 100% rename from caves/various/Cws_Boulder_2.gds rename to caves/various/CWS_Boulder_2.gds diff --git a/config.h.in b/config.h.in index ae6c6e8..944768e 100644 --- a/config.h.in +++ b/config.h.in @@ -28,6 +28,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H +/* Define if you have libpng */ +#undef HAVE_LIBPNG + /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H diff --git a/configure b/configure index d8332eb..d319f1a 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for GDash 20090113. +# Generated by GNU Autoconf 2.61 for GDash 20090122. # # Report bugs to . # @@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='GDash' PACKAGE_TARNAME='gdash' -PACKAGE_VERSION='20090113' -PACKAGE_STRING='GDash 20090113' +PACKAGE_VERSION='20090122' +PACKAGE_STRING='GDash 20090122' PACKAGE_BUGREPORT='cirix@fw.hu' ac_unique_file="src/gameplay.c" @@ -735,6 +735,8 @@ SDL_FALSE SDL_CONFIG SDL_CFLAGS SDL_LIBS +LIBPNG_CFLAGS +LIBPNG_LIBS SOUND_TRUE SOUND_FALSE LTLIBOBJS' @@ -748,7 +750,9 @@ LDFLAGS LIBS CPPFLAGS CPP -PKG_CONFIG' +PKG_CONFIG +LIBPNG_CFLAGS +LIBPNG_LIBS' # Initialize some variables set by options. @@ -1251,7 +1255,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GDash 20090113 to adapt to many kinds of systems. +\`configure' configures GDash 20090122 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1321,7 +1325,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GDash 20090113:";; + short | recursive ) echo "Configuration of GDash 20090122:";; esac cat <<\_ACEOF @@ -1360,6 +1364,9 @@ Some influential environment variables: you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility + LIBPNG_CFLAGS + C compiler flags for LIBPNG, overriding pkg-config + LIBPNG_LIBS linker flags for LIBPNG, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1425,7 +1432,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GDash configure 20090113 +GDash configure 20090122 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1439,7 +1446,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GDash $as_me 20090113, which was +It was created by GDash $as_me 20090122, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ @@ -2131,7 +2138,7 @@ fi # Define the identity of the package. PACKAGE='gdash' - VERSION='20090113' + VERSION='20090122' cat >>confdefs.h <<_ACEOF @@ -8214,6 +8221,123 @@ echo "$as_me: error: Test for SDL failed. See the file 'INSTALL' for help." >&2; fi + +pkg_failed=no +{ echo "$as_me:$LINENO: checking for LIBPNG" >&5 +echo $ECHO_N "checking for LIBPNG... $ECHO_C" >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LIBPNG_CFLAGS"; then + pkg_cv_LIBPNG_CFLAGS="$LIBPNG_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libpng\"") >&5 + ($PKG_CONFIG --exists --print-errors "libpng") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_LIBPNG_CFLAGS=`$PKG_CONFIG --cflags "libpng" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LIBPNG_LIBS"; then + pkg_cv_LIBPNG_LIBS="$LIBPNG_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libpng\"") >&5 + ($PKG_CONFIG --exists --print-errors "libpng") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_LIBPNG_LIBS=`$PKG_CONFIG --libs "libpng" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBPNG_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libpng"` + else + LIBPNG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libpng"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBPNG_PKG_ERRORS" >&5 + + { { echo "$as_me:$LINENO: error: Package requirements (libpng) were not met: + +$LIBPNG_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBPNG_CFLAGS +and LIBPNG_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" >&5 +echo "$as_me: error: Package requirements (libpng) were not met: + +$LIBPNG_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBPNG_CFLAGS +and LIBPNG_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" >&2;} + { (exit 1); exit 1; }; } +elif test $pkg_failed = untried; then + { { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables LIBPNG_CFLAGS +and LIBPNG_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." >&5 +echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables LIBPNG_CFLAGS +and LIBPNG_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + LIBPNG_CFLAGS=$pkg_cv_LIBPNG_CFLAGS + LIBPNG_LIBS=$pkg_cv_LIBPNG_LIBS + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LIBPNG 1 +_ACEOF + +fi + + if test x"$enable_sound" = "xyes"; then SOUND_TRUE= SOUND_FALSE='#' @@ -8663,7 +8787,7 @@ exec 6>&1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GDash $as_me 20090113, which was +This file was extended by GDash $as_me 20090122, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -8716,7 +8840,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -GDash config.status 20090113 +GDash config.status 20090122 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" @@ -9071,12 +9195,14 @@ SDL_FALSE!$SDL_FALSE$ac_delim SDL_CONFIG!$SDL_CONFIG$ac_delim SDL_CFLAGS!$SDL_CFLAGS$ac_delim SDL_LIBS!$SDL_LIBS$ac_delim +LIBPNG_CFLAGS!$LIBPNG_CFLAGS$ac_delim +LIBPNG_LIBS!$LIBPNG_LIBS$ac_delim SOUND_TRUE!$SOUND_TRUE$ac_delim SOUND_FALSE!$SOUND_FALSE$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 25; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 27; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/configure.in b/configure.in index 4adf3f2..8290bbc 100644 --- a/configure.in +++ b/configure.in @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT(GDash, 20090113, cirix@fw.hu) +AC_INIT(GDash, 20090122, cirix@fw.hu) AC_CONFIG_SRCDIR([src/gameplay.c]) AM_INIT_AUTOMAKE AM_CONFIG_HEADER(config.h) @@ -60,6 +60,9 @@ if test x"$with_sdl" = "xyes" ; then AM_PATH_SDL(1.2.0, :, AC_MSG_ERROR(Test for SDL failed. See the file 'INSTALL' for help.)) fi +PKG_CHECK_MODULES(LIBPNG, [libpng], AC_DEFINE(HAVE_LIBPNG, 1, Define if you have libpng), []) + + AM_CONDITIONAL(SOUND, test x"$enable_sound" = "xyes") if test x"$enable_sound" = "xyes" ; then AC_DEFINE(GD_SOUND,,[Enable sound.]) diff --git a/docs/Makefile.am b/docs/Makefile.am index 8c3cb69..fd2ad94 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -1,3 +1,8 @@ ## Process this file with automake to produce Makefile.in -EXTRA_DIST = c64_internals.txt ckdelay.xls cd7_speeds.xls ckdelay.txt brc_format.txt +EXTRA_DIST = \ + c64_internals.txt ckdelay.xls cd7_speeds.xls ckdelay.txt brc_format.txt \ + cave_style.css background.png \ + replay_to_avi.html style.css gdash.png avidemux_codec.png avidemux_fps.png + + diff --git a/docs/Makefile.in b/docs/Makefile.in index 54080fe..a6cb581 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -88,6 +88,8 @@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ @@ -167,7 +169,11 @@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -EXTRA_DIST = c64_internals.txt ckdelay.xls cd7_speeds.xls ckdelay.txt brc_format.txt +EXTRA_DIST = \ + c64_internals.txt ckdelay.xls cd7_speeds.xls ckdelay.txt brc_format.txt \ + cave_style.css background.png \ + replay_to_avi.html style.css gdash.png avidemux_codec.png avidemux_fps.png + all: all-am .SUFFIXES: diff --git a/docs/avidemux_codec.png b/docs/avidemux_codec.png new file mode 100644 index 0000000000000000000000000000000000000000..95143e3dd58c9e4180e7a8e881f4733e82f579db GIT binary patch literal 60290 zcwS_?WmH_v(l(3}2ol^OSa2t}28ZD8?(XjH?ruQ_1`F=)?mD=;J0JHs=YHNF-g8ZLBKB*2_5d^i%p(~`? zB$=3)`b3@O*=(L83tkcQ$^Sb>z^vbcj&FzZ;5y@p|15RKT9lH>c+O}?l2F2*wl;h_ zY7LQ;%;?|p=wuSXl9gM7cb#$R+0sfzP=#VhgR??3lJWnWFl^oPxbfPIYg*ERkzS-=*f{F-c7|Nx<%vN~PVRIx6Ff?vJ~FQ= zBP5SszzX+Y@tnS0RC$HJ5NeCc>zr&Pl@Lj7E#86bK8GEel;PdmfutN7)>}AjHYCM-Z18CH5b!MUlq7`JU!Q z37`%lkP561*g^Q`&Bm>}DQ=)g6wJ+7mw0$}!ELR`?ZSU2&R;Ma9;V65s}7Q^i`H&+ zbzD$4ovza5udS;qD=pnzswo^oY90?q{}NO^M7lSborEI(ATOlx9UEV1zbGyvLnK&Q zaON2ee>F3Wp089S%@+lJf2?!K`!7D2_baxC$gzAgXlC9*$*3%P>r;sb^Dt-M5iE}z z6nQ%|dg}9s$dlmZ?(1RD`TED4X_31)Bz_CZQ~ zBg3P#u5T4%ze|`axHrzJRjJbYrqKYTLh-A0`0!8xiK|+Fr`1a->u+_(AA1T>Gk91j zcEkbO08cH$RlJC*20P{BNzS|kr3$wlYeHWy;%O%BbS6WXlf|k*Jx06XxvyzHF)eRk?X4OQMsOe>ixtU_E~ILQa({JqEjWlOAA;;J6Dz3m5DlAkE6n z@7A_5plH8Qj*k54p$=RK^$Qa=AVn}M;@UFsrW&6ZFjJ1>fq;`eln%<5#HL{zsY8xS zNsk=& z2f0fs_mf8N5`>l}A@tqF=IfbeGnXz=PI3uosGR*>wfu`50YRxU!i<~{pDb3a4Ia%N z5=Pi33R6&NOheSt_b8W4G;Tg%y-GR4PDxf-@_T%{*T~yj>L?t1`k$wi=)nzz7p2QKOIm1 ztkRGSH>P3CaDs&0&Et(8($Z5%rib^yNvW>|sL96{eCBHF0HP-*+wx0s?xuCAd2v zX?i6h<`yp(QWAA>gtoiR#rucJh{i}?E}0MlJvJ*7n2gVMH?NqLLTqkN34>D=WZv_$ zciEFcm2QmG!(+YvDS1P70aO&NWSIqHUInkc(;iT0ghlynd07Dvr1|n2;zMfi%w zf;HGq@X+-$WQHTpp^$^4^02pgrj1|PO22>Dt^XZOV|KA)Tn}R_V)x#GtTsL;BR?ae zMJQBFl10>1mNSbf9^4e3Bd0p$j+2`3C;6M-E`dLTtZWYdqUbQhjmt1F3; z<(TD>!-`}^iwIHf|d=nT@?Be z1s_jH=Sn_m83()9bMp-TKq$3Tjz`ac@sALcA+d68@SRT=o|Ugq*xms~0Er&?J3Ttx(V?5^)XFE*4S07Quv$j7|*7 z6dEc{fK2f(Jj`fUQRacu-%(pXN7(s-lvhXCzsNe2b%kCI9a|H-#S1mp_n7m$o`0?9 zN0H!VJm(VExn`4O(wB$+mWUmyL!Lp}>8q^N4kVTYScigCD6jvs%9OXG-~^_CutCVg7`NW9d{Wn7SaaV-zFw z#!MnoLqUKuu$NVfT;*-CnWuh2=++Fpt`b#~4!T%SGr6j?i2A}{-lsoec|U4YN|ls8 zo1Lp`#z==6@zsX1;5;O4U9v+(MxbI`{q$H$e4KH4XhoU0DdGLU(~$1p+ciZuYpT$ZXyOBXjrdfc6?V=etx1(5le>bE4KBMK z2flcMu#F8p|NA2;6&01$a&2%)u1|*d%e}n1`f!8wYV~qoDMSDZc0ICScaC5D>nW;L zZE(ct@85o6;!rvk0@q!N2e%p+sTuJE$w@{@gjH}yD( zS_-ZCE;w^-o%fY=On3G25T2UoSC3cuX|7j7iFc;V=&f5e?$#bUY*yjZ*%MP)%A_C?k)@=rD8V#A#wcxHV zFS{)26LNBN=Gi4s2vxgrBH+E9_zgIPT{h_Ncfl+eUP(OA2==0jC@B+=x2|f^Vv7~M z4jCl>c0dJ%Zi(RjIWCc^C(1_wPcp?!Y_=p##||T!A^I@MlEf84ZW$~SA6@Fr;enPo zk&@FwCPB=gu3Ess7cF~%l8tVZ?Ff2SiK}^Wjbejl^+1?z509B@wYR!sgPXkcaZ*Hz zkN1vCvWAU!>VOIn*;Y;nk+5j0N_nw~myD>Dl#|;+!&KU9uM!O<9up81fx}Q=Rtqq= zlygTzJ(m`2L7~~i!3@@!cU$2ld7jP=EHWk9@4D|*HjnKA>^_D&l!?1J9Z4b2%QHJ7 zCAOV`ea0d7uub}!iARF-rE-7ka+C9~%fBR!eXi-Ky>>iM%2kO`q_q}N6Jm|yJ;nqS z0|i{!G^dpFYGQLO+{I6Vj#dhNTL)n6PP_PlXM;$uLR#AbjXMBxEj+Z!h=Om} z-vnG-kSywP)l+I#&p7arSaA_m02qbSl#;OmV0qUhj15HoHPT;xe*m5Ert0qp!kRLG zbhq(uhj_~dsSG;#;bb8{A{g&nV5hAg)uV~<76LEB2+xUDr`RMSWrZ0MNGy)Wl@eyb zD`i)OlZz-SKkIfq9@>B!7i=WJ9~18R9RR5o zUW`_Q1~#YFH$yQ*F;Rnq3EtPM0~4R8J9Y;L2d2#NB`Y=_9-hman_gn>zQ0uvf}T5+ z+e;JZ)VOO$vZsCB6|%O3RMVWdS14u~KV;6Xx>s zsayM_HLHtu)GKdfOZE38ihtjD&s&{nYf$WigqK+Hc_(?*dZw7(i!K+1W|9T4!3(VOdZM2!87_c>I< zXxT5LmP)(?3wL=}POLr~xJTF7Ln}z)7en4OkB^7VV=_|l5(R19Z$Bcu%4!+op3 zW4+bCVqB(-S3tb=I%5h~hO)Iga9x&&8n3})?FSaUv<~aN@_gnQ!Nn%Fn^MPOFWyun z&3^0p5l72OPlxM2cP{+R#)E$k$mu)Zxu1EjA@D#)vO&Or9d6&PKv$6QU=Rh)$*R4x z(owFg!*Uxsz3x4^Z4L$;j^@+jc>O8cy}@7PGesHMvUBa|VgUIOuX2_2r%4rPLu*Jp zdC;G^(}9xNt0yzM7h`n?^B&!Pk-jiqrz|dOP`i3zSp43~UQP^;jiO+Erv>`>umn3~ z-+nIROp&@3^-Cm<#8r?en**Ya!z6}@N_$OWgobAHsoM@Dt?F90+MR6u*<70Sn5Uc7 zEm@9q4TPSQcci_&qFVfMR?cF^E03Wlzw^w@auMD7kYRsXPwRt@uz?a!zI-6(!3Oe@ ztyQc_S(f$1Tf~Di^39|3MuqPM(MSe$qH{yDvgio+GcGQDt9170+ux<(R~wXB(OY6x z=A0=$#b(QS!jWB>T2Gao2hGqWRr<|PQ@*a9?nX6_^=}5Rf6aIx#j%;92UW7ZRT4PZ zh!KMLKX_|mKZtIAkbm3Uk`U-ov+=#>mziF%da@$BkkmBqy}r}R;7AuEY>#=bxeB`H z$c61#n+!Ry)zh=$$>*itj?evSmld@zxXzaUxqd%#27L)T=LAGA8eeX`|!NZr_~dsJW|KJH*b00-f{7fA z7um$lCuuc_`m<*}^Bfo1TA=`nr1qeGzAHl;_b*ZvAVVgBt1j{XL!*)D}B;M$=4k;r@rey?1$B zh}HmQwA01he{eop2iDk^snC>1Uw(e{rWZKw@} z*Nw)#YD3L~P`i^-iHQG*w^!3fq-JhgIEsGGVQ+}Tiy}+-ja4ZY#$VMc1n1P@F&xjd zkC($QZ0KDhTgbXQn@z1v)sf}U4OayZBHmPw=E!^ZUOpeSadj8?Qtzt1@_G!0i?YE8 zO_WEwMRlB-Y^j6EFOQE{L?(RBXrw)D?f?F4WWn4!@ED^x8X!al? z)2jQ+!>?V@n|kO)WeTf7Eg_nTc`FTzK63NR84k*ENpd<+6rTwcORi6vJYTliL&&{r zlJ}m&_3sVg$Fi)>(M3mdNN173tkwXCx*SGbjPr+GC-w^sL!qu#q6d&K;rd&9c&-yw zds{2h3Gk}#`FYBFgtZ0h;>YX^_?^R~`m6fBO{QE)g`4vpu-tQw#_CI5P8)dD-I+5e zT!hwu^NfGO;cMqsTc%ggTGa6#$8eSIsIn>p{qm<6Fg7{ z*3{c$6`85^UgR7Uu*CtFH^zGyq)zpkmeSSl?JXn2m04%(=zdB`UdS9*B&S`u6G&4> zX+G*HA;!nwUKd-0b1)@>Xx75`6mov*e!%Xq9^Oc9TvQ13SIGj9n@=O}c2l&z-V=oo-o%;hr1k*t*Gt^g{hJ+8!N{@${1M>pg1JznkMOr<*sIamql~OsEjHq zc0ZVK7T1CD;0E|e90ZG=iR5(**e);J10fJUt?q1nhD{Jp;e>EL=QB>;-{=2BjeC^%GV z9bQ!2S~bHC*R#cmqLaZHshg*!_p)B8GIGB&>%8(Ms_iNJNH;}a?EI8jr9NMU85E%Z zqTQWp$s!)p;@8atNg1s*1Z&wz%>T+mcPVTo-UiGt z7G7ssoYHf*IoD#X1IgcP$mwHy@lJZX@lFo^m|5T-H@?Z;3Akcl9BEBF-I#j&bNv0q zW5Cg-k#^&WE)(yMSWf9}Qes>qq5bc}jDFM1uW5XA=+5mtwgWQKd)YJacwEPG>5?p+ zt93dyg6$4z0gH zGOT?-`6@YWy5I3OKjV|q5c$SdKADU?t-3pQXX3N4pW?tRV8$nyTja*7&FBB_IIvRC z)#(fP;GXF7{DJz%CfIteJ1XM~5&cVMo`ewG0u0Oc8rZwqJ@ia-FPwaCkrSKg=sr*g zln5A5z1;Uzy>iXLaokYZa68qe9?%u7VnYD4^I9J?l66mnG!Gq?sM45mx!e+Iu24@6 z8D~j}&xdt09A|T&bBRjVRDW7xzQ@*-7v(y{#iePL&iORYvZXQK{kEP5s^B!^VvA$b zV(GoMaTnV|pA*WL@__W$DU2juPwrTsmPFb@$k6(rLe0i_>yu4KfDotc1epTX#^_gm zqT)G={M|#MwyPnM_X@C#Iz>fyS7z&_W$OT{WDKCE6Ra)oJK=!ipXnE+mLH$#a(K`D zI$_YjM>MbN===VF&ia>FV6)cXgE2g% zM+omL7cws2R=J?}A(sJCCxwn+f-I!@?Q!oIpxxbCLARw(i3rrtZ@M|YcKF1r>!~w% z26-2~RK~el8iwtOgc9>@AoeUkMIP;^4J~nu-H%u}p~9?+|LV9m6D78z`*q5Bjj;(? z8x}ONa>-fYIA$jW%VgI0jPCX#MYv}- z`1H^bqrH8-9hkv(m}Y6Vv@xFjpV(D=F?t&h-R9G4)-rHsxaJ$na+mIoFzZ^dj@Jg_ z8tK?v|KQ{Ebfh-ESnIwl5+*?tbr?=yrPsNK+G*pyUwbDd+Nv{suDPozBl~gt=V5PD z{K%WhyB&Rs)v)BxHL#woLerJ~p;dZM&D^+Ml>#Z3P-}Jv`5b>b6c}i;+w14){;(zZ z7*?hFnLV?dpU|40mTrv z;O5e)^1$Q|v*rDo=#TGa`{V|xX@rP2lQP_H3Jj$+PEINwGIvgJnz?)pyab~|Wf=_P z#l@tvH?|dDWjfk18du2u1?)`n%!6&nUmm*`4%b~urk$J={?|#gfp>iMP?1VELs|;< z&jCmcE6d4~oi!oj6BhK`>FQ>}f8vYH+ujF!K9FOKS?cE`cY2f&7)btwLUcg@w_1#U z(F|tK&z(nNeVl&}{z~HGSi5+)R(u~hdo=zJiF8{q>Hk!1q0pj{{2JW<*%ho>eSFDU z#Yi1<;1EoS8p9$QDLWKaSuqgqbBsc>pnp!$^7O}&F^WoxYfTqj;IAEm1Xncwmd`^$ z2T!?nee<|Ir6EN6r26&`yqUtaQu*rMyle%k4Tn3>{{1Vq!|X4Yews_4O`QX!J4I*Z z2dCy?8zxDqpYK!_2 z%aA#fGs`1ttyNd3`{hbi4tl-`KVJvxx&?3REKb zq$n~oJARuvfv#^px;0N8s+t#s24hgs&?cK|(D1At@sVH$M&P3c;NjuFE>*j;@NVyf ze?h*u4Y?kQFGRp|R>|CHK8aBu%XVbw=-?~3vNa`>fDo~#4;V-S{D<)z7Vwj444^7U z(#*`R-P_$Ax3~YH!IN|5mBNdm6S};WEac|Vq)oR4;87KBF{_Pd z0@szkzc_g5%mrOUFvZwNL^R%*OyXDJ^!C<~pqm*M>UOK+r5t?c#~T(Y46nhkThg?mF=dpjHw(ho+)IM{u@A!St=(i$<>E%&o8TM?H{ zY?Ye9|13y}za8`!M8qGQ?yl`;yq@=@j9rP!fW;;#E5j^a8(LLeKIvUy?wu~t5Mzq; z1?^K7pI)e5$d8E=CyxHIaT7-*Ri(T5&;rUKyiWMB>2BqV7kSmKixxXyAqKbMWa})=IRP-p-)c<+AA^ zdLSS_Eb6dl7Y=RZEwDIo(Tpo}DjuVG3qFL?odO8GNmPJmpNQ#ME!YiIO>=9GNFy_80%cd{tNW5 z60~4Io-;ZY7UZ|h{q}hc%@SjyYO`U-3ODogp(-R2(l-t~pLhQohV}>>UXT1~4%0a9 zYG3wsRL^FD$t}niiPQPXCjpyA`&&6?-Kw`Q$g;8p1%|=-&=g`#DvC-<6BI<=`!0_( zRUK{N6wWl}Alm&6=!+Vr^(fO@Y!iB|5mGGSE#m7jk?ZcjpwLhj>y>2jgwGoale+M6 zBEIEACiV?GmfGROyu9yVKC72BRG~<-G&O^8C#FEtqgPY+gM&bHPS&8??6K&F$(@{= zo#|YIvj7sBdH4p&E-H#XfWn=Av{JDF#*~?J+s77e6b6Qt(^kK*Q#e^CW20g)pn#I+ z1!Q`1XI{Aqs{i5R<72}*gQ>7cr$3Qsxn$Rd>U<~w^sz&cmAweOD0|FufR9+SKwAU= zMmqEzW&mR{Pa%<9T$L0zT9ve&h~W!23|a79jk>;jDQ?!$`xTg#U~H}JD!F&2sS--fLOv z&dv!<6y2fQmPX?YHNB0Gc%C0viJ8UY-Jf5}xw3XgS#Q5Rjd?F(5DPA27t_5DlzA{8 zc_YQ1Npi}vcMq_b^)~fRUGNrt@%LBG%kD(!%*&P^ekUlIk*Q+{={1r&8T5*K;t#RSn(4DQ^+$f4XxD5B`|* zFjUsQQ2Dw@hu3M?w|qc4Dp`0kVV-C?h=Q}8{Mv@EWB^6dJ^T#_WN6w$!&sci=Fa4` zd3|)ukRy5WYP`iG!Sw1CLL-%f^f_3Y#QXYg(33#qzIkIFr2ING=Pz~WZOsAdtn+6D zAoDVK1})}h%Gh2|t6Pritt%p5E^+%N*i0uf?(wB`azyIGB+u5d9J+^091lD_ILOK332EL0P*%zLhq!U!&0*fHh`nXWI=&UE4c5Awa}pO>CjGV zF$m?R&vh&pKL$5%mE&BE8My3~HB;(BXgm-qs{!$28!qPy!me$KlSg9y~rMT9%8?>*N+yUsnS zA}oFJN0gb5mn&~5jhI5(n*=w!Y8kP$%XT9~l27k$p9n%Hcl?F!TNW?*=K2{4p=NV{ zC(H{;vUl$;q3pD)C{~BhiD`_c*OB+$FO@gY`0ZUv7U6tO6*G5ph*-VHs;+Bo+d;h* z6r0Nx?7*eO0@c2IrGDmTl$z+gG(>*lq?Ay5m2%L`>n17j!UjdB~m3+8%Q1pgMhv1 zf{%C)U?tcuDMZm?rcXkf)V1gt&=KF=*5x$H5XBbg2VXeN9iY$z8G(7a-2gS4&WFj^ zc)8JS$4)gIcpV>f1~PqtMoqSux_r!mnIE%}{3*G?;CTl8fCru7)=pXzyS(_ys*RCb zPZj&~N!MASRgX;8A2O*tjZytlx@PRt<&^No#(Rf%8%tIye}3?GU2S`}-JkH7Ad?I^5%-zy5Q6g${2{9+~|2jM%s@}R&|Vi*VtIP{$7>67a8ML;|*;yv^?H0Zq5tt3iq7PNHREL$>rRqO^Hb(VxJ{pIN1|FZ=m7WIQ}sRSVwA{02ArK75$n zbJN7Ehl6G$M4=t7;PtT00HYVh+4Rl}hmDn6dQz`hwTI(HGF2pFB`NxbbVna&Gh;|? zXzHalJs4S&3BB=&$)icajiwz;pnDsvFFipBvL91$Y|QV2!f_gG?3Iq}@N$BC$-<3^ za$XEich3hWzLi&0p+M@#m*OKW`xndKE3BzS<GCG;=bgBF+k=CQ4 zn~LnfjK|!`2X!Jlok`X7?AM=I&(lU0Tw;wm;?XK4JI4T^(Y>~7)A569N@w4-s!HDc zQO56PZf$6rwyPht%yn7?&V85hK_MI0g!5yTa(?}v6<8gC+X6>~o8Aca`V z_7bbmc(1w~yWACt*~gGAL;9iu4MVqn`-g(`D1=3b-X`y9X)m{Niqp3Xxe%!rwKskY z7XGGedwGpK*jd8nM0SSPEbnAfCfu%824seo`1p8>u26aQiK0b3BFC{gkFDpaKu0jO zwp(ag%&*A&tXO`gnEZp044pk~%@3_Tf0N-0QFL|r4-gsrmyHZeKK6L(k9ZbreA6vM z-$I$iVrG@7AtBos4ghqv+l<}OLOOlK+;$wNrApLoJiKM4tlNbTFxKqnTJ88x;i*lA zJ@_+G?_@ciydUoSKJ;M={vctM59TZ3Up(7s4j}C|<|A%})5LTaZ|p=}kigc`SGYfM zy1E~M^z37#-5s${(tF{qme6gd7I#I*9|^nYHK?z3h7_*r?y&DLkb^M>o|h(rbTKbLQJ zf8Xx*P#$a`ig5K3{~~6j{G~L0(N=n|@CagH&LeGY@YvRQ?Ydh#i=YtF!@l3QoNtKI zvb(=wH;aC}Ef?AMe!n5s#@MI{344NIa;;Bn(Q9mDL_Z2_ih{{>%NYU5`h&@;7;U89 zK9qz6l6I6<p@zEa zn8V9bEWZvc#|u60(^6qj5LBQk`$YKY?pw6`nwz!oyrm4RJ6`7x(s$|>cW?~9pSej| zc#4QJR~F;E;`y#ciYJobPSK~moVh?l7cIzCwS^kdN-7ktKB?CjRLCrUO z{NEB1IPuyf$86+oP!IbFFBhBR^0^LuPO$4%+-}>zdABj&&`L#AxSJb+M0oB6bkt!4O&bE1%;uZA%TQ0gPOc)Gc6%)_0Kj%MG0A1 zv0?@Ny5*sXi68v@o%UEMrVs~x#@EBS&|^&`6+W*1BY$pcFf|}+HiAz_YnbQdRNKm@ zBwc>9sZto??=>TS{q*SSyuHWaxFflg-o(Sr6cg6N68Qo|TWyPH6fq~_TPqcV^_;O~ zKVx^TXi`0>?3Jv6Cg{BEniwl)E| z7XbV|ZQ0iun#Hymr#)3QGsse3pSZuj|8%1+^6xDx1O$W@sZF2jnFfQGV0ieHUyAo* zsR}@x`!Q1v_NRE5_1eyH>2*`e{3By)jq{d0hEs-}_S=>i2R@RH&(j$$BIBAPs9lTE z7&S2Tw%?+%%cy~56vGNGL!u9tk|Cd)!~9 zh0`23WfDZU^2lEP%F=XrHXNkPpOzj|^ID^v)&2_eT$7p{TiL^5PwssS=G}C}Ortuk zEi_ zgjZALq~yEpTjg&8o=E3a6?>_flc1-;t+TVhag*Y_YOvPcm}M&xO2#l!F(fWh`j2eR zhu2>pnZUgOef!4@#V6-}JhD(}l7+9;D~zj3ZtgGJC8~xKubIeLJiRdy=gO6`-wkaE zM%P-gE*V9lbop=(*mcHtC1}KGO7Bz3m8exi`{;bFjbH8w5D2(}P)I{}4h{y>m<%nv z>nl_M@?~@NZ4KEo`=iX@;Qkfbt(b|!!jn4QLlYyr{2x!qn32JKeL1_kMmO&-7lt)z zhv{>Xp9wi(8VeS5uso?~&D8@8-=#vR{d=IIn!~6z?N8eM`?_*5jK}1T*tgVa1(qi@ zw5pBY{GgF}#z`az>qfp_gq9>1X3d9E={+dWtym&Q+!JEfn3l5ZDWUxm!>ppYd= zN0iHIs(^!k7kp+>bh18R&^DTaeNOkspKSHA+Cn-!p!-*nnYLcsjrVe+nq4V7pf%kO z{7aUNPnGw^?|ulYc6HoJ(w8=jQXSjZtBrZRUX_qhP~2QgO~5{Qp10?&w>~($-CAB< zUt1;GMMp=IGc!j#sB{hnIv&(GuVOBCYze_Y+L7J#4gTrhGl6*HS?|Eq6=Jkh?SuP- z92k?<16$Rk^H)(LKcAZj*E$pP4S&dMBrP7cL~Y|D0Za%==gorSp$TZT8m(3*3S&2- zRSHEQ@FNtHsA~h}Es9GiVOx9s$4$gsI0mf~0l|P?|6XFlIt_V1eNs}&w%t&vwvfK~ zW2{eBy;Sbj1}w#;)*p=6A^EkoTSG!TZ9_`hTw$Qp+R&$8N-(+mag`9Negh&_CgO6N zx#&h#d!O-DvlHY`kV5A%6m{$k{EBl3nUssa;}WD-`GbZcmC5jpik@ma7UXMsSgnuG z@t3H5BNI&MTcL-H;FV7fhVR6F!xjV6-%;Tanvvnr(QdPHVR>|yi2K8dL0dD~4MTh;a>ux*KH$?B&ujW31%E9CAp4P`RHp9y3!zPy-#W}z=kog`FU zc@5bZ3LYVE8^817FVcu-`}CprY9q?gIU}5Rfc1gNA$AQ z_Ao`R(ZNKv*ZULJZ*GjQe+RczVtu#v^62Z{V8%+Cb zLb;#0u@qA*kJArofA#2H5qxvB3es3FjCJNA%Wc-4uis8vEMeL)@w%rHM@@93a>u!k z#dg-mIPcz?&oqdDIG{k0nNQID8bsy87p2h@A-2!k<@}bD59Ry(+cOLq3+ccpYHZ(y zXmOth$j959e^9lycEA*)*(QV9TN*-*6KJI;eOh7N8Q3}4JBkt-}wgf{9ZHe z-nJ-k-nJ2HUP$7ufZHo(uB+@_D$;Qa)RrR|0D_KYklj~);Zp!Tqbh5d?X zeZJG;ac7a|q2y1##`{7zGLj|B;Qhieh~0iYUG=nE_7!}|wIXiAUeHE2;dj(uT%Y?om!LF3q6Wu&CMoYCB!KHW$j^Cj{bdaI$8y;*i!2}}ko+D)FmEalc>MfU$T6UXLkUIrdfC0p1Q zoisWaKG3ovg_4rJiWzA8x@tBqplA zUpv4@z^mUaz{4ODhK0&dSk$|Wa2vYA@%!9xve@Lt_FGxKNsM$DO6Fp$)jy!4Wm%Km zJPLj?j~zECZ>(x+N{giLK=5(8mjOG;nI~mr(jzFwS}TN z3(0*s{k3@uHYAo4_QP*eCDxRVLuf?bgu2dT(mH!kx$5DUJo=c)*NAQOLI-6KhPp~Q zmlb!lM#T~V(g9oZv2U_ly&5g0zo3zc5gO4VMzp9`|8lJuk}0Uh|1GqMt$)zjR#|C4 za>tz8L#Mv+uf|`=gubPkLidkAV2#?D3oLH*3sLRz84}yaeI-k$vIRuIFKkvTTAvUB z9-h9oG>8YYWQ{os-s9kpT(2m$;qmEBpGmgRBR`Wm3*DR zQjV&-o=AEl(1!Qx1;AFTH3XSxg7e^aUfbWG+8IQ6@EQW6Wt`Zgozd|u2Cd&od znc3N=-9*`|t1Fkc_hW#w8LP#4`-6^ygM*vz_zM&?tUhx(qjK~M^LAiU_GZjY>9rq~)LEnY1*@8|tuZnUKri{r%)*eFKK|YTc{j-8^qU zuI9TXOq~WqfCF52d1^8c@?22!Q^o)?}w&QVcR+`pj;IMn?;)tE(+C|2Z0~P@%z%hWYd; z_V!Gog(%UYf$Jt!6bt`E=+#~OJKk7Zg-OT>{8&pdKC;i8luW`QTH_lUhH_P=U!LJN zZ#n3aO1o^Iv-!6BeaZJHQ)CZYM2BRKWNmNiZsI^%0J!ozmag?>ESo zy%0u+9>Y8k&!{cxF{saRVXIcFgo1`~cpM^bA$PK^-MV>T`G$k?DL-o@CU5Vj#FS%` z#f4oCjj!;NSpwgKEFt-s+OBt282-vFx*#` z^Q!Z{NvJGUZ(()3*$~ufnLgg*#^hz_5bOFfVA5+1eM%tC?UU34`I7Fvcy_wcj274l zlCZ?~eLLbFkj+xC)ciE*N)Q!Qy)O}$SM|b0Zz!_kviRFinJlt&ejz z+{!51cDK~`Z%%1;^XB!pC##{UDfGa*ewXz-3*vl*>_@vl`+T9j%Qc!+i;?Lp8sbh$ zWDg+D#O-ZVE4I%pL$7gFn`mUXR*QkZ{6?Ty;d7;?%~%heG!Wk3gMxyxT-d(ABNd1} zoG)27s1SUdmnTON`LflnhpZbI2z>BS{Cwk0Ojv66W@&DASF5aSg-MnSj*VrXmY1h{ z7XP)`k!E4_snt87t>L?Wj_rxHG=nuNF{`Y&;x{+-0s;dk&G6g~o%#lZ8=oJ8g51Eo z+Id$~u=M5W2;sj90OmheT~JLe?PROqXLNgAW|#)+D?yy=yf(Dav~r%jk@`Q?0(Q9n z{7$(jQDbmjHEbmndq6-;57yhG6Kg^LTe~#4O$&T^*YCQltI?$E`TqYZ7&NkBx8k+0F0c1DI|!0eF(c_A&!QxYdlvcq zIs(Pe@K>N6je{8@{wWAi{^X$%NXz{NDe^l{ISqC4Vc@bnTf=I_ufOo0bNjkTO2r*) z{D1%G4j`tC%8R2vhg%FP0`D;hm<`FRHq(dt)P$%)S|)wecaFkukmB(FqyLY9|G(S+ zi1eS^SMFfT<=Eedkv}L;B|B&=g|Pkqt%*m;AQ-$m(w}a#)0#}0_pS3t0EYt$-X=1g zxp*cji)zmVbz&5L`@(f~1Sm)M4B_}VdCmF&n8qemDsMSWe7F?ebaHmO@DO-={alz? z`4HjD)_9s*x~kP)v;1UjH}Z9Hv?}HxxL@pPZ+#p+n>+YBoLt26?Kup!e-MD7Skun6 z169c3iwyY8EWc2Rj59pqt@1~Eb^uffY7O_V@R*L*BBBda;GTAP4Bu$wi99+qm_&jG z`iA!Lz{&a5`JV%)F$&ihTR7`_b5kPUKUxRr39=B~ojOeex?VpeBC+CY^?%}h{o!aH z2H(7iys@DN?!oxB&EaIs&s_gPXJtTUiR9gb&M!xeT?yO0<1^vTL?uanm8 z&GR08B_4q{jrqhrr_+=+f1avt54O7#{oh)EYM*6NTD2!MSV{EDi-FxtqP=F=3F2Qg z%yM9S+Qe^DfX6GiYWz~Dyo9e|=Z$`~q!V^NaB&@;#6HKej3(LAII5`YZ!#ruM}9kJ zw?8~isZ$4mD~YCb(Aghwu{uIIZ7l)w+TbTPg@-^rYg#QS=)1Bk*>gf&mnQF^tX8(O z)1Aqr6CTBDiSLh%Q&vQ()~8QeAlPbalX+X{p`qQ6h75iyfn3Wb$_C;y&Eb2IMaPel zVW{<%kan?#>!V60=N`4ChwYzQ4TqMslOFMvp)S|sbhsVbUUaiMlHCw~>Fbl)z4Mb* zgC6}B_XNuWC8`=v`peN;Elvz3@xB3yS+^it65c(|gIdpgN6vSfM3Oucp@lVDS7DLy z%LKA;mOkT7lK)4)iUy6G0n(ntcIxVe5RL;cU=a=zL*E((Agt39}Jz%($=l z|2TKcs5+XhYm@|+;O_43Zb5=WaJS&PaVNOD>kjS^+#%==?hxGF-Qhx>bKY~_@4Msv zxMTE>9;3UeSFc(!XRTE`5%fQ(*z5@8uz>dc%N}U$2Z5T`qaTRD z2r))M?#5XC8S_VXsGn*gkx+)wV%eQj1p{Si-)F~&){hO9*cK&c0%#Wl%bN;ZxI>36 zCi^PXcyBhm#)#|cFD9QoIv(=Ipoc6wmemF%wJ~C$95=TZKS>(Ut-G;&CsKMDMaF%F zL8$LWcgROxgHebH+ucupyoial1E=25P$D}=FHkZEZxf@0llM*cwE3fPm!6wfV(+|( zRfYF{aOI2%qw)tL@RuCfwDodZMBn8k^~Y(lLPuLSGFzAmKWuPC6$yzF0tDQn0?ou} zI5e?FgFmTr31$sGLpCg*$osw#bAnM@6KDUz_7@{k|6srfR$IcwTa^R0_XYA-g7?;G zN6n}t*W=F(1T)U-ex2`D?d>shandIZEubQ!0xq!GSF_W$&Aj3U?w95HIyt7;K;-;e zM&ilsut}v@L`?L^pzjaDVn0d5t8+q;!;?sLdH-ZjLW+c6F*5kY>NSo$8oMTpm@0qo zCAaT*Z2p<1ZF)1j+}g?Gc$#)qy0>|W^^=PaG!wUY{R5)_y0R|2D5FFlJ@Ja?zOk*; zt4lp&AnKL87+va`&NwWO#B-Kl zG!5AOMk(Gd^0@E{*;ca9LKoA?oSwV_md&2gluE5*Vz*<`zG!=mg-iQ8BzLEKAB5 z8jFLhp+Kd-;zKoTq&5aFg|7Z+LMD|6G6ab)I*T7MjQ`uEh>09irno~xMTra{f*jcT z@w^Gn|L-G{_gj-}UsBu%6bO+fx;W@BaHKjBFad(#c_K0M)|hng;^Dc}=DJJvj;_$; zfsyZ{Lhai>u}*$%x*KyxBwCU@syDB$QFO{xEu)|==KqwzUZl1h{00@BzJbL?OGei; z9CMQEUr^{@oYr~0eT`Jd4lO`1!D=pdzSEV8fKN#DTI-WNAjzy2PCQ`3U~PH={OM%~ z>Z89u>?e4vyuUvHGpCJ#nTEe~3!T++o#RmfRa_cA{|!|JUfe&IdfL{W$uz-FSKGI6 z6%9qxJs=P9%yuWZDHJ|{f1)P0-I7f;*i`(o53EsQI?bTzx>DWF~_aJBY1o}muG>k@ z1BCm-+B%M~Tf~d3hDRiNZTjP%Bjp__)4FSCbEcTY2B5mt!5b+9 zM?ykPA-398i8!bki@9_^Q~R2C`5{t6RBgS$?nYa$w}2teN^meg_`t58Cpnzh+kCe@=Ay5(Zv+H;G=g@ z44M79c6p2S@G56Cjdt_SmvaEX>2M|CF3@cQZG+)-a|6y=1|_EK-G`P`(PKcW)i7{H zFKT_m6PmzU*Kwzl+XmYy;J2=6Ir7x>oP~q?dgJ-?PghqQ2{^9dL_&n4p(H?u)6w(k zp*Wx?7HzD{nn25y=I1Hb-SgcG)4)~=N844*jx??m0bQZOJOw>TyDebf>-J`#DTHUd zH@|!A!<>5g&IjI_U`XHgu3c}?_)UQ8{fR7+UdeuPUir%~X(5sA2;XIo)XIZ?ix{Dy z!L%Btpa$&q1|z0-M`GtB?$pX6fXPFiDXS+fS{Yk$p5hfJm!>sM@D)`K#JIhD;|w#* zJ&^92{cTTJ-{t9wf94G}{ieD)XiQE%Wm^A}-s0Bx($&a@f1A}vpi_!qAQ}>r)^x=G ztY11hBBa)*YBy0?&r6@|yKahV4E$js`%uIqVaG!^W8_xOnQXUuxZ62Dgi2O2_z z+K@cDj2J!I=)B32JzPAS`!dm;!^ExDMpoAwCt>E%b+hPJ6Gbqwf8~adW6|@|$%pzq z7TS0ZmR26%dg|#?ZS(mE)47{54I8ipNZV1_0bdebrx?|RCY z^y{Z|Uw%S^(Lo$B7b`JwJ1(bfT;{bAz_h?K8P${uv#!}?h9e-ODc0f{SGjBG)9T$dZ8L8z03cwEM+ghPIV&htItLXz*Ok{NRfCIYS-CjL8wdvyCHcNMX!K z#XIKd)-RmL2innxX)FQ!K+*M=qQ5V2=*ErfK!7cLFhl6u=Q^6QavBe^Q=68Mlt5@E3U`aao zRvAqlR%Ggy{9oj!AfoT#WD;M4!gpLnew}AD=L-+GzOPX00WIhWNM>l-wS9 z`K)*qkVwh&#q!K+8Z6L1#l;fD|7lb(x!66;aThALUfSomz2Y;vmPOD7Ek`SVctCJ4ZCv(_=6A zn3}bc!G-pC$nT;~*dKD+v{5S9eKrVW-JR2DxjN}(1 z1tAdP$@P{Nm7ILcr$F;QMxZj*H=K#PpWYys(I@C#Gb^jLn>P-$gg1k(Q0H;N;rhbn za5+&iO?qVJ@^ruCsF@85ziUUUj|`EMAA2r?Ed8}&MU+~snINrYDOOjug^oP?kB8>(3hJB`ecBM# z&-2L-VR-wff`K+_EUj0=kN6(mL^0kC$sUBXrFtWRgl3{c=p#GLA;nxqn1kM9m9U%oUPCehaRYt)!-t*~?xJ^@GZEryyty)${yJ#;m<>WTpBf-Qd)`{``~8 zw)%Q#Uot*?;^yRCUqI#&rpplJ+$Q^!gYP}PiJ{K{=kkf z{qYmd#SQjOqkh-=v|wNpfr%-}k%4p=#WESPf_VFWvDwWtDT6@PJ$%QvE%>oK>SR1H z)7rGL&eV}Jv+RE5BD$Zzd2@NEjz%4>edYHQJ21WV z&wrAevOcT}Xr?535(N((hAjZHRwbvqKwMxh*A zU&|ju^(~`z2GT2&7YI4_RE|l7tUH6NnYred>85C};5vcQBP*udpbezkudYi)!?@c+ z7csAr<@3oIqx*d*{Aa_2EsR=ycs5VJTTo7YkQmCE%=C%>EQ%YaB`ad{%E^e8% zs;a%+@755z*o)gm_H+B+L+5%Uodjl5%F!owh$Q>RB$1j;DKa!rvN(Xu`TC5Z2mXUQ zCllq3PhYL~H$)fi>(?J6toGJ7HT1^rlU5y?=TI3b{>(^m4;`$i-&t6zad3Kp4@9+k*}ogUQGp6SZ41RfRC})L z#SbU6m#HUA;jHJQZ<8ao1f7gG}w6&QH@$7RA5N?d2Si@O^)#m`aR+@6)MB=hB zA2K1nM3SvC&tx%Clt30i1f420zvRfO(AuMKWO4AN7uUWoyO%Nht%rZ9)i9m%smXIM zMW(`^0qxTx;**E5NE>e?LCpsD)F2j96`kUzJNgv_y>8?BZff-kJR)*|F4tO5lydY@ z#9-fKw&UA_wm+S4jOe4u_w!Ri#NX?!)KIXog%uTvt>((Rg@}LrYUtghedi9YSm`bm z+NIjAN0cWE1*8_t96WwNt_st=TH^s(1q^sB9E&5*JhEqn&cTMDn54CY+R7ShbIHOP zo$hEUIlF@aP4yQZ@g%LN3A22jk(froi+W~-5$PtB5d}PT7PmXPrp{@E?<-1F-`h6v zcao~AZLuIk?i!UUHpeTX^#KV!m}GFSkpE(8=k%jBK{WA_9helnCs}nFQv~5}iEF-2a{#Ooau-7OpHR8;*uY!TLk-^=ij zNo@=o6M*|Q&a(>6d^tr_?ya7ENBL&$2Z3c}8GIPDYJIx9BLifQQu2`?`iQzfQc)#z zucwdZ(`}!&{d<0Ykr^1o!*@ph&4*|ta_?_%g{8a;rg4!hUW}M!iBgIM+=mg~nttU; z#QH$DCDG3$LQS#`m)ys-{kgjsSr1Y?&OKCg;+82-1o*kmzgGlZI(TGuW+kA|7HX|X zp%dyyG>7kg(cuSd=K2sA4HAWKPpE;Y=#^l>!w3jztk9Box3S!zqG4BjRvNiLU?a>Q zUfbj%WZI-)uyH!m@B)KO)h4I~wUChTbBOnKtAkO0v!1xOAyQu(E5#L4$20;DtBpZm z=4j>v`WGc8w0<=GyafiMNJi`;Z^9zKF}jK`_+mNaEc$gY6Ke;$^sm~Dt&$*c#g}nC zFy0EEv3Nt|4A^(mDM6`(@`jQK(8Dx^6_5TOR{zcChhoc5cP$(CY6-|X_ir}YwL5IS zXvVN_CI_{i9+%u*;5+Jgw_Q#u(eB)ioV!g5tjFpu}7CB#-aS<|kJ-)B{ z&I=1GGUphs8=>c@7-V>2o9JFIFOlfPjciIUL9rwg!-!g-R7!lNguZ>;~;#1ddM`$NK{ox$>mr4!!uX$ir;zspfD7vd+z{B?iZ=!{~YY#EeZ64e z)ca_uRa8X{Vf#Whh;=C5-}*yHW*;-t^N`g;S`log$!`*p$MxZ?$=S0!RsJsq3$dS} z##K=r@xW{}P@pX8^a?&CSHCPRo^ z80?0o%h6lv%N%jTdmQ>JlRnE|(?>x8+l+wE0udD?OxmjqzSC*pqND4U;} z(Bu_9jXa^)lJG=SO0{gd>)>A6r#y+ z0212ps{{LJ9jhV}p4>PySC0LaGLyfUKHhb-0ZO=J z6!g{~27>rq&TSsrIwHumzZWKU-d`xf3$8ea1zLeLIo4>Eff+r37+dR(n$(*&wCzIS zSC%O>hWFd>-Ny!p z`btXLH9O4<#*2*4icLx9QV&tY8r1#v8i^w`mHjG}MV_b!dCoph79pBVeIZ!tox&N4 zu0J^9h$Ma%kBK4{HRRUAxpC}N?30G3uk{RdWD8c;nG2 zX_w<)5eo#rcvjUcx)T(^y+=)UgN&X7ZfK>Q2Dp2Y%@pFqe0x=EN1dS`4yyb#MKV;p z^PvYtBUyH#yTEB;LPWsOgO_cNGYzmMgF9e`sQ8+sSAF2+sglrq#3RzOp>rJ7`GXa) z_u*uHQl+jg}^4;+AY4>z8pc?QW@eT@Vfa&&ZV`hzRh7fl;JIWsuF@Q ziF(3to)75*jl5(z|C_iAW?- zKwkx&z+EY7VdRplq#mP7J|$uxj-0Lg+B|m5Hm+jUn0nauExLL1D#E5i2o+z7l0ws}5qm$GZpD?8f+(*O{dBWdN zVWYyi!1wPpxGPctc8fISuixPE`dthbf)MIRMzC35J`>LQl|GDn3>vMtQN;VyQ^kE3 z`t+z^aGyBqwkWhcyY4;9iGSgkcw0Er8i9>T=2~nFY`apO4#kd z9`ZAT{%R~udpB2f>ZmYo|ERZX1HLA*c}|!1JfT4;sFIL(PTMkg>}L7IesaALo&L}I zZ=oHkdwMMyuto%Pq!SfH_7CseqCJ*ryr`j?dWy zGNvA-8h4xn{H#f{0cfEM0$Dq})ge)VcoR=;0E~d(PX9-l5nHRZIk7C{0Jugu?Zel_ zX(upFp%k_~)fArOke-GqjgH@}CchG``2eX3Svyak+@bl^ zg=K$p=*qpCYUb)O?Q!8_{GzW6gDacS=+g6WcGv8mU``SH<%a;pKkqTF!R&fSID%Ly zhWBbtm?b`z>K`1N-KQB2rNU-fD@E^B>o#3jyJ{Ug>+9#}!DQ*;8CJDw8C^6VxTi+- zJdC*b)OGC6pH}=9GO49GwblLLMGgPu5ti(4$*#{Db=~9AZR#lK{^{QTnX}qN?|GQ; zJsUxFgmQm7wp-_EG){}Y7FCgBiMOBHOn8U8k=?3g&Ryp0p&(UiK^2S&PP5yjw;XPf z+eW#YePGA99o7owsy$m*b=xwLO}uf`pbcbG5S4q<1#~QL5N!u zE<&!W^;5k^@zlVwh%!D^tJ(G6ege}re-QLLh4D}J;JO*|N@EkTL1ARR6IU;Y*w<-q zU?=fP&dRzOd&rlpXnWWf;6yd_s%!%YH8DVk5TORF9~|t+2ZgHwZqGKh;-1N=`emFx zf&CLG|gHoftg-4NhxB`Jv>90un z24emHX7jfpuz#yVOz^dVq>@VLb&R%6&8^_`@Opp8n_&F2n`kAW1())|GqxV^7}`!* zy&Fi1UZKSxBC>5Up3hT%z&Q*sB>yi)Lay`aLAFvi!gO^d%jxI|X2y!+SKo{(Jp($d zM1Y^NB+}U<6CMl<93?xwP9*8SWLMSr=3u`{~oHyvQ*~#9D4i;uY=<&KzB^F`o4_olGNMi0@)Z=lKDD z@~tE;t9_yCm&5+DiLCD=xU7*r{aiK01V@Tj0XaW+oI?*xI+#Tm+ZD8ArzR zRk7m@%1ixCw?E!MCmd#p3s;-U>y}^ZOf;v5wz?%>vS64iHWQ5bE-~KvoEYH$#S|jQ zgS77fPU;Q4bAqlJ6%|Xv59X2!Bxfgje4?!;B}}z!3@%Z2JnYzF)}e}+2+e#V3@CS* zzwx0)&GIt(sUVJ^9e3w(#**^#U*;*5yV1ZQInd+Uu?XpqYml@84jc z<3H_l9?B~W$$3~)d+TMN!Ph2Y%^nWit*5D`pWV0#N}JGpkJLL}jQA=9-C__&Z{pgb zSgKCe{o)iZ3>dPUv1b1?yN;;%Wjel-nSTch@;AuaY~@6U*fPEE(rQy$2|FfqBDXrb z-d1MObBi@QxjYxpzp2jpm{%?9RZJk4_yN2M zdtB8LRLj<}<}=nxHJtpm^8d?OEi-8C)tg?tT7RC4rYr$DKrWBBD|KGRY*?%IicOUy z{8tN&{8#B{CP&spxJ(B~9x-wOD?^{9R`01%-)P924T&|aFycn}m-^3JWBz4tDjz_9 zf_YhO|7#ok&1e6e+33;n!bu6$|C-;rM~3;ovlT5m(ffpfe31VtzNj7gPnf@#>Ai|+ zwQNRD=>Au5{IC2&M2(3V9+a4f{sca>-NYULzakrB<%vp#W(XPdjbfuAo7eNlxV}|U zrJVmG=V-eBSC|m(o|zfRg2O1=I9c!eXB#DD@1tm34mF&h&j)tPm0*W1!*BTo-?pXx zW8AQ?>R`3=V)x_WD#a=o;uGOXL8Pbp5&?oC<`@wFY!opV{~rDoO9R*m^hJ7KgZC{a zd$YVy*uT%;zWzNTRk%s{zY+^%jx6!}U%%^6tO-suP53s{MVeUer`HJd{F;>MBM$hWb4VrD&m;&Frq$72^i$Ur?H!EpV?!c7?4(H zUyz>8^D^IrEhA2ZK!vWpf}K4XJ4QB!5v3`V8sa21fJCVbqTHACnDGiGs54qGF>&f! zx6|hl5nYet4lR(ZTYxxh_TA_u_E!wA_EyiRvnJb6ZK@3{^Drg@&yYBCq+DBxt9pG1 z&KAL~{-J0Y`*%>bpsQ{q3C!z907$5{z{Ag3;=?y@bvkxJ$%JI22sexq^mR*0mqpPA zQ?1wGrBU@o+wtcK2XVaQU$=&{{W^)Yq)Vvp!Wyt`2R$iUI;mtucKz92c@+C4hdcu79sd|WkKn!DDO&kRHP4Cng8o>KY3yTiXVs;R<$_d)r!%=7gOEgg?K8I(2zf*S*fy#S@3SN359hRFDqXV3UdOHqttS{QjL!Ar=;kBmKjLyaoF&jUhxAKoR5&T0#1EDmzh4Pq6^!7nV_ zdp*BqL^DrkdwEVV|Cs8+u(4~de4?MvFJ-(s4RUwCXYrSy-#TUU)D+yv{&Dx39{xV#jk20^@qS2j-`Ds6c z@q@8PvM$HJ5q?_|A#bJ4l{;M_s|qW7v=r^&Sd>RQOB|l(>B6&ad_W4ld|7;hI2m!> za_|}4JOfjaZ)`O=Q6Jf$G<rCLdtPrbe2|np`(d z_e9JImdi8glN}b~n=OQ867|-)aMMvjYyi%N!YKMG?^}IMxEwX z$ZBY?(gCLotn|{U({kcO-F3^h;r^fyFsudsd$6ubKmIEfI-T32wO`#MI$mDfs$|IlRDFvajt{6u2~f zNU5_azxUugKVF!uHkSPO@#7a+*{v#YUo@3-L0Zn^NImVeR6GxaepY@3Vum1byo5cD z@f3L*u8WBm#BX~`6;Oa2O?BTVzp2%Z{^+cnCzck^t9qfefuJjsLl;CEcx%Z5}vN66x{ZniZ#mMF%GY`C2Hs< zXee1(*;vX<1dPH4g%*wGmq96yi_S&QyU_FHv*O^?ejNz5rQctea%XkA(O*95Gum{w zUl|>RDqG7bD{(NgAFGA22t1dpe|l&_=d_jT8tNJ?-5B&1=ngyDkYv#RWN8Vd&855X zTtBe%b04RIu7aqdw|LY?<@)0!>z|iRlNJ4}UJheHA`xxj#cZG9Z1pHlDYLFyi={c9 z*x(PiSJeab*}mDuJrWVI)8-|sC8T7n_l|ZyF()VI+n$I7?`WdX>tjJh=y3u^(f5lp zX?4dN3LG)${eqt16&5CSML3Q?u@nYvX8yY$+h$iO`WFmVtYys|wf>6fG-v&T^Bk*= z`1YslDG3u;%_xp>coWd~g$aE2@j+IjIj-=j+H0Anytv^9v}R>HSj1jbk7=#Wo_p&h*Y_fC*D$R z;5U0hNpnbl6yD{M<5-4Qk@OXUijOP2kW5IBSmGly@|rR`cjO%l z>4?(a*+=%MQC$eMOH-7o{kTolwk(}}Grva0K%5Kl03$*PG?in$toeW^Sb>IMk}S_D z%U@#AsyBHJSTd7B1=`c6TJ-d1N8MOICv$*lE{(`yNWK20y& zDbRfUqqSD3=8xvirY>P!BbjsOScNtje_t}_)p6OOLYydK%nv3bk5n3Z%LLhx=EKq_q%b4P#kkLH)( zp!xmSR;zaECcm=)#V2!&aLa%;;%-rh2>KgMHGd*7(K@yR1nZjxU74>-Ir2{1;31Ee z6HL*t&^U5G?TCLa)~~?v?wp&nxJoJasm~ckMRpiB8AWIrP7~4oam=sk>2T2JaPg>OC@RSa{J@fm;ZYN{euGoOXV_8 z9bM3raMCDkl5(Yii_1}v1>Pb6XyP-?E8iD_hKJV8^PSlD$?hq5UQTkgGMl>hYVjbF$-G-Fepg|w7>dc5+P=OabdIjd^aP83&)o}PEuMeU)^_B#AN0%SzP-1J~ z>b)4cy}?kM<8=t<9A=n{EWSXUA@wmiW0+P+j`NNVQ-52;{2D4x8)J3+{j0BFZIe#F=*zJo-%je5!IJ-Bo;mf@N`E)~ z=wOv>@*AFh!%lD55Hf62%Oj|4{u`yh)No?SX+k`@Oo4P#Du)&3`T4n#sB>6lM?f1)B+YnlA<1we^eQ13O@j z>)9jPpCmv`$r2I!|C0&9XuDc=~!7vC>gZNsG|A3_Jd ziRMipqoMW02)+D1-vrIqnjt9{%C7&8Bg-!+INt^O=5p=P9HK#5SJl;WX*eM+o#6GS zO2B1mjk-$e0AR~uaU~5aa}Sg?t0_=m%>E29lpNahkIY2~e*Royt1oA&}#W%qw)G{=Q!cxgwi4c_0|d)Kd~xG zM$+RJ$~6&14!ughYZk)6n82Mk!MP%!g6iw2)o0Su>tDX$P8?oiM@d9VknQj9f8TZ~ zXl>>5XwQzoV*1)q>YQ|!wFb*tSPPipAbr7$gid=Byrp8a)L!2?Iq*`7wA?vbNZ?N? zJX`IEsXe1(?x(6X?2(G*s*oXgbg+`Ykj>1Fi$OG;=OX+b79nYTXV?dIlg$%ElaJ-g z#4{L(KrnVo*rO2Ocg5~P{}S4`lPP+7Nl#e3HA`>VWuxxRdh70bp*dQ?Gcd))8hUg| ztv@;^qD7mL{4_8v!^iUYT7(Qz54^GW7&dA3Ov{o5|6)5y4)O$oLtoHaVaAlb)0enJT3AhI(|Ms z3=Yw6^coE!T5t%MNOq(*pck%1A8)ALba~L!QSxftSYPCbdB)ng3;#_hA5(?kyKH+o zplOLDEM05Q zkv8&1cTp;FENFC|cKJh)PRMT3%eOGY73(bPAs~~A3=?*yOBb0zK}sn+Y+!%8JC^+~ zf^xg>V+?``D|NW+85pCKPv8Xg))T9AvIH4`{e4bJbh|gGXx@H>6%PQGQD9vvy2=ds z4myOHvEjX>h08PaY|#@y=Gt@m;B&J_URbM-NF>eDa`()Sv8{!A^PAIUDbQ$)V!Il+ zj?VUcxhRSh>Ho3w%1@`T(UgpOalTSai#=?>EbJgnsc!U@$89Nj5y8A)Xi@gpr|LXn zbYX)mrK_f>7QozSC<^5NU9;!a9iWD3+%i%8zpM6}S`R^G#4zHL-PZ{avpCK}&X6L3 zbjd$Cxs0lmo3#kiR%y}kUi|!e^Wm^MT>yrtb|u75+T`M=E%m1*sq)C{=~1QW z0DyC!HTqaY?8rQtuTp`UF?!Tj^ehC`5qCrKH=v$OYuIt5^;m-~iadCCtATvNyI!h6 z_!1fJrUOZpUK{!lQ~-o62m|NqpgdWiU|-karad3>j#@>X zEsRyo2c4H2l(*N_L;xUuGaYKE<@8qlUJz)i!jlP%(^f-9n54HX&pzqRKk&j%>CrQ& zhsZi=ubQ8Z$zVuzZ1m&31pZa3@2LK+KUR?Q$zpUI7I@b6v;S_871S!;yn|UG;DG{+ z1ru&O5twi4FgP#ehEab{j&XORqJRzh4o5BN_^W2GBja&1X%LE7)55q0*2q?J1ud*L zXo}(j20X8!=B!J)7|XSK@3P=2X*Ts{#XSo)r{bl9A zwq)8@X`OVqU!5re2`vC&jfPbL{0j%~Z07;_nMJAJ1W)h6HG6nuFW?E|XHBFEp) zk?!?e&L6!e+*R}Mf8M`6Fm7o}wVi1>zZN&Xc|mPpF5U?kZa4VtO&|aAoLHb!+t~d7 z-4xBfk;_EK-S4WVnj}f+t@4uc8gb;Ss_NM5>N2}~azlPz6~y;Ju634Srh?A}OA{tz zdJBTH{3UyxsXdH@ZJET8PJz=sg0u5!xb~L&aU=hy_q6wwkbwU-JgIs22U8(|)aLr+ zpQlr5cjPwtGJgzioZUi*c7$Y<5t+@JC|<`D4r*WfX4~)^BD2sAHW105FAx}no{&1r zi9}Pq6l5|Z%wpb+SXScMrqP*f2lY^$!SK)T^Y`YnrfcrX^kOszhw$$%725H08u96w zziPzwFD`nKnDL_c7g~{o%JnED(8AwLuR=&%pLb+32p;?XpjD^Ui%}AY_S+CRoqwlu z-(aut_996?sx(2vi>8+nq>95B26Lfn4-jYtM?7Nw>-ou*vLSV~>3ha9k2>3_(jkB$^B_T`f%679Fx(j&1GbzK@Tj*jA zYup^T(OarS1WS|~wwz%DqE+|n0}Rw%O?zxi+jgNpw^WaJqo~UKRi`<`iMrvg(Pf(( z^nD2qEl#-!QN=#;IzNKlUZg&4tRpv;xBO2zK0G}909SSyd9K`RE|xb@W?no~q_6$~ z`9*tIL~sFHZt=uS!{aBSf&xQ`gsOOBav>3Qt4~~V_UIF&KI=u$t`d3#sLz`7@*b-e z=Vf@x?Z650h7IoxYd9Gbtv0&?JKl7tN6>ZOWMBI(A&uCZgfZ_DZbwvY+#CI=bRf|C zPv7i>W=8~3QkxMEZdP19!{&ifrDqV@n$bPpGe@+9nd!Ef1QFRRAHFXZhANFhN_7^G zkRuB8ZN-{FJC!-s-qn{a)sI!yW70QtY-|AqGAWlvThs^=;81yfSY(pbPWuk5Y-|@c zLz?(=N1-2@X{hz7Pl$$(%*o2s8B=&x<1aEFZGjsb8=(;qLyb}8FI&uvTcI?J1N%)h zZ=s`$Rb9%NRpb9(jlN*yip}d`LFXk@o=V^WX{U`dW;z6VO3`dSM15)(XT9b7@5Y<) zv#{hlvH(?!7r%?!OXKDABz#_{REemJiJueg@3+oYY8$7!DR$b?jvMbx@GZ-k!`C@a zGQkgGh3hvhV1`|tOsQiIp-V}doZe9e-s%pT7{d~VoU=v{l}QJ{K7MH*Xt^O&2cctO zNjBOF?9WzE0RRB^2E#*z(ZIt_yBGv{25eCVBD*Dl)*8<0t1GN`yfOFW^W&G){1;z86>*>BWl$LOxdb+P2H;Tz2at8O)vu@gpzgig; zrk|sV@YM3XDmuLI?r>K-7g3oO1$F4y)(ZMFJEs$KM!YY$5v3^NY6L2I5`2Zhtmeu| znVG-;_#r%7sTt%eEbM1vk=YA)zHHvTxGKkd!w;7R#=Fm2^+uXE;$JpA2ybrkdY0g^ z9d&-BhArNq=lCpZq?j}8?gvP!!4;YoO?bJ|&s^kX(ybS6nShWVWK^9q}0=Obeqs{(6YMb&3d_x!r&Hmxb>nDnY@rjcJk%}7f1W73srnTZ^I zKXVlrct_j6E6MFHmCo&}2|*w!5Ve)MkQ=>xh?gC`HEwCjoWn{n+qhZ@q`AkB;fZ3y zD`YGGY~v;1eRfvS?;WtZSyblH>Oi@1D}izjzNIyr!6cHK!VoH&c znHN@Y7C=&`76aa=WI~6(0mZ;Fv~|lYSzMpCbd1iOWvirKq{;U5JG?BdMH5${n;n-80WwJ+ zWcTdj$C9%oeKWA?&S&pNqi{Jk&bm6ez0R0$IV{E04+Es}7k^$;fdE|{VZ;(tS;`aFpZc$R*)z zPSPm->eC3Js@k`@O62SND%wbq9ZB89LIM0xjK6{qY8$-4tz@QS~fONzKn1Nq&{6sI$e#n zR?>Jd7#C4obZ24}Z)%N;Ymxd6FZ$mqpRyj)*l~_L29UqHMB-$QE{)y9XXc@Py=DD( zFMu_xr;xVr&YHU0FRGSb+;cqf>$IJfVR_f%rgu61>-s}N7 z72z?(iEltcseYSVm6#v~e<1FSo@@YV4KCfT_ql!e9lRMSNgaq38t6|0I+8b0BrRWRy_nrf3w1ph8(y8_2j7?`W2A51ZC6O? z_;_IE9e8eaBB>0Y^QB&Tx@Y4nhO~eOqdq0VdhTpd`4us*+kp+xCzg<(BigL!ufgRdKmx&=suj)NT6* z6$e1M&BjAzlupSxF^4m)MBdBkrFQvw;nA9AEdd7O>6&c+ zF~h>Ny9YAPJt?kuLcLs`d1#~;N>-6%C8zcCz`V+bnR9CRI!D$;(Cv1VOuMGX1>Bqh z<5qQq-PG>2F8TaT`~{ajp=B4Sl`+o#n7a&0$K=4#k^5vKYD67#YNd){sFFN3IbL`n zsju#~*1P+gi#-1Ctw4~b=MHVP2063G+puyL*Zt&6PPlG5`ANOwQ~z z5rpkr3|@PyPx^9E6?vIH7R%C!TD8+quX6@Zs&jc!UQAm$uTwYhXgHgtC!&7Je^IGV z^74Sg8C@RbsdTD6X;W0b-Wa-oIwqod*<=cG)oVU_)VXC|E=Af28dsHF!5*mx7M@4V z!358o|8^(h`P)x%euem}^DCc(o!xKGRk5#gBP^?e*9P9C2C|ftBN5>pjI%X(`x_dR zbI+O%L$_^#;d>5DISr)05!V!YqmLK0_Hzk6hMfB#k1u`OcvOKKZOm0XJ#oPOLIF;S1 zqdiZ?u6F-9=C-S#yxeD$v1es=N6|p1PZUOZ@ zD0Kf!`BlxgTS~=G$A#|KXvwVG22qD_hN427D8qSgJ15hYeQAB9y75Z7pg-sOO4GjR z-%eGr(=DBrWiyATNZQzc^{HBrnd6lAu;o*XbrMN^QlK)K;csxCHC~!Ftb@4`R`Q$v z+ormar{q+=71e6@x97xgG1-Bd!h`~a-9mJSbjKZq!__*Do%rrRCz^V9bRdVx#95WQ89F|eW_J0!eR zy*3728w;{Xb&J3FC0UZz83XdjoW-P#CH|;N2JJ3jit2m z|6%JbpxTPMZDHI>aVS~}6e#X)ZSi8o-QC?Kr4+XU#fqfGH8=!!f>Sg=a0(Q6C-BmK z_r81o@xP3bamF~=y7pRg&AHD`(rUdIKS0y@!zK<8i1Zw_;jMH;n?%Izp{|>713sOL ze5O8@ScZm$;x$&E=1{NXt((|s&f$H^vTOTZ6-eV(#~jxlyv zi4TBk1N@a}P`cZvW-!c=c%y}*HBoGFw&VYO5Z4s!^P18Vh?%*`8s+9aSE3U;Y1j4l zu!a?}9tcIz9U4=_quno?buJGfV=)VyAuHC#8GiAIo>+ca?0;L!=p*!QwgM1r*g1%_ zi5iqASKD4mOYY>q&?M@)BH7<px%Ji)P4@K+=l0Ht3mqKTmf#qXW{i zlP0~+0{n>$er_1FV+lz(T_^@3aXVa$P>Ws&CF0Y>siu3DB?beAX&|#dk;Tm3c? zF~EiiJ5LA8zCk43kC0R7sFPCFYdV4eY?^oKEGSb4xdA>GPI{^}Ik^FQ$4Aw<#kLar z{sFev2ews_F(py-SXlJ!uL-774*5EzG!z)Vy-x1BAF_P8FgiMZ6yh`Aw$r+LtGayJ z$Dnd(J9b#?9pcNFLToyic>6A!1Rv?=1MSeW*$USUL53S?K|Jj$27{L9DLc5c<&3|R zFOEbjp7k<(!iVFQ0ayda#UWp3W0!mS2S^WqQ8;$o6u7X2wR--=9K}W%ts+RUpAp z?5Vnxuj4$LImck9AZbtPC;@eaZmHgmZAZj+fs5C`1t-q6xsQuF*EP!fCi`kIU|TFHA>&t5Ja6IGCP)E zXJV%Q?$g`u_qp)RoC<39_p{^+Vw#w(U#ftQ-!K0DTlAeZ#22&-ERpK)OtFk<8t~iT zZ#ot*GTFJ#c&7|B8kUB_!>Z2UH|HJONshE@wt%t6)vy|UrJMUr)2}=D>NPHS_)kYV z9aVNVwAatqmrNtU$5XBT0DrpfkLdoZPw6l&aKu8P*vlsaE1;{pcXRv2LDt9yx@n4- z6_AI@Pdna}gw1$*PM`mNwk!5nCEn>n%~uOOovBbG_t<2Pi$aey zH}c=dVp=_+wtZ^l13a8l-H9-#YdPD2hF@eaLw-^hRdBX#EnOq!*yl z`mOk-Xauh3&Pw{=;*%TfV8uwh9FucCo(y{DFyJe>J->;(7k|9;aT#7ZiH=3-94PM% zda3phlbJmaAnSk4_qzaNGg_#QRxMY*o+p||8!Rwj0w?QU+uq&Pee6I6f#=4%p-#XY?Jfe0b6Y4;%@r0)( z{n}R@os64uw10v`ca(61s$BbZbYpvZIM_`eIIJ0E=e<=&3GMA;L*8rPz%k=r@wHNg z4tr=kxq6H|5{uU=hdZMqDi2;sDzOg7+@9p&eQk9^;8c z?E8;z4|a(M8?Sy%N4aeD?-Dmx9(#^vHqh3zx#^8#U%hER-4)x-IUI$L_ zZ&s7QOGY>}*{9g%$tgt=)JRjPX(O1^dez0xp>1do{1o#=8jW>CJ1)WNm%44x&I@2* z(IYlrZI%T&&%Tn5mUfzijs{;WG0=E8THBSo^_;)4N$NE-vrsE_Nt2X-_f~~ZLsja8 z^_=m($WgN8ADX)~c~Ee6?Wx-2>h(w)fD%thR8-f{S(qA^01rdU{I;K;I!hp;i<2Y0 zQQJ3YM^jZSYzG+pK{hD>v!J#7=y9f`{B0oB`T!JIs))}U{L59JG%o*`Q1|3F?KSgU zg2mJOCwy5FBUu@r8%$5w&G>`_yeh!*KBnFZP|_+T(Bh$UDG3dE?bgNk^c$vRaC~`u z_9RV+uA3yGwh3-LUo${Va=HjOR;MQQGf$y1tv+UM8AzG1S;o^(^&~~IJGgl8i;Ws* zt?Er-UWHytkxtG7Y2la8$dtKUf!*lSdvWBy<`MBpMau}KSiRi^z{50)f#EdqdpnYk zp4-PRKkD5)V;j#eIv>>qT>QdLbM}uszvrnW063=B@j4bQv_juni=?J*eIp|!u!Goo ze!yHZe~wzkl~(Z0Yl^qF#yJpHf`Z?P(d9mXgk<78pVyMJMXCM6n_sBxQ)k|{;~juv zXK1g2@(1;r0u>Un-*pcCiORwcXgKFkN1$Vo&M>?)kmsi~KOdNN(yPn9Dd4x*+;B{{r-oiBZHg%wIyeN`9(s;J=(H1imY<{=FtFIB6%7nx>PIv>fL4rfZ-qxG9uddZd3deKKkTy>gLI6E76EbjHhQ($XFT*3~OYzn)JdIQ#}bI$tF`FZAI ze7+H-ynYh1#+nfEsc<(<)PQeV<4PxG!f{0~==NV(Pio9*55nj#+UEAe3C=>4T0v^@ zn|s1pNZfJbVhtfGO8anT6P&Knr)JkGKqt-_)UlY$U9I5xu!tVe9 zj>?G~FJz=%mlC|TI?gFtMMAArXe)a7Ny9jKd&V`es~KUC07uEL-0XZ5Z2#N< zHbn_~88}y27bq(uvncNto{(uoBW0LY$!IfpihGdxmVb@e;&rlwn{XN=o;Z#mo}?~h z-6+JwRDqle+c=WP&dzj$<5g|$EiL=&QeS#>Ht5Hf7;K!8D-3u=hC!0&tC=c<+)rDP zd*XIXy?8*Q*$qk-i{&1XiusT4XW|$d0(C#{$L#W1^XBMHJm3QgV84f82DS{|+ck(L zgVZdp{TeIu)vWnb%p+BbQuMpG3qAEan1F9*WR2#`FmP!VY6Fic;{y>+BWf`he;J}? z?Ra@)I(v4vJ_K;^kRT)^v={20?cR+tMnAB?Vci%UR_(z~BaG3yo^EhHcuOAjvF(Of z2hD@R{ldMV6-WQF9~SgvNs0MfwYx7=fsl#~qk8pQbV2{Sp<3UYfb|c&1J|~Fgpsvt zz1A0!SGrcsp(m^ze(=Dy)6h- z9%<{@$~y0DZBYUi8%;NE27I8LLmU1GR`u=v)0w5cT7;@t@~ECvR)>EIZJG^tfSzcC zfgem+Wn{k(nOHjxkCPgQ06Wra^2@T-cc!$FFvvbS?rdw$tf36T0oA&g<~^Aj8ch0dr%}(z!>>tRXW`g4?N-0>thC=DN375I zbI!uKsVPTMD@Xzo$=|ndz5UUKB~}}LNrl^zKqI?z^QQaLI}af8&2~kPt2N;Zyt*bU zsDwbme$$h$X3BXa{FWOjSL%odY3}h90||%Pwf!>U7&RZq%L{ME7uWgnaekmNXJ7$_x1KogmBN(> z4=rjQFG2{}*N>ELM2Q`b+$HGf4P7U&48st$H`ba(*7fZSd`RWk*k#-c@4)xhgn0YT67I(SBI- z9G|B{tCk6s>Iaksizlj-3#Rbfp|J!`5*P&r zP(vw?kL+Eqy z;6Ek-$=XNG&afhw<13a>hoTdEalfU^0I1v3f=8NYgJj9^-HjvoEM(M{)`>n}H417K zk3(-Sw`UDau6<(*9xZokyk4HKJbf;qkpIw>+xG&K`?*^jS_>YH@)rK_*=`;;IA!o) zA?r&X5pI5|GipZP<;#gr4Y7KU{X*ZuyJE%)JUi737zfO?(xCV-n)zHx$YpOz6}s8k zGXTn3+@6`y$JPkiPar@C-lv^3E#Jiw3Nocd0Z5H|^V0leRLo?L6pomuI_2zrdL_cc z_8XrByq2C3ko)mr@Ye4m-&k0m_k{AIB%p#`i{j_LzgCa-lhB6iL zIYp@LDptVgw9fDL#~s0KlgEly_!4n1F&Wn{^@RIP&xXjJ>3U047D(cXTfJe}+;G#! z5GL#ilg{9bG}BCcZWf?;#1n(+$-I8<&-1(skMJy=cqx{1q_r609vq-sm90%|WIBzh z-ulST9alC{yNrcw*m?Io-nDaVZbGuqZW3RH6;58H=;0zYH4s-g{RP`g;);8?aKR>9a15 zs`iesL!EZ66k9miCrmEAdDcWO=aC9Ljn*kDaSiqE>(18i@l|cgs!d)kwy$|F2I0|) zD)dI{#a^CtvgeW(r&L^Z48LQN z&c>HJnD}bw`t$mh@9NQ@(W4#q;kAS31fXN1=$x5w=bXqJmtJrl@0*Ss_z-x^y}xuy z)3HL20}|+-^{LLs0kyivDI1MH9stGSzub_s_tH_m`B_n4>)^+>09vMjcpswoBF!(E z`OAgfyZZV+ZX&e>c89k5Jh^Erh?Es3uBxV~8P@woR_5&1nO;rfY(MPzMc|G9)J$a0 zZWwWAjqS2F)5nOwMpJToV4PRSgpo=ohBO!Ws#-p(00v^>3-5P}S-`cn<4HIE(u5LX z%$DCVd@hAU72PFmxb&0;1+nB_kqcz-ix*30Lw>HYA_jZ{WORs}-DrX3eHlKRHz@k> zM_T{tCd7uafmuTkQ0;PlxjVhP%ojGJiY-G12pjR@HpVEjHq(jJ#jVbtm7WiOkVy}U z`r_@;Iwk$+cH-hw%g_r)1YmbynB zOa2uBjwPksJwB*Nl0mlHJ5qTX!JOsIALW)zp4W3alN{y~2GyKi;wAX_QbWI|K}USu zo(?&Ep-X^;qh$b>zG@iRLhvDy{q6E~PnwDs#Vl|zhSrS&k@VQg?LXUxZt*%)b?wfZ zW#N&pRhTLot(tose;*dI1&)AySC53zS%YIs;ZNhE)~=pj79)d`DEuSAB*4Lb;sJ;;p5@O5@12j(2Cv$_mMIG(C^$v5R9^_@4o9 z0z71b>!zKk;0pB$wHZnw^%E0O7&NZ zoYtkOrR`cd1TO>wJSfxQ|t9ul~=CI6KD^lG(O_G_CUIx7sT?a6GlYI8dzE` zRK`CGH^C0KxfGbbu67Nqx8^(@VDg|E9vLV{?-t0Rl5e`s?YRij`C}8diO=iFWR9=j zL-&t_cv`P}O-^LTgrvE_tjoc4d(WSx9;;9z=^EdoZ)dy>nc)LEp8F@ zuXM)=;cuUl&ms;RzXkb7M4GmJO`!#jcy3NF-0i|gg?HY7RPM7o<5dbC%VTOUrwxT4 z+a@v|`luY-Nf%PONxK^J`APl{%#>$zGtfsqSobD<=b5IiL2h?4@?W3 zY+6kw*y#mT^wpH+e6Yz?J|jLhyF5s|UTMNw@?+}AdWv6Yr=6S~DY=1rIl)TrY=(W@ zhKCiSyz4H{C)UqK_I_upwE3S?U4Y@5F5>i5&wfnE*sSm+edkdd(QWH@)_n+#l+ssX zQ%X$vD6QsKtxraBZvC*TYvB~wZEg5mK3$ZL zGkWh%EF}5JGCgnz`DCL1P+yvDE|Gk5-@v@i+igwZ$9~en(Z-oVUX^vD#}$EWsKgpA z=d3(Ee?@&LzS6d(-LfQ}MOEa}jgnks)Z6Lum^~@f*)QOl^Ik_K=irs2X-Bdp2sYUK z193^fe@h2c)nyNZ!l1|}Gd zVa{QM;eXP^Ka5Lc7eLB;97i|nc*ITe%G1?D9@k}rTn7?9JL{^b%8JySmR8(dwcaJZ z&>O#JYxP(HY#Y_munZOcZ+#S?3F%gj?>SeSAcHG7`?& z*;yGuw%-c!KK4>=J25XBZ;mliV>Ep_^#kd7;XLI&(dQHEp5L`sok?%Ki;KrUS>|AN z+wDp5JA>_z=hWw>1AOU=O$9PsUuMa89Hz{l4wj2i8Rg_GE*|+`^)iazPim-&Td<$j z@Kns}B|y-X=F-;ODZnajtzG-PZiW~p<$KpInWbR%FyNf?Po-k3xR!~@&g^R)udOf9 z-mA1Jqu7wC%WeFdNdRvqk}7)aOUW>{$F0qQCgA$$N{3)jAtHp=Sm|rkFrYNXSlrd- zs4QvWG`P~u_EXhFm-Q)3Bx3?4A;wIT2zt)zIzxtkTN~*`8I!oeRjY?;9O7?Rj z8DYCpvskIL3bgXwog_DMt|0gM#?|(Ak-fc<=IgIdwFPH-17dHNxF7u>xC34dpZo@L zeF?*8gCev;2A^~N9ug8ax;Z0N-aA6a@EitW=sK5M(5baKd2}nK^YTDYe|wxg8F%+; znwXjQzs7TS@O0d705?vCzi@rnv8@;^Uz^Ei{`j(9zrA0r0@B4jw#aucS&+@~s3*z{-ji_EwXoelHGETb(ckdqzs~}Q?35pf zxwNo^)vew|@CDp1K5Qi8fNF(!wNVI@Xr4}ezu%_w-kA*}=pLtfLzeYnYjknv9$*|I}!U44SkwLGf0CF?L7VES_Av1rrYn&}v zB*lU~)W`Ii7<&J{V?IO8zTSok+lnc(;ks+Hw^mxl&5b_1f>X`*qpjMevwUN%#d6|O z&|8d}S(qxhALFXil9soHo_Flex-dX1iIJ~GVCy*-Nlkf2C1#I$YBlcfxHim-_Yg_$bNw7Wiq9dWw}3VN`T5I_L*EADI{u>_uHj%ELa!xC_&eL>r>*a zLA!m1vz|n9Cjcn^dOY96MyTx8yz?2WZ{-R-jS9@06bn7-i!{w+ZPgTBVxuzg$X55} zCCZ&yn&8T6+}`HBjR8bMF5&f4X)(eE2PM)fCfrkeinrIT;DAf!vvb}UE}-g}gxcob zGO&PorEsm@UgrGVK^nB1@U#9$_BRG5C_voRwCKWM!V~Dao~>DH=e7NIOWY;<0Z(ZzH9eDz zO4OoY4X2QzJCFFqFjV>Fq$SMr;>z+vmG{GaO3=7iozmq!G2;`Uss=RSb$9p4qbth# zSGd~wySoKtu>&+#li<*Dd&W=6&Cf&S+b88;((`shh5LfA{+H=G(cjiH)OW;7N?N zlZZF#)m)GuP&8F_qCK(I7ob5KlB6P^Snl!@eMyovZ|g$XO$!dG;}zL!VQ9V_^=#(Y zddZplQJ}1=4nJh@m%b3+IMzCTR^I^QS8~Sn<}rxV)_mSfW@bkJjY2_KgYx9v-s zjW2A+=A)J`Jl&QYOgf(gS{{!A2Kw;Vmx!ga-4<2{;V|5R>l2Oo-we4yZg`lh{$iV1 zOFo_rPX6tN8$yxKi(H{3E&+Rdcr+59mq0ms)n!qNy}a)FYrM~wW~GeNLPyX>z6`(p zqMa4vx85t;cW*@PtI+8@F*&?8xSz0{w!7ouxP#g3WF(3Xe9Ad@)q~Wi(Wn;b??`aB zU5H&{OP=LU%vdHAZiJ`bp3{{&gO6k0fCbs8afop5SXc)cilJ|(_*yOW_dc*yGEl}> z`)@i3R_Ln+X;9XL1&Gmn(>uls4ZF&H!JpCEUmIp ztyP>_n++P@w;MWK{BU~NVZo{^d4nz6zf93?YU+dudW0##o_{Kh=J8TgTbq&gq!8jS zz7r7g103b__ov5iUtPXyGluYP=IY*_gVEv^7iVUMq^qWBx1_I?@x)HC9S3#p zRYB~ed^1GFF(j=XlhnFD=wyy9+kagE4Rs6%i%0mQvd}yjfzh!vfuG+7qHLaB?g~qcX@ilI^TEi+A+Gj^OO)Xg3JlRYw6nzrC-+)r5{KPQ(A*Yxj{! zO%pUXAPXJ#h$m)u26(xW&)R+yT16p;77M{aaEbEc=5)!NWaJb(ee4KzZ+mD2^RSlj zI@U?QMWJnVh$XVSbY!yUB1`;BHad~^1qde_=O69{r^2{~Z*0BZZZjCgc?Ow{17#y@q%7W$rHMUaDS&U%j%1`( z)Qa1=a&2+W3C2X7KoBn%B}1Pr*nzn)@yZxL6U3zPIGN@I#M>BuglGRr>CcZ)*OcAE3Irq z(FAyr<;7U*3KThWQkcIV7KVcGj0xSY7H0%V5-Z|Br62ChN!Ag_J^;3c!k0d*N zEjjqNFTL~Y+}#=EA>T#OkE?%L$>wY6++p9qwRNo*pW#3FKBAzhX0?apk54$KgxZr| zjK(oj#&2XWMIfiyTTo)ic^mqVSy5`A!|nqM{z+moLvIV6L%K)N?at0`E}F$tim2>S zUf}AjH8ZhE8|e9+xRtH%K&`U!bl0Z0rr+VL6U+REo1Ij>{W-#{bTwHEl+?^jnHC>L zCW+Lz0xJ!TWJM*VeECEdD{GteQ?T!iAA-s*X9hIAZVnLVTyl9<=x4olXJ#=~T$K1O3-w?Vm-)ERb<6c6hIrmexmoeZ?-?R|L33IN{vf zZq3FwZ6qx!}CwPpAoEv2cJl%EG1OHNDl#Nn+iKNQK?T*kP^bJGN^v(Y?631lq1RNmp>l zDtB3A+o{iqaa#cd0pd&@I8*aH3P1hL)6lWZ2?ij&s$rt z&vsT4=TZ+zE-B2@rA1pJ_22yw6Q^IxN`HyWOW||#yDUw&_4An0PHm8iWN1k&xS|`E zT=J_`lX^oXeg|_+pt#{&MKSO9q3T{dM)MIAGOovHdH|YusnsQ|tjjgO(Om_ReLKG5 z2tDQV&3Sdw{BU3@C`UL`@$%7nA2FPkLx4(_acxyju&C1xso1AbG0vBDwE>`F%zIk@ zH|J7%a>tec*)*zG?|-yqWEJhBu``w!tB4lW-6|=U;aQul%oBW>`m1hW&~eo&3s!H@KpPE_scnB z=PH^^_f@v;@@E5vu%9U&O_ggi`U?qWV(L!J%0DV9%EAQ=28*6!7(){BJcGWOb-iky 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 Q1N*$B#pT6nMGS-g2cLagbN~PV literal 0 HcwPel00001 diff --git a/docs/background.png b/docs/background.png new file mode 100644 index 0000000000000000000000000000000000000000..c826c86fbeacc2f99824b6003e5134f4ad3a4a5c GIT binary patch literal 8084 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 literal 0 HcwPel00001 diff --git a/docs/replay_to_avi.html b/docs/replay_to_avi.html new file mode 100644 index 0000000..8e03620 --- /dev/null +++ b/docs/replay_to_avi.html @@ -0,0 +1,151 @@ + + + + GDash - saving replays as AVI files + + + + + + + + +

GDash - saving replays as AVI files

+ +

The sreplay utility

+

+The sreplay utility is similar to the normal C64-like GDash game. + +

When you load it, the usual title screen appears. For its own internal workings, +sreplay disables the zoom and scroll settings you selected. But it obeys your +C64 and Atari palette settings. Sound is also disabled. + +

You can load a caveset +by pressing the L key. After that, the R key will show the available +replays, as it would normally do in the game. +You can select the desired replay with the up/down arrow keys, and save it +with the space key. You are then required to select the filename prefix +for the files saved. The files saved have names like out_00000000.png, out_00000001.png +etc. for the video frames, and out.wav for the audio data. The filename +prefix is out in this case. You can also modify the folder where the +files are saved. Be sure that there are no files with those names already there. +They will be overwritten; also they might be incorrectly recognized by Avidemux +which will do the converting. +

+You can watch the replay during the saving process, it is shown in real time. +(Currently the saving cannot be speeded up.) Don't be surprised: there +will be no sound. But it is of course saved to the disk. +One minute of audio data takes around 5 megabytes of disk space, and the image +data rate is usually around 4 megabytes per minute. +

+When the files are saved, you will be shown the replays menu again. Press ESC to +quit the application. + + + + + +

Converting the files to AVI with Avidemux

+Avidemux is a simple video conversion application which is freeware. It is +available on both Windows and Unix platforms. It has several built-in codecs, so it does not +require any external utilities to be installed. +

+The steps to convert the image files to an AVI movie are pretty straightforward. + +

    +
  • Start up Avidemux. + +
  • Choose File|Open, and select the first image file (eg. out_00000000.png) of your +project. Selecting the successive images is not required, as Avidemux will automatically +recognize them. You can now see the first frame of your animation. + +
  • Click Audio|Main Track from the menu. For Audio source, select +External WAV. +Click browse, and import the wave file GDash has written (out.wav.) + +
  • Select Video|Frame Rate from the menu. It should be set to 25 fps. That is the default +value in Avidemux and is also required for the GDash replays, but you should check to make sure it is ok. +
    + +
  • At this point you should be able to preview the video with the play button located at the +lower left part of the Avidemux window. You can also use the scroll bar to seek to any part. + +
  • To save the AVI file, you have to select compression settings. Select Video|Encoder from +the menu. The recommended compressor is MPEG-4 AVC (x264) or MPEG-4 ASP (Xvid4 or lavc). +YouTube recommends x264. +
    + +
  • The sound codec must also be selected in a similar way. Click Audio|Encoder from the menu, +and select MP3 (LAME) or maybe Vorbis. + +
  • You are now ready to save the video. Click File|Save|Save Video, select a file name +and Avidemux will convert your replay in a short time. +
+ + +The default quality settings are usually suitable for GDash replays. The resulting AVI file +is smaller than 1 megabyte/minute. However if you need even smaller files, or you want better +quality, you can use the two Configure buttons below the video and the audio codec combo +boxes to fine-tune compression settings. +
+When you are finished, you can delete the WAV file and the images as they are not needed anymore. + + + + +

Converting the files to an AVI with MPlayer

+On Unix, you can also use the command line to create the video. +The easiest way to do that is using the mencoder utility, which is +part of the MPlayer package. +The command line is: + +
+mencoder mf://out_*.png -fps 25 -ovc x264 -x264encopts bitrate=512 -audiofile +out.wav -oac mp3lame -lameopts preset=64 -o out.avi +
+ +The meaning of the parameters are: +
+
mf://out_*.png +
The name of the image files. +
-fps 25 +
This tells mencoder, that 25 image files make up a second of video. +
-ovc x264 +
Use x264 compression for the video (most advanced and also recommended by YouTube). +
-x264encopts bitrate=512 +
Target bitrate of video, 1024kbits/second. Usually 512 is +enough, but you can increase, if you see that the video is of bad quality. +
-audiofile out.wav +
Tells mencoder that the audio input data is to be read from that file. +
-oac mp3lame +
Audio compression is mp3. +
-lameopts preset=64 +
Audio quality; 64kbit/s is more than enough as the sound is mono. +
-o out.avi +
Output filename. +
+As simple as that. Optionally, if your mencoder does not support x264 encoding, you can use +libavcodec mpeg4. The command line to be used is: + +
+mencoder mf://out_*.png -fps 25 -ovc lavc -lavc vcodec=mpeg4:vbitrate=512 -ffourcc DIVX +-audiofile out.wav -oac mp3lame -lameopts preset=64 -o out.avi +
+ +I recommend using the -ffourcc DIVX option to increase compatibility with media players +in this case. + +

Upload and share

+Everybody is encouraged to do that! Upload your replay to YouTube so other BD fans +can view it. + +

Links

+ + + +

diff --git a/docs/style.css b/docs/style.css new file mode 100644 index 0000000..7b06238 --- /dev/null +++ b/docs/style.css @@ -0,0 +1,54 @@ +* { + border: 0; + text-decoration: none; + font: sans-serif; +} + +body { + background: url(background.png); + font: 13px/18px sans-serif; + color: #222; + margin: 1em; + width: 800px; +} + +a { color: #5555aa; } +a:hover { color: #e33939; } + +h1 { + background: url(gdash.png) no-repeat left center; + padding: 0 0 0 56px; + color: #222; + font: 36px/48px sans-serif; + font-weight: bold; +} + +h2 { + margin-top: 2em; + margin-bottom: 0.5em; +} + +div.command { + margin: 0.25em 4em 0.5em 4em; + padding: 0.5em; + font: 13px monospace; + border: 1px #222 solid; +} + +dl.param { + margin-left: 4em; +} + +dt.param { + font: 13px monospace; +} + +span.param { + font: 13px monospace; +} + +div.center { + text-align: center; + padding: 1em; +} + diff --git a/engine_tests.bd b/engine_tests.bd index 7740c0a..279e4b2 100644 --- a/engine_tests.bd +++ b/engine_tests.bd @@ -18,7 +18,7 @@ Levels=5 [/highscore] Name=Voodoo Intermission=false -Remark=Notes for the cave 'Voodoo'.\n\n /* dynamic string: split to lines */\n if (prop_desc[i].type==GD_TYPE_DYNSTRING) {\n char *text=G_STRUCT_MEMBER(char *, str, prop_desc[i].offset);\n char **lines;\n int j;\n\n if (!text || g_str_equal(text, \"\"))\n continue;\n lines=g_strsplit_set(text, \"\\n\", -1);\n for (j=0; lines[j]!=NULL; j++)\n g_ptr_array_add(out, g_strdup_printf(\"%s=%s\", prop_desc[i].identifier, lines[j]));\n g_strfreev(lines);\n }\n +Remark=Notes for the cave 'Voodoo'. Bla bla bla.\nBla on new line bla.\n\nblablabla.\n\nGreater than >, less than <. Size=40 22 0 0 39 21 Colors=Black Black Orange Brown Gray3 Gray3 Yellow DiamondsRequired=15 15 15 15 15 @@ -26,19 +26,19 @@ DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms PALTiming=true +FrameTime=200 120 120 120 120 CaveDelay=0 0 0 0 0 -FrameTime=100 100 100 100 100 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 AmoebaGrowthProb=0.1700 0.2500 Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeability=0.0000 0.0000 0.0000 0.0000 0.0000 AcidProperties=DIRT 0.1000 EnemyDirectionProperties.changeathatching=true @@ -81,16 +81,16 @@ DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=plck PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true BorderProperties.lineshift=true @@ -103,27 +103,27 @@ Point=3 5 INBOX [/cave] [cave] -Name=Creature change direction +Name=Creatures Intermission=false Size=40 22 0 0 39 21 Colors=Black Black Red Brown White White Red DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 -CaveScheduling=plck +CaveScheduling=ms PALTiming=true +FrameTime=180 160 140 120 120 CaveDelay=0 0 0 0 0 -FrameTime=200 200 200 200 200 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.time=10 EnemyDirectionProperties.changeathatching=true @@ -135,6 +135,14 @@ Rectangle=8 3 17 8 SPACE Point=5 3 INBOX Point=8 3 FIREFLYl Point=4 3 FIREFLYBUTTERFLYSWITCH +Raster=9 12 6 7 3 1 SPACE +Point=9 17 FIREFLYl +Point=12 17 A_FIREFLYl +Point=15 17 BUTTERFLYl +Point=18 17 A_BUTTERFLYl +Point=21 17 STONEFLYr +Raster=9 10 6 1 3 1 BOULDER +Point=24 17 COWl [/objects] [/cave] @@ -148,16 +156,16 @@ DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=plck PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true BorderProperties.lineshift=true @@ -171,6 +179,7 @@ Maze=19 1 27 7 1 1 50 0 0 0 0 0 DIRT SLIME braid RandomFillC64=0 10 39 18 10 11 12 13 14 DIRT SPACE 60 BOULDER 50 DIAMOND 9 Rectangle=0 0 39 21 STEELWALLDESTRUCTABLE Point=1 1 FIREFLYl +Point=1 9 INBOX [/objects] [/cave] @@ -184,19 +193,19 @@ DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 InitialFill=SPACE DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true BorderProperties.lineshift=true @@ -225,21 +234,21 @@ DiamondValue=10 20 CaveTime=999 999 999 999 999 CaveScheduling=plck PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 Effect=AMOEBABOULDEReffect MEGABOULDER Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 Amoeba2Threshold=0.0341 0.0341 0.0341 0.0341 0.0341 Amoeba2Time=10 10 10 10 10 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true BorderProperties.lineshift=true @@ -265,70 +274,30 @@ Colors=#000000 #000000 #998b6e #b23170 #75cc66 #46b231 #776e99 DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 -CaveScheduling=plck +CaveScheduling=crdr7 PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 -DummyProperties.diamondcollector=true -DummyProperties.destructable=false -DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true -AmoebaProperties.immediately=false -AmoebaTime=600 600 600 600 600 -Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 -MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false -MagicWallProperties.waitforhatching=true -SlimePermeabilityC64=0 0 0 0 0 -EnemyDirectionProperties.changeathatching=true -BorderProperties.lineshift=true -ShortExplosions=false - -[objects] -Line=4 7 25 7 MAGICWALL -Line=6 5 8 5 BOULDER -Line=10 5 12 5 DIAMOND -Point=2 9 INBOX -Line=4 8 25 8 SPACE -Line=14 5 16 5 NITRO -Line=20 5 18 5 MEGABOULDER -[/objects] -[/cave] - -[cave] -Name=Slime -Intermission=false -Size=40 22 0 0 39 21 -Colors=Black Black Gray1 Green White White Gray1 -DiamondsRequired=10 10 10 10 10 -DiamondValue=0 0 -CaveTime=999 999 999 999 999 -CaveScheduling=ms -PALTiming=true CaveDelay=0 0 0 0 0 -FrameTime=200 200 200 200 200 +RandomFill=DIAMOND 32 NITRO 24 MEGABOULDER 16 BOULDER 8 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true BorderProperties.lineshift=true ShortExplosions=false [objects] -Line=3 7 15 7 SLIME -Point=2 6 INBOX -Point=5 5 BOULDER -Point=7 5 DIAMOND -Point=10 5 WAITINGBOULDER -Point=12 5 CHASINGBOULDER +Line=8 10 29 10 MAGICWALL +Point=2 9 INBOX +Line=8 11 29 11 SPACE [/objects] [/cave] @@ -342,19 +311,19 @@ DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 RandomFill=BOULDER 18 DIRT 0 DIRT 0 DIRT 0 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true Gravitation=up @@ -384,18 +353,18 @@ DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true SkeletonsForPot=0 @@ -424,19 +393,19 @@ DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 RandomFill=DIAMOND 32 BOULDER 16 DIRT 0 DIRT 0 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true BorderProperties.lineshift=true @@ -467,19 +436,19 @@ DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 RandomFill=BOULDER 20 SOKOBANBOX 5 MEGABOULDER 2 DIRT 0 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true BorderProperties.lineshift=true @@ -503,19 +472,19 @@ DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms PALTiming=true -CaveDelay=0 0 0 0 0 FrameTime=160 160 160 160 160 +CaveDelay=0 0 0 0 0 RandomFill=FIREFLYl 20 DIAMONDf 10 DIRT 0 DIRT 0 DummyProperties.diamondcollector=true DummyProperties.destructable=false DummyProperties.penalty=true -AmoebaProperties.waitforhatching=true AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true AmoebaTime=600 600 600 600 600 Effect=AMOEBADIAMONDeffect DIAMONDBIRTH1 MagicWallTime=600 600 600 600 600 -MagicWallProperties.convertamoeba=false MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false SlimePermeabilityC64=0 0 0 0 0 EnemyDirectionProperties.changeathatching=true BorderProperties.lineshift=true @@ -533,13 +502,13 @@ Name=rockford shitz rokz Intermission=false Remark=The boxes are there to test pushing. Size=40 22 0 0 39 21 -Colors=Black Black Blue Brown LightGreen Red Purple +Colors=#000000 #000000 #4c9993 #9675b2 #a3cc46 #75b275 #624c99 DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 RandomFill=SOKOBANBOX 10 DIRT 0 DIRT 0 DIRT 0 SnapEffect=BOULDER AmoebaTime=600 600 600 600 600 @@ -566,37 +535,13 @@ DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 -RandomFill=BOULDER 32 DIRT 0 DIRT 0 DIRT 0 +CaveDelay=0 0 0 0 0 +RandomFill=BOULDER 32 NITRO 16 DIRT 0 DIRT 0 SlimePermeabilityC64=0 0 0 0 0 +Effect=NITROEXPLOSIONeffect NITRO [objects] -Point=9 6 NITRO -Point=9 8 NITRO -Point=9 10 NITRO -Point=10 12 NITRO -Point=10 14 NITRO -Point=11 16 NITRO -Point=12 17 NITRO -Point=13 17 NITRO -Point=15 16 NITRO -Point=17 15 NITRO -Point=20 14 NITRO -Point=22 12 NITRO -Point=23 12 NITRO -Point=24 11 NITRO -Point=25 11 NITRO -Point=27 10 NITRO -Point=28 9 NITRO -Point=29 9 NITRO -Point=29 10 NITRO -Point=30 11 NITRO -Point=30 12 NITRO -Point=31 11 NITRO -Point=31 10 NITRO -Point=31 9 NITRO -Point=31 8 NITRO Point=5 4 INBOX [/objects] [/cave] @@ -612,8 +557,8 @@ DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 RandomFill=BLADDER 64 WALL 48 BOULDER 32 DIAMOND 16 SlimePermeabilityC64=0 0 0 0 0 @@ -633,8 +578,8 @@ DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=180 160 140 120 120 +CaveDelay=0 0 0 0 0 RandomFill=DIRT 4 DIRT 0 DIRT 0 DIRT 0 SlimePermeabilityC64=0 0 0 0 0 BiterProperties=3 DIAMOND @@ -659,8 +604,8 @@ DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=180 160 140 120 120 +CaveDelay=0 0 0 0 0 RandomFill=BOULDER 32 MEGABOULDER 24 DIAMOND 16 DIRTBALL 8 SlimePermeabilityC64=0 0 0 0 0 @@ -687,8 +632,8 @@ DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=180 160 140 120 120 +CaveDelay=0 0 0 0 0 RandomFill=DIAMOND 32 BOULDER 16 DIRT 0 DIRT 0 SlimePermeabilityC64=0 0 0 0 0 @@ -713,17 +658,21 @@ DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=180 160 140 120 120 -RandomFill=NITRO 32 MEGABOULDER 24 DIAMOND 16 BOULDER 8 +CaveDelay=0 0 0 0 0 +RandomFill=FLYINGBOULDER 32 FLYINGDIAMOND 24 DIAMOND 16 BOULDER 8 SlimePermeabilityC64=0 0 0 0 0 +SkeletonsForPot=0 [objects] -Line=5 9 15 9 CONVEYORRIGHT +Line=8 14 18 14 CONVEYORRIGHT Point=3 3 INBOX Line=22 14 35 14 CONVEYORLEFT Point=3 11 CONVEYORSWITCH Point=5 11 CONVEYORDIRECTIONSWITCH +Rectangle=11 1 21 2 POT +Point=24 3 GRAVITY_SWITCH +Point=5 2 GRAVITY_SWITCH [/objects] [/cave] @@ -738,11 +687,10 @@ DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=180 160 140 120 120 +CaveDelay=0 0 0 0 0 RandomFill=SPACE 128 DIAMOND 16 BOULDER 8 DRAGONFLYl 4 SlimePermeabilityC64=0 0 0 0 0 -Effect=DRAGONFLYEXPLOSIONeffect SKELETON [objects] Point=3 10 INBOX @@ -763,8 +711,8 @@ DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=180 160 140 120 120 +CaveDelay=0 0 0 0 0 InitialFill=SPACE SlimePermeabilityC64=0 0 0 0 0 ReplicatorProperties.sound=false @@ -802,8 +750,8 @@ DiamondsRequired=10 10 10 10 10 DiamondValue=0 0 CaveTime=999 999 999 999 999 CaveScheduling=ms -CaveDelay=0 0 0 0 0 FrameTime=180 160 140 120 120 +CaveDelay=0 0 0 0 0 SlimePermeabilityC64=0 0 0 0 0 [objects] @@ -817,5 +765,85 @@ Line=26 15 28 17 EXPANDINGSTEELWALL Point=5 7 INBOX [/objects] [/cave] + +[cave] +Name=Flying stones and diamonds +Intermission=false +Size=40 22 0 0 39 21 +Colors=#000000 #000000 #b23872 #68997b #ccc766 #699968 #3856b2 +DiamondsRequired=10 10 10 10 10 +DiamondValue=0 0 +CaveTime=999 999 999 999 999 +CaveScheduling=ms +PALTiming=true +FrameTime=200 200 200 200 200 +CaveDelay=0 0 0 0 0 +RandomFill=FLYINGBOULDER 32 FLYINGDIAMOND 16 FIREFLYl 4 BUTTERFLYl 2 +DummyProperties.diamondcollector=true +DummyProperties.destructable=false +DummyProperties.penalty=true +AmoebaProperties.immediately=false +AmoebaProperties.waitforhatching=true +AmoebaTime=600 600 600 600 600 +MagicWallTime=600 600 600 600 600 +MagicWallProperties.waitforhatching=true +MagicWallProperties.convertamoeba=false +MagicWallProperties.flyingstoneto=FLYINGBOULDERf +MagicWallProperties.flyingdiamondto=FLYINGDIAMONDf +SlimePermeabilityC64=0 0 0 0 0 +EnemyDirectionProperties.changeathatching=true +SkeletonsForPot=0 +BorderProperties.lineshift=true +ShortExplosions=false + +[objects] +Line=11 12 32 12 MAGICWALL +Point=2 9 INBOX +Line=11 13 32 13 SPACE +FillRect=4 1 11 8 DIRT SPACE +Point=6 4 BOULDER +Point=6 5 FLYINGBOULDER +Point=9 4 DIAMOND +Point=9 5 FLYINGDIAMOND +Line=11 11 32 11 SPACE +Line=11 10 32 10 DIRT +Line=11 14 32 14 DIRT +Rectangle=1 8 3 10 DIRT +FillRect=1 1 4 7 DIRT +Rectangle=1 1 3 2 POT +Rectangle=2 5 2 5 GRAVITY_SWITCH +[/objects] +[/cave] + +[cave] +Name=Slime +Author=Czirkos Zoltan +Date=2009-01-19 +Intermission=false +Size=40 22 0 0 39 21 +Colors=#000000 #000000 #22ae52 #7f5e26 #7dde16 #267f26 #2251ae +DiamondsRequired=10 10 10 10 10 +DiamondValue=0 0 +CaveTime=999 999 999 999 999 +CaveScheduling=ms +FrameTime=180 160 140 120 120 +CaveDelay=0 0 0 0 0 +RandomFill=FLYINGBOULDER 32 FLYINGDIAMOND 24 BOULDER 16 DIAMOND 8 +SlimePermeabilityC64=0 0 0 0 0 +SkeletonsForPot=0 + +[objects] +Line=7 10 29 10 SLIME +FillRect=5 11 1 7 DIRT +Point=4 8 INBOX +Rectangle=5 6 1 5 POT +Point=2 10 GRAVITY_SWITCH +Rectangle=14 8 20 9 DIRT2 +Point=18 9 CHASINGBOULDER +Point=19 9 CHASINGBOULDER +Point=16 9 WAITINGBOULDER +Point=15 9 WAITINGBOULDER +[/objects] +[/cave] [/game] [/BDCFF] \ No newline at end of file diff --git a/gdash.nsi.in b/gdash.nsi.in index 8ceb042..f261371 100644 --- a/gdash.nsi.in +++ b/gdash.nsi.in @@ -40,6 +40,7 @@ Section "GDash (required)" SetOutPath $INSTDIR File "src\gdash.exe" File "src\sdash.exe" + File "src\sreplay.exe" File "include\boulder_rush.png" File "include\c64_gfx.png" File "include\gdash_screen.png" @@ -85,7 +86,16 @@ Section "GDash (required)" File ${MINGWDIR}\bin\libvorbis-0.dll File ${MINGWDIR}\bin\libvorbisfile-3.dll File ${MINGWDIR}\bin\libogg-0.dll - + + + ; Documentation + SetOutPath $INSTDIR + File docs\replay_to_avi.html + File docs\style.css + File docs\background.png + File docs\gdash.png + File docs\avidemux_codec.png + File docs\avidemux_fps.png ; Write the installation path into the registry WriteRegStr HKLM SOFTWARE\GDash "Install_Dir" "$INSTDIR" @@ -143,7 +153,9 @@ Section "Start Menu Shortcuts" CreateDirectory "$SMPROGRAMS\GDash" CreateShortCut "$SMPROGRAMS\GDash\GDash.lnk" "$INSTDIR\gdash.exe" "" "$INSTDIR\gdash.ico" 0 CreateShortCut "$SMPROGRAMS\GDash\GDash (C64-like).lnk" "$INSTDIR\sdash.exe" "" "$INSTDIR\gdash.ico" 0 + CreateShortCut "$SMPROGRAMS\GDash\Replay converter.lnk" "$INSTDIR\sreplay.exe" "" "" 0 CreateShortCut "$SMPROGRAMS\GDash\README.lnk" "$INSTDIR\README.txt" "" "" 0 + CreateShortCut "$SMPROGRAMS\GDash\Replay to AVI.lnk" "$INSTDIR\replay_to_avi.html" "" "" 0 CreateShortCut "$SMPROGRAMS\GDash\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 SectionEnd diff --git a/include/Makefile.in b/include/Makefile.in index f1b79c2..28693e0 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -123,6 +123,8 @@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ diff --git a/include/boulder_rush.png b/include/boulder_rush.png dissimilarity index 99% index f1455616170b4410e0a88e2a8e0426f154d8ce2b..45b09d2460936eb5dbb3a76f3f2183349f479f5a 100644 GIT binary patch literal 22422 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 literal 21924 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 R0Zah7>1Y@rDsEec{TGE}G)Mpd diff --git a/include/c64_gfx.h b/include/c64_gfx.h index 3f69da1..b5517c3 100644 --- a/include/c64_gfx.h +++ b/include/c64_gfx.h @@ -39,12 +39,12 @@ static const guchar c64_gfx[]={ 3, 3, 3, 3, 2, 2, 3, 3, 4, 4, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 3, -3, 3, 3, 1, 1, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 3, 3, 3, 4, 4, 4, 4, 4, 4, 1, 1, 1, +3, 3, 3, 1, 1, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 3, 3, 3, 3, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, -2, 2, 1, 1, 1, 1, 2, 2, 2, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 1, 1, 3, 3, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, @@ -83,7 +83,7 @@ static const guchar c64_gfx[]={ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, -4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 1, 1, 4, 4, +4, 4, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, @@ -106,7 +106,7 @@ static const guchar c64_gfx[]={ 1, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, 4, 4, 1, 1, 2, 2, 4, 4, 2, 2, 1, 1, 1, 1, 3, 3, 4, 4, 1, 1, 2, 2, 4, 4, 2, 2, 1, 1, 1, 1, 3, 3, 2, 2, 1, 1, -4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 4, +4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 1, 1, 1, 1, 1, 4, 4, 3, 3, 4, 4, 4, 4, 3, 3, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 2, 2, 4, 4, 4, 4, 4, 4, 1, 1, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 2, 2, 2, 2, 3, 3, 2, 2, @@ -120,12 +120,12 @@ static const guchar c64_gfx[]={ 3, 4, 4, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 1, 1, -2, 2, 4, 4, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 1, +2, 2, 4, 4, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 4, 4, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 4, 4, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2, 4, 4, 3, 3, 1, 1, 2, 2, 3, 3, 4, 4, 2, 2, 4, -4, 2, 2, 3, 3, 1, 1, 1, 1, 3, 3, 4, 4, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, +4, 2, 2, 3, 3, 1, 1, 1, 1, 1, 4, 4, 4, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 2, 1, 1, 4, 4, 2, 2, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 1, 1, 3, 3, 2, 2, 1, 1, 2, 2, 2, 2, 3, 3, 2, @@ -144,7 +144,7 @@ static const guchar c64_gfx[]={ 1, 4, 4, 1, 1, 3, 3, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, -2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, +2, 2, 1, 1, 2, 2, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, @@ -158,41 +158,41 @@ static const guchar c64_gfx[]={ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 4, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 3, 3, 4, 4, 2, 2, 4, 4, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 2, -2, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, +2, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 3, 3, 1, 1, 1, 2, 2, 3, 3, 4, 4, 3, 3, 2, 2, 1, 1, 1, 4, 4, 2, 2, 4, 4, +1, 1, 1, 3, 3, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 2, 1, 1, 1, 1, 4, 4, 2, 2, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, -1, 4, 4, 2, 2, 3, 3, 4, 4, 4, 4, 1, 1, 1, 3, 3, 4, 4, 2, 2, 3, 3, 2, 2, 4, 4, 4, +1, 4, 4, 2, 4, 4, 4, 4, 2, 4, 4, 1, 1, 1, 3, 3, 4, 4, 2, 2, 3, 3, 2, 2, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, -3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3, 3, 4, 4, 4, 4, 3, 3, -4, 4, 4, 4, 3, 3, 1, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, +3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 2, 4, 4, 4, 4, 4, 4, +4, 4, 4, 4, 2, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 1, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 4, 4, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 3, 3, 1, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 3, 3, 2, 2, 2, +1, 1, 3, 3, 1, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 1, 1, 3, 3, 4, 4, 1, 1, 3, 3, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 4, 4, -4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, +4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 3, 3, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3, 3, 4, 4, 4, 4, 2, 2, 2, -2, 2, 2, 3, 3, 1, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 4, 4, 1, +3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 2, 2, 4, 4, 4, 4, 3, 3, 3, +3, 3, 3, 2, 2, 1, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 4, 4, 4, 4, 3, 3, 1, 1, 4, 4, 3, 3, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, @@ -201,26 +201,26 @@ static const guchar c64_gfx[]={ 4, 4, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 4, 4, 3, 3, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 3, 3, 1, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 1, 3, 3, 3, 3, 3, 3, 4, 4, +1, 3, 3, 1, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 1, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 4, 4, 3, 3, 1, 1, 4, 4, 3, 3, 4, 4, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 2, 2, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 1, 1, 1, 1, 3, 3, 3, -3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3, 3, 4, -4, 4, 4, 3, 3, 4, 4, 4, 4, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 2, 4, +4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 4, 4, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, -3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 4, 4, 4, 4, 3, 3, 4, 4, +3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 4, 4, 2, 4, 4, 4, 4, 2, 4, 4, 1, 1, 1, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 1, 1, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 3, 3, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 2, 2, 3, 3, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 2, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 3, 3, 3, 3, 4, 4, 3, 3, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 3, 3, 1, 1, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 2, 2, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, +3, 3, 1, 1, 1, 1, 1, 1, 4, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -228,160 +228,160 @@ static const guchar c64_gfx[]={ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, -1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, +1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, -1, 1, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 4, 4, 3, 3, 1, 1, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 4, 4, 3, 3, 1, 1, 3, 3, 1, 1, 1, +1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, -1, 1, 4, 4, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 4, 4, 1, 1, 1, 1, 1, 2, 3, 3, 4, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 4, -4, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, -3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +4, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, +1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, -1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, +1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 3, 3, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, -1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, +1, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, +3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 4, 4, 2, 2, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 1, 1, 4, 4, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, -3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, +3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 4, 4, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, -3, 3, 3, 4, 4, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, +3, 3, 3, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 2, 2, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, -3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, +3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 3, 3, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, -1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, +1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, -1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 1, 1, 3, 3, 4, 4, 1, 1, 3, 3, 1, 1, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, -1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, +1, 1, 3, 3, 3, 3, 3, 3, 4, 4, 1, 1, 1, 1, 3, 3, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, -3, 4, 4, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, +4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, +1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, -1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, -1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 4, +4, 4, 4, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, -3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, -2, 2, 3, 3, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, +1, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, +1, 1, 2, 2, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 4, 4, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, -1, 3, 3, 1, 1, 2, 2, 1, 1, 2, 2, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, +1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 4, +4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, -1, 1, 1, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 4, 4, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, +3, 1, 1, 4, 4, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 4, 4, 2, 2, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, -1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, -1, 1, 1, 2, 2, 3, 3, 2, 2, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 1, -1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, +1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, +3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 4, 4, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, -2, 2, 1, 1, 1, 3, 3, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 3, 3, 3, 3, 2, -2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 3, 3, 3, +3, 3, 3, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 4, 4, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, -3, 3, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 2, +3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, +1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 3, 3, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 3, 3, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 1, 1, 2, -2, 1, 1, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 4, 4, 1, +1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 3, 3, 1, 1, +3, 3, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, -1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, -2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, -1, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, +1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 2, 2, 1, 1, 3, -3, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, +1, 3, 3, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 3, 3, 2, 2, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, +3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, -1, 2, 2, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 3, 3, 1, +1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 2, 2, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, +3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -457,30 +457,30 @@ static const guchar c64_gfx[]={ 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 4, 1, 4, 4, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 4, 1, 4, 4, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, -4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, -4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 4, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, -1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 4, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, +4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 4, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, +4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -490,11 +490,11 @@ static const guchar c64_gfx[]={ 3, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, -2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, -1, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, -1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, -2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, -3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, +2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, +3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 1, +1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 2, +2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 3, +3, 3, 3, 3, 2, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, @@ -518,12 +518,12 @@ static const guchar c64_gfx[]={ 3, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, -3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 2, -2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, -1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, -1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, -3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, -1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 1, 1, +3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 3, 3, 2, 2, +2, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, +1, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, +1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 2, +3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, +3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 1, 1, 1, @@ -588,8 +588,8 @@ static const guchar c64_gfx[]={ 2, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 3, 3, 2, 2, 3, 3, 2, 2, 4, 4, -1, 1, 1, 1, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 3, -3, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, +1, 1, 1, 1, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 3, 3, 1, 1, 2, 2, 3, 3, 3, 3, 1, +1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 3, 3, 1, 1, 1, 1, 3, 3, 4, 4, 4, @@ -684,22 +684,22 @@ static const guchar c64_gfx[]={ 3, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 2, 2, 2, -2, 3, 3, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 1, 1, 1, +1, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, -7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 3, 3, +7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, -7, 7, 7, 7, 2, 2, 1, 1, 1, 1, 3, 3, 2, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, +7, 7, 7, 7, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 7, 7, 3, 3, 3, -3, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, +3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, @@ -708,55 +708,55 @@ static const guchar c64_gfx[]={ 7, 7, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 8, 8, 8, -7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 2, 2, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 0, +7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 8, 7, 8, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 7, 8, 7, 0, 0, 0, 0, 0, 0, 7, 8, 7, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, -7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, +7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 7, 7, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, -7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 3, 3, 2, 2, -3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, +7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 3, 3, 1, 1, +3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 8, 7, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, -7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, +7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 7, 7, 8, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 7, 7, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 8, -8, 8, 8, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 0, 0, +8, 8, 8, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 7, 8, 7, 8, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 8, 7, 8, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 7, 8, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, -7, 7, 3, 3, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 7, 8, 8, 8, +7, 7, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 0, 0, 0, 0, 0, 7, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 7, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, -0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, 7, 7, 7, 2, 2, 3, 3, 1, -1, 3, 3, 2, 2, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 7, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, 7, 7, 7, 1, 1, 3, 3, 1, +1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 7, -7, 7, 8, 8, 8, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 3, 3, 4, 4, 1, 1, 2, 2, 3, 3, 4, 4, -1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +7, 7, 8, 8, 8, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 3, 3, 4, 4, 1, 1, 1, 1, 3, 3, 4, 4, +1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 7, 0, 0, 0, 0, 0, 0, 7, 7, 8, 8, 8, 7, 7, 7, -7, 7, 7, 8, 8, 8, 7, 7, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 3, 3, 0, 0, 0, +7, 7, 7, 8, 8, 8, 7, 7, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 7, -7, 3, 3, 2, 2, 3, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +7, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 3, 3, 2, 2, -2, 2, 3, 3, 2, 2, 3, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 3, 3, 1, 1, +3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, @@ -764,79 +764,79 @@ static const guchar c64_gfx[]={ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 1, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, -1, 4, 4, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 4, 4, 1, 4, 4, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 4, 4, 3, 3, 3, 3, 1, 1, 4, 4, 4, -4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 4, +4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, +4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 4, 4, 3, 3, 4, 4, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 4, 4, 1, 1, 1, 3, 3, 4, 4, 3, 3, 2, 2, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, -1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 1, -1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 4, 4, 1, 3, 3, 4, 4, 3, 3, 4, 4, 4, 4, -2, 2, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 1, +4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 1, 1, 4, 4, 1, +1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 4, 4, 1, 1, 1, 3, 3, 4, 4, 4, 4, 2, 2, +4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 1, -1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 1, 1, 4, 4, 3, 3, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, -4, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 2, 2, 4, -4, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 3, 3, 4, 4, 1, 1, 2, 2, 4, 4, 4, 4, 1, 1, 1, +1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 1, 1, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, +4, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, +3, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 1, 1, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 1, 4, 4, 1, 1, 3, 3, 4, -4, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -2, 2, 1, 1, 1, 1, 2, 2, 4, 4, 2, 2, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 2, 2, -4, 4, 1, 2, 2, 4, 4, 4, 4, 3, 3, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, +4, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, +4, 4, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, +3, 3, 1, 4, 4, 1, 1, 3, 3, 4, 4, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 1, 1, -4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, -1, 1, 1, 2, 2, 1, 1, 1, 4, 4, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 4, 4, 2, 2, -4, 4, 1, 1, 4, 4, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, +4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, +2, 4, 4, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 4, 4, +4, 4, 2, 2, 4, 4, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 3, 3, 1, 1, 4, 4, 4, 4, 1, 1, 4, 4, 2, 2, 4, 4, 1, 1, 1, 1, 1, -1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 4, 4, 1, 1, 4, 4, 4, 4, 2, 2, 4, -4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, +1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 3, 3, 1, 1, 4, 4, 4, 4, 1, 1, 4, +4, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 4, 4, 2, 2, 1, 1, 1, 4, 4, 2, 2, 3, 3, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, -1, 4, 4, 4, 4, 2, 2, 3, 3, 4, 4, 4, 4, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, -1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 4, 4, -1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 4, 4, 1, 1, 2, 2, 4, 4, 3, 3, 1, 1, 4, 4, 1, 1, +1, 4, 4, 4, 4, 2, 2, 3, 3, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, +1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 4, 4, 2, 2, 1, 1, 1, 4, 4, 2, 2, 3, 3, +1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 4, 4, 4, 4, 2, 2, 3, 3, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, 1, 4, 4, 4, 4, 2, 2, -1, 1, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, -2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 2, 2, 1, -1, 1, 3, 3, 4, 4, 1, 1, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, +1, 1, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, +4, 2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 2, 2, 1, +1, 1, 1, 1, 4, 4, 4, 4, 2, 2, 1, 1, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 1, 4, 4, 3, 3, 2, 2, 4, 4, 4, 4, 3, 3, 4, 4, 3, -3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, -1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 2, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, 4, -4, 2, 2, 3, 3, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, +2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 2, 1, 1, 2, 2, 1, 4, 4, 3, 3, 2, +2, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 4, 4, 4, 4, 1, 1, 4, 4, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, -4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 4, 4, 4, 4, 1, 1, 3, 3, 3, 3, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, +4, 4, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 4, 4, 4, 4, 1, 1, 4, 4, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, -4, 4, 4, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, +4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 4, 4, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, +1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, @@ -988,24 +988,43 @@ static const guchar c64_gfx[]={ 1, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, -1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, -1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, +1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, +1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, +1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, +1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, -2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, -4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, +2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, -1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, -1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, +1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1016,54 +1035,35 @@ static const guchar c64_gfx[]={ 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, -2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, -2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, +1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, +1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, +1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, -2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, -2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, -1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, -1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, -1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, -1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, -1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, -1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, +1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, -1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, -2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, -4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1843,7 +1843,7 @@ static const guchar c64_gfx[]={ 5, 5, 5, 5, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 3, -3, 3, 3, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 1, 1, 3, 3, 5, 5, 5, 5, +3, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 3, 3, 5, 5, 5, @@ -2567,9 +2567,9 @@ static const guchar c64_gfx[]={ 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, -2, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3, 1, 1, 2, 2, +1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 3, 3, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, @@ -2591,8 +2591,8 @@ static const guchar c64_gfx[]={ 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 3, 3, 2, 2, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 1, -1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, -3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, +1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, +3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 2, 2, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 4, 4, 1, 1, @@ -2643,8 +2643,8 @@ static const guchar c64_gfx[]={ 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, -4, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, -1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 1, 1, 4, +4, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 3, 3, 3, 2, 2, +1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 1, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 4, 4, 1, 1, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 2, 2, 4, 4, 1, 1, 1, 1, 4, 4, @@ -2733,80 +2733,80 @@ static const guchar c64_gfx[]={ 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 4, 4, -4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, -3, 1, 1, 3, 3, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 1, 1, 3, 3, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, -1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, -1, 1, 5, 5, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, -1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 2, 2, 4, 4, 4, -4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, -1, 1, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 1, 1, 1, 1, 1, -1, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, -1, 2, 2, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 5, 5, 1, 1, 1, -1, 5, 5, 3, 3, 5, 5, 1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, -5, 5, 1, 1, 1, 1, 5, 5, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, +1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, +1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 1, 2, 1, 4, 4, +4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, +1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 5, +5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, +1, 2, 2, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 1, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, +4, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 5, 5, 1, +1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 5, 5, 1, 1, 1, 1, +3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, -2, 2, 1, 1, 3, 3, 3, 3, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 4, -4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, 1, 5, 5, -1, 1, 3, 3, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, -1, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 4, 4, -2, 2, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, -1, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, -1, 1, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 2, 2, 2, 2, 2, 1, -1, 2, 2, 4, 4, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 4, 4, 2, 2, -4, 4, 4, 4, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, -1, 3, 3, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 1, 1, 5, 5, 1, 1, -3, 3, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, -2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 2, 2, 4, -4, 2, 2, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 5, 5, 1, 1, 5, 5, -1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 5, -5, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, +2, 2, 1, 1, 3, 3, 3, 3, 1, 2, 1, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 1, 2, 1, 1, 2, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 5, 5, 1, 1, 1, 1, 5, 5, 3, 3, 5, 5, +1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 5, +5, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, +2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, +1, 1, 2, 1, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, 1, 5, 5, 1, 1, 3, 3, 5, 5, 1, +1, 5, 5, 1, 1, 1, 1, 5, 5, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, 1, 5, 5, 1, 1, +1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 4, 4, 1, 1, 2, 2, 2, 2, 2, 2, 1, +1, 2, 2, 4, 4, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 1, 2, 1, 4, 4, 3, +3, 3, 3, 3, 3, 4, 4, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, +1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, +2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 2, 1, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, +1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 5, 5, 1, 1, +5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 1, 1, 5, 5, 1, 1, 3, 3, 1, 1, 1, 1, 3, +3, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 3, 3, 2, 2, 3, 3, 1, 1, 2, -2, 3, 3, 1, 1, 3, 3, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, -1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 1, 1, 3, 3, 1, -1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, -1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, +2, 3, 3, 1, 1, 3, 3, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 1, +1, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, +5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 1, 1, 2, 2, 3, 3, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, -2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, 1, -1, 4, 4, 2, 2, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, -1, 1, 5, 5, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 3, 3, 2, 2, -4, 4, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 2, 2, 4, 4, 4, 4, 4, -4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 2, 1, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 5, 5, +5, 5, 5, 5, 1, 1, 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 1, 1, 3, 3, 1, 1, 1, +1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 2, 3, 3, 2, 2, +2, 4, 4, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 2, 2, 2, 1, 1, 1, +1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, +1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 3, +3, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 1, 1, 1, 1, 3, -3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, +2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 1, 1, -3, 3, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 2, -3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2832,34 +2832,34 @@ static const guchar c64_gfx[]={ 3, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, -5, 5, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 1, 1, -1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 3, 3, 3, 3, 3, +5, 5, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 5, 3, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 5, 3, 3, 3, 5, 5, 1, 1, +1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 3, 5, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, -5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, -1, 3, 3, 5, 5, 5, 5, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 3, 3, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 3, 3, 5, -5, 5, 5, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 3, 3, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 5, 5, 5, 5, 3, -3, 1, 1, 1, 1, 5, 5, 5, 5, 3, 3, 3, 3, 5, 5, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, +5, 5, 3, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, +1, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 3, 3, 5, +5, 5, 5, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 3, 5, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 3, 5, 5, 5, 3, +3, 1, 1, 1, 1, 5, 5, 5, 5, 3, 3, 3, 3, 5, 5, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 3, 3, 5, 5, 3, 3, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 3, 3, 5, 5, 5, 5, 3, 3, 3, 3, -1, 1, 1, 1, 5, 5, 3, 3, 3, 3, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, -3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 5, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, -5, 5, 3, 3, 3, 3, 5, 5, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 3, 3, 5, 5, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 3, 3, +1, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 3, 3, 5, 5, 5, 5, 3, 3, 3, 3, +1, 1, 1, 1, 5, 5, 3, 3, 3, 5, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, +3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 3, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, +5, 5, 3, 3, 3, 3, 5, 5, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 3, 3, 5, 5, 5, 5, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, -3, 3, 3, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 5, 5, 3, 3, 5, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 3, 3, 3, 3, 5, -5, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 3, 3, 3, 3, 5, 5, 1, 1, 1, -1, 3, 3, 3, 3, 5, 5, 5, 5, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 3, 3, 5, 5, 3, 3, +3, 3, 5, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 5, 5, 3, 3, 3, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 3, 3, 3, 3, 5, +5, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 1, 1, 1, +1, 3, 3, 3, 3, 5, 5, 5, 5, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 3, 5, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, -3, 5, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 3, 3, 3, 3, 5, 5, 5, 5, 1, 1, 1, 1, -3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, +3, 3, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 3, 3, 3, 3, 5, 5, 5, 5, 1, 1, 1, 1, +3, 3, 5, 5, 5, 3, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 5, 3, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, +3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 5, 5, 3, 3, 3, 5, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 5, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 3, 5, 5, 5, 3, 3, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, @@ -2884,83 +2884,83 @@ static const guchar c64_gfx[]={ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, -4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, -4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, -4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -4, 4, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, -2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, -1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, -1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, -1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, -2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, -1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, -1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, -2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, -1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, -2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, -1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, -1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 2, -2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, -1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, -1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, -2, 2, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 4, 4, -4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, -2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, -1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, -2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, -1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, -2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, -1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, -4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, -4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, -1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, -2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, -1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, -1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, -1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, -1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 3, 1, 1, 1, -1, 2, 2, 2, 2, 3, 3, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, -2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, -4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, -1, 4, 4, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 4, 2, 2, 1, 4, 4, 1, 1, 2, 2, 2, 2, 1, 1, -1, 1, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, -2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 3, 3, -3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, -3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 4, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 4, 4, 1, -2, 2, 4, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 4, 4, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, -2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -4, 4, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, -4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, -3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, -3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, +1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, +1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, +1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, +4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, +2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, +4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, +1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, +4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, +4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, +1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 4, 4, 4, +4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, +2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, +4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, +4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, +1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 4, 4, 4, 4, 4, +4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, 1, +1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, +1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, +1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, +3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, +1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, +1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 3, +3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, +2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, +1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, +1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 3, 3, 3, 3, +3, 3, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 4, 4, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, +1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, +1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, +1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, +1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 4, 4, 1, 1, 1, 2, 2, 2, 1, +1, 2, 2, 2, 1, 1, 1, 4, 4, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, +1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, +1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, +2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 4, 4, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, +4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -3263,157 +3263,157 @@ static const guchar c64_gfx[]={ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, +3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, +1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, +3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 2, 2, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, +1, 2, 3, 3, 2, 2, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 2, 1, 1, +1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, 4, +3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 2, +3, 3, 2, 2, 2, 2, 3, 3, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 2, 2, 2, 2, 3, 3, 2, 1, 1, +1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, +3, 3, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, 2, 3, +3, 4, 4, 4, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, +1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, +3, 3, 2, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 2, 3, 3, 4, +4, 4, 4, 4, 4, 3, 3, 2, 1, 1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 2, 1, 1, 1, +1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 2, 1, 1, 1, 1, 2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 1, 1, 1, 1, 2, 3, 3, 2, 2, +2, 2, 2, 2, 3, 3, 2, 1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 1, 1, 2, +3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 2, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3, 3, 2, 2, 2, 2, +2, 2, 2, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 1, 1, 2, 3, +3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, +3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, +4, 4, 4, 3, 3, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 3, 3, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, +3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, +4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, +4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, +3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, +3, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, +3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 4, +4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, +2, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, +4, 4, 3, 3, 2, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3, 3, 3, +3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 1, +1, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, +3, 3, 3, 2, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, 3, 3, 3, +3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, +1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 2, 1, 1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 3, +3, 2, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 2, 3, 3, 3, 3, +3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 1, 1, 1, 1, +2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 1, 1, 1, 1, 1, 2, 3, 3, 2, 2, 2, 2, 3, 3, 2, +1, 1, 1, 1, 1, 1, 2, 3, 3, 2, 2, 2, 2, 3, 3, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, +3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, +2, 3, 3, 4, 4, 4, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 3, 3, 2, 1, +1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, +3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, +2, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 2, 2, 3, 3, 2, 1, 1, 1, +1, 1, 1, 1, 1, 2, 3, 3, 2, 2, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, +3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, +3, 3, 4, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, 4, 3, 3, 2, 1, 1, 1, 1, +1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, +3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, +2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, +2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 4, 4, 3, 3, 1, 3, 4, 4, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 4, 4, 4, -1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, -4, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +4, 1, 4, 4, 4, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 3, 3, 1, 1, 3, 3, 2, 2, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 4, 4, 3, 3, 1, 3, 4, 4, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, -3, 3, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 3, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 2, 2, 2, 3, 3, 4, 4, 3, +2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 4, 4, 4, 1, -4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 2, 2, 3, 4, 4, 4, 4, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, -1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 4, 4, 4, 2, 2, 2, 3, 4, 4, 4, 4, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 3, 3, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, -1, 3, 3, 3, 1, 3, 3, 3, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 3, 3, 3, 1, 3, 3, 3, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 2, 2, 2, +3, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 2, 2, 2, 1, 2, -2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, -2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, -3, 3, 3, 1, 3, 3, 3, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 3, 3, 1, 3, 3, 3, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 1, 1, 3, 3, 2, 2, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, -1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 3, 4, 4, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 4, 4, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 2, 2, 2, 1, 2, 2, -2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, -2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 3, 1, 3, 3, 3, 1, 3, -3, 3, 1, 3, 3, 3, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +3, 3, 1, 3, 3, 3, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 2, +2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; diff --git a/include/c64_gfx.png b/include/c64_gfx.png dissimilarity index 99% index 924735744abf0e4e3f983ddc21c7bb01b838cdbd..740e6beac3d0bba9852482a510492bf1ba73f6a2 100644 GIT binary patch literal 11608 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 Q1YBNf%34aLisk|T3xi26KL7v# literal 11489 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 diff --git a/include/gdash_screen.png b/include/gdash_screen.png dissimilarity index 64% index 00f22f0054920be474ffd6b59fbcf6063bc5bf9c..004ef14ff18e78493d8bb40f63d9d0217642c379 100644 GIT binary patch delta 4903 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 Aod5s; diff --git a/include/icons.h b/include/icons.h index 0b91f0c..a950432 100644 --- a/include/icons.h +++ b/include/icons.h @@ -9286,424 +9286,454 @@ static const guint8 image[] = "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0ssi\35uuo\253qrl\360lng\377" + "lmf\377lmf\377lmf\377lmf\377lmf\377lmf\377lmf\377lmf\377lmf\377lmf\377" + "lmf\377lmf\377lmf\377lmg\377lmg\377lmg\377lmg\377lmg\377lmg\377mmg\377" + "mng\377mng\377mng\377mng\377mng\377mng\377mng\377mng\377mng\377mng\377" + "mng\377mng\377mng\377qsm\360vvo\253tti\35\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0ssi\35z{s\362\250\251\245\373\354\354\354\377\365\365\364\377\365\365" + "\364\377\365\365\364\377\365\365\364\377\365\365\364\377\365\365\364" + "\377\365\365\364\377\365\365\364\377\365\365\364\377\365\365\363\377" + "\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\363" + "\363\363\377\363\363\362\377\362\362\362\377\362\362\362\377\362\362" + "\361\377\361\362\361\377\361\362\361\377\361\362\361\377\361\361\361" + "\377\361\361\361\377\361\361\357\377\360\361\357\377\360\361\357\377" + "\360\360\357\377\360\360\357\377\360\360\356\377\360\360\356\377\357" + "\360\356\377\357\360\356\377\357\357\356\377\345\345\342\377\241\241" + "\232\373{|t\362tti\35\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0uun\253\255\255\252\373\377\377\377" + "\377\377\377\377\377\373\373\374\377\373\373\374\377\373\373\374\377" + "\373\373\374\377\373\373\374\377\373\373\372\377\373\373\372\377\373" + "\373\372\377\373\373\372\377\373\373\372\377\374\374\372\377\374\374" + "\372\377\374\374\372\377\372\372\372\377\372\372\372\377\372\372\371" + "\377\372\372\371\377\372\372\371\377\372\372\371\377\373\372\371\377" + "\373\372\371\377\373\372\371\377\373\373\371\377\373\373\371\377\373" + "\373\371\377\373\373\371\377\371\371\371\377\371\371\371\377\371\371" + "\371\377\371\371\370\377\371\371\370\377\371\371\370\377\371\371\370" + "\377\372\372\371\377\377\377\376\377\377\377\377\377\235\235\230\373" + "vvo\253\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0qrl\360\361\361\360\377\377\377\377\377\354\354\352" + "\377\355\355\353\377\355\355\353\377\355\355\353\377\355\355\353\377" + "\355\355\353\377\355\355\353\377\355\355\353\377\355\355\353\377\355" + "\355\353\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354" + "\352\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352" + "\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352\377" + "\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352\377\354" + "\354\350\377\354\354\350\377\353\353\350\377\353\353\350\377\353\353" + "\350\377\353\353\350\377\353\353\350\377\353\353\350\377\353\353\350" + "\377\352\352\350\377\376\376\376\377\343\343\341\377rsm\360\377\377\377" "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\214\217\211" - "]\214\216\210\361\210\212\205\377\210\212\205\377\210\212\205\377\210" - "\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212" - "\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205" - "\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377" - "\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210" - "\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212" - "\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205" - "\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377" - "\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210" - "\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212" - "\205\377\214\216\210\361\214\217\211]\377\377\377\0\377\377\377\0\214" - "\216\210\361\372\372\371\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\370\370\370\377\214\215\210\361\377\377\377\0\377" - "\377\377\0\210\212\205\377\377\377\377\377\355\355\353\377\355\355\353" - "\377\355\355\353\377\354\354\352\377\354\354\352\377\354\354\352\377" - "\354\354\352\377\354\354\352\377\353\353\351\377\353\353\351\377\353" - "\353\351\377\353\353\351\377\353\353\350\377\352\352\350\377\352\352" - "\350\377\352\352\350\377\352\352\350\377\352\352\347\377\351\351\347" - "\377\351\351\347\377\351\351\347\377\351\351\347\377\350\351\346\377" - "\350\350\346\377\350\350\346\377\350\350\346\377\350\350\346\377\347" - "\350\345\377\347\347\345\377\347\347\345\377\347\347\345\377\347\347" - "\345\377\346\347\344\377\346\346\344\377\346\346\344\377\346\346\344" - "\377\346\346\343\377\345\345\343\377\345\345\343\377\345\345\343\377" - "\345\345\343\377\345\345\342\377\377\377\377\377\210\212\205\377\377" - "\377\377\0\377\377\377\0\210\212\205\377\377\377\377\377\354\354\352" - "\377\237\242\247\377\210\212\205\377\210\212\205\377\210\212\205\377" - "\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210" - "\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212" - "\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205" - "\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377" - "\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210" - "\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212" - "\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205" - "\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377" - "\210\212\205\377\234\240\244\377\344\344\342\377\377\377\377\377\210" - "\212\205\377\377\377\377\0\377\377\377\0\210\212\205\377\377\377\377" - "\377\354\354\352\377\210\212\205\377\3;\375\377\0""9\377\377\0""9\377" - "\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377" - "\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9" - "\377\377\0""9\377\377\0""9\377\377\0""9\377\377\1:\377\377\1:\377\377" - "\2;\377\377\2;\377\377\2;\377\377\2;\377\377\2;\377\377\1:\377\377\0" - "9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377" - "\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377" - "\0""9\377\377\2:\376\377\210\212\210\377\340\340\336\377\377\377\377" - "\377\210\212\205\377\377\377\377\0\377\377\377\0\210\212\205\377\377" - "\377\377\377\353\353\351\377\210\212\205\377\0""9\377\377\0""9\377\377" - "\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9" - "\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\2;\377\377" - "\3;\377\377\5=\377\377\6>\377\377\10\77\377\377\10\77\377\377\11@\377" - "\377\12A\377\377\12A\377\377\12A\377\377\11@\377\377\11@\377\377\10\77" - "\377\377\7>\377\377\6>\377\377\4<\377\377\3;\377\377\1:\377\377\0""9" - "\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377\377\0""9\377" - "\377\0""9\377\377\0""9\377\377\207\212\210\377\337\340\335\377\377\377" - "\377\377\210\212\205\377\377\377\377\0\377\377\377\0\210\212\205\377" - "\377\377\377\377\352\352\350\377\210\212\205\377\11\77\377\377\11\77" - "\377\377\11\77\377\377\11\77\377\377\11\77\377\377\11\77\377\377\11\77" - "\377\377\11\77\377\377\11\77\377\377\14A\377\377\16C\377\377\20D\377" - "\377\22F\377\377\24G\377\377\26I\377\377\27J\377\377\27J\377\377\30K" - "\377\377\31L\377\377\31L\377\377\31L\377\377\31L\377\377\31L\377\377" - "\30K\377\377\27J\377\377\26I\377\377\25H\377\377\23G\377\377\21E\377" - "\377\17D\377\377\15B\377\377\13A\377\377\11\77\377\377\11\77\377\377" - "\11\77\377\377\11\77\377\377\11\77\377\377\11\77\377\377\207\212\210" - "\377\337\337\335\377\377\377\377\377\210\212\205\377\377\377\377\0\377" - "\377\377\0\210\212\205\377\377\377\377\377\352\352\350\377\210\212\205" - "\377\22E\377\377\22E\377\377\22E\377\377\22E\377\377\22E\377\377\22E" - "\377\377\24F\377\377\26H\377\377\31J\377\377\33L\377\377\35N\377\377" - "\40P\377\377\"Q\377\377$S\377\377%T\377\377&U\377\377'V\377\377(W\377" - "\377(W\377\377)W\377\377)W\377\377(W\377\377'V\377\377&U\377\377&T\377" - "\377%T\377\377#R\377\377!Q\377\377\37O\377\377\34M\377\377\32L\377\377" - "\30I\377\377\25G\377\377\23F\377\377\22E\377\377\22E\377\377\22E\377" - "\377\22E\377\377\210\212\210\377\336\336\334\377\377\377\377\377\210" - "\212\205\377\377\377\377\0\377\377\377\0\210\212\205\377\377\377\377" - "\377\351\351\347\377\210\212\205\377\33K\377\377\33K\377\377\33K\377" - "\377\33K\377\377\35L\377\377\37O\377\377\"Q\377\377%S\377\377(U\377\377" - "*W\377\377-Y\377\377/[\377\3771]\377\3772]\377\3774_\377\3775_\377\377" - "6`\377\3777a\377\3778b\377\3778b\377\3778b\377\3777a\377\3776`\377\377" - "5_\377\3774_\377\3772]\377\3770\\\377\377.Z\377\377,X\377\377)V\377\377" - "'T\377\377$R\377\377!P\377\377\37N\377\377\34L\377\377\33K\377\377\33" - "K\377\377\33K\377\377\210\212\210\377\335\336\333\377\377\377\377\377" - "\210\212\205\377\377\377\377\0\377\377\377\0\210\212\205\377\377\377" - "\377\377\350\350\346\377\210\212\205\377$P\377\377$P\377\377%Q\377\377" - "(S\377\377+U\377\377.X\377\3771Z\377\3773\\\377\3776^\377\3779`\377\377" - ";c\377\377>e\377\377\77f\377\377Ag\377\377Ci\377\377Di\377\377Ej\377" - "\377Ek\377\377Ek\377\377Ek\377\377Ek\377\377Ej\377\377Di\377\377Bh\377" - "\377@g\377\377\77e\377\377=d\377\377:b\377\3778`\377\3775^\377\3773\\" - "\377\3770Z\377\377-X\377\377*U\377\377'S\377\377$P\377\377$P\377\377" - "$P\377\377\210\212\210\377\335\335\332\377\377\377\377\377\210\212\205" - "\377\377\377\377\0\377\377\377\0\210\212\205\377\377\377\377\377\350" - "\350\345\377\210\212\205\377,V\377\377.X\377\3772[\377\3775]\377\377" - "8_\377\377;b\377\377=d\377\377Ag\377\377Ci\377\377Fk\377\377Hm\377\377" - "Ko\377\377Lp\377\377Nq\377\377Pr\377\377Qt\377\377Rt\377\377Su\377\377" - "Su\377\377Su\377\377Rt\377\377Qt\377\377Pr\377\377Nq\377\377Lp\377\377" - "Jn\377\377Gl\377\377Ej\377\377Bh\377\377@f\377\377=d\377\377:a\377\377" - "7_\377\3774]\377\3771Z\377\377.W\377\377,V\377\377,V\377\377\210\212" - "\210\377\334\334\332\377\377\377\377\377\210\212\205\377\377\377\377" - "\0\377\377\377\0\210\212\205\377\377\377\377\377\347\347\345\377\210" - "\212\205\3778_\377\377;a\377\377\77d\377\377Bf\377\377Ei\377\377Hk\377" - "\377Kn\377\377Np\377\377Qr\377\377St\377\377Uv\377\377Xx\377\377Zz\377" - "\377\\{\377\377]}\377\377^}\377\377_~\377\377`\177\377\377`\177\377\377" - "_~\377\377^}\377\377]}\377\377\\{\377\377Yy\377\377Ww\377\377Uv\377\377" - "Rt\377\377Pr\377\377Mo\377\377Jm\377\377Gk\377\377Dh\377\377Bf\377\377" - ">c\377\377;a\377\3777^\377\3775\\\377\3775\\\377\377\210\213\210\377" - "\333\334\331\377\377\377\377\377\210\212\205\377\377\377\377\0\377\377" - "\377\0\210\212\205\377\377\377\377\377\346\346\344\377\212\214\207\377" - "Eh\377\377Hj\377\377Kl\377\377No\377\377Qq\377\377Tt\377\377Wv\377\377" - "Zy\377\377]{\377\377_}\377\377b\200\377\377e\201\377\377g\203\377\377" - "h\204\377\377k\206\377\377k\207\377\377l\210\377\377l\210\377\377l\210" - "\377\377k\207\377\377j\206\377\377h\204\377\377f\203\377\377d\201\377" - "\377b\177\377\377_}\377\377Yx\377\377Ss\377\377No\377\377Ik\377\377F" - "h\377\377Cf\377\377Cf\377\377Ad\377\377@d\377\377@c\377\377>b\377\377" - ">b\377\377\210\213\210\377\333\333\330\377\377\377\377\377\210\212\205" - "\377\377\377\377\0\377\377\377\0\210\212\205\377\377\377\377\377\345" - "\346\343\377\214\216\211\377Pp\377\377Sr\377\377Wu\377\377Zw\377\377" - "]z\377\377`|\377\377b\177\377\377e\201\377\377h\203\377\377k\206\377" - "\377n\210\377\377p\212\377\377s\214\377\377t\214\376\377\340\220\200" - "\377\340\220\200\377Zl\276\377x\217\374\377w\217\375\377v\215\374\377" - "\340\220\200\377\340\220\200\377K`\277\377Yw\376\377Oo\377\377Hi\377" - "\377Gh\377\377Gh\377\377Gh\377\377Gh\377\377Gh\377\377Gh\377\377Gh\377" - "\377Gh\377\377Gh\377\377Gh\377\377Gh\377\377Gh\377\377\210\213\210\377" - "\332\332\330\377\377\377\377\377\210\212\205\377\377\377\377\0\377\377" - "\377\0\210\212\205\377\377\377\377\377\346\346\344\377\216\220\213\377" - "[x\377\377]z\377\377a}\377\377d\177\377\377f\201\377\377i\204\377\377" - "l\206\377\377o\211\377\377r\213\377\377u\215\377\377x\220\377\377z\222" - "\377\377}\223\376\377}\224\373\377\340\220\200\377\340\220\200\377\340" - "\220\200\377\340\220\200\377\340\220\200\377\340\220\200\377\340\220" - "\200\377\340\220\200\377'7\177\377Nl\373\377On\376\377On\377\377On\377" - "\377On\377\377On\377\377On\377\377On\377\377On\377\377On\377\377On\377" - "\377On\377\377On\377\377On\377\377On\377\377\210\213\210\377\331\331" - "\327\377\377\377\377\377\210\212\205\377\377\377\377\0\377\377\377\0" - "\210\212\205\377\377\377\377\377\345\345\343\377\217\221\214\377e~\377" - "\377h\200\377\377j\202\377\377n\205\377\377p\207\377\377s\212\377\377" - "v\214\377\377y\216\377\377|\221\377\377\177\223\377\377\201\226\377\377" - "\204\227\376\377\340\220\200\377\340\220\200\377\0\0\0\377\0\0\0\377" - "\340\220\200\377\340\220\200\377\340\220\200\377\340\220\200\377\0\0" - "\0\377\0\0\0\377\340\220\200\377\340\220\200\377BW\300\377Xs\376\377" - "Xs\377\377Xs\377\377Xs\377\377Xs\377\377Xs\377\377Xs\377\377Xs\377\377" - "Xs\377\377Xs\377\377Xs\377\377Xs\377\377Xs\377\377\211\213\210\377\331" - "\331\326\377\377\377\377\377\210\212\205\377\377\377\377\0\377\377\377" - "\0\210\212\205\377\377\377\377\377\344\345\343\377\220\222\215\377o\205" - "\377\377q\207\377\377t\211\377\377w\213\377\377y\215\377\377|\220\377" - "\377\177\222\377\377\201\224\377\377\204\227\377\377\207\231\377\377" - "\212\234\377\377\213\235\375\377\340\220\200\377\340\220\200\377\0\0" - "\0\377\0\0\0\377\340\220\200\377\340\220\200\377\340\220\200\377\340" - "\220\200\377\0\0\0\377\0\0\0\377\340\220\200\377\340\220\200\3771>\202" - "\377`x\375\377ay\377\377ay\377\377ay\377\377ay\377\377ay\377\377ay\377" - "\377ay\377\377ay\377\377ay\377\377ay\377\377ay\377\377ay\377\377\211" - "\213\210\377\330\330\326\377\377\377\377\377\210\212\205\377\377\377" - "\377\0\377\377\377\0\210\212\205\377\377\377\377\377\345\345\343\377" - "\221\223\216\377w\213\377\377z\215\377\377}\217\377\377\177\221\377\377" - "\201\223\377\377\204\226\377\377\207\230\377\377\211\232\377\377\213" - "\234\377\377\216\236\377\377\205\226\377\377u\210\376\377P`\300\3775" - "@\200\377\340\220\200\377\340\220\200\377\340\220\200\377\340\220\200" + "\0lmf\377\373\373\372\377\372\372\371\377\355\355\353\377\356\356\354" + "\377\356\356\354\377\356\356\354\377\356\356\354\377\356\356\354\377" + "\355\355\353\377\355\355\353\377\355\355\353\377\355\355\353\377\355" + "\355\353\377\355\355\353\377\355\355\353\377\355\355\353\377\355\355" + "\353\377\355\355\353\377\355\355\353\377\355\355\353\377\355\355\353" + "\377\355\355\353\377\355\355\353\377\355\355\352\377\355\355\352\377" + "\355\355\352\377\354\354\352\377\354\354\352\377\354\354\352\377\354" + "\354\352\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354" + "\352\377\354\354\352\377\354\354\352\377\354\354\352\377\353\353\351" + "\377\372\372\371\377\355\355\353\377mng\377\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0lmf\377\373" + "\373\372\377\372\372\371\377\355\355\353\377\355\355\353\377\355\355" + "\353\377\355\355\353\377\355\355\353\377\355\355\353\377\355\355\353" + "\377\355\355\353\377\355\355\353\377\355\355\353\377\355\355\353\377" + "\355\355\353\377\355\355\353\377\355\355\353\377\355\355\353\377\355" + "\355\353\377\355\355\353\377\355\355\352\377\355\355\352\377\354\354" + "\352\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352" + "\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352\377" + "\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352\377\354" + "\354\352\377\354\354\351\377\354\354\351\377\353\353\350\377\371\371" + "\370\377\353\353\353\377mng\377\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0lmf\377\371\371\371\377\372" + "\372\371\377\354\354\352\377\355\355\353\377\355\355\353\377\355\355" + "\353\377\355\355\353\377\355\355\353\377\355\355\353\377\355\355\353" + "\377\355\355\353\377\355\355\353\377\355\355\353\377\355\355\353\377" + "\355\355\353\377\355\355\352\377\355\355\352\377\354\354\352\377\354" + "\354\352\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354" + "\352\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352" + "\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352\377" + "\354\354\351\377\354\354\351\377\354\354\351\377\354\354\351\377\353" + "\353\351\377\353\353\351\377\352\352\350\377\371\371\370\377\353\353" + "\352\377mng\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0lmf\377\371\371\371\377\371\371\371\377" + "\354\354\352\377\355\355\353\377\355\355\353\377\355\355\353\377\355" + "\355\353\377\355\355\353\377\355\355\353\377\355\355\353\377\355\355" + "\353\377\355\355\352\377\355\355\352\377\354\354\352\377\354\354\352" + "\377\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352\377" + "\354\354\352\377\354\354\352\377\354\354\352\377\354\354\352\377\354" + "\354\352\377\354\354\352\377\354\354\352\377\354\354\351\377\354\354" + "\351\377\354\354\351\377\354\354\351\377\354\354\351\377\353\353\351" + "\377\353\353\351\377\353\353\351\377\353\353\351\377\353\353\351\377" + "\353\353\351\377\352\352\350\377\371\371\370\377\353\353\352\377mng\377" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0lmf\377\370\370\370\377\371\371\370\377\356\356\354\377" + "\362\361\360\377\364\363\362\377\364\363\362\377\364\363\360\377\364" + "\363\360\377\364\363\360\377\362\362\360\377\362\362\360\377\362\362" + "\360\377\362\362\360\377\362\362\360\377\362\362\360\377\362\362\360" + "\377\362\362\360\377\362\362\360\377\362\362\360\377\362\362\360\377" + "\362\362\360\377\362\362\360\377\362\362\357\377\362\362\357\377\362" + "\362\357\377\362\362\357\377\362\362\360\377\361\361\360\377\361\361" + "\360\377\361\361\360\377\361\361\360\377\361\361\360\377\361\361\360" + "\377\361\361\360\377\361\361\360\377\361\361\360\377\357\357\355\377" + "\354\354\352\377\371\371\367\377\352\352\351\377mng\377\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0lmf\377\370\370\370\377\371\371\370\377\350\347\343\377\243\247\235" + "\377\246\252\241\377\246\253\241\377\246\253\241\377\246\253\241\377" + "\245\251\240\377\245\251\240\377\245\252\240\377\245\252\240\377\245" + "\252\240\377\245\252\240\377\245\252\240\377\245\251\240\377\245\251" + "\240\377\245\251\240\377\245\251\237\377\244\251\237\377\243\247\236" + "\377\244\251\236\377\243\247\236\377\243\247\236\377\242\247\236\377" + "\242\247\236\377\242\247\235\377\242\246\235\377\242\246\235\377\242" + "\246\235\377\242\246\235\377\241\246\235\377\240\246\234\377\240\246" + "\234\377\242\246\233\377\241\246\233\377\253\256\246\377\356\356\354" + "\377\367\367\367\377\352\352\351\377mnh\377\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0lmf\377\367" + "\367\367\377\372\372\371\377\344\344\342\377}\204w\377|\200s\377}\200" + "s\377}\200s\377}\200s\377}\200s\377}\200s\377}\200s\377|\177r\377|\177" + "r\377|\177q\377~\201r\377\177\202u\377\201\204u\377\202\205x\377\203" + "\206z\377\205\210z\377\206\211}\377\207\213}\377\211\214\200\377\213" + "\216\202\377\214\217\202\377\215\222\205\377\217\222\207\377\221\224" + "\210\377\222\225\212\377\224\227\214\377\225\230\216\377\226\232\217" + "\377\230\233\220\377\232\235\223\377\235\240\226\377\220\225\212\377" + "\214\221\207\377\360\360\356\377\370\370\367\377\351\351\350\377mnh\377" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0lmf\377\367\367\367\377\371\371\370\377\345\345\343\377" + "\177\206y\377\225\224\210\377\245\244\231\377\244\242\230\377\245\244" + "\232\377\245\244\232\377\245\242\230\377\243\241\227\377\242\241\225" + "\377\244\243\227\377\246\243\231\377\250\246\234\377\253\250\237\377" + "\254\253\242\377\256\256\243\377\261\260\246\377\264\261\251\377\267" + "\264\254\377\271\270\257\377\274\272\262\377\277\275\265\377\302\277" + "\270\377\304\302\274\377\307\305\277\377\312\311\302\377\314\314\305" + "\377\321\316\311\377\322\322\314\377\327\325\317\377\332\330\323\377" + "\335\333\326\377\342\341\334\377\263\264\253\377\213\221\206\377\361" + "\360\357\377\367\366\366\377\350\351\350\377mnh\377\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0lm" + "f\377\366\366\366\377\371\371\370\377\345\345\343\377\177\206y\377\225" + "\224\210\377\200~p\377ZXE\377\\ZH\377\\ZG\377\\ZG\377_]J\377dbQ\377j" + "hV\377nm[\377sqa\377xvg\377~|l\377\203\201q\377\207\206x\377\214\212" + "}\377\221\217\202\377\227\225\210\377\233\232\215\377\240\237\223\377" + "\245\244\230\377\253\250\236\377\256\256\243\377\264\263\250\377\271" + "\270\257\377\276\275\264\377\302\301\271\377\310\307\277\377\312\312" + "\302\377\314\313\304\377\335\335\330\377\261\263\253\377\211\215\203" + "\377\361\361\356\377\367\367\366\377\350\350\346\377mnh\377\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0lmf\377\366\366\366\377\371\371\370\377\345\345\342\377\177\206y\377" + "\226\225\211\377\203\201s\377_]J\377a_M\377dbP\377hgV\377nl\\\377sqa" + "\377xvf\377|{k\377\201\200q\377\206\204v\377\213\211{\377\220\216\200" + "\377\224\223\206\377\231\230\213\377\236\234\220\377\243\241\226\377" + "\247\246\233\377\254\253\240\377\261\260\245\377\266\265\253\377\272" + "\271\260\377\277\276\265\377\304\303\273\377\312\310\300\377\313\312" + "\303\377\316\315\306\377\320\317\311\377\322\321\312\377\342\341\335" + "\377\262\264\255\377\206\214\201\377\361\361\356\377\367\367\365\377" + "\347\350\346\377moh\377\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0lmf\377\365\365\365\377\370\370" + "\370\377\345\344\342\377\177\206y\377\226\225\210\377\202\177q\377`^" + "L\377igV\377nl[\377rq`\377wuf\377|zk\377\201\177p\377\206\204u\377\212" + "\211{\377\217\215\200\377\340\220\200\377\340\220\200\377\235\234\220" + "\377\242\241\225\377\247\246\232\377\254\252\240\377\340\220\200\377" + "\340\220\200\377\272\271\257\377\277\276\265\377\303\302\272\377\310" + "\307\277\377\313\312\302\377\315\315\305\377\320\317\310\377\322\322" + "\313\377\325\324\316\377\330\326\320\377\346\345\341\377\263\266\256" + "\377\205\212\200\377\361\361\356\377\366\366\365\377\347\347\345\377" + "moh\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0lmf\377\364\364\363\377\370\370\367\377\345\344\342" + "\377\177\206y\377\225\224\211\377\206\205w\377jhW\377rp`\377wue\377{" + "zj\377\200\177p\377\205\203u\377\212\210z\377\217\215\177\377\223\222" + "\205\377\230\227\212\377\340\220\200\377\340\220\200\377\340\220\200" "\377\340\220\200\377\340\220\200\377\340\220\200\377\340\220\200\377" - "\33!B\3775@\200\377P`\300\377j\177\376\377j\177\377\377j\177\377\377" - "j\177\377\377j\177\377\377j\177\377\377j\177\377\377j\177\377\377j\177" - "\377\377j\177\377\377j\177\377\377j\177\377\377j\177\377\377\211\213" - "\210\377\330\331\326\377\377\377\377\377\210\212\205\377\377\377\377" - "\0\377\377\377\0\210\212\205\377\377\377\377\377\344\344\342\377\221" - "\223\216\377\177\220\377\377\201\222\377\377\204\224\377\377\206\226" - "\377\377\210\230\377\377\212\232\377\377\215\234\377\377\215\234\377" - "\377\203\224\377\377v\211\377\377r\205\377\377r\205\377\377r\204\376" - "\377q\203\374\377Tc\275\3778B~\377\340\220\200\377\340\220\200\377\340" - "\220\200\377\340\220\200\377\34!\77\3778B~\377Tc\275\377q\203\374\377" - "r\204\376\377r\205\377\377r\205\377\377r\205\377\377r\205\377\377r\205" - "\377\377r\205\377\377r\205\377\377r\205\377\377r\205\377\377r\205\377" - "\377r\205\377\377r\205\377\377r\205\377\377\214\216\213\377\332\333\330" - "\377\377\377\377\377\210\212\205\377\377\377\377\0\377\377\377\0\210" - "\212\205\377\377\377\377\377\343\343\341\377\221\223\216\377\207\225" - "\377\377\211\227\377\377\213\231\377\377\215\233\377\377\217\235\377" - "\377\220\236\377\377\207\226\377\377}\214\377\377{\213\377\377{\213\377" - "\377{\213\377\377{\213\377\377{\212\376\377z\211\374\377\340\220\200" + "\340\220\200\377AA>\377\304\303\274\377\313\312\302\377\315\314\305\377" + "\320\317\310\377\322\321\313\377\325\324\316\377\327\326\321\377\332" + "\331\324\377\333\334\327\377\352\351\345\377\265\267\257\377\203\207" + "}\377\360\360\356\377\366\366\365\377\347\347\345\377kle\377\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0lmg\377\364\364\363\377\370\370\367\377\345\344\342\377~\205y\377" + "\231\231\215\377\215\214~\377sqa\377{yj\377\200~o\377\205\203t\377\211" + "\210z\377\216\215\177\377\223\221\204\377\230\226\211\377\340\220\200" + "\377\340\220\200\377\0\0\0\377\0\0\0\377\340\220\200\377\340\220\200" + "\377\340\220\200\377\340\220\200\377\0\0\0\377\0\0\0\377\340\220\200" + "\377\340\220\200\377\241\241\234\377\321\320\312\377\324\324\315\377" + "\327\326\320\377\332\331\323\377\334\333\326\377\336\336\331\377\340" + "\337\333\377\356\355\353\377\266\270\262\377\202\206}\377\361\360\355" + "\377\366\366\364\377\345\345\343\377ijc\377\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0lmg\377\363" + "\363\362\377\370\370\367\377\345\344\341\377~\205x\377\235\235\222\377" + "\224\223\206\377}|k\377\204\202t\377\211\207y\377\216\214~\377\222\221" + "\204\377\227\226\211\377\234\233\216\377\241\237\223\377\340\220\200" + "\377\340\220\200\377\0\0\0\377\0\0\0\377\340\220\200\377\340\220\200" + "\377\340\220\200\377\340\220\200\377\0\0\0\377\0\0\0\377\340\220\200" + "\377\340\220\200\377IIG\377\323\322\314\377\331\331\323\377\334\333\326" + "\377\336\336\331\377\341\340\334\377\343\343\337\377\346\344\342\377" + "\361\361\357\377\267\271\264\377\200\204{\377\361\360\356\377\366\366" + "\364\377\344\344\344\377eha\377\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0lng\377\363\363\361\377\370" + "\370\366\377\345\344\341\377~\205x\377\243\242\227\377\233\232\215\377" + "\206\205u\377\215\214~\377\222\220\203\377\227\225\211\377\233\232\216" + "\377\240\237\223\377\245\244\230\377\252\251\236\377\210\207\177\377" + ">>:\377\340\220\200\377\340\220\200\377\340\220\200\377\340\220\200\377" + "\340\220\200\377\340\220\200\377\340\220\200\377\340\220\200\377\30\30" + "\30\377GGE\377yyv\377\332\331\324\377\336\335\331\377\340\340\333\377" + "\343\343\336\377\346\345\341\377\350\350\344\377\353\352\347\377\365" + "\365\363\377\271\273\266\377~\203y\377\361\361\356\377\366\366\364\377" + "\343\343\343\377cd^\377\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0lng\377\361\361\361\377\367\367" + "\366\377\344\343\341\377}\204w\377\247\246\235\377\242\240\225\377\220" + "\216\201\377\226\225\210\377\233\232\215\377\240\236\223\377\245\243" + "\230\377\251\250\235\377\256\255\242\377\263\262\250\377\267\265\254" + "\377\271\270\257\377\224\223\214\377DCA\377\340\220\200\377\340\220\200" + "\377\340\220\200\377\340\220\200\377\30\27\27\377FFD\377wwt\377\325\325" + "\317\377\334\333\326\377\340\340\333\377\343\342\336\377\345\345\341" + "\377\350\347\344\377\352\352\347\377\355\355\352\377\357\357\355\377" + "\372\372\370\377\272\274\267\377}\200x\377\360\357\356\377\365\365\364" + "\377\342\342\342\377ab\\\377\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0mng\377\360\362\360\377\367" + "\367\366\377\344\343\341\377}\204w\377\253\254\241\377\251\247\235\377" + "\231\227\213\377\237\236\222\377\244\243\227\377\251\250\235\377\256" + "\254\242\377\262\261\247\377\267\266\254\377\274\273\262\377\301\300" + "\267\377\305\304\274\377\340\220\200\377\340\220\200\377\340\220\200" "\377\340\220\200\377\340\220\200\377\340\220\200\377\340\220\200\377" - "\340\220\200\377\340\220\200\377\340\220\200\377\\h\277\377z\211\374" - "\377{\212\376\377{\213\377\377{\213\377\377{\213\377\377{\213\377\377" - "{\213\377\377{\213\377\377{\213\377\377{\213\377\377{\213\377\377{\213" - "\377\377{\213\377\377{\213\377\377~\216\377\377\225\226\224\377\335\335" - "\333\377\377\377\377\377\210\212\205\377\377\377\377\0\377\377\377\0" - "\210\212\205\377\377\377\377\377\343\343\341\377\220\222\216\377\216" - "\232\377\377\220\234\377\377\222\236\377\377\223\237\377\377\216\232" - "\377\377\206\223\377\377\204\221\377\377\204\221\377\377\204\221\377" - "\377\204\221\377\377\204\221\377\377\203\220\376\377\340\220\200\377" - "\340\220\200\377CI\201\377CJ\202\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\"%A\377CJ\202\377\340\220\200\377\340" - "\220\200\377cm\300\377\203\220\376\377\204\221\377\377\204\221\377\377" - "\204\221\377\377\204\221\377\377\204\221\377\377\204\221\377\377\204" - "\221\377\377\204\221\377\377\204\221\377\377\204\221\377\377\207\224" - "\377\377\220\234\377\377\235\237\235\377\337\337\336\377\377\377\377" - "\377\210\212\205\377\377\377\377\0\377\377\377\0\210\212\205\377\377" - "\377\377\377\341\341\340\377\217\221\215\377\225\237\377\377\227\240" - "\377\377\225\236\377\377\217\231\377\377\215\227\377\377\215\227\377" - "\377\215\227\377\377\215\227\377\377\215\227\377\377\215\227\377\377" - "\215\227\377\377\214\226\375\377\377\377\377\377\377\377\377\377GL\201" - "\377\212\223\371\377\34399\377\34399\377\34399\377\34399\377FK\177\377" - "\212\223\371\377\377\377\377\377\377\377\377\377HM\202\377\214\226\375" - "\377\215\227\377\377\215\227\377\377\215\227\377\377\215\227\377\377" - "\215\227\377\377\215\227\377\377\215\227\377\377\215\227\377\377\215" - "\227\377\377\220\231\377\377\230\241\377\377\241\251\377\377\246\250" - "\245\377\342\343\340\377\377\377\377\377\210\212\205\377\377\377\377" - "\0\377\377\377\0\210\212\205\377\377\377\377\377\340\341\336\377\216" - "\220\213\377\234\241\377\377\230\236\377\377\226\234\377\377\226\234" - "\377\377\226\234\377\377\226\234\377\377\226\234\377\377\226\234\377" - "\377\226\234\377\377\226\234\377\377\226\234\377\377\225\233\376\377" - "qu\300\377LP\202\377qu\300\377\224\232\374\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377KN\200\377\224\232\374\377qu" - "\300\377LP\202\377qu\300\377\225\233\376\377\226\234\377\377\226\234" - "\377\377\226\234\377\377\226\234\377\377\226\234\377\377\226\234\377" - "\377\226\234\377\377\226\234\377\377\230\236\377\377\240\246\377\377" - "\250\255\377\377\260\264\377\377\257\260\256\377\345\345\343\377\377" - "\377\377\377\210\212\205\377\377\377\377\0\377\377\377\0\210\212\205" - "\377\377\377\377\377\340\340\335\377\212\214\207\377\237\242\377\377" - "\237\242\377\377\237\242\377\377\237\242\377\377\237\242\377\377\237" - "\242\377\377\237\242\377\377\237\242\377\377\237\242\377\377\237\242" - "\377\377\237\242\377\377\237\242\377\377\236\241\376\377\236\241\375" - "\377\236\241\375\377\235\237\373\377\34399\377\34399\377\34399\377\343" - "99\377OQ\177\377\235\237\373\377\236\241\375\377\236\241\375\377\236" - "\241\376\377\237\242\377\377\237\242\377\377\237\242\377\377\237\242" - "\377\377\237\242\377\377\237\242\377\377\237\242\377\377\237\242\377" - "\377\241\244\377\377\250\253\377\377\260\262\377\377\267\271\377\377" - "\276\300\377\377\271\272\267\377\350\350\347\377\377\377\377\377\210" - "\212\205\377\377\377\377\0\377\377\377\0\210\212\205\377\377\377\377" - "\377\336\336\334\377\210\212\205\377\247\250\377\377\247\250\377\377" - "\247\250\377\377\247\250\377\377\247\250\377\377\247\250\377\377\247" - "\250\377\377\247\250\377\377\247\250\377\377\247\250\377\377\247\250" - "\377\377\247\250\377\377\247\250\377\377\246\247\376\377UU\252\377UU" - "\252\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377UU\252\377UU\252\377~~\300\377\246\247\376\377\247\250\377\377\247" - "\250\377\377\247\250\377\377\247\250\377\377\247\250\377\377\247\250" - "\377\377\247\250\377\377\247\250\377\377\251\252\377\377\260\261\377" - "\377\266\267\377\377\275\275\377\377\303\304\377\377\312\313\377\377" - "\301\302\277\377\353\353\352\377\352\352\351\377\212\214\210\374\377" - "\377\377\0\377\377\377\0\210\212\205\377\377\377\377\377\335\335\333" - "\377\210\212\205\377\251\251\377\377\251\251\377\377\251\251\377\377" - "\251\251\377\377\251\251\377\377\251\251\377\377\251\251\377\377\251" - "\251\377\377\251\251\377\377\251\251\377\377\251\251\377\377\251\251" - "\377\377\251\251\377\377\250\250\375\377UU\252\377UU\252\377++A\377T" - "T\177\377UU\200\377TT\177\377UU\252\377UU\252\377UU\201\377\250\250\375" - "\377\251\251\377\377\251\251\377\377\251\251\377\377\251\251\377\377" - "\251\251\377\377\251\251\377\377\251\251\377\377\253\253\377\377\261" - "\261\377\377\270\270\377\377\276\276\377\377\305\305\377\377\313\313" - "\377\377\321\321\377\377\311\312\310\377\306\307\304\377\254\256\252" - "\377\213\214\207\327\377\377\377\0\377\377\377\0\210\212\205\377\377" - "\377\377\377\334\335\332\377\210\212\205\377\251\251\377\377\251\251" - "\377\377\251\251\377\377\251\251\377\377\251\251\377\377\251\251\377" - "\377\251\251\377\377\251\251\377\377\251\251\377\377\251\251\377\377" - "\251\251\377\377\251\251\377\377\250\250\376\377\246\246\373\377UU\252" - "\377UU\252\377TT\177\377\246\246\373\377\250\250\375\377\246\246\373" - "\377UU\252\377UU\252\377TT\177\377\246\246\373\377\250\250\376\377\251" - "\251\377\377\251\251\377\377\251\251\377\377\251\251\377\377\251\251" - "\377\377\253\253\377\377\261\261\377\377\270\270\377\377\276\276\377" - "\377\304\304\375\377\301\302\360\377\275\275\343\377\257\260\305\377" - "\207\210\204\377\256\260\254\377\250\251\246\377\203\206\201z\377\377" - "\377\0\377\377\377\0\210\212\205\377\377\377\377\377\334\334\332\377" - "\210\212\205\377\251\251\377\377\251\251\377\377\251\251\377\377\251" - "\251\377\377\251\251\377\377\251\251\377\377\251\251\377\377\251\251" - "\377\377\251\251\377\377\251\251\377\377\251\251\377\377\250\250\376" + "\340\220\200\377\253\252\246\377\337\337\332\377\342\342\336\377\345" + "\345\341\377\350\347\344\377\352\352\347\377\355\354\352\377\357\357" + "\355\377\362\361\357\377\364\364\362\377\376\375\374\377\274\277\271" + "\377{}v\377\360\360\355\377\365\365\363\377\342\342\337\377^`Z\377\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0mng\377\360\360\360\377\367\367\365\377\344\343\340\377|\203" + "v\377\260\261\247\377\260\256\244\377\242\240\225\377\251\247\234\377" + "\255\254\241\377\262\261\247\377\267\266\254\377\274\273\261\377\300" + "\277\266\377\305\304\274\377\340\220\200\377\340\220\200\377tso\377K" + "KH\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\32\32\32\377NML\377\340\220\200\377\340\220\200\377\264\264\261\377" + "\351\350\345\377\354\354\351\377\357\357\354\377\361\361\357\377\364" + "\364\362\377\366\366\365\377\371\371\370\377\377\377\377\377\275\277" + "\273\377y|v\377\360\360\355\377\364\364\363\377\342\341\336\377[]X\377" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0mng\377\360\360\357\377\367\367\365\377\344\343\340\377" + "|\203v\377\266\266\254\377\267\266\254\377\254\252\237\377\262\260\246" + "\377\266\265\253\377\273\272\261\377\300\277\266\377\305\304\273\377" + "\311\310\300\377\313\313\303\377\377\377\377\377\377\377\377\377HHF\377" + "\317\316\310\377\34399\377\34399\377\34399\377\34399\377JJH\377\335\334" + "\330\377\377\377\377\377\377\377\377\377RRQ\377\353\352\350\377\361\361" + "\357\377\364\363\362\377\366\366\365\377\371\370\370\377\373\373\373" + "\377\376\376\376\377\377\377\377\377\275\276\273\377xzs\377\360\360\355" + "\377\364\364\362\377\341\341\337\377YZT\377\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0mng\377\357" + "\357\357\377\366\366\365\377\343\343\340\377|\202u\377\273\272\263\377" + "\276\276\264\377\265\264\252\377\273\271\260\377\277\276\265\377\304" + "\303\273\377\312\310\300\377\313\312\303\377\316\315\306\377\320\317" + "\311\377\244\243\236\377JJG\377yxu\377\327\327\321\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377MML\377\345\345\342\377" + "\270\267\265\377SSR\377\207\207\206\377\361\361\360\377\366\366\364\377" + "\370\370\367\377\373\373\372\377\375\375\375\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\274\276\272\377uwr\377\357\357\355\377\363" + "\363\362\377\340\340\334\377VXR\377\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0mng\377\356\356\356\377" + "\366\366\366\377\343\343\337\377{\202u\377\300\277\270\377\306\305\275" + "\377\276\275\264\377\304\303\272\377\312\310\301\377\313\312\302\377" + "\315\315\305\377\320\317\310\377\323\322\313\377\325\324\316\377\327" + "\326\320\377\327\326\321\377\333\332\325\377\337\336\332\377\34399\377" + "\34399\377\34399\377\34399\377OON\377\352\352\347\377\360\357\355\377" + "\360\360\356\377\364\363\362\377\370\370\367\377\373\373\372\377\375" + "\375\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\273\275\271\377tvp\377\360\357\354\377\363\363" + "\361\377\336\335\333\377TUP\377\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0mng\377\356\356\355\377\366" + "\366\365\377\343\343\337\377{\201u\377\305\306\276\377\316\314\306\377" + "\310\306\276\377\313\312\302\377\315\314\305\377\320\317\310\377\322" + "\321\313\377\325\324\316\377\327\327\321\377\332\331\324\377\334\334" + "\327\377\337\336\332\377UU\252\377UU\252\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377UU\252\377UU\252\377\277\277" + "\276\377\367\367\366\377\372\372\372\377\375\375\375\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "UU\201\377\250\250\375\377\251\251\377\377\250\250\375\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\200\200\301\377" - "\250\250\376\377\251\251\377\377\251\251\377\377\251\251\377\377\253" - "\253\377\377\261\261\377\377\270\270\377\377\276\276\377\377\303\303" - "\374\377mon\377lnk\377\211\213\211\377\241\242\241\377\275\276\272\377" - "\314\315\313\377\222\224\217\367rvr8\0\0\0\1\377\377\377\0\210\212\205" - "\377\377\377\377\377\333\333\331\377\210\212\205\377NSj\377NSj\377NS" - "j\377NSj\377NSj\377NSj\377NSj\377NSj\377NSj\377NSj\377NSj\377MRj\377" - "CHZ\3779>J\3778=I\3778=I\377CHZ\377MRj\377NSj\377MRj\377CHZ\3778=I\377" - "8=I\3779>J\377CHZ\377MRj\377NSj\377NSj\377RWn\377_dy\377mq\204\377z}" - "\217\377\207\212\232\377\217\222\236\377tvr\377\371\371\371\377\356\356" - "\355\377\325\326\323\377\310\311\306\377\254\255\251\375\205\210\202" - "\340\24\24\24\15\0\0\0\3\377\377\377\0\210\212\205\377\377\377\377\377" - "\332\333\330\377\210\212\205\377.46\377.46\377.46\377.46\377.46\377." - "46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377" - ".46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377" - ".46\377.46\37739;\377BHJ\377RWY\377bfh\377quw\377\202\205\206\377\206" - "\211\211\377\224\226\223\377\355\355\354\377\304\305\301\377\277\301" - "\276\377\264\265\262\377\206\211\203\363UZU3\0\0\0\15\0\0\0\4\377\377" - "\377\0\210\212\205\377\377\377\377\377\332\332\327\377\210\212\205\377" - ".46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377" - ".46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377.46\377" - ".46\377.46\377.46\377.46\377.46\377.46\37739;\377BHJ\377RWY\377bfh\377" - "quw\377\202\205\206\377\220\224\225\377\211\213\211\377\251\252\247\377" - "\322\323\320\377\300\302\277\377\274\275\272\377\203\205\200\366dgdT" - "\0\0\0\24\0\0\0\14\0\0\0\2\377\377\377\0\210\212\205\377\377\377\377" - "\377\331\331\327\377\241\242\241\377\210\212\205\377\210\212\205\377" - "\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210" - "\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212" - "\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205" - "\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377" - "\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210" - "\212\205\377\210\212\205\377\213\215\210\377\224\225\221\377\235\236" - "\232\377\245\247\243\377\256\260\254\377\270\271\266\377\300\301\276" - "\377\300\300\277\377{}y\377\310\310\306\377\314\315\313\377\255\256\253" - "\376\200\203~\366npl{\0\0\0\31\0\0\0\21\0\0\0\11\0\0\0\0\377\377\377" - "\0\210\212\205\377\377\377\377\377\330\331\326\377\330\330\326\377\330" - "\330\326\377\330\330\325\377\327\330\325\377\327\330\325\377\327\330" - "\325\377\327\327\325\377\327\327\324\377\326\327\324\377\326\327\324" - "\377\326\326\324\377\326\326\324\377\326\326\323\377\325\326\323\377" - "\325\326\323\377\325\325\323\377\325\325\323\377\325\325\322\377\324" - "\325\322\377\324\325\322\377\324\324\322\377\324\324\321\377\323\324" - "\321\377\323\324\321\377\323\324\321\377\324\324\322\377\327\327\325" - "\377\332\333\330\377\335\336\334\377\340\341\337\377\344\344\343\377" - "\347\347\346\377\344\345\343\377\247\251\245\376\276\277\274\377\310" - "\311\307\377\220\221\216\366wzu\343TXTR\0\0\0\34\0\0\0\25\0\0\0\15\0" - "\0\0\4\377\377\377\0\377\377\377\0\212\214\206\363\367\370\367\377\377" + "\377\377\377\377\377\377\377\377\272\274\271\377rto\377\360\360\354\377" + "\363\363\361\377\335\336\332\377QSM\377\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0mng\377\356\356\355" + "\377\366\366\365\377\343\343\337\377z\201t\377\314\313\305\377\325\324" + "\315\377\314\313\304\377\317\317\310\377\322\321\313\377\325\324\316" + "\377\327\326\321\377\332\331\323\377\334\333\326\377\337\336\331\377" + "\341\340\334\377\344\343\337\377UU\252\377UU\252\377\35\35\35\377OON" + "\377PPP\377QQQ\377UU\252\377UU\252\377WWV\377\371\371\370\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\271\273\270\377qrn\377\360\360\355\377\363\363\361\377\334\335\331\377" + "OQK\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0mng\377\355\355\353\377\365\365\365\377\342\342\337" + "\377z\201t\377\317\316\310\377\327\326\320\377\321\320\311\377\324\323" + "\315\377\327\326\320\377\331\331\323\377\334\333\326\377\336\336\331" + "\377\341\340\334\377\343\343\337\377\346\345\342\377\350\350\345\377" + "UU\252\377UU\252\377OON\377\352\352\350\377\362\362\360\377\363\363\362" + "\377UU\252\377UU\252\377VVV\377\373\373\373\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\271\272\267\377" + "pqm\377\360\360\355\377\363\363\362\377\333\332\331\377LMI\377\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0mng\377\354\354\353\377\365\365\363\377\342\342\337\377z\201s\377" + "\321\322\313\377\333\332\326\377\326\326\317\377\331\330\323\377\334" + "\333\326\377\336\335\331\377\341\340\334\377\343\343\337\377\346\345" + "\341\377\350\350\344\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377RRQ\377\363\363\362\377\372\372\371\377\374\374\374" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\310\310\310\377\376\376\376\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\270\271\267\377pqm\377\360\360\355\377\362\362\361\377\332\333" + "\330\377JKF\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0mng\377\354\354\352\377\364\364\364\377" + "\342\342\337\377y\200s\377\324\325\317\377\337\336\331\377\332\332\324" + "\377\335\334\327\377\337\340\332\377\343\341\335\377\344\345\340\377" + "\350\346\344\377\352\352\347\377\355\355\352\377\273\273\271\377XXW\377" + "UUT\377TTS\377\213\213\213\377\372\372\372\377\376\376\376\377\377\377" + "\377\377\307\307\307\377YYY\377XXX\377[[[\377\222\222\222\377\375\375" + "\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\270\271\267\377" + "pqm\377\360\360\355\377\362\362\361\377\331\332\330\377FID\377\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0mng\377\353\353\351\377\364\364\362\377\342\343\337\377z\201t\377" + "\332\331\325\377\354\353\347\377\353\353\347\377\355\355\351\377\357" + "\357\355\377\361\361\357\377\363\363\361\377\365\364\364\377\367\367" + "\366\377\371\370\370\377\374\373\372\377\376\375\375\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\362\362\361\377\270\272\267\377\244" - "\246\242\377\235\236\232\367\200\203}\366moj\223\24\24\15&\0\0\0\34\0" - "\0\0\26\0\0\0\17\0\0\0\5\377\377\377\0\377\377\377\0\377\377\377\0yy" - "vl\211\213\206\363\210\212\205\377\210\212\205\377\210\212\205\377\210" - "\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212" - "\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205" - "\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377" - "\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210" - "\212\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212" - "\205\377\210\212\205\377\210\212\205\377\210\212\205\377\210\212\205" - "\377\210\212\205\377\210\212\205\377\210\212\205\377\212\214\207\374" - "\210\212\206\351{}x\247ikfp<<87\0\0\0\36\0\0\0\31\0\0\0\24\0\0\0\16\0" - "\0\0\3\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0" - "\16\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0" - "\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33" - "\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0" - "\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0\0\0\33\0" - "\0\0\33\0\0\0\33\0\0\0\33\0\0\0\36\0\0\0\36\0\0\0\35\0\0\0\33\0\0\0\30" - "\0\0\0\24\0\0\0\20\0\0\0\12\0\0\0\1\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\0\0\0\3\0\0\0\20\0\0\0\20\0\0\0\20" - "\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0" - "\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0" - "\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20" - "\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0\20\0\0\0" - "\22\0\0\0\22\0\0\0\21\0\0\0\17\0\0\0\15\0\0\0\10\0\0\0\2\377\377\377" - "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" - "\0\377\377\377\0\377\377\377\0\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0" - "\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0" - "\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0" - "\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\5\0" - "\0\0\5\0\0\0\5\0\0\0\5\0\0\0\6\0\0\0\5\0\0\0\4\0\0\0\2\0\0\0\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\273\274\272\377qrn\377\360\360\355\377\363\362\361" + "\377\331\331\327\377DFB\377\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0mnh\377\352\351\350\377\364" + "\364\362\377\340\341\336\377|\202u\377\260\265\254\377\272\275\265\377" + "\272\275\265\377\273\276\270\377\275\276\267\377\274\276\271\377\276" + "\301\270\377\275\301\271\377\277\301\274\377\276\300\274\377\300\302" + "\275\377\277\301\276\377\301\303\277\377\300\302\276\377\277\301\275" + "\377\277\301\275\377\276\300\274\377\276\277\274\377\275\276\273\377" + "\275\276\273\377\274\276\272\377\273\275\271\377\273\274\271\377\272" + "\273\270\377\271\273\270\377\271\272\267\377\270\271\267\377\270\271" + "\267\377\270\271\267\377\270\271\267\377\273\274\272\377\222\223\220" + "\377rso\377\357\357\355\377\363\363\361\377\327\330\325\377BD@\377\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0mnh\377\350\351\350\377\363\363\361\377\337\340\334\377\213" + "\220\204\377\216\222\210\377\214\222\206\377\213\220\205\377\212\217" + "\203\377\210\215\203\377\207\215\202\377\206\214\201\377\204\211\177" + "\377\203\210\177\377\202\207}\377\201\205|\377\200\204z\377\177\203z" + "\377}\202y\377|\177x\377{~w\377z}v\377w|u\377wzs\377vyr\377uwq\377sv" + "p\377ruo\377qsn\377qrn\377pqm\377pqm\377pqm\377pqm\377pqm\377qrn\377" + "rso\377\202\203\177\377\354\354\351\377\363\363\360\377\326\327\324\377" + "@A=\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0mnh\377\350\352\347\377\363\362\360\377\351\351\346" + "\377\354\354\352\377\356\356\354\377\356\356\354\377\356\356\354\377" + "\357\356\354\377\357\356\354\377\357\356\354\377\357\356\354\377\357" + "\357\354\377\357\357\354\377\357\357\354\377\357\357\355\377\357\357" + "\355\377\357\357\355\377\357\357\355\377\360\357\355\377\360\357\355" + "\377\360\357\355\377\360\360\355\377\360\360\355\377\360\360\355\377" + "\360\360\355\377\360\360\355\377\360\360\356\377\361\360\356\377\361" + "\360\356\377\361\361\356\377\361\361\356\377\361\361\356\377\361\361" + "\356\377\361\361\356\377\361\361\356\377\360\360\355\377\355\355\352" + "\377\351\351\346\377\362\361\360\377\325\326\323\377<>;\377\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0mnh\377\350\350\347\377\362\362\360\377\346\346\343\377\347\347\344" + "\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377" + "\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347" + "\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347" + "\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344" + "\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377" + "\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347" + "\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347" + "\344\377\347\347\344\377\347\347\344\377\347\347\344\377\346\346\343" + "\377\362\362\360\377\324\324\322\377:<9\377\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0moh\377\347" + "\347\345\377\362\362\360\377\346\346\343\377\347\347\344\377\347\347" + "\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344" + "\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377" + "\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347" + "\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347" + "\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344" + "\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377" + "\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347" + "\347\344\377\347\347\344\377\347\347\344\377\346\346\343\377\362\362" + "\360\377\324\324\322\3778:5\377\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0moh\377\346\347\346\377\362" + "\362\360\377\346\346\343\377\347\347\344\377\347\347\344\377\347\347" + "\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344" + "\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377" + "\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347" + "\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347" + "\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344" + "\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377" + "\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347" + "\347\344\377\347\347\344\377\346\346\343\377\362\362\360\377\324\324" + "\321\377583\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0noh\377\346\347\345\377\361\361\357\377" + "\346\346\343\377\347\347\344\377\347\347\344\377\347\347\344\377\347" + "\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347" + "\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344" + "\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377" + "\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347" + "\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347" + "\344\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344" + "\377\347\347\344\377\347\347\344\377\347\347\344\377\347\347\344\377" + "\347\347\344\377\346\346\343\377\362\362\361\377\324\323\322\377241\377" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0rsn\360\333\334\332\377\365\365\365\377\345\345\342\377" + "\346\346\343\377\346\346\343\377\346\346\343\377\346\346\343\377\346" + "\346\343\377\346\346\343\377\346\346\343\377\346\346\343\377\346\346" + "\343\377\346\346\343\377\346\346\343\377\346\346\343\377\346\346\343" + "\377\346\346\343\377\346\346\343\377\346\346\343\377\346\346\343\377" + "\346\346\343\377\346\346\343\377\346\346\343\377\346\346\343\377\346" + "\346\343\377\346\346\343\377\346\346\343\377\346\346\343\377\346\346" + "\343\377\346\346\343\377\346\346\343\377\346\346\343\377\346\346\343" + "\377\346\346\343\377\346\346\343\377\346\346\343\377\346\346\343\377" + "\346\346\343\377\366\366\364\377\302\303\301\3777:6\360\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0vvo\253\241\242\233\373\376\376\374\377\366\366\364\377\362\362\360" + "\377\361\361\360\377\361\361\360\377\361\361\360\377\361\361\360\377" + "\361\361\360\377\361\361\360\377\362\361\360\377\362\362\360\377\362" + "\362\360\377\361\361\357\377\361\361\357\377\361\361\357\377\361\361" + "\357\377\361\361\357\377\361\361\357\377\361\361\357\377\361\361\357" + "\377\361\361\357\377\361\361\357\377\361\361\357\377\361\361\356\377" + "\360\360\356\377\360\360\356\377\360\360\356\377\360\360\356\377\360" + "\360\357\377\360\360\357\377\360\360\357\377\360\360\357\377\361\360" + "\357\377\361\361\357\377\361\361\357\377\361\361\357\377\366\366\364" + "\377\376\376\375\377kmj\372<=:\253\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0tti\35{|t\362\236\237" + "\227\373\331\331\326\377\343\343\341\377\342\342\341\377\341\342\340" + "\377\341\342\340\377\341\342\340\377\341\341\340\377\341\341\340\377" + "\341\340\337\377\337\341\336\377\340\337\336\377\337\340\335\377\336" + "\337\334\377\336\336\334\377\336\336\333\377\335\335\333\377\334\335" + "\332\377\334\334\331\377\333\333\331\377\332\333\330\377\332\332\331" + "\377\331\332\330\377\332\331\330\377\331\332\327\377\331\331\327\377" + "\330\330\326\377\330\330\325\377\330\330\325\377\327\330\325\377\326" + "\327\325\377\327\326\324\377\326\327\325\377\326\326\323\377\326\326" + "\324\377\325\326\324\377\303\304\302\377mpl\372BDA\362888\35\377\377" "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" - "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"}; + "\377\0\377\377\377\0tti\35vvp\253rsn\360noh\377noh\377noh\377noh\377" + "noh\377noh\377mng\377jke\377hib\377fga\377ce_\377ab]\377_aZ\377\\_X\377" + "Z\\W\377YZT\377WXR\377TVP\377RSO\377PQL\377MPJ\377KMH\377IKG\377FID\377" + "DFB\377BD@\377AB=\377>\77<\377<>:\377:<8\3777:5\377574\377352\37713/" + "\3777:6\360<=:\253888\35\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"}; diff --git a/include/image.png b/include/image.png dissimilarity index 99% index 53314b96ff0ada321d262a77d13a1f9456edc531..65ca4b6724ec347972c6524c1d8d1000066b5a34 100644 GIT binary patch delta 2350 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�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�C)Mi6<7t&3KlIV**ErfO^^FxRGDACW$w>6-!@0?BNNbm zq_8LXZ+>UC)!1%coo&<&u%xHGesDsVuy5`;EOQF(+PB_ zT%uzBrz)65=!MFKR>UC(FmpnL+$g&Ml+L6y2u6lu%I609@9mx%=zn?D#tH4j={sNU F`!B-Cvqb;^ delta 25272 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\n" "Language-Team: German\n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/about.c:46 +#: src/about.c:47 msgid "" "Classic game similar to Emerald Mines.\n" "Collect diamonds and find exit!" @@ -24,7 +24,7 @@ msgstr "" "Klassisches Spiel mit Ähnlichkeiten zu Emerald Mine.\n" "Sammle Diamanten und finde den Ausgang!" -#: src/about.c:47 +#: src/about.c:48 msgid "translator-credits" msgstr "CWS" @@ -150,7 +150,7 @@ msgstr "Höhle %02d" msgid "None" msgstr "Keine" -#: src/cave.c:34 src/gtkui.c:889 +#: src/cave.c:34 src/gtkui.c:891 msgid "Up" msgstr "Oben" @@ -158,7 +158,7 @@ msgstr "Oben" msgid "Up+right" msgstr "Oben+rechts" -#: src/cave.c:34 src/gtkui.c:890 +#: src/cave.c:34 src/gtkui.c:892 msgid "Right" msgstr "Rechts" @@ -166,7 +166,7 @@ msgstr "Rechts" msgid "Down+right" msgstr "Unten+rechts" -#: src/cave.c:34 src/gtkui.c:891 +#: src/cave.c:34 src/gtkui.c:893 msgid "Down" msgstr "Unten" @@ -174,7 +174,7 @@ msgstr "Unten" msgid "Down+left" msgstr "Unten+links" -#: src/cave.c:34 src/gtkui.c:892 +#: src/cave.c:34 src/gtkui.c:894 msgid "Left" msgstr "Links" @@ -186,896 +186,870 @@ msgstr "Oben+links" msgid "Milliseconds" msgstr "Millisekunden" -#: src/cave.c:350 src/editor.c:733 src/editorexport.c:574 +#: src/cave.c:350 src/editor.c:733 src/editorexport.c:632 msgid "Yes" msgstr "Ja" -#: src/cave.c:350 src/editor.c:733 src/editorexport.c:574 +#: src/cave.c:350 src/editor.c:733 src/editorexport.c:632 msgid "No" msgstr "Nein" -#: src/cavedb.c:118 +#: src/cavedb.c:119 msgid "Space" msgstr "Leerfeld" -#: src/cavedb.c:119 +#: src/cavedb.c:120 msgid "Dirt" msgstr "Erde" -#: src/cavedb.c:120 +#: src/cavedb.c:121 msgid "Sloped dirt (up & right)" msgstr "Erde mit Gefälle (oben & rechts)" -#: src/cavedb.c:121 +#: src/cavedb.c:122 msgid "Sloped dirt (up & left)" msgstr "Erde mit Gefälle (oben & links)" -#: src/cavedb.c:122 +#: src/cavedb.c:123 msgid "Sloped dirt (down & left)" msgstr "Erde mit Gefälle (unten & links)" -#: src/cavedb.c:123 +#: src/cavedb.c:124 msgid "Sloped dirt (down & right)" msgstr "Erde mit Gefälle (unten & rechts)" -#: src/cavedb.c:124 -#, fuzzy +#: src/cavedb.c:125 msgid "Dirt ball" -msgstr "Erde 2" +msgstr "Erde-Brocken" -#: src/cavedb.c:125 -#, fuzzy +#: src/cavedb.c:126 msgid "Dirt ball (falling)" -msgstr "Fallende Mauer (fallend)" +msgstr "Erde-Brocken (fallend)" -#: src/cavedb.c:126 -#, fuzzy +#: src/cavedb.c:127 msgid "Loose dirt" -msgstr "Festgeklebte Erde" +msgstr "Lockere Erde" -#: src/cavedb.c:127 -#, fuzzy +#: src/cavedb.c:128 msgid "Loose dirt (falling)" -msgstr "Festgeklebte Erde" +msgstr "Erde-Brocken (fallend)" -#: src/cavedb.c:128 +#: src/cavedb.c:129 msgid "Dirt 2" msgstr "Erde 2" -#: src/cavedb.c:129 +#: src/cavedb.c:130 msgid "Brick wall" msgstr "Ziegelmauer" -#: src/cavedb.c:130 +#: src/cavedb.c:131 msgid "Sloped brick wall (up & right)" msgstr "Ziegelmauer mit Gefälle (oben & rechts)" -#: src/cavedb.c:131 +#: src/cavedb.c:132 msgid "Sloped brick wall (up & left)" msgstr "Ziegelmauer mit Gefälle (oben & links)" -#: src/cavedb.c:132 +#: src/cavedb.c:133 msgid "Sloped brick wall (down & left)" msgstr "Ziegelmauer mit Gefälle (unten & links)" -#: src/cavedb.c:133 +#: src/cavedb.c:134 msgid "Sloped brick wall (down & right)" msgstr "Ziegelmauer mit Gefälle (unten & rechts)" -#: src/cavedb.c:134 +#: src/cavedb.c:135 msgid "Non-sloped brick wall" msgstr "Ziegelmauer ohne Gefälle" -#: src/cavedb.c:135 src/cavedb.c:607 +#: src/cavedb.c:136 src/cavedb.c:615 msgid "Magic wall" msgstr "Zaubermauer" -#: src/cavedb.c:136 +#: src/cavedb.c:137 msgid "Outbox" msgstr "Ausgang" -#: src/cavedb.c:137 +#: src/cavedb.c:138 msgid "Outbox (open)" msgstr "Ausgang (offen)" -#: src/cavedb.c:138 +#: src/cavedb.c:139 msgid "Invisible outbox" msgstr "Unsichtbarer Ausgang" -#: src/cavedb.c:139 +#: src/cavedb.c:140 msgid "Invisible outbox (open)" msgstr "Unsichtbarer Ausgang (offen)" -#: src/cavedb.c:140 +#: src/cavedb.c:141 msgid "Steel wall" msgstr "Titanmauer" -#: src/cavedb.c:141 +#: src/cavedb.c:142 msgid "Sloped steel wall (up & right)" msgstr "Titanmauer mit Gefälle (oben & rechts)" -#: src/cavedb.c:142 +#: src/cavedb.c:143 msgid "Sloped steel wall (up & left)" msgstr "Titanmauer mit Gefälle (oben & links)" -#: src/cavedb.c:143 +#: src/cavedb.c:144 msgid "Sloped steel wall (down & left)" msgstr "Titanmauer mit Gefälle (unten & links)" -#: src/cavedb.c:144 +#: src/cavedb.c:145 msgid "Sloped steel wall (down & right)" msgstr "Titanmauer mit Gefälle (unten & rechts)" -#: src/cavedb.c:145 +#: src/cavedb.c:146 msgid "Explodable steel wall" msgstr "Zerstörbare Titanmauer" -#: src/cavedb.c:146 +#: src/cavedb.c:147 msgid "Eatable steel wall" msgstr "Erde, die wie Titanmauer aussieht" -#: src/cavedb.c:147 +#: src/cavedb.c:148 msgid "Eatable brick wall" msgstr "Erde, die wie Ziegelmauer aussieht" -#: src/cavedb.c:148 src/cavedb.c:602 +#: src/cavedb.c:149 src/cavedb.c:610 msgid "Stone" msgstr "Felsbrocken" -#: src/cavedb.c:149 +#: src/cavedb.c:150 msgid "Stone, falling" msgstr "Felsbrocken (fallend)" -#: src/cavedb.c:150 +#: src/cavedb.c:151 +msgid "Flying stone" +msgstr "Fliegender Felsbrocken" + +#: src/cavedb.c:152 +msgid "Flying stone, flying" +msgstr "Fliegender Felsbrocken (fallend)" + +#: src/cavedb.c:153 msgid "Mega stone" msgstr "Mega-Felsbrocken" -#: src/cavedb.c:151 +#: src/cavedb.c:154 msgid "Mega stone, falling" msgstr "Mega-Felsbrocken (fallend)" -#: src/cavedb.c:152 src/cavedb.c:601 +#: src/cavedb.c:155 src/cavedb.c:609 msgid "Diamond" msgstr "Diamant" -#: src/cavedb.c:153 +#: src/cavedb.c:156 msgid "Diamond, falling" msgstr "Diamant (fallend)" -#: src/cavedb.c:154 +#: src/cavedb.c:157 +msgid "Flying diamond" +msgstr "Fliegender Diamant" + +#: src/cavedb.c:158 +msgid "Flying diamond, flying" +msgstr "Fliegender Diamant (fallend)" + +#: src/cavedb.c:159 msgid "Bladder Spender" msgstr "Blasenspender" -#: src/cavedb.c:155 +#: src/cavedb.c:160 msgid "Inbox" msgstr "Eingang" -#: src/cavedb.c:156 +#: src/cavedb.c:161 msgid "Expanding wall, horizontal" msgstr "Wachsmauer (horizontal)" -#: src/cavedb.c:157 +#: src/cavedb.c:162 msgid "Expanding wall, vertical" msgstr "Wachsmauer (vertikal)" -#: src/cavedb.c:158 src/cavedb.c:554 src/cavedb.c:604 +#: src/cavedb.c:163 src/cavedb.c:550 src/cavedb.c:612 msgid "Expanding wall" msgstr "Wachsmauer" -#: src/cavedb.c:159 -#, fuzzy +#: src/cavedb.c:164 msgid "Expanding steel wall, horizontal" -msgstr "Wachsmauer (horizontal)" +msgstr "Titan-Wachsmauer (horizontal)" -#: src/cavedb.c:160 -#, fuzzy +#: src/cavedb.c:165 msgid "Expanding steel wall, vertical" -msgstr "Wachsmauer (vertikal)" +msgstr "Titan-Wachsmauer (vertikal)" -#: src/cavedb.c:161 -#, fuzzy +#: src/cavedb.c:166 msgid "Expanding steel wall" -msgstr "Wachsmauer" +msgstr "Titan-Wachsmauer" -#: src/cavedb.c:162 +#: src/cavedb.c:167 msgid "Expanding wall switch" msgstr "Wachsmauer-Schalter" -#: src/cavedb.c:163 +#: src/cavedb.c:168 msgid "Creature direction switch" msgstr "Gegner-Richtungsschalter" -#: src/cavedb.c:164 +#: src/cavedb.c:169 msgid "Biter switch" msgstr "Beißer-Schalter" -#: src/cavedb.c:165 -#, fuzzy +#: src/cavedb.c:170 msgid "Replicator switch" -msgstr "Beißer-Schalter" +msgstr "Replikator-Schalter" -#: src/cavedb.c:166 -#, fuzzy +#: src/cavedb.c:171 msgid "Conveyor belt power switch" -msgstr "Gegner-Richtungsschalter" +msgstr "Förderband-Schalter" -#: src/cavedb.c:167 -#, fuzzy +#: src/cavedb.c:172 msgid "Conveyor belt direction switch" -msgstr "Gegner-Richtungsschalter" +msgstr "Förderband-Richtungsschalter" -#: src/cavedb.c:168 src/cavedb.c:539 src/cavedb.c:611 +#: src/cavedb.c:173 src/cavedb.c:538 src/cavedb.c:619 msgid "Acid" msgstr "Säure" -#: src/cavedb.c:169 src/cavedb.c:605 +#: src/cavedb.c:174 src/cavedb.c:613 msgid "Falling wall" msgstr "Fallende Mauer" -#: src/cavedb.c:170 +#: src/cavedb.c:175 msgid "Falling wall, falling" msgstr "Fallende Mauer (fallend)" -#: src/cavedb.c:171 +#: src/cavedb.c:176 msgid "Box" msgstr "Kiste" -#: src/cavedb.c:172 +#: src/cavedb.c:177 msgid "Time penalty" msgstr "Zeitstrafe" -#: src/cavedb.c:173 +#: src/cavedb.c:178 msgid "Gravestone" msgstr "Grabstein" -#: src/cavedb.c:174 +#: src/cavedb.c:179 msgid "Glued stone" msgstr "Festgeklebter Felsbrocken" -#: src/cavedb.c:175 +#: src/cavedb.c:180 msgid "Glued diamond" msgstr "Festgeklebter Diamant" -#: src/cavedb.c:176 +#: src/cavedb.c:181 msgid "Diamond key" msgstr "Diamant-Schlüssel" -#: src/cavedb.c:177 +#: src/cavedb.c:182 msgid "Trapped diamond" msgstr "Diamant-Tür" -#: src/cavedb.c:178 src/cavedb.c:476 +#: src/cavedb.c:183 src/cavedb.c:475 msgid "Clock" msgstr "Uhr" -#: src/cavedb.c:179 +#: src/cavedb.c:184 msgid "Glued dirt" msgstr "Festgeklebte Erde" -#: src/cavedb.c:180 +#: src/cavedb.c:185 msgid "Key 1" msgstr "Schlüssel 1" -#: src/cavedb.c:181 +#: src/cavedb.c:186 msgid "Key 2" msgstr "Schlüssel 2" -#: src/cavedb.c:182 +#: src/cavedb.c:187 msgid "Key 3" msgstr "Schlüssel 3" -#: src/cavedb.c:183 +#: src/cavedb.c:188 msgid "Door 1" msgstr "Tür 1" -#: src/cavedb.c:184 +#: src/cavedb.c:189 msgid "Door 2" msgstr "Tür 2" -#: src/cavedb.c:185 +#: src/cavedb.c:190 msgid "Door 3" msgstr "Tür 3" -#: src/cavedb.c:187 +#: src/cavedb.c:192 msgid "Pot" msgstr "Topf" -#: src/cavedb.c:188 +#: src/cavedb.c:193 msgid "Gravity switch" msgstr "Gravitations-Schalter" -#: src/cavedb.c:189 src/cavedb.c:471 src/cavedb.c:615 +#: src/cavedb.c:194 src/cavedb.c:470 src/cavedb.c:623 msgid "Pneumatic hammer" msgstr "Presslufthammer" -#: src/cavedb.c:190 +#: src/cavedb.c:195 msgid "Teleporter" msgstr "Teleporter" -#: src/cavedb.c:191 +#: src/cavedb.c:196 src/cavedb.c:632 msgid "Skeleton" msgstr "Skelett" -#: src/cavedb.c:192 src/cavedb.c:535 src/cavedb.c:614 +#: src/cavedb.c:197 src/cavedb.c:561 src/cavedb.c:622 msgid "Water" msgstr "Wasser" -#: src/cavedb.c:193 +#: src/cavedb.c:198 msgid "Water (1)" msgstr "Wasser (1)" -#: src/cavedb.c:194 +#: src/cavedb.c:199 msgid "Water (2)" msgstr "Wasser (2)" -#: src/cavedb.c:195 +#: src/cavedb.c:200 msgid "Water (3)" msgstr "Wasser (3)" -#: src/cavedb.c:196 +#: src/cavedb.c:201 msgid "Water (4)" msgstr "Wasser (4)" -#: src/cavedb.c:197 +#: src/cavedb.c:202 msgid "Water (5)" msgstr "Wasser (5)" -#: src/cavedb.c:198 +#: src/cavedb.c:203 msgid "Water (6)" msgstr "Wasser (6)" -#: src/cavedb.c:199 +#: src/cavedb.c:204 msgid "Water (7)" msgstr "Wasser (7)" -#: src/cavedb.c:200 +#: src/cavedb.c:205 msgid "Water (8)" msgstr "Wasser (8)" -#: src/cavedb.c:201 +#: src/cavedb.c:206 msgid "Water (9)" msgstr "Wasser (9)" -#: src/cavedb.c:202 +#: src/cavedb.c:207 msgid "Water (10)" msgstr "Wasser (10)" -#: src/cavedb.c:203 +#: src/cavedb.c:208 msgid "Water (11)" msgstr "Wasser (11)" -#: src/cavedb.c:204 +#: src/cavedb.c:209 msgid "Water (12)" msgstr "Wasser (12)" -#: src/cavedb.c:205 +#: src/cavedb.c:210 msgid "Water (13)" msgstr "Wasser (13)" -#: src/cavedb.c:206 +#: src/cavedb.c:211 msgid "Water (14)" msgstr "Wasser (14)" -#: src/cavedb.c:207 +#: src/cavedb.c:212 msgid "Water (15)" msgstr "Wasser (15)" -#: src/cavedb.c:208 +#: src/cavedb.c:213 msgid "Water (16)" msgstr "Wasser (16)" -#: src/cavedb.c:209 +#: src/cavedb.c:214 msgid "Cow (left)" msgstr "Kuh (links)" -#: src/cavedb.c:210 +#: src/cavedb.c:215 msgid "Cow (up)" msgstr "Kuh (oben)" -#: src/cavedb.c:211 +#: src/cavedb.c:216 msgid "Cow (right)" msgstr "Kuh (rechts)" -#: src/cavedb.c:212 +#: src/cavedb.c:217 msgid "Cow (down)" msgstr "Kuh (unten)" -#: src/cavedb.c:213 +#: src/cavedb.c:218 msgid "Cow (enclosed, 1)" msgstr "Kuh (eingesperrt, 1)" -#: src/cavedb.c:214 +#: src/cavedb.c:219 msgid "Cow (enclosed, 2)" msgstr "Kuh (eingesperrt, 2)" -#: src/cavedb.c:215 +#: src/cavedb.c:220 msgid "Cow (enclosed, 3)" msgstr "Kuh (eingesperrt, 3)" -#: src/cavedb.c:216 +#: src/cavedb.c:221 msgid "Cow (enclosed, 4)" msgstr "Kuh (eingesperrt, 4)" -#: src/cavedb.c:217 +#: src/cavedb.c:222 msgid "Cow (enclosed, 5)" msgstr "Kuh (eingesperrt, 5)" -#: src/cavedb.c:218 +#: src/cavedb.c:223 msgid "Cow (enclosed, 6)" msgstr "Kuh (eingesperrt, 6)" -#: src/cavedb.c:219 +#: src/cavedb.c:224 msgid "Cow (enclosed, 7)" msgstr "Kuh (eingesperrt, 7)" -#: src/cavedb.c:220 +#: src/cavedb.c:225 msgid "Walled diamond" msgstr "Eingemauerter Diamant" -#: src/cavedb.c:221 +#: src/cavedb.c:226 msgid "Walled key 1" msgstr "Eingemauerter Schlüssel 1" -#: src/cavedb.c:222 +#: src/cavedb.c:227 msgid "Walled key 2" msgstr "Eingemauerter Schlüssel 2" -#: src/cavedb.c:223 +#: src/cavedb.c:228 msgid "Walled key 3" msgstr "Eingemauerter Schlüssel 3" -#: src/cavedb.c:225 src/cavedb.c:486 src/cavedb.c:490 src/cavedb.c:606 +#: src/cavedb.c:230 src/cavedb.c:485 src/cavedb.c:489 src/cavedb.c:614 msgid "Amoeba" msgstr "Amöbe" -#: src/cavedb.c:226 src/cavedb.c:497 +#: src/cavedb.c:231 src/cavedb.c:496 msgid "Amoeba 2" msgstr "Amöbe 2" -#: src/cavedb.c:227 src/cavedb.c:558 src/cavedb.c:610 -#, fuzzy +#: src/cavedb.c:232 src/cavedb.c:553 src/cavedb.c:618 msgid "Replicator" -msgstr "Wiederholung" +msgstr "Replikator" -#: src/cavedb.c:228 -#, fuzzy +#: src/cavedb.c:233 msgid "Conveyor belt (left)" -msgstr "Kuh (links)" +msgstr "Förderband (links)" -#: src/cavedb.c:229 -#, fuzzy +#: src/cavedb.c:234 msgid "Conveyor belt (right)" -msgstr "Kuh (rechts)" +msgstr "Förderband (rechts)" -#: src/cavedb.c:230 src/cavedb.c:609 +#: src/cavedb.c:235 src/cavedb.c:617 msgid "Lava" -msgstr "" +msgstr "Lava" -#: src/cavedb.c:231 src/cavedb.c:467 +#: src/cavedb.c:236 src/cavedb.c:466 msgid "Sweet" msgstr "Bonbon" -#: src/cavedb.c:232 +#: src/cavedb.c:237 msgid "Voodoo doll" msgstr "Voodoo-Puppe" -#: src/cavedb.c:233 src/cavedb.c:521 src/cavedb.c:608 +#: src/cavedb.c:238 src/cavedb.c:522 src/cavedb.c:616 msgid "Slime" msgstr "Schleim" -#: src/cavedb.c:234 src/cavedb.c:550 src/cavedb.c:613 +#: src/cavedb.c:239 src/cavedb.c:547 src/cavedb.c:621 msgid "Bladder" msgstr "Blase" -#: src/cavedb.c:235 +#: src/cavedb.c:240 msgid "Bladder (1)" msgstr "Blase (1)" -#: src/cavedb.c:236 +#: src/cavedb.c:241 msgid "Bladder (2)" msgstr "Blase (2)" -#: src/cavedb.c:237 +#: src/cavedb.c:242 msgid "Bladder (3)" msgstr "Blase (3)" -#: src/cavedb.c:238 +#: src/cavedb.c:243 msgid "Bladder (4)" msgstr "Blase (4)" -#: src/cavedb.c:239 +#: src/cavedb.c:244 msgid "Bladder (5)" msgstr "Blase (5)" -#: src/cavedb.c:240 +#: src/cavedb.c:245 msgid "Bladder (6)" msgstr "Blase (6)" -#: src/cavedb.c:241 +#: src/cavedb.c:246 msgid "Bladder (7)" msgstr "Blase (7)" -#: src/cavedb.c:242 +#: src/cavedb.c:247 msgid "Bladder (8)" msgstr "Blase (8)" -#: src/cavedb.c:244 +#: src/cavedb.c:249 msgid "Waiting stone" msgstr "Wartender verfolgender Mutanten-Felsbrocken" -#: src/cavedb.c:245 +#: src/cavedb.c:250 msgid "Chasing stone" msgstr "Verfolgender Mutanten-Felsbrocken" -#: src/cavedb.c:246 +#: src/cavedb.c:251 msgid "Ghost" msgstr "Geist" -#: src/cavedb.c:247 +#: src/cavedb.c:252 msgid "Guard, left" msgstr "Glühwürmchen (links)" -#: src/cavedb.c:248 +#: src/cavedb.c:253 msgid "Guard, up" msgstr "Glühwürmchen (oben)" -#: src/cavedb.c:249 +#: src/cavedb.c:254 msgid "Guard, right" msgstr "Glühwürmchen (rechts)" -#: src/cavedb.c:250 +#: src/cavedb.c:255 msgid "Guard, down" msgstr "Glühwürmchen (unten)" -#: src/cavedb.c:251 +#: src/cavedb.c:256 msgid "Alternative guard, left" msgstr "Alternatives Glühwürmchen (links)" -#: src/cavedb.c:252 +#: src/cavedb.c:257 msgid "Alternative guard, up" msgstr "Alternatives Glühwürmchen (oben)" -#: src/cavedb.c:253 +#: src/cavedb.c:258 msgid "Alternative guard, right" msgstr "Alternatives Glühwürmchen (rechts)" -#: src/cavedb.c:254 +#: src/cavedb.c:259 msgid "Alternative guard, down" msgstr "Alternatives Glühwürmchen (unten)" -#: src/cavedb.c:255 +#: src/cavedb.c:260 msgid "Butterfly, left" msgstr "Schmetterling (links)" -#: src/cavedb.c:256 +#: src/cavedb.c:261 msgid "Butterfly, up" msgstr "Schmetterling (oben)" -#: src/cavedb.c:257 +#: src/cavedb.c:262 msgid "Butterfly, right" msgstr "Schmetterling (rechts)" -#: src/cavedb.c:258 +#: src/cavedb.c:263 msgid "Butterfly, down" msgstr "Schmetterling (unten)" -#: src/cavedb.c:259 +#: src/cavedb.c:264 msgid "Alternative butterfly, left" msgstr "Alternativer Schmetterling (links)" -#: src/cavedb.c:260 +#: src/cavedb.c:265 msgid "Alternative butterfly, up" msgstr "Alternativer Schmetterling (oben)" -#: src/cavedb.c:261 +#: src/cavedb.c:266 msgid "Alternative butterfly, right" msgstr "Alternativer Schmetterling (rechts)" -#: src/cavedb.c:262 +#: src/cavedb.c:267 msgid "Alternative butterfly, down" msgstr "Alternativer Schmetterling (unten)" -#: src/cavedb.c:263 +#: src/cavedb.c:268 msgid "Stonefly, left" msgstr "Steinschmetterling (links)" -#: src/cavedb.c:264 +#: src/cavedb.c:269 msgid "Stonefly, up" msgstr "Steinschmetterling (oben)" -#: src/cavedb.c:265 +#: src/cavedb.c:270 msgid "Stonefly, right" msgstr "Steinschmetterling (rechts)" -#: src/cavedb.c:266 +#: src/cavedb.c:271 msgid "Stonefly, down" msgstr "Steinschmetterling (unten)" -#: src/cavedb.c:267 +#: src/cavedb.c:272 msgid "Biter, up" msgstr "Beißer (oben)" -#: src/cavedb.c:268 +#: src/cavedb.c:273 msgid "Biter, right" msgstr "Beißer (rechts)" -#: src/cavedb.c:269 +#: src/cavedb.c:274 msgid "Biter, down" msgstr "Beißer (unten)" -#: src/cavedb.c:270 +#: src/cavedb.c:275 msgid "Biter, left" msgstr "Beißer (links)" -#: src/cavedb.c:271 -#, fuzzy +#: src/cavedb.c:276 msgid "Dragonfly, left" -msgstr "Steinschmetterling (links)" +msgstr "Libelle (links)" -#: src/cavedb.c:272 -#, fuzzy +#: src/cavedb.c:277 msgid "Dragonfly, up" -msgstr "Steinschmetterling (oben)" +msgstr "Libelle (oben)" -#: src/cavedb.c:273 -#, fuzzy +#: src/cavedb.c:278 msgid "Dragonfly, right" -msgstr "Steinschmetterling (rechts)" +msgstr "Libelle (rechts)" -#: src/cavedb.c:274 -#, fuzzy +#: src/cavedb.c:279 msgid "Dragonfly, down" -msgstr "Steinschmetterling (unten)" +msgstr "Libelle (unten)" -#: src/cavedb.c:276 +#: src/cavedb.c:281 msgid "Player birth (1)" msgstr "Spieler (Geburt) (1)" -#: src/cavedb.c:277 +#: src/cavedb.c:282 msgid "Player birth (2)" msgstr "Spieler (Geburt) (2)" -#: src/cavedb.c:278 +#: src/cavedb.c:283 msgid "Player birth (3)" msgstr "Spieler (Geburt) (3)" -#: src/cavedb.c:279 src/cavedb.c:460 +#: src/cavedb.c:284 src/cavedb.c:459 msgid "Player" msgstr "Spielfigur" -#: src/cavedb.c:280 +#: src/cavedb.c:285 msgid "Player with bomb" msgstr "Spielfigur mit Bombe" -#: src/cavedb.c:281 +#: src/cavedb.c:286 msgid "Glued player" msgstr "Festgeklebter Spieler" -#: src/cavedb.c:282 +#: src/cavedb.c:287 msgid "Player stirring" msgstr "Spieler rührend" -#: src/cavedb.c:284 +#: src/cavedb.c:289 msgid "Bomb" msgstr "Bombe" -#: src/cavedb.c:285 +#: src/cavedb.c:290 msgid "Ticking bomb (1)" msgstr "Tickende Bombe (1)" -#: src/cavedb.c:286 +#: src/cavedb.c:291 msgid "Ticking bomb (2)" msgstr "Tickende Bombe (2)" -#: src/cavedb.c:287 +#: src/cavedb.c:292 msgid "Ticking bomb (3)" msgstr "Tickende Bombe (3)" -#: src/cavedb.c:288 +#: src/cavedb.c:293 msgid "Ticking bomb (4)" msgstr "Tickende Bombe (4)" -#: src/cavedb.c:289 +#: src/cavedb.c:294 msgid "Ticking bomb (5)" msgstr "Tickende Bombe (5)" -#: src/cavedb.c:290 +#: src/cavedb.c:295 msgid "Ticking bomb (6)" msgstr "Tickende Bombe (6)" -#: src/cavedb.c:291 +#: src/cavedb.c:296 msgid "Ticking bomb (7)" msgstr "Tickende Bombe (7)" -#: src/cavedb.c:293 src/cavedb.c:603 +#: src/cavedb.c:298 src/cavedb.c:611 msgid "Nitro pack" msgstr "Nitro-Pack" -#: src/cavedb.c:294 +#: src/cavedb.c:299 msgid "Nitro pack, falling" msgstr "Nitro-Pack (fallend)" -#: src/cavedb.c:295 +#: src/cavedb.c:300 msgid "Nitro pack, triggered" msgstr "Nitro-Pack (ausgelöst)" -#: src/cavedb.c:297 +#: src/cavedb.c:302 msgid "Clock birth (1)" msgstr "Uhr (Geburt) (1)" -#: src/cavedb.c:298 +#: src/cavedb.c:303 msgid "Clock birth (2)" msgstr "Uhr (Geburt) (2)" -#: src/cavedb.c:299 +#: src/cavedb.c:304 msgid "Clock birth (3)" msgstr "Uhr (Geburt) (3)" -#: src/cavedb.c:300 +#: src/cavedb.c:305 msgid "Clock birth (4)" msgstr "Uhr (Geburt) (4)" -#: src/cavedb.c:301 +#: src/cavedb.c:306 msgid "Diamond birth (1)" msgstr "Diamant (Geburt) (1)" -#: src/cavedb.c:302 +#: src/cavedb.c:307 msgid "Diamond birth (2)" msgstr "Diamant (Geburt) (2)" -#: src/cavedb.c:303 +#: src/cavedb.c:308 msgid "Diamond birth (3)" msgstr "Diamant (Geburt) (3)" -#: src/cavedb.c:304 +#: src/cavedb.c:309 msgid "Diamond birth (4)" msgstr "Diamant (Geburt) (4)" -#: src/cavedb.c:305 +#: src/cavedb.c:310 msgid "Diamond birth (5)" msgstr "Diamant (Geburt) (5)" -#: src/cavedb.c:306 +#: src/cavedb.c:311 msgid "Explosion (1)" msgstr "Explosion (1)" -#: src/cavedb.c:307 +#: src/cavedb.c:312 msgid "Explosion (2)" msgstr "Explosion (2)" -#: src/cavedb.c:308 +#: src/cavedb.c:313 msgid "Explosion (3)" msgstr "Explosion (3)" -#: src/cavedb.c:309 +#: src/cavedb.c:314 msgid "Explosion (4)" msgstr "Explosion (4)" -#: src/cavedb.c:310 +#: src/cavedb.c:315 msgid "Explosion (5)" msgstr "Explosion (5)" -#: src/cavedb.c:311 +#: src/cavedb.c:316 msgid "Stone birth (1)" msgstr "Felsbrocken (Geburt) (1)" -#: src/cavedb.c:312 +#: src/cavedb.c:317 msgid "Stone birth (2)" msgstr "Felsbrocken (Geburt) (2)" -#: src/cavedb.c:313 +#: src/cavedb.c:318 msgid "Stone birth (3)" msgstr "Felsbrocken (Geburt) (3)" -#: src/cavedb.c:314 +#: src/cavedb.c:319 msgid "Stone birth (4)" msgstr "Felsbrocken (Geburt) (4)" -#: src/cavedb.c:315 +#: src/cavedb.c:320 msgid "Steel birth (1)" msgstr "Titanmauer (Geburt) (1)" -#: src/cavedb.c:316 +#: src/cavedb.c:321 msgid "Steel birth (2)" msgstr "Titanmauer (Geburt) (2)" -#: src/cavedb.c:317 +#: src/cavedb.c:322 msgid "Steel birth (3)" msgstr "Titanmauer (Geburt) (3)" -#: src/cavedb.c:318 +#: src/cavedb.c:323 msgid "Steel birth (4)" msgstr "Titanmauer (Geburt) (4)" -#: src/cavedb.c:319 +#: src/cavedb.c:324 msgid "Ghost explosion (1)" msgstr "Geist Explosion (1)" -#: src/cavedb.c:320 +#: src/cavedb.c:325 msgid "Ghost explosion (2)" msgstr "Geist Explosion (2)" -#: src/cavedb.c:321 +#: src/cavedb.c:326 msgid "Ghost explosion (3)" msgstr "Geist Explosion (3)" -#: src/cavedb.c:322 +#: src/cavedb.c:327 msgid "Ghost explosion (4)" msgstr "Geist Explosion (4)" -#: src/cavedb.c:323 +#: src/cavedb.c:328 msgid "Bomb explosion (1)" msgstr "Explosion Bombe (1)" -#: src/cavedb.c:324 +#: src/cavedb.c:329 msgid "Bomb explosion (2)" msgstr "Explosion Bombe (2)" -#: src/cavedb.c:325 +#: src/cavedb.c:330 msgid "Bomb explosion (3)" msgstr "Explosion Bombe (3)" -#: src/cavedb.c:326 +#: src/cavedb.c:331 msgid "Bomb explosion (4)" msgstr "Explosion Bombe (4)" -#: src/cavedb.c:327 +#: src/cavedb.c:332 msgid "Nitro pack explosion (1)" msgstr "Nitro-Pack Explosion (1)" -#: src/cavedb.c:328 +#: src/cavedb.c:333 msgid "Nitro pack explosion (2)" msgstr "Nitro-Pack Explosion (2)" -#: src/cavedb.c:329 +#: src/cavedb.c:334 msgid "Nitro pack explosion (3)" msgstr "Nitro-Pack Explosion (3)" -#: src/cavedb.c:330 +#: src/cavedb.c:335 msgid "Nitro pack explosion (4)" msgstr "Nitro-Pack Explosion (4)" -#: src/cavedb.c:331 +#: src/cavedb.c:336 msgid "Amoeba 2 explosion (1)" msgstr "Amöbe 2 Explosion (1)" -#: src/cavedb.c:332 +#: src/cavedb.c:337 msgid "Amoeba 2 explosion (2)" msgstr "Amöbe 2 Explosion (2)" -#: src/cavedb.c:333 +#: src/cavedb.c:338 msgid "Amoeba 2 explosion (3)" msgstr "Amöbe 2 Explosion (3)" -#: src/cavedb.c:334 +#: src/cavedb.c:339 msgid "Amoeba 2 explosion (4)" msgstr "Amöbe 2 Explosion (4)" -#: src/cavedb.c:335 -#, fuzzy -msgid "Dragonfly explosion (1)" -msgstr "Explosion Bombe (1)" - -#: src/cavedb.c:336 -#, fuzzy -msgid "Dragonfly explosion (2)" -msgstr "Explosion Bombe (2)" - -#: src/cavedb.c:337 -#, fuzzy -msgid "Dragonfly explosion (3)" -msgstr "Explosion Bombe (3)" - -#: src/cavedb.c:338 -#, fuzzy -msgid "Dragonfly explosion (4)" -msgstr "Explosion Bombe (4)" - -#: src/cavedb.c:339 -#, fuzzy -msgid "Dragonfly explosion (5)" -msgstr "Explosion Bombe (1)" - #: src/cavedb.c:346 msgid "Unknown element" msgstr "Unbekanntes Element" @@ -1088,7 +1062,7 @@ msgstr "Kein Element" msgid "Cave data" msgstr "Höhlen-Daten" -#: src/cavedb.c:393 src/caveset.c:56 src/gtkmain.c:1694 src/gtkui.c:996 +#: src/cavedb.c:393 src/caveset.c:56 src/gtkmain.c:1698 src/gtkui.c:998 msgid "Name" msgstr "Name" @@ -1096,7 +1070,8 @@ msgstr "Name" msgid "Name of game" msgstr "Name des Spiels" -#: src/cavedb.c:394 src/caveset.c:57 src/editorexport.c:550 +#: src/cavedb.c:394 src/caveset.c:57 src/editorexport.c:528 +#: src/editorexport.c:600 msgid "Description" msgstr "Beschreibung" @@ -1104,7 +1079,8 @@ msgstr "Beschreibung" msgid "Some words about the game" msgstr "Einige Worte über das Spiel" -#: src/cavedb.c:395 src/caveset.c:58 src/editorexport.c:548 +#: src/cavedb.c:395 src/caveset.c:58 src/editorexport.c:526 +#: src/editorexport.c:598 msgid "Author" msgstr "Author" @@ -1112,7 +1088,7 @@ msgstr "Author" msgid "Name of author" msgstr "Name des Authors" -#: src/cavedb.c:396 src/caveset.c:59 src/gtkmain.c:1703 +#: src/cavedb.c:396 src/caveset.c:59 src/gtkmain.c:1707 msgid "Date" msgstr "Datum" @@ -1120,7 +1096,7 @@ msgstr "Datum" msgid "Date of creation" msgstr "Erstellungsdatum" -#: src/cavedb.c:397 src/caveset.c:60 +#: src/cavedb.c:397 src/caveset.c:60 src/editorexport.c:530 msgid "WWW" msgstr "WWW" @@ -1136,7 +1112,7 @@ msgstr "Schwierigkeitsgrad" msgid "Difficulty (informative)" msgstr "Schwierigkeitsgrad (informativ)" -#: src/cavedb.c:400 src/editorexport.c:574 +#: src/cavedb.c:400 src/editorexport.c:632 msgid "Selectable as start" msgstr "Als Start auswählbar" @@ -1146,7 +1122,7 @@ msgstr "" "Hier wird eingestellt, ob das Spiel von dieser Höhle an gestartet werden " "kann." -#: src/cavedb.c:401 src/editorexport.c:573 src/gtkmain.c:1801 +#: src/cavedb.c:401 src/editorexport.c:631 src/gtkmain.c:1805 msgid "Intermission" msgstr "Zwischenspiel" @@ -1246,16 +1222,18 @@ msgstr "Zeichensatz" msgid "Font used during the game. Not used by GDash." msgstr "Während des Spiels verwendeter Zeichensatz. Nicht von GDash verwendet." -#: src/cavedb.c:414 src/caveset.c:67 src/editorexport.c:570 -#, fuzzy +#: src/cavedb.c:414 src/caveset.c:67 src/editorexport.c:534 +#: src/editorexport.c:628 msgid "Story" -msgstr "Felsschmetterling" +msgstr "Geschichte" #: src/cavedb.c:414 msgid "Story for the cave. It will be shown when the cave is played." msgstr "" +"Geschichte für die Höhle. Sie wird während des Spielens der Höhle angezeigt." -#: src/cavedb.c:417 src/caveset.c:68 src/editorexport.c:559 +#: src/cavedb.c:417 src/caveset.c:68 src/editorexport.c:532 +#: src/editorexport.c:613 msgid "Remark" msgstr "Anmerkung" @@ -1265,11 +1243,14 @@ msgid "" "of the cave. It is not shown during the game, only when the user requests " "the cave info dialog, so can also contain spoilers and hints." msgstr "" +"Anmerkung (informativ). Diese Anmerkung kann ergänzende Informationen über " +"die Gestaltung der Höhle enthalten. Sie wird nicht während des Spiels " +"angezeigt, sondern nur wenn der Benutzer den Höhlen-Informations-Dialog " +"abfragt. Sie kann auch Lösungen und Hinweise enthalten." #: src/cavedb.c:419 -#, fuzzy msgid "Colors" -msgstr "C64-Farben" +msgstr "Farben" #: src/cavedb.c:420 msgid "Border color" @@ -1334,7 +1315,7 @@ msgstr "Schleim-Farbe für C64-Grafiken" msgid "Diamonds" msgstr "Diamanten" -#: src/cavedb.c:431 src/editorexport.c:575 +#: src/cavedb.c:431 src/editorexport.c:633 msgid "Diamonds needed" msgstr "Benötigte Diamanten" @@ -1371,7 +1352,7 @@ msgstr "" msgid "Time" msgstr "Zeit" -#: src/cavedb.c:435 src/editorexport.c:578 +#: src/cavedb.c:435 src/editorexport.c:636 msgid "Time (s)" msgstr "Zeit (s)" @@ -1431,45 +1412,24 @@ msgstr "PAL Timing" #: src/cavedb.c:439 msgid "" "On the PAL version of the C64 computer, the timer was actually slower than " -"normal seconds. This flag is used to compensate for this. Most original " -"games are authored for the PAL version." +"normal seconds. This flag is used to compensate for this. If enabled, one " +"game second will last 1.2 real seconds. Most original games were authored " +"for the PAL version. This is a compatibility setting for imported caves; it " +"is not recommended to enable it for newly authored ones." msgstr "" "Bei der PAL-Version des C64-Computers war der Timer etwas langsamer als " "normale Sekunden. Diese Option wird dazu verwendet, diese Eigenheit zu " -"kompensieren. Die meisten Originalspiele wurden für die PAL-Version des C64 " -"entworfen." - -#: src/cavedb.c:441 -msgid " Delay (c64-style)" -msgstr " Verzögerung (C64-Art)" +"kompensieren. Wird diese Option aktiviert, wird eine Sekunde im Spiel 1,2 " +"echte Sekunden dauern. Die meisten Originalspiele wurden für die PAL-Version " +"des C64 entworfen. Das ist eine Kompatibilitätseinstellung für importierte " +"Höhlen. Es wird nicht empfohlen, diese Einstellung für neu entworfene Höhlen " +"zu verwenden." -#: src/cavedb.c:441 -msgid "" -"The length of the delay loop between game frames. Used when milliseconds-" -"based timing is inactive, ie. C64 scheduling is on." -msgstr "" -"Die Länge einer Verzögerungsschleife zwischen dem Bildaufbau. Wird " -"verwendet, wenn Millisekunden-basierendes Timing ausgeschalten bzw. wenn das " -"C64-Zeitmodell eingeschalten wurde." - -#: src/cavedb.c:442 -msgid " Hatching time (seconds)" -msgstr " Eingangs-Verzögerungs-Timing (Sekunden)" - -#: src/cavedb.c:442 -msgid "" -"This value sets how much the cave will move until the player enters the " -"cave. This is used for the C64-like schedulings." -msgstr "" -"Hier wird eingestellt, wieviel sich die Objekte in der Höhle bewegen werden, " -"bis der Spieler die Höhle betreten hat. Wird für das C64-artige Zeitmodell " -"verwendet." - -#: src/cavedb.c:443 +#: src/cavedb.c:440 msgid " Speed (ms)" msgstr " Geschwindigkeit (ms)" -#: src/cavedb.c:443 +#: src/cavedb.c:440 msgid "" "Number of milliseconds between game frames. Used when milliseconds-based " "timing is active, ie. C64 scheduling is off." @@ -1478,51 +1438,64 @@ msgstr "" "Millisekunden-basierendes Timing eingeschalten bzw. wenn das C64-Zeitmodell " "ausgeschalten wurde." -#: src/cavedb.c:444 +#: src/cavedb.c:441 msgid " Hatching delay (frames)" msgstr " Eingang-Verzögerung (Einzelbilder)" -#: src/cavedb.c:444 +#: src/cavedb.c:441 msgid "" "This value sets how much the cave will move until the player enters the " -"cave. This is used for the milliseconds-based scheduling." +"cave, and is expressed in frames. This is used for the milliseconds-based " +"scheduling." msgstr "" "Hier wird eingestellt, wieviel sich die Objekte in der Höhle bewegen werden, " -"bis der Spieler die Höhle betreten hat. Wird für das Millisekunden-" -"basierende Zeitmodell verwendet." +"bis der Spieler die Höhle betreten hat und wird in Einzelbildern " +"ausgedrückt. Wird für das Millisekunden-basierende Zeitmodell verwendet." -#: src/cavedb.c:447 -msgid "Random seed value" -msgstr "Wert der zufälligen Streuung" +#: src/cavedb.c:442 +msgid " Delay (C64-style)" +msgstr " Verzögerung (C64-Art)" -#: src/cavedb.c:447 src/editor.c:1447 +#: src/cavedb.c:442 msgid "" -"Random seed value controls the predictable random number generator, which " -"fills the cave initially. If set to -1, cave is totally random every time it " -"is played." +"The length of the delay loop between game frames. Used when milliseconds-" +"based timing is inactive, ie. some kind of C64 or Atari scheduling is " +"selected." msgstr "" -"Der Wert der zufälligen Streuung kontrolliert den voraussagbaren zufälligen " -"Nummerngenerator, welcher die Höhlen anfänglich mit Objekten füllt. Wenn " -"dieser Wert auf -1 gesetzt wird, ist die Höhle jedesmal, wenn sie gespielt " -"wird, vollständig zufällig." +"Die Länge einer Verzögerungsschleife zwischen dem Bildaufbau. Wird " +"verwendet, wenn das Millisekunden-basierendes Timing ausgeschalten bzw. wenn " +"das C64- oder Atari-Zeitmodell eingeschalten wurde." -#: src/cavedb.c:462 +#: src/cavedb.c:443 +msgid " Hatching time (seconds)" +msgstr " Eingangs-Verzögerungs-Timing (Sekunden)" + +#: src/cavedb.c:443 +msgid "" +"This value sets how much the cave will move until the player enters the " +"cave. This is used for the C64-like schedulings." +msgstr "" +"Hier wird eingestellt, wieviel sich die Objekte in der Höhle bewegen werden, " +"bis der Spieler die Höhle betreten hat. Wird für das C64-artige Zeitmodell " +"verwendet." + +#: src/cavedb.c:461 msgid "Player movements" msgstr "Spieler-Bewegungen" -#: src/cavedb.c:463 +#: src/cavedb.c:462 msgid "Diagonal movements" msgstr "Diagonale Bewegungen" -#: src/cavedb.c:463 +#: src/cavedb.c:462 msgid "Controls if the player can move diagonally." msgstr "Steuert, ob sich der Spieler diagonal bewegen kann." -#: src/cavedb.c:464 +#: src/cavedb.c:463 msgid "Uppermost player active" msgstr "Oberster Spieler aktiv" -#: src/cavedb.c:464 +#: src/cavedb.c:463 msgid "" "In 1stB, cave is scrolled to the uppermost and leftmost player found, " "whereas in the original game to the last one. Chasing stones also follow the " @@ -1532,11 +1505,11 @@ msgstr "" "wird, gescrollt. In der Original-BD-Engine nur zum Letzten. Verfolgende " "Mutanten-Felsbrocken folgen auch immer dem aktiven Spieler." -#: src/cavedb.c:465 +#: src/cavedb.c:464 msgid "Snap element" msgstr "Schnapp-Element" -#: src/cavedb.c:465 +#: src/cavedb.c:464 msgid "" "Snapping (pressing fire while moving) usually creates space, but it can " "create any other element." @@ -1544,11 +1517,11 @@ msgstr "" "Schnappen (den Feuerknopf drücken, während man sich bewegt) erzeugt " "normalerweise ein Leerfeld, aber es kann auch ein anderes Element erzeugen." -#: src/cavedb.c:466 src/cavedb.c:468 +#: src/cavedb.c:465 src/cavedb.c:467 msgid "Probability of pushing (%)" msgstr "Verzögerung beim Schieben der Felsbrocken (%)" -#: src/cavedb.c:466 +#: src/cavedb.c:465 msgid "" "Chance of player managing to push a stone, every game cycle he tries. This " "is the normal probability." @@ -1556,7 +1529,7 @@ msgstr "" "Chance des Spielers bei jedem Spielzyklus, bei dem er versucht, einen " "Felsbrocken zu verschieben. Das ist die normale Wahrscheinlichkeit." -#: src/cavedb.c:468 +#: src/cavedb.c:467 msgid "" "Chance of player managing to push a stone, every game cycle he tries. This " "is used after eating sweet." @@ -1565,21 +1538,21 @@ msgstr "" "Felsbrocken zu verschieben. Diese wird verwendet, nachdem man ein Bonbon " "eingesammelt hat." -#: src/cavedb.c:469 +#: src/cavedb.c:468 msgid "Mega stones pushable" msgstr "Mega-Felsbrocken verschiebbar" -#: src/cavedb.c:469 +#: src/cavedb.c:468 msgid "If it is true, mega stones can be pushed after eating sweet." msgstr "" "Wird diese Option aktiviert, können Mega-Felsbrocken nach dem Einsammeln " "eines Bonbons verschoben werden." -#: src/cavedb.c:472 +#: src/cavedb.c:471 msgid "Time for hammer (frames)" msgstr "Zeit für Hammer (Einzelbilder)" -#: src/cavedb.c:472 +#: src/cavedb.c:471 msgid "" "This is the number of game frames, a pneumatic hammer is required to break a " "wall." @@ -1587,11 +1560,11 @@ msgstr "" "Das ist die Anzahl der Einzelbilder, die ein Presslufthammer benötigt, um " "ein Mauerstück aufzubrechen." -#: src/cavedb.c:473 +#: src/cavedb.c:472 msgid "Hammered walls reappear" msgstr "Aufgebrochene Mauerstücke erscheint wieder" -#: src/cavedb.c:473 +#: src/cavedb.c:472 msgid "" "If this is set to true, walls broken with a pneumatic hammer will reappear " "later." @@ -1599,11 +1572,11 @@ msgstr "" "Wird diese Option aktiviert, erscheinen die von einem Presslufthammer " "aufgebrochenen Mauerstücke später wieder." -#: src/cavedb.c:474 +#: src/cavedb.c:473 msgid " Timer for reappear (frames)" msgstr " Zeit bis zum Wiedererscheinen (Einzelbilder)" -#: src/cavedb.c:474 +#: src/cavedb.c:473 msgid "" "This sets the number of game frames, after hammered walls reappear, when the " "above setting is true." @@ -1611,32 +1584,32 @@ msgstr "" "Dieser Wert stellt die Anzahl der Einzelbilder ein, nachdem aufgebrochene " "Mauerstücke wieder erscheinen, wenn die obere Einstellung aktiviert wurde." -#: src/cavedb.c:477 +#: src/cavedb.c:476 msgid "Time bonus (s)" msgstr "Zeit Bonus (s)" -#: src/cavedb.c:477 +#: src/cavedb.c:476 msgid "Bonus time when a clock is collected." msgstr "Zeitbonus, wenn eine Uhr eingesammelt wird." -#: src/cavedb.c:479 +#: src/cavedb.c:478 msgid "Voodoo Doll" msgstr "Voodoo-Puppe" -#: src/cavedb.c:480 +#: src/cavedb.c:479 msgid "Can collect diamonds" msgstr "Kann Diamanten einsammeln" -#: src/cavedb.c:480 +#: src/cavedb.c:479 msgid "Controls if a voodoo doll can collect diamonds for the player." msgstr "" "Steuert, ob eine Voodoo-Puppe Diamanten für den Spieler einsammeln kann." -#: src/cavedb.c:481 +#: src/cavedb.c:480 msgid "Can be destroyed by explosion" msgstr "Kann durch eine Explosion zerstört werden" -#: src/cavedb.c:481 +#: src/cavedb.c:480 msgid "" "Controls if the voodoo can be destroyed by an explosion nearby. If not, it " "is converted to a gravestone, and you get a time penalty." @@ -1645,11 +1618,11 @@ msgstr "" "werden kann. Wenn nicht, wird sie zu einem Grabstein umgewandelt und es wird " "eine einstellbare Zeitstrafe abgezogen." -#: src/cavedb.c:482 +#: src/cavedb.c:481 msgid "Dies if hit by a stone" msgstr "Stirbt bei Felsschlag" -#: src/cavedb.c:482 +#: src/cavedb.c:481 msgid "" "Controls if the voodoo doll dies if it is hit by a stone. Then the player " "gets a time penalty." @@ -1658,104 +1631,115 @@ msgstr "" "getroffen wird. In diesem Fall wird dem Spieler eine einstellbare Zeitstrafe " "abgezogen." -#: src/cavedb.c:483 +#: src/cavedb.c:482 msgid "Time penalty (s)" msgstr "Zeitstrafe (s)" -#: src/cavedb.c:483 +#: src/cavedb.c:482 msgid "Penalty time when the voodoo is destroyed by a stone." msgstr "" "Zeitstrafe, wenn eine Voodoo-Puppe von einem Felsbrocken zerstört wird." -#: src/cavedb.c:487 src/cavedb.c:518 -msgid "Timer waits for hatching" -msgstr "Timer wartet auf das Erscheinen der Spielfigur" - -#: src/cavedb.c:487 -msgid "" -"This determines if the amoeba timer starts before the player appearing. " -"Amoeba can always be activated before that; but if this is set to true, the " -"timer will not start." -msgstr "" -"Diese Option bewirkt, ob die Zeit der Amöbe vor dem Erscheinen der " -"Spielfigur startet. Die Amöbe kann jederzeit davor aktiviert werden. Wenn " -"diese Option aktiviert ist, wird die Zeit nicht starten." - -#: src/cavedb.c:488 +#: src/cavedb.c:486 msgid "Timer started immediately" msgstr "Zeit startet sofort" -#: src/cavedb.c:488 +#: src/cavedb.c:486 msgid "" "If this flag is enabled, the amoeba slow growth timer will start at the " -"beginning of the cave, regardless of the amoeba being let free or not." +"beginning of the cave, regardless of the amoeba being let free or not. This " +"can make a big difference when playing the cave!" msgstr "" "Wird diese Option aktiviert, wird die Zeit für das langsame Wachstum der " "Amöbe gleich zu Beginn der Höhle starten, egal ob es der Amöbe sofort " -"möglich ist, zu wachsen oder nicht." +"möglich ist, zu wachsen oder nicht. Dieses Verhalten kann beim Spielen der " +"Höhle einen großen Unterschied ausmachen!" -#: src/cavedb.c:491 src/cavedb.c:498 +#: src/cavedb.c:487 src/cavedb.c:511 +msgid "Timer waits for hatching" +msgstr "Timer wartet auf das Erscheinen der Spielfigur" + +#: src/cavedb.c:487 +msgid "" +"This determines if the amoeba timer starts before the player appearing. " +"Amoeba can always be activated before that; but if this is set to true, the " +"timer will not start. This setting is for compatiblity for some old imported " +"caves. As the player is usually born within a few seconds, changing this " +"setting makes not much difference. It is not advised to change it, set the " +"slow growth time to fit your needs instead." +msgstr "" +"Diese Option legt fest, ob der Timer der Amöbe startet, bevor der Spieler " +"erscheint. Die Amöbe kann grundsätzlich immer davor aktiviert werden. Wird " +"diese Option aktiviert, wird der Timer nicht starten. Diese Einstellung ist " +"aus Kompatibilitätsgründen für einige ältere Höhlen gedacht. Da der Spieler " +"normalerweise innerhalb einiger weniger Sekunden erscheint, macht das Ändern " +"dieser Einstellung nicht viel Unterschied. Es wird nicht empfohlen sie zu " +"ändern. Stellen Sie stattdessen das langsame Wachstum nach Ihren Wünschen " +"ein." + +#: src/cavedb.c:490 src/cavedb.c:497 msgid "Threshold (cells)" msgstr "Ansprechwert (Zellen)" -#: src/cavedb.c:491 src/cavedb.c:498 +#: src/cavedb.c:490 src/cavedb.c:497 msgid "" "If the amoeba grows more than this fraction of the cave, it is considered " -"too big." +"too big and it converts to the element specified below." msgstr "" "Wenn die Amöbe mehr als um diesen Bruchteil der Höhle wächst, wird sie als " -"zu groß angesehen." +"zu groß angesehen und sie verwandelt sich in das unterhalb angegebene " +"Element." -#: src/cavedb.c:492 src/cavedb.c:499 +#: src/cavedb.c:491 src/cavedb.c:498 msgid "Slow growth time (s)" msgstr "Langsames Wachstum (s)" -#: src/cavedb.c:492 src/cavedb.c:499 +#: src/cavedb.c:491 src/cavedb.c:498 msgid "After this time, amoeba will grow very quickly." msgstr "Nach dieser Zeit wird die Amöbe sehr schnell wachsen." -#: src/cavedb.c:493 src/cavedb.c:500 +#: src/cavedb.c:492 src/cavedb.c:499 msgid "Growth ratio, slow (%)" msgstr "Wachstumsverhältnis (langsam) (%)" -#: src/cavedb.c:493 src/cavedb.c:500 +#: src/cavedb.c:492 src/cavedb.c:499 msgid "This sets the speed at which a slow amoeba grows." msgstr "" "Hier wird die Geschwindigkeit, mit der die Amöbe vor Ablauf der Amöben-Zeit " "wächst, angegeben." -#: src/cavedb.c:494 src/cavedb.c:501 +#: src/cavedb.c:493 src/cavedb.c:500 msgid "Growth ratio, fast (%)" msgstr "Wachstumsverhältnis (schnell) (%)" -#: src/cavedb.c:494 src/cavedb.c:501 +#: src/cavedb.c:493 src/cavedb.c:500 msgid "This sets the speed at which a fast amoeba grows." msgstr "" "Hier wird die Geschwindigkeit, mit der die Amöbe nach Ablauf der Amöben-Zeit " "wächst, angegeben." -#: src/cavedb.c:495 src/cavedb.c:504 +#: src/cavedb.c:494 src/cavedb.c:503 msgid "If too big, converts to" msgstr "Wenn zu groß, verwandle in" -#: src/cavedb.c:495 src/cavedb.c:504 +#: src/cavedb.c:494 src/cavedb.c:503 msgid "Controls which element an overgrown amoeba converts to." msgstr "Steuert, in welches Element sich eine zu große Amöbe verwandeln soll." -#: src/cavedb.c:496 src/cavedb.c:505 +#: src/cavedb.c:495 src/cavedb.c:504 msgid "If enclosed, converts to" msgstr "Wenn eingeschlossen, verwandle in" -#: src/cavedb.c:496 src/cavedb.c:505 +#: src/cavedb.c:495 src/cavedb.c:504 msgid "Controls which element an enclosed amoeba converts to." msgstr "" "Steuert, in welches Element sich eine eingeschlossene Amöbe verwandeln soll." -#: src/cavedb.c:502 +#: src/cavedb.c:501 msgid "Explodes by amoeba" msgstr "Explodiert durch Amöbe" -#: src/cavedb.c:502 +#: src/cavedb.c:501 msgid "" "If this setting is enabled, an amoeba 2 will explode if it is touched by a " "normal amoeba." @@ -1763,22 +1747,22 @@ msgstr "" "Wird diese Option aktiviert, wird der angrenzende Teil einer Amöbe 2 " "explodieren, sobald er eine normale Amöbe berührt." -#: src/cavedb.c:503 -msgid " Explodes to" -msgstr "Explodiert zu" +#: src/cavedb.c:502 +msgid " Explosion ends in" +msgstr " Explosion erzeugt" -#: src/cavedb.c:503 +#: src/cavedb.c:502 msgid "" "An amoeba 2 explodes to this element, when touched by the original amoeba." msgstr "" "Der angrenzende Teil einer Amöbe 2 explodiert zu diesem Element, sobald er " "von einer normalen Amöbe berührt wird." -#: src/cavedb.c:506 +#: src/cavedb.c:505 msgid "Looks like" msgstr "Sieht aus wie" -#: src/cavedb.c:506 +#: src/cavedb.c:505 msgid "" "Amoeba 2 can look like any other element. Hint: it can also look like a " "normal amoeba. Or it can look like slime, and then you have two different " @@ -1788,90 +1772,134 @@ msgstr "" "eine normale Amöbe aussehen. Oder sie kann wie Schleim aussehen, wodurch man " "zwei verschiedenfarbige Amöben hätte!" -#: src/cavedb.c:509 -msgid "Active elements" -msgstr "Aktive Elemente" - -#: src/cavedb.c:511 +#: src/cavedb.c:508 msgid "Magic Wall" msgstr "Zaubermauer" -#: src/cavedb.c:512 +#: src/cavedb.c:509 +msgid "Timing" +msgstr "Timing" + +#: src/cavedb.c:510 msgid "Milling time (s)" msgstr "Zaubermauerzeit (s)" -#: src/cavedb.c:512 +#: src/cavedb.c:510 msgid "Magic wall will stop after this time, and it cannot be activated again." msgstr "" "Die Zaubermauer wird nach Ablauf dieser Zeit gestoppt und kann nicht " "nochmals aktiviert werden." -#: src/cavedb.c:513 -msgid "Converts diamond to" -msgstr "Verwandelt Diamanten in" +#: src/cavedb.c:511 +msgid "" +"This determines if the magic wall timer starts before the player appearing. " +"Magic can always be activated before that; but if this is set to true, the " +"timer will not start." +msgstr "" +"Dieser Wert ermittelt, ob die Zaubermauerzeit startet, bevor die Spielfigur " +"erscheint. Die Zaubermauer kann immer davor gestartet werden. Falls jedoch " +"die Option eingeschalten wird, wird die Zeit nicht gestartet." + +#: src/cavedb.c:512 +msgid "Stops amoeba" +msgstr "Stoppt Amöbe" + +#: src/cavedb.c:512 +msgid "When the magic wall is activated, it can convert amoeba into diamonds." +msgstr "" +"Wird diese Option aktiviert, verwandelt die Aktivierung einer Zaubermauer " +"die Amöbe in Diamanten." #: src/cavedb.c:513 +msgid "Conversions" +msgstr "Verwandlungen" + +#: src/cavedb.c:514 +#, fuzzy +msgid "Diamond to" +msgstr "Diamant" + +#: src/cavedb.c:514 msgid "" "As a special effect, magic walls can convert diamonds to any other element." msgstr "" "Als ein Spezialeffekt kann die Zaubermauer Diamanten in jedes andere " "beliebige Element verwandeln." -#: src/cavedb.c:514 -msgid "Converts stone to" -msgstr "Verwandelt Felsbrocken in" +#: src/cavedb.c:515 +#, fuzzy +msgid "Stone to" +msgstr "Felsbrocken" -#: src/cavedb.c:514 +#: src/cavedb.c:515 msgid "" "As a special effect, magic walls can convert stones to any other element." msgstr "" "Als ein Spezialeffekt kann die Zaubermauer Felsbrocken in jedes andere " "beliebige Element verwandeln." -#: src/cavedb.c:515 +#: src/cavedb.c:516 #, fuzzy -msgid "Converts mega stone to" -msgstr "Verwandelt Felsbrocken in" +msgid "Mega stone to" +msgstr "Mega-Felsbrocken" -#: src/cavedb.c:515 +#: src/cavedb.c:516 msgid "If a mega stone falls into the magic wall, it will drop this element." msgstr "" +"Wenn ein Mega-Fellsbrocken durch eine Zaubermauer fällt, verwandelt er sich " +"in dieses Element." -#: src/cavedb.c:516 +#: src/cavedb.c:517 #, fuzzy -msgid "Converts nitro pack to" -msgstr "Verwandelt Felsbrocken in" +msgid "Nitro pack to" +msgstr "Nitro-Pack" -#: src/cavedb.c:516 +#: src/cavedb.c:517 msgid "" "If a nitro pack falls into the magic wall, it will be turned to this element." msgstr "" +"Wenn ein Nitro-Pack durch eine Zaubermauer fällt, verwandelt es sich in " +"dieses Element." -#: src/cavedb.c:517 -msgid "Stops amoeba" -msgstr "Stoppt Amöbe" +#: src/cavedb.c:518 +#, fuzzy +msgid "Flying stone to" +msgstr "Fliegender Felsbrocken" -#: src/cavedb.c:517 -msgid "When the magic wall is activated, it can convert amoeba into diamonds." +#: src/cavedb.c:518 +msgid "" +"If a flying stone climbs up into the magic wall, it will be turned to this " +"element. Remember that flying stones enter the magic wall from its bottom, " +"not from the top!" msgstr "" -"Wird diese Option aktiviert, verwandelt die Aktivierung einer Zaubermauer " -"die Amöbe in Diamanten." +"Wenn ein fliegender Fellsbrocken nach oben durch eine Zaubermauer fällt, " +"verwandelt er sich in dieses Element. Beachten Sie, daß fliegende " +"Fellsbrocken von unten durch die Zaubermauer fallen - nicht von oben!" -#: src/cavedb.c:518 +#: src/cavedb.c:519 +#, fuzzy +msgid "Flying diamonds to" +msgstr "Fliegender Diamant" + +#: src/cavedb.c:519 msgid "" -"This determines if the magic wall timer starts before the player appearing. " -"Magic can always be activated before that; but if this is set to true, the " -"timer will not start." +"If a flying diamond enters the magic wall, it will be turned to this " +"element. Remember that flying diamonds enter the magic wall from its bottom, " +"not from the top!" msgstr "" -"Dieser Wert ermittelt, ob die Zaubermauerzeit startet, bevor die Spielfigur " -"erscheint. Die Zaubermauer kann immer davor gestartet werden. Falls jedoch " -"die Option eingeschalten wird, wird die Zeit nicht gestartet." +"Wenn ein fliegender Diamant nach oben durch eine Zaubermauer fällt, " +"verwandelt er sich in dieses Element. Beachten Sie, daß fliegende Diamanten " +"von unten durch die Zaubermauer fallen - nicht von oben!" -#: src/cavedb.c:522 +#: src/cavedb.c:523 +msgid "Permeability" +msgstr "Durchlässigkeit" + +#: src/cavedb.c:524 msgid "Predictable" msgstr "Voraussagbar" -#: src/cavedb.c:522 +#: src/cavedb.c:524 msgid "" "Controls if the predictable random generator is used for slime. It is " "required for compatibility with some older caves." @@ -1879,11 +1907,11 @@ msgstr "" "Steuert, ob der voraussagbare Zufallsgenerator für den Schleim benutzt wird. " "Dies wird nur für die Kompatibilität mit einigen älteren Höhlen benötigt." -#: src/cavedb.c:524 +#: src/cavedb.c:526 msgid "Permeability (unpredictable, %)" msgstr "Durchlässigkeit (unvorhersehbar, %)" -#: src/cavedb.c:524 +#: src/cavedb.c:526 msgid "" "This controls the rate at which elements go through the slime. Higher values " "represent higher probability of passing. This one is for unpredictable slime." @@ -1892,11 +1920,11 @@ msgstr "" "Höhere Werte repräsentieren eine höhere Durchfallsgeschwindigkeit. Dieser " "Wert ist für unvorhersehbaren Schleim." -#: src/cavedb.c:525 +#: src/cavedb.c:527 msgid "Permeability (predictable, bits)" msgstr "Durchlässigkeit (vorhersehbar, Bits)" -#: src/cavedb.c:525 +#: src/cavedb.c:527 msgid "" "This controls the rate at which elements go through the slime. This one is " "for predictable slime, and the value is used for a bitwise AND function. The " @@ -1908,11 +1936,11 @@ msgstr "" "eine bitweise AND-Funktion verwendet. Die Werte, die von den C64-Engines " "verwendet werden, sind 0, 128, 192, 224, 240, 248, 252, 254 und 255." -#: src/cavedb.c:526 +#: src/cavedb.c:528 msgid "Random seed (predictable)" msgstr "Zufällige Streuung (vorhersehrbar)" -#: src/cavedb.c:526 +#: src/cavedb.c:528 msgid "" "The random number seed for predictable slime. Use -1 to leave on its " "default. Not recommended to change. Does not affect unpredictable slime." @@ -1921,229 +1949,387 @@ msgstr "" "1 um den Standardwert eingestellt zu lassen. Es wird nicht empfohlen, diesen " "Wert zu ändern. Dieser Wert beeinflusst nicht den unverhersehbaren Schleim." -#: src/cavedb.c:527 src/cavedb.c:529 +#: src/cavedb.c:529 +msgid "Passing elements" +msgstr "Durchsickernde Elemente" + +#: src/cavedb.c:530 src/cavedb.c:532 msgid "Eats this..." msgstr "Verschlingt..." -#: src/cavedb.c:527 src/cavedb.c:528 src/cavedb.c:529 src/cavedb.c:530 +#: src/cavedb.c:530 src/cavedb.c:531 src/cavedb.c:532 src/cavedb.c:533 msgid "" "Slime can let other elements than stone and diamond go through. It always " -"lets a waiting or a chasing stone pass, though." +"lets a waiting or a chasing stone pass, though. Also, flying diamonds and " +"stones, as well as bladders are always passed." msgstr "" "Schleim kann auch andere Elemente als Felsbrocken und Diamanten durchlassen. " -"Wartende oder verfolgende Mutanten-Felsbrocken werden aber auf jeden Fall " -"durchgelassen." +"Wartende oder verfolgende Mutanten-Felsbrocken werden jedoch auf jeden Fall " +"durchgelassen, ebenso wie fliegende Diamanten und Felsbrocken als auch " +"Blasen." -#: src/cavedb.c:528 src/cavedb.c:530 +#: src/cavedb.c:531 src/cavedb.c:533 msgid " ... and converts to" msgstr " ... und verwandelt in" -#: src/cavedb.c:533 -msgid "More elements" -msgstr "Mehr Elemente" - #: src/cavedb.c:536 -msgid "Does not flow downwards" -msgstr "Fließt nicht nach unten" +msgid "Other elements" +msgstr "Andere Elemente" -#: src/cavedb.c:536 -msgid "" -"In CrDr, the water element had the odd property that it did not flow " -"downwards, only in other directions. This flag emulates this behaviour." -msgstr "" -"In CrDr hatte das Wasser-Element die seltsame Eigenschaft, dass es nicht " -"nach unten fließen konnte - nur in alle anderen Richtungen. Diese Option " -"ahmt dieses Verhalten nach." - -#: src/cavedb.c:540 +#: src/cavedb.c:539 msgid "Eats this element" msgstr "Verschlingt" -#: src/cavedb.c:540 +#: src/cavedb.c:539 msgid "" "The element which acid eats. If it cannot find any, it simply disappears." msgstr "" "Das Element, welches von der Säure verschlungen wird. Wird keines solches " "gefunden, verschwindet sie einfach." -#: src/cavedb.c:541 +#: src/cavedb.c:540 msgid "Spread ratio (%)" msgstr "Verbreitungsgeschwindigkeit (%)" -#: src/cavedb.c:541 +#: src/cavedb.c:540 msgid "" "The probability at which an acid will explode and eat neighbouring elements." msgstr "" "Die Wahrscheinlichkeit, zu welcher Säure Nachbarobjekte explodieren lässt " "und verschlingt." -#: src/cavedb.c:542 +#: src/cavedb.c:541 msgid "Leaves this behind" msgstr "Hinterlässt" -#: src/cavedb.c:542 +#: src/cavedb.c:541 msgid "" "If acid converts to an explosion puff on spreading or any other element." msgstr "" "Ob sich Säure bei der Ausdehnung in eine Explosion oder in ein anderes " "Element verwandelt." -#: src/cavedb.c:545 src/cavedb.c:612 src/help.c:74 +#: src/cavedb.c:543 src/cavedb.c:620 src/help.c:79 msgid "Biter" msgstr "Beißer" -#: src/cavedb.c:546 src/cavedb.c:560 +#: src/cavedb.c:544 src/cavedb.c:555 msgid "Delay (frame)" msgstr "Verzögerung (Einzelbild)" -#: src/cavedb.c:546 +#: src/cavedb.c:544 msgid "Number of frames biters wait between movements." msgstr "" "Anzahl der Einzelbilder, zwischen denen Beißer mit Ihrer Bewegung warten." -#: src/cavedb.c:547 +#: src/cavedb.c:545 msgid "Eats this" msgstr "Fressen" -#: src/cavedb.c:547 +#: src/cavedb.c:545 msgid "Biters eat this element. (They always eat dirt.)" msgstr "Beißer fressen dieses Element. Erde wird immer gefressen." -#: src/cavedb.c:551 +#: src/cavedb.c:548 msgid "Converts to clock by touching" msgstr "Verwandelt sich bei Berührung in eine Uhr" -#: src/cavedb.c:555 src/cavedb.c:564 +#: src/cavedb.c:551 src/cavedb.c:559 msgid "Direction changed" msgstr "Richtung umkehren" -#: src/cavedb.c:555 +#: src/cavedb.c:551 msgid "" "If this option is enabled, the direction of growing for the horizontal and " -"vertical expanding wall is switched." -msgstr "" -"Wird diese Option aktiviert, wird die Richtung für die horizontale und " -"vertikale Wachsmauer umgekehrt." - -#: src/cavedb.c:559 src/cavedb.c:563 -#, fuzzy +"vertical expanding wall is switched. As you can use both horizontal and " +"vertical expanding walls in a cave, it is not recommended to change this " +"setting, as it might be confusing. You should rather select the type with " +"the correct direction from the element box when drawing the cave." +msgstr "" +"Ist diese Option aktiviert, wird die Wachsrichtung für horizontale und " +"vertikale Wachsmauern umgeschalten. Man kann in einer Höhle horizontale und " +"gleichzeitig auch vertikale Wachsmauern verwenden. Es wird nicht empfohlen " +"diese Einstellung zu ändern, da es für Verwirrung sorgen könnte. Man sollte " +"für das Zeichnen der Höhle eher den gewünschten Typ mit der korrekten " +"Richtung aus der Elemente-Box auswählen." + +#: src/cavedb.c:554 src/cavedb.c:558 msgid "Active at start" -msgstr "Schalter bei Start aktiv" +msgstr "Beim Start aktiv" -#: src/cavedb.c:559 +#: src/cavedb.c:554 msgid "Whether the replicators are turned on or off at the cave start." msgstr "" +"Steuert, ob die Replikatoren beim Betreten der Höhle ein- oder ausgeschalten " +"sind." -#: src/cavedb.c:560 -#, fuzzy +#: src/cavedb.c:555 msgid "Number of frames to wait between replicating elements." msgstr "" -"Anzahl der Einzelbilder, zwischen denen Beißer mit Ihrer Bewegung warten." +"Anzahl der Einzelbilder, die zwischen dem Replizieren der Elemente gewartet " +"werden." -#: src/cavedb.c:562 src/help.c:95 -#, fuzzy +#: src/cavedb.c:557 src/help.c:100 msgid "Conveyor belt" -msgstr "Verwandelt Felsbrocken in" +msgstr "Förderband" -#: src/cavedb.c:563 +#: src/cavedb.c:558 msgid "Whether the conveyor belts are moving when the cave starts." +msgstr "Steuert, ob sich die Förderbänder beim Betreten der Höhle bewegen." + +#: src/cavedb.c:559 +msgid "" +"If the conveyor belts' movement is changed, ie. they are running in the " +"opposite direction. As you can freely use left and right going versions of " +"the conveyor belt in a cave, it is not recommended to change this setting, " +"rather you should select the correct one from the element box when drawing." +msgstr "" +"Wenn die Laufrichtung des Förderbandes geändert wird, laufen sie in die " +"gegengesetzte Richtung. Da man nach links und nach rechts laufende " +"Förderbänder in einer Höhle frei verwenden kann, wird es nicht empfohlen " +"diese Einstellung zu ändern. Man sollte für das Zeichnen eher den " +"gewünschten Typ mit der korrekten Laufrichtung aus der Elemente-Box " +"auswählen." + +#: src/cavedb.c:562 +msgid "Does not flow downwards" +msgstr "Fließt nicht nach unten" + +#: src/cavedb.c:562 +msgid "" +"In CrDr, the water element had the odd property that it did not flow " +"downwards, only in other directions. This flag emulates this behaviour." msgstr "" +"In CrDr hatte das Wasser-Element die seltsame Eigenschaft, dass es nicht " +"nach unten fließen konnte - nur in alle anderen Richtungen. Diese Option " +"ahmt dieses Verhalten nach." + +#: src/cavedb.c:565 +msgid "Effects" +msgstr "Effekte" + +#: src/cavedb.c:567 +msgid "Stone and diamond effects" +msgstr "Fellsbrocken- und Diamanten-Effekte" + +#: src/cavedb.c:568 +msgid "Falling stones convert to" +msgstr "Fallende Felsbrocken verwandeln sich in" -#: src/cavedb.c:564 -msgid "" -"If the conveyor belts' movement is changed, ie. they are running in the " -"opposite direction." +#: src/cavedb.c:568 +msgid "When a stone begins falling, it converts to this element." msgstr "" +"Wenn ein Felsbrocken zu fallen beginnt, verwandelt er sich in dieses Element." -#: src/cavedb.c:567 src/cavedb.c:581 -msgid "Effects" -msgstr "Effekte" +#: src/cavedb.c:569 +msgid "Bouncing stones convert to" +msgstr "Aufprallende Felsbrocken verwandelt sich in" #: src/cavedb.c:569 -msgid "Cave effects" -msgstr "Höhlen-Effekte" +msgid "When a stone stops falling and rolling, it converts to this element." +msgstr "" +"Wenn ein Felsbrocken zu fallen und rollen aufhört, verwandelt er sich in " +"dieses Element." #: src/cavedb.c:570 -msgid "Explosions convert to" -msgstr "Explosionen verwandeln sich in" +msgid "Falling diamonds convert to" +msgstr "Fallende Diamanten verwandelt sich in" #: src/cavedb.c:570 -msgid "This element appears in places where an explosion happens." +msgid "When a diamond begins falling, it converts to this element." msgstr "" -"Dieses Element erscheint an dem Platz, an dem Explosionen ausgelöst wurden." +"Wenn ein Diamant zu fallen beginnt, verwandelt er sich in dieses Element." #: src/cavedb.c:571 -msgid "Diamond births convert to" -msgstr "Diamanten-Geburten verwandeln sich in" - -#: src/cavedb.c:572 -#, fuzzy -msgid "Dragonfly explodes to" -msgstr "Bomben explodieren zu" +msgid "Bouncing diamonds convert to" +msgstr "Aufprallende Diamanten verwandelt sich in" -#: src/cavedb.c:572 -msgid "An exploding dragonfly will create this element." +#: src/cavedb.c:571 +msgid "When a diamond stops falling and rolling, it converts to this element." msgstr "" +"Wenn ein Diamant zu fallen und rollen aufhört, verwandelt er sich in dieses " +"Element." #: src/cavedb.c:573 -msgid "Bombs explode to" -msgstr "Bomben explodieren zu" +msgid "Creature explosion effects" +msgstr "Gegner-Explosions-Effekte" + +#: src/cavedb.c:574 +msgid "Fireflies explode to" +msgstr "Glühwürmchen explodieren zu" #: src/cavedb.c:574 -msgid "Nitro packs explode to" -msgstr "Nitro-Packs explodieren zu" +msgid "" +"When a firefly explodes, it will create this element. Change this setting " +"wisely. The firefly is a traditional element which is expected to explode to " +"empty space." +msgstr "" +"Wenn ein Glühwürmchen explodiert, verwandelt es sich in dieses Element. " +"Überlegen Sie gut, bevor Sie diese Einstellung verändern. Das Glühwürmchen " +"ist ein traditionelles Element, von dem man erwartet, daß es sich nach der " +"Explosion in Leerfelder verwandelt." #: src/cavedb.c:575 -msgid "Falling stones convert to" -msgstr "Fallende Felsbrocken verwandeln sich in" +msgid "Alt. fireflies explode to" +msgstr "Alternative Glühwürmchen explodieren zu" #: src/cavedb.c:575 -msgid "When a stone begins falling, it converts to this element." +msgid "" +"When an alternative firefly explodes, it will create this element. Use this " +"setting wisely. Do not create a firefly which explodes to stones, for " +"example: use the stonefly instead." msgstr "" -"Wenn ein Felsbrocken zu fallen beginnt, verwandelt er sich in dieses Element." +"Wenn ein alternatives Glühwürmchen explodiert, verwandelt es sich in dieses " +"Element. Überlegen Sie gut, bevor Sie diese Einstellung verändern. Lassen " +"Sie z. B. ein Glühwürmchen nicht zu Felsbrocken explodieren - benützen Sie " +"stattdessen die Steinfliege." #: src/cavedb.c:576 -msgid "Bouncing stones convert to" -msgstr "Aufprallende Felsbrocken verwandelt sich in" +msgid "Butterflies explode to" +msgstr "Schmetterlinge explodieren zu" #: src/cavedb.c:576 -msgid "When a stone stops falling and rolling, it converts to this element." +msgid "" +"When a butterfly explodes, it will create this element. Use this setting " +"wisely. Butterflies should explode to diamonds. If you need a creature which " +"explodes to space, use the firefly instead." msgstr "" -"Wenn ein Felsbrocken zu fallen und rollen aufhört, verwandelt er sich in " -"dieses Element." +"Wenn ein Schmetterling explodiert, verwandelt es sich in dieses Element. " +"Überlegen Sie gut, bevor Sie diese Einstellung verändern. Schmetterlinge " +"sollen traditionell zu Diamanten explodieren. Benötigen Sie z. B. einen " +"Gegner, der zu Leerfeldern explodiert, verwenden Sie stattdessen das " +"Glühwürmchen." #: src/cavedb.c:577 -msgid "Falling diamonds convert to" -msgstr "Fallende Diamanten verwandelt sich in" +msgid "Alt. butterflies explode to" +msgstr "Alternative Schmetterlinge explodieren zu" #: src/cavedb.c:577 -msgid "When a diamond begins falling, it converts to this element." +msgid "" +"When an alternative butterfly explodes, it will create this element. Use " +"this setting wisely." msgstr "" -"Wenn ein Diamant zu fallen beginnt, verwandelt er sich in dieses Element." +"Wenn ein alternativer Schmetterling explodiert, verwandelt es sich in dieses " +"Element. Überlegen Sie gut, bevor Sie diese Einstellung verändern." #: src/cavedb.c:578 -msgid "Bouncing diamonds convert to" -msgstr "Aufprallende Diamanten verwandelt sich in" +msgid "Stoneflies explode to" +msgstr "Steinfliegen explodieren zu" #: src/cavedb.c:578 -msgid "When a diamond stops falling and rolling, it converts to this element." +msgid "When a stonefly explodes, it will create this element." msgstr "" -"Wenn ein Diamant zu fallen und rollen aufhört, verwandelt er sich in dieses " -"Element." +"Wenn eine Steinfliege explodiert, verwandelt sie sich in dieses Element." + +#: src/cavedb.c:579 +msgid "Dragonflies explode to" +msgstr "Libellen explodieren zu" + +#: src/cavedb.c:579 +msgid "When a dragonfly explodes, it will create this element." +msgstr "Wenn eine Libelle explodiert, verwandelt sie sich in dieses Element." + +#: src/cavedb.c:581 +msgid "Explosion effects" +msgstr "Explosionseffekte" + +#: src/cavedb.c:582 +msgid "Explosions end in" +msgstr "Explosionen verwandeln sich in" + +#: src/cavedb.c:582 +msgid "This element appears in places where an explosion finishes." +msgstr "" +"Dieses Element erscheint an dem Platz, an dem Explosionen ausgelöst wurden." + +#: src/cavedb.c:583 +msgid "Diamond births end in" +msgstr "Diamanten-Geburten verwandeln sich in" #: src/cavedb.c:583 -msgid "Creature effects" -msgstr "Gegner-Effekte" +msgid "" +"When a diamond birth animation reaches its end, it will leave this element " +"there. This can be used to change the element butterflies explode to." +msgstr "" +"Wenn eine Diamanten-Geburts-Animation ihr Ende erreicht hat, wird sie sich " +"in dieses Element verwandeln. Diese Einstellung kann dazu benützt werden, um " +"das Element 'Schmetterlinge explodieren zu' zu ändern." + +#: src/cavedb.c:584 +msgid "Bombs explosions end in" +msgstr "Bomben-Explosionen verwandeln sich in" #: src/cavedb.c:584 +msgid "Use this setting to select the element the exploding bomb creates." +msgstr "" +"Verwenden Sie diese Einstellung, um das Element, das eine explodierende " +"Bombe erzeugt, auszuwählen." + +#: src/cavedb.c:585 +msgid "Nitro explosions end in" +msgstr "Nitro-Explosionen verwandeln sich in" + +#: src/cavedb.c:585 +msgid "The nitro explosions can create some element other than space." +msgstr "" +"Die Nitro-Explosionen können auch andere Elemente als Leerfelder erzeugen." + +#: src/cavedb.c:588 +msgid "More effects" +msgstr "Mehr Effekte" + +#: src/cavedb.c:590 +msgid "Visual effects" +msgstr "Visuelle Effekte" + +#: src/cavedb.c:591 +msgid "Expanding wall looks like" +msgstr "Wachsmauer sieht aus wie" + +#: src/cavedb.c:591 +msgid "" +"This is a compatibility setting for old caves. If you need an expanding wall " +"which looks like steel, you should rather choose the expanding steel wall " +"from the element box." +msgstr "" +"Das ist eine Kompatibilitäts-Einstellung für ältere Höhlen. Wenn Sie eine " +"Wachsmauer benötigen, die wie eine Titanmauer aussieht, sollen Sie besser " +"die Titan-Wachsmauer aus der Element Box auswählen." + +#: src/cavedb.c:592 +msgid "Dirt looks like" +msgstr "Erde sieht aus wie" + +#: src/cavedb.c:592 +msgid "" +"Compatibility setting. Use it wisely! Anything other than Dirt 2 (which can " +"be used to emulate the Dirt Mod) is not recommended." +msgstr "" +"Kompatibilitätseinstellung. Überlegen Sie die Verwendung gut! Alles außer " +"der Erde 2 (welche dazu benutzt werden kann, die Erde-Modifikation " +"nachzuahmen) wird nicht empfohlen." + +#: src/cavedb.c:595 +msgid "Creature movement" +msgstr "Gegner-Bewegungen" + +#: src/cavedb.c:596 msgid "Start backwards" msgstr "Starten rückwärts" -#: src/cavedb.c:585 +#: src/cavedb.c:596 +msgid "" +"Whether the direction creatures travel will already be switched at the cave " +"start." +msgstr "" +"Hier wird eingestellt, ob die Richtung, in die sich die Gegner bewegen, " +"bereits beim Start der Höhle umgeschalten wird." + +#: src/cavedb.c:597 msgid "Automatically turn (s)" msgstr "Automatisches Umkehren (s)" -#: src/cavedb.c:585 +#: src/cavedb.c:597 msgid "" "If this is greater than zero, creatures will automatically change direction " "in every x seconds." @@ -2151,11 +2337,11 @@ msgstr "" "Ist der Wert größer als Null, werden die Gegner automatisch nach jeder x-ten " "Sekunde die Richtung wechseln." -#: src/cavedb.c:586 -msgid "Automatically turn on start" +#: src/cavedb.c:598 +msgid "Auto turn on hatching" msgstr "Automatisches Umkehren beim Start" -#: src/cavedb.c:586 +#: src/cavedb.c:598 msgid "" "If this is set to true, creatures also turn at the start signal. If false, " "the first change in direction occurs only later." @@ -2164,35 +2350,23 @@ msgstr "" "Richtung. Wird diese Option nicht aktiviert, wird der erste Richtungswechsel " "später auftreten." -#: src/cavedb.c:588 -msgid "Visual effects" -msgstr "Visuelle Effekte" - -#: src/cavedb.c:589 -msgid "Expanding wall looks like" -msgstr "Wachsmauer sieht aus wie" - -#: src/cavedb.c:590 -msgid "Dirt looks like" -msgstr "Erde sieht aus wie" - -#: src/cavedb.c:592 -msgid "Gravitation effects" -msgstr "Gravitations-Effekte" +#: src/cavedb.c:600 +msgid "Gravitation change" +msgstr "Gravitations-Änderung" -#: src/cavedb.c:593 +#: src/cavedb.c:601 msgid "Direction" msgstr "Gravitations-Richtung" -#: src/cavedb.c:593 +#: src/cavedb.c:601 msgid "The direction where stones and diamonds fall." msgstr "Die Richtung, in welche Felsbrocken und Diamanten fallen." -#: src/cavedb.c:594 +#: src/cavedb.c:602 msgid "Switch active at start" msgstr "Schalter bei Start aktiv" -#: src/cavedb.c:594 +#: src/cavedb.c:602 msgid "" "If set to true, the gravitation switch will be already activated, when the " "cave is started, as if a pot has already been collected." @@ -2201,20 +2375,20 @@ msgstr "" "Start der Höhle aktiviert sein - genauso, als ob bereits ein Topf gerührt " "worden wäre." -#: src/cavedb.c:595 +#: src/cavedb.c:603 msgid "Skeletons needed for pot" msgstr "Benötigte Skelette für den Topf" -#: src/cavedb.c:595 +#: src/cavedb.c:603 msgid "The number of skeletons to be collected to be able to use a pot." msgstr "" -"Die Anzahl der einzusammelnden Skelette, um einen Topf benutzen zu können." +"Die Anzahl der einzusammelnden Skelette, um einen Topf rühren zu können." -#: src/cavedb.c:596 +#: src/cavedb.c:604 msgid "Gravitation switch delay" msgstr "Gravitations-Schalter-Verzögerung" -#: src/cavedb.c:596 +#: src/cavedb.c:604 msgid "" "The gravitation changes after a while using the gravitation switch. This " "option sets the number of seconds to wait." @@ -2223,142 +2397,170 @@ msgstr "" "die Gravitation. Diese Option stellt die Anzahl der darauf zu wartenden " "Sekunden ein." -#: src/cavedb.c:599 src/gtkui.c:642 +#: src/cavedb.c:607 src/gtkui.c:643 msgid "Sound" msgstr "Ton" -#: src/cavedb.c:600 +#: src/cavedb.c:608 msgid "Sound for elements" msgstr "Ton für Elemente" -#: src/cavedb.c:601 +#: src/cavedb.c:609 msgid "If true, falling diamonds will have sound." msgstr "" "Ist diese Option aktiviert, werden fallende Diamanten Geräusche verursachen." -#: src/cavedb.c:602 +#: src/cavedb.c:610 msgid "If true, falling and pushed stones will have sound." msgstr "" -"Ist diese Option aktiviert, werden fallende und verschobene Felsbrocken " +"Ist diese Option aktiviert, werden fallende und schiebende Felsbrocken " "Geräusche verursachen." -#: src/cavedb.c:603 +#: src/cavedb.c:611 msgid "If true, falling and pushed nitro packs will have sound." msgstr "" -"Ist diese Option aktiviert, werden fallende und verschobene Nitro-Packs " +"Ist diese Option aktiviert, werden fallende und schiebende Nitro-Packs " "Geräusche verursachen." -#: src/cavedb.c:604 +#: src/cavedb.c:612 msgid "If true, expanding wall will have sound." msgstr "Ist diese Option aktiviert, werden Wachsmauern Geräusche verursachen." -#: src/cavedb.c:605 +#: src/cavedb.c:613 msgid "If true, falling wall will have sound." msgstr "" "Ist diese Option aktiviert, werden fallende Mauerstücke Geräusche " "verursachen." -#: src/cavedb.c:606 +#: src/cavedb.c:614 msgid "Controls if the living amoeba has sound or not." msgstr "Ist diese Option aktiviert, wird die Amöbe Geräusche verursachen." -#: src/cavedb.c:607 +#: src/cavedb.c:615 msgid "If true, the activated magic wall will have sound." msgstr "" "Ist diese Option aktiviert, wird die aktivierte Zaubermauer Geräusche " "verursachen." -#: src/cavedb.c:608 +#: src/cavedb.c:616 msgid "If true, the elements passing slime will have sound." msgstr "" "Ist diese Option aktiviert, werden Elemente, die durch den Schleim sickern, " "Geräusche verursachen." -#: src/cavedb.c:609 -#, fuzzy +#: src/cavedb.c:617 msgid "If true, the elements sinking in lava will have sound." msgstr "" -"Ist diese Option aktiviert, werden Elemente, die durch den Schleim sickern, " +"Ist diese Option aktiviert, werden Elemente, die in die Lava fallen, " "Geräusche verursachen." -#: src/cavedb.c:610 -#, fuzzy +#: src/cavedb.c:618 msgid "" "If true, the new element appearing under the replicator will make sound." msgstr "" -"Ist diese Option aktiviert, werden Elemente, die durch den Schleim sickern, " -"Geräusche verursachen." +"Ist diese Option aktiviert, wird das neue Elemente, das unter dem Replikator " +"erscheint, Geräusche verursachen." -#: src/cavedb.c:611 +#: src/cavedb.c:619 msgid "If true, the acid spreading will have sound." msgstr "" "Ist diese Option aktiviert, wird die sich ausbreitende Säure Geräusche " "verursachen." -#: src/cavedb.c:612 +#: src/cavedb.c:620 msgid "Biters eating something or pushing a stone will have sound." msgstr "" "Ist diese Option aktiviert, werden Beißer, die etwas verschlingen oder " "Felsbrocken verschieben, Geräusche verursachen." -#: src/cavedb.c:613 +#: src/cavedb.c:621 msgid "Bladders moving and being pushed can have sound." msgstr "" "Ist diese Option aktiviert, werden Blasen, die sich bewegen oder verschoben " "werden, Geräusche verursachen." -#: src/cavedb.c:614 +#: src/cavedb.c:622 msgid "If true, the cave containing water will have sound." msgstr "Ist diese Option aktiviert, wird das Wasser Geräusche verursachen." -#: src/cavedb.c:615 +#: src/cavedb.c:623 msgid "If true, using the pneumatic hammer will have sound." msgstr "" "Ist diese Option aktiviert, wird der Presslufthammer Geräusche verursachen." -#: src/cavedb.c:616 +#: src/cavedb.c:624 msgid "Bladder spender" msgstr "Blasenspender" -#: src/cavedb.c:616 +#: src/cavedb.c:624 msgid "If true, the bladder spender will make sound, when the bladder appears." msgstr "" "Ist diese Option aktiviert, wird der Blasenspender, sobald die Blase " "erscheint, Geräusche verursachen." -#: src/cavedb.c:617 +#: src/cavedb.c:625 msgid "Bladder convert" msgstr "Blasenumwandlung" -#: src/cavedb.c:617 +#: src/cavedb.c:625 msgid "If true, the bladder converting to a clock will make sound." msgstr "" "Ist diese Option aktiviert, wird die sich in eine Uhr umwandelnde Blase " "Geräusche verursachen." -#: src/cavedb.c:618 +#: src/cavedb.c:626 msgid "Event sounds" msgstr "Ereignis-Geräusche" -#: src/cavedb.c:619 +#: src/cavedb.c:627 msgid "Gravity change" msgstr "Gravitations-Änderung" -#: src/cavedb.c:619 +#: src/cavedb.c:627 msgid "If true, the gravity changing will make sound." msgstr "" "Ist diese Option aktiviert, wird die Änderung der Gravitation ein Geräusch " "verursachen." -#: src/cavedb.c:623 src/cavedb.c:624 +#: src/cavedb.c:628 +msgid "Creature direction change" +msgstr "Gegner-Richtungssänderung" + +#: src/cavedb.c:628 +msgid "" +"If this is set to true, creatures changing direction will be signaled by a " +"sound." +msgstr "" +"Ist diese Option aktiviert, werden Gegner-Richtungsänderungen durch ein " +"Geräusch signalisiert. " + +#: src/cavedb.c:631 msgid "Compatibility" msgstr "Kompatibilität" -#: src/cavedb.c:625 +#: src/cavedb.c:633 +msgid "Skeletons worth diamonds" +msgstr "Wert der Skelette in Diamanten" + +#: src/cavedb.c:633 +msgid "" +"The number of diamonds each skeleton is worth. Normally skeletons are used " +"for letting the player use the pot! They are not intended to be used as a " +"second kind of diamond." +msgstr "" +"Die Anzahl der Diamanten die jedes Skelett wert ist. Normalerweise werden " +"Skelette dazu benützt, damit der Spieler den Topf rühren kann! Sie sind " +"nicht dazu gedacht als eine zweite Art von Diamanten benützt zu werden." + +#: src/cavedb.c:634 +msgid "Borders" +msgstr "Ränder" + +#: src/cavedb.c:635 msgid "Line shifting border" msgstr "Versetzter Ein-/Austritt Rand" -#: src/cavedb.c:625 +#: src/cavedb.c:635 msgid "" "If this is set to true, the player exiting on either side will appear one " "row lower or upper on the other side." @@ -2368,11 +2570,11 @@ msgstr "" "höher oder tiefer. Im oberen und unteren Randbereich gibt es keinen " "versetzten Eintritt." -#: src/cavedb.c:626 +#: src/cavedb.c:636 msgid "Objects wrap around" msgstr "Objekte umschlingen Rand" -#: src/cavedb.c:626 +#: src/cavedb.c:636 msgid "" "If true, objects will wrap around the cave borders as well, ie. if you drag " "a line to the left, part of it will appear on the right hand side of the " @@ -2391,53 +2593,62 @@ msgstr "" "verschoben gezeichnet. Dieser Effekt wird allerdings nicht vom oberen und " "unteren Randbereich beeinflusst." -#: src/cavedb.c:627 +#: src/cavedb.c:637 msgid "Scan first and last row" msgstr "Die erste und letzte Reihe scannen" -#: src/cavedb.c:627 -msgid "Elements move on first and last row, too." +#: src/cavedb.c:637 +msgid "" +"Elements move on first and last row, too. Usually those rows are the border. " +"The games created by the original editor were not allowed to put anything " +"but steel wall there, so it was not apparent that the borders were not " +"processed by the engine. Some old caves need this for compatibility; it is " +"not recommended to change this setting for newly designed caves, though." msgstr "" -"Wird diese Option aktiviert, können sich die Elemente auch in der ersten und " -"letzten Reihe der Höhle bewegen." +"Elemente bewegen sich auch in der ersten und letzten Reihe. Normalerweise " +"sind diese Reihen der Rand der Höhle. Bei den Spielen, die vom " +"Originaleditor erzeugt wurden, war es nicht erlaubt, dort irgendetwas " +"anderes außer Titanmauern zu platzieren. Somit war es nicht offenkundig, daß " +"die Ränder nicht von der Engine verarbeitet wurden. Einige ältere Höhlen " +"benötigen dieses Verhalten aus Kompatibilitätsgründen. Es wird jedoch nicht " +"empfohlen, diese Einstellung für neue Höhlen zu ändern." -#: src/cavedb.c:628 +#: src/cavedb.c:638 +msgid "Other" +msgstr "Andere" + +#: src/cavedb.c:639 msgid "Short explosions" msgstr "Langsamere Explosionen" -#: src/cavedb.c:628 +#: src/cavedb.c:639 msgid "" -"In 1stB, explosions were longer, took five cave frames to complete, as " -"opposed to four in the original." +"In 1stB and newer engines, explosions were longer, they took five cave " +"frames to complete, as opposed to four frames in the original." msgstr "" -"Im Gegensatz zur Original-BD-Engine mit vier Einzelbilder für Explosionen, " -"verwendet die 1stB-Engine fünf Einzelbilder." - -#: src/cavedb.c:629 -msgid "Skeletons worth diamonds" -msgstr "Wert der Skelette in Diamanten" +"In 1stB und neueren Engines waren Explosionen länger - sie verwendeten im " +"Gegensatz zu den vier Animationsphasen des Originals fünf Animationsphasen." -#: src/cavedb.c:629 -msgid "The number of diamonds each skeleton is worth." -msgstr "Die Anzahl an Diamanten, welche jedes Skelett wert ist." - -#: src/cavedb.c:630 +#: src/cavedb.c:640 msgid "Gravity change affects everything" msgstr "Gravitationswechsel beeinflusst alles" -#: src/cavedb.c:630 +#: src/cavedb.c:640 msgid "" "If this is enabled, changing the gravity will also affect bladders (moving " "and pushing), bladder spenders, falling walls and waiting stones. Otherwise, " -"those elements behave as gravity was always pointing downwards." +"those elements behave as gravity was always pointing downwards. This is a " +"compatibility setting which is not recommended to change. It is intended for " +"imported caves." msgstr "" "Wird diese Option aktiviert, wird das Wechseln der Gravitation auch die " "Blasen (sich bewegende und schiebende), Blasen-Spender, fallende Mauerstücke " "und wartende verfolgende Mutanten-Felsbrocken beeinflussen. Ansonst " "verhalten sich diese Elemente genau so, als ob die Gravitation immer nach " -"unten wirken würde." +"unten wirken würde. Das ist eine Kompatibilitätseinstellung. Es wird nicht " +"empfohlen, diese zu ändern. Sie ist für importierte Höhlen gedacht." -#: src/cavedb.c:647 +#: src/cavedb.c:654 msgid "Replay" msgstr "Wiederholung" @@ -2452,11 +2663,11 @@ msgstr "Wiederholung" #. Set the translated string to "lowercase-element-names-yes", if your language #. allows writing nouns with lowercase initials. Set it to "lowercase-element-names-no", #. if not: for example, german. Do not translate the string, but set the behavior! -#: src/cavedb.c:902 +#: src/cavedb.c:920 msgid "lowercase-element-names-yes" msgstr "lowercase-element-names-no" -#: src/caveobject.c:29 src/help.c:165 +#: src/caveobject.c:29 src/help.c:174 msgid "Point" msgstr "Punkt" @@ -2474,7 +2685,7 @@ msgstr "Element" msgid "Draw" msgstr "Zeichne" -#: src/caveobject.c:30 src/help.c:167 +#: src/caveobject.c:30 src/help.c:176 msgid "Line" msgstr "Linie" @@ -2491,11 +2702,11 @@ msgstr "Start-Koordinaten" msgid "Ending coordinates" msgstr "End-Koordinaten" -#: src/caveobject.c:31 src/help.c:168 +#: src/caveobject.c:31 src/help.c:177 msgid "Outline" msgstr "Umriss" -#: src/caveobject.c:32 src/help.c:169 +#: src/caveobject.c:32 src/help.c:178 msgid "Rectangle" msgstr "Rechteck" @@ -2511,7 +2722,7 @@ msgstr "Füll-Element" msgid "Fill" msgstr "Fülle" -#: src/caveobject.c:33 src/help.c:170 +#: src/caveobject.c:33 src/help.c:179 msgid "Raster" msgstr "Raster" @@ -2519,7 +2730,7 @@ msgstr "Raster" msgid "Distance" msgstr "Entfernung" -#: src/caveobject.c:34 src/help.c:171 +#: src/caveobject.c:34 src/help.c:180 msgid "Join" msgstr "Verbinde" @@ -2543,7 +2754,7 @@ msgstr "Ersatz füllen" msgid "Replace" msgstr "Ersetze" -#: src/caveobject.c:36 src/help.c:172 +#: src/caveobject.c:36 src/help.c:181 msgid "Fill to border" msgstr "Fülle bis zum Rand" @@ -2551,7 +2762,7 @@ msgstr "Fülle bis zum Rand" msgid "Border" msgstr "Rand" -#: src/caveobject.c:37 src/help.c:176 +#: src/caveobject.c:37 src/help.c:185 msgid "Maze" msgstr "Irrgarten" @@ -2586,11 +2797,11 @@ msgstr "Pfad" msgid "Horizontal (%%)" msgstr "Horizontal (%%)" -#: src/caveobject.c:38 src/help.c:177 +#: src/caveobject.c:38 src/help.c:186 msgid "Unicursal maze" msgstr "Unikursaler Irrgarten" -#: src/caveobject.c:39 src/help.c:178 +#: src/caveobject.c:39 src/help.c:187 msgid "Braid maze" msgstr "Sackgassenloser Irrgarten" @@ -2614,7 +2825,7 @@ msgstr "Ursprünglich" msgid "C64 random numbers" msgstr "C64-artige Zufallszahlen" -#: src/caveobject.c:41 src/help.c:180 +#: src/caveobject.c:41 src/help.c:189 msgid "Copy and paste" msgstr "Kopieren und Einfügen" @@ -2739,26 +2950,24 @@ msgid "Long description of the game." msgstr "Ausführliche Beschreibung des Spiels." #: src/caveset.c:68 -#, fuzzy msgid "Remark (informative)." -msgstr "Anmerkung (informativ)" +msgstr "Anmerkung (informativ)." -#: src/caveset.c:70 src/help.c:221 -#, fuzzy +#: src/caveset.c:70 src/help.c:230 msgid "Title screen" -msgstr "Hellgrün" +msgstr "Titelbild" #: src/caveset.c:70 msgid "Title screen image" -msgstr "" +msgstr "Titelbild Bild" #: src/caveset.c:71 msgid "Title screen, scrolling" -msgstr "" +msgstr "Titelbild (scrollend)" #: src/caveset.c:71 msgid "Scrolling background for title screen image" -msgstr "" +msgstr "Scrollender Hintergrund für das Titelbild Bild" #: src/caveset.c:361 msgid "New caveset" @@ -2991,6 +3200,17 @@ msgstr "%s, %d Höhle" msgid "Level shown" msgstr "Angezeigter Level" +#: src/editor.c:1447 +msgid "" +"Random seed value controls the predictable random number generator, which " +"fills the cave initially. If set to -1, cave is totally random every time it " +"is played." +msgstr "" +"Der Wert der zufälligen Streuung kontrolliert den voraussagbaren zufälligen " +"Nummerngenerator, welcher die Höhlen anfänglich mit Objekten füllt. Wenn " +"dieser Wert auf -1 gesetzt wird, ist die Höhle jedesmal, wenn sie gespielt " +"wird, vollständig zufällig." + #: src/editor.c:1462 msgid "Initial border" msgstr "Anfänglicher Rand" @@ -3008,7 +3228,7 @@ msgstr "Zufällige Füllung %d" msgid "Object Properties" msgstr "Objekt-Eigenschaften" -#: src/editor.c:1621 src/editorexport.c:573 +#: src/editor.c:1621 src/editorexport.c:631 msgid "Type" msgstr "Art" @@ -3038,44 +3258,44 @@ msgstr "Das Objekt sollte zumindest in einem Level sichtbar sein." msgid "Enabled this object on all levels." msgstr "Schalte dieses Objekt in allen Levels ein." -#: src/editor.c:2634 +#: src/editor.c:2638 msgid "Cave Name" msgstr "Höhlen-Name" -#: src/editor.c:2726 +#: src/editor.c:2730 #, c-format msgid "%d caves selected" msgstr "%d Höhle ausgewählt" -#: src/editor.c:2950 +#: src/editor.c:2954 msgid "Cave Initial Random Fill" msgstr "Anfängliche zufällige Füllung der Höhle" -#: src/editor.c:2987 +#: src/editor.c:2991 msgid "Save Cave as PNG Image" msgstr "Speichere Höhle als PNG-Bild" -#: src/editor.c:2994 +#: src/editor.c:2998 msgid "PNG files" msgstr "PNG-Dateien" -#: src/editor.c:3070 +#: src/editor.c:3074 msgid "Cave Overview" msgstr "Höhlen-Karte" -#: src/editor.c:3071 +#: src/editor.c:3075 msgid "Save as _PNG" msgstr "Speichere als _PNG" -#: src/editor.c:3229 +#: src/editor.c:3233 msgid "Cave Colors" msgstr "Höhlen-Farben" -#: src/editor.c:3262 +#: src/editor.c:3266 msgid "Set random..." msgstr "Zufällig verwenden von..." -#: src/editor.c:3269 +#: src/editor.c:3273 msgid "" "Hint: As the palette can be changed for C64 and Atari colors, it is not " "recommended to use different types together (for example, RGB color for " @@ -3085,15 +3305,15 @@ msgstr "" "es nicht empfohlen, verschiedene Typen zusammen zu verwenden (z. B. RGB-" "Farben für den Hintergrund, Atari-Farben für den Schleim.)." -#: src/editor.c:3314 +#: src/editor.c:3318 msgid "Do you really want to delete cave(s)?" msgstr "Wollen Sie die Höhle(n) wirklich löschen?" -#: src/editor.c:3314 +#: src/editor.c:3318 msgid "This operation cannot be undone." msgstr "Dieser Befehl zerstört alle Höhlen-Objekte." -#: src/editor.c:3487 +#: src/editor.c:3491 msgid "" "At least one object would have been totally hidden (not visible on any of " "the levels)." @@ -3101,31 +3321,31 @@ msgstr "" "Zumindest eine Objekt wäre vollständig versteckt gewesen (in keinem der " "Levels sichtbar)." -#: src/editor.c:3487 +#: src/editor.c:3491 msgid "Enabled those objects on the current level." msgstr "Schalte dieses Objekt in allen Levels ein." -#: src/editor.c:3677 +#: src/editor.c:3681 msgid "Do you really want to clear cave objects?" msgstr "Wollen Sie wirklich alle Höhlen-Objekte löschen?" -#: src/editor.c:3698 +#: src/editor.c:3702 msgid "Do you really want to remove cave map?" msgstr "Wollen Sie wirklich die Höhlen-Karte löschen?" -#: src/editor.c:3698 +#: src/editor.c:3702 msgid "This operation destroys all cave objects." msgstr "Dieser Befehl zerstört alle Höhlen-Objekte." -#: src/editor.c:3719 +#: src/editor.c:3723 msgid "This cave has no objects." msgstr "Diese Höhle hat keine Objekte." -#: src/editor.c:3723 +#: src/editor.c:3727 msgid "Do you really want to flatten cave?" msgstr "Wollen Sie wirklich die Höhle zur Karte konvertieren?" -#: src/editor.c:3723 +#: src/editor.c:3727 msgid "" "This operation merges all cave objects currently seen in a single map. " "Further objects may later be added, but the ones already seen will behave " @@ -3136,43 +3356,43 @@ msgstr "" "bereits sichtbaren Objekte werden sich allerdings wie die zufällig gefüllten " "Elemente verhalten; sie werden nicht editierbar sein." -#: src/editor.c:3856 +#: src/editor.c:3860 msgid "Save Cave Set in HTML" msgstr "Speichere Höhlensatz als HTML" -#: src/editor.c:3864 +#: src/editor.c:3868 msgid "HTML files" msgstr "HTML-Dateien" -#: src/editor.c:3900 +#: src/editor.c:3904 msgid "Export Cave as CrLi Cave File" msgstr "Exportiere Höhle als CrLi-Höhlen-Datei" -#: src/editor.c:3939 +#: src/editor.c:3943 msgid "Export Cave as CrLi Cave Pack" msgstr "Exportiere Höhle als CrLi-Höhlen-Pack" -#: src/editor.c:4050 +#: src/editor.c:4054 msgid "Create New Cave" msgstr "Neue Höhle erzeugen" -#: src/editor.c:4061 src/gtkmain.c:1439 +#: src/editor.c:4065 src/gtkmain.c:1442 msgid "Name:" msgstr "Name:" -#: src/editor.c:4067 +#: src/editor.c:4071 msgid "New cave" msgstr "Neue Höhle" -#: src/editor.c:4071 +#: src/editor.c:4075 msgid "Description:" msgstr "Beschreibung:" -#: src/editor.c:4080 +#: src/editor.c:4084 msgid "Intermission:" msgstr "Zwischenspiel:" -#: src/editor.c:4082 +#: src/editor.c:4086 msgid "" "Intermission caves are usually small and fast caves, which are not required " "to be solved. The player will not lose a life if he is not successful. The " @@ -3187,11 +3407,11 @@ msgstr "" "aktiviert, wird auch die Größe der Höhle auf 20 x 12 Felder eingestellt, da " "dies die Standardgröße für Zwischenspiel-Höhlen ist." -#: src/editor.c:4210 +#: src/editor.c:4214 msgid "Do you really want to remove unknown cave tags?" msgstr "Wollen Sie wirklich alle unbekannten Höhlen-Markierungen löschen?" -#: src/editor.c:4210 +#: src/editor.c:4214 msgid "" "This operation removes all unknown tags associated with all caves. Unknown " "tags might come from another BDCFF-compatible game or an older version of " @@ -3205,518 +3425,521 @@ msgstr "" "daher ohne Funktion, wenn Sie diesen Höhlen-Satz in diesem Programm " "verwenden." -#: src/editor.c:4327 src/editor.c:4338 +#: src/editor.c:4331 src/editor.c:4342 #, c-format msgid "%s Element" msgstr "%s Element" -#: src/editor.c:4331 src/editor.c:4348 +#: src/editor.c:4335 src/editor.c:4352 msgid "Draw Element" msgstr "Zeichen-Element" -#: src/editor.c:4342 src/editor.c:4352 +#: src/editor.c:4346 src/editor.c:4356 msgid "Fill Element" msgstr "Füll-Element" -#: src/editor.c:4430 +#: src/editor.c:4434 #, c-format msgid "%s: removed %d replay(s)\n" -msgstr "" +msgstr "%s: entfernte %d Wiederholung(en)\n" -#: src/editor.c:4436 +#: src/editor.c:4440 msgid "Some replays were removed." -msgstr "" +msgstr "Einige Wiederholungen wurden entfernt." -#: src/editor.c:4466 +#: src/editor.c:4470 #, c-format msgid "%s: marked %d replay(s) as working ones\n" -msgstr "" +msgstr "%s: markierte %d Wiederholung(en) als funktionierende\n" -#: src/editor.c:4472 +#: src/editor.c:4476 msgid "" "Some replay checksums were recalculated. This does not mean that those " "replays actually play correctly!" msgstr "" +"Einige Wiederholungs-Prüfsummen wurden neu berechnet. Das bedeutet aber " +"nicht, daß diese Wiederholungen auch wirklich korrekt abgespielt werden!" -#: src/editor.c:4528 src/editor.c:4545 -#, fuzzy +#: src/editor.c:4532 src/editor.c:4549 msgid "Error loading image file." -msgstr "Fehler während des Ladens des Höhlensatzes von der Datei '%s'" +msgstr "Fehler während des Ladens der Bilddatei." -#: src/editor.c:4528 +#: src/editor.c:4532 msgid "Cannot recognize file format." -msgstr "" +msgstr "Das Dateiformat konnte nicht erkannt werden." -#: src/editor.c:4535 +#: src/editor.c:4539 #, c-format msgid "Maximum sizes: %dx%d pixels" -msgstr "" +msgstr "Maximale Größe: %dx%d Pixel" -#: src/editor.c:4536 +#: src/editor.c:4540 msgid "The image selected is too big!" -msgstr "" +msgstr "Das ausgewählte Bild ist zu groß!" -#: src/editor.c:4570 +#: src/editor.c:4574 msgid "Select Image File for Title Screen" -msgstr "" +msgstr "Bilddatei für Titelbild auswählen" -#: src/editor.c:4577 +#: src/editor.c:4581 msgid "Select Image File for Background Tile" -msgstr "" +msgstr "Bilddatei für Hintergrundkachel auswählen" -#: src/editor.c:4591 +#: src/editor.c:4595 msgid "Set Title Image" -msgstr "" +msgstr "Titelbild einstellen" -#: src/editor.c:4607 -#, fuzzy +#: src/editor.c:4611 msgid "Load _image" -msgstr "Geladenes Spiel:" +msgstr "Lade _Bild" -#: src/editor.c:4608 -#, fuzzy +#: src/editor.c:4612 msgid "Load _tile" -msgstr "Geladenes Spiel:" +msgstr "Lade _Titel" -#: src/editor.c:4614 +#: src/editor.c:4618 #, c-format msgid "" "Recommended image sizes are 320x176 pixels for title image and 8x8 pixels " "for the scrolling tile. Maximum sizes are %dx%d and %dx%d, respectively." msgstr "" +"Empfohlene Bildgrößen sind 320x176 Pixel für Titelbilder und 8x8 Pixel für " +"die scrollende Kachel. Die maximalen Größen sind %dx%d und %dx%d." -#: src/editor.c:4645 src/gtkmain.c:1922 +#: src/editor.c:4649 src/gtkmain.c:1926 msgid "_File" msgstr "_Datei" -#: src/editor.c:4646 +#: src/editor.c:4650 msgid "_Cave" msgstr "_Höhle" -#: src/editor.c:4647 +#: src/editor.c:4651 msgid "_Edit" msgstr "_Bearbeiten" -#: src/editor.c:4648 +#: src/editor.c:4652 msgid "_View" msgstr "_Anzeige" -#: src/editor.c:4649 +#: src/editor.c:4653 msgid "_Tools" msgstr "_Werkzeuge" -#: src/editor.c:4650 src/gtkmain.c:1924 +#: src/editor.c:4654 src/gtkmain.c:1928 msgid "_Help" msgstr "_Hilfe" -#: src/editor.c:4651 +#: src/editor.c:4655 msgid "Close cave editor" msgstr "Höhlen-Editor schließen" -#: src/editor.c:4652 +#: src/editor.c:4656 msgid "New _cave" msgstr "Neue _Höhle" -#: src/editor.c:4652 +#: src/editor.c:4656 msgid "Create new cave" msgstr "Neue Höhle erzeugen" -#: src/editor.c:4654 +#: src/editor.c:4658 msgid "Save cave set to file" msgstr "Speichere Höhlensatz in die Datei" -#: src/editor.c:4655 +#: src/editor.c:4659 msgid "Save cave set as new file" msgstr "Speichere Höhlensatz as neue Datei" -#: src/editor.c:4656 +#: src/editor.c:4660 msgid "Load cave set from file" msgstr "Lade Höhlensatz von der Datei" -#: src/editor.c:4657 src/gtkmain.c:1940 +#: src/editor.c:4661 src/gtkmain.c:1944 msgid "O_pen shipped" msgstr "_Öffne mitgelieferte Spiele" -#: src/editor.c:4657 +#: src/editor.c:4661 msgid "Load shipped cave set from file" msgstr "Lade mitgelieferten Höhlensatz von der Datei" -#: src/editor.c:4658 src/gtkmain.c:1943 +#: src/editor.c:4662 src/gtkmain.c:1947 msgid "Hi_ghscores" msgstr "Hi_ghscores" -#: src/editor.c:4659 +#: src/editor.c:4663 msgid "Select all items" msgstr "Alle Objekte auswählen" -#: src/editor.c:4660 +#: src/editor.c:4664 msgid "Cave set _properties" msgstr "Höhlensatz-_Eigenschaften" -#: src/editor.c:4660 +#: src/editor.c:4664 msgid "Set properties of cave set" msgstr "Eigenschaften des Höhlensatzes einstellen" -#: src/editor.c:4661 -#, fuzzy +#: src/editor.c:4665 msgid "Cave set _title image" -msgstr "Höhlen-Einstellungen" +msgstr "Höhlensatz _Titelbild" -#: src/editor.c:4661 -#, fuzzy +#: src/editor.c:4665 msgid "Set caveset title image" -msgstr "Speichere Höhlensatz in die Datei" +msgstr "Höhlensatz Titelbild einstellen" -#: src/editor.c:4666 +#: src/editor.c:4670 msgid "_Edit cave" msgstr "_Höhle bearbeiten" -#: src/editor.c:4666 +#: src/editor.c:4670 msgid "Edit selected cave" msgstr "Ausgewählte Höhle editieren" -#: src/editor.c:4667 +#: src/editor.c:4671 msgid "_Rename cave" msgstr "Höhle _umbenennen" -#: src/editor.c:4667 +#: src/editor.c:4671 msgid "Rename selected cave" msgstr "Ausgewählte Höhle umbenennen" -#: src/editor.c:4668 +#: src/editor.c:4672 msgid "Make cave _selectable" msgstr "Höhle als _auswählbar markieren" -#: src/editor.c:4668 +#: src/editor.c:4672 msgid "Make the cave selectable as game start" msgstr "Die Höhle zum Spielstart auswählbar machen" -#: src/editor.c:4669 +#: src/editor.c:4673 msgid "Make cave _unselectable" msgstr "Höhle als _nicht auswählbar markieren" -#: src/editor.c:4669 +#: src/editor.c:4673 msgid "Make the cave unselectable as game start" msgstr "Die Höhle zum Spielstart nicht auswählbar machen" -#: src/editor.c:4674 +#: src/editor.c:4678 msgid "_New cave set" msgstr "_Neuer Höhlensatz" -#: src/editor.c:4674 +#: src/editor.c:4678 msgid "Create new cave set with no caves" msgstr "Einen neuen Höhlensatz ohne Höhlen erstellen" -#: src/editor.c:4675 +#: src/editor.c:4679 msgid "Save _HTML gallery" msgstr "Speichere als _HTML-Galerie" -#: src/editor.c:4675 +#: src/editor.c:4679 msgid "Save game in a HTML gallery" msgstr "Speichere das Spiel in eine HTML-Galerie" -#: src/editor.c:4676 +#: src/editor.c:4680 msgid "Export _CrLi cave pack" msgstr "Exportiere _CrLi-Höhlen-Pack" -#: src/editor.c:4677 +#: src/editor.c:4681 msgid "_Make caves selectable" msgstr "Höhlen als auswählbar _markieren" -#: src/editor.c:4678 +#: src/editor.c:4682 msgid "All _caves" msgstr "Alle _Höhlen" -#: src/editor.c:4678 +#: src/editor.c:4682 msgid "Make all caves selectable as game start" msgstr "Alle Höhlen zum Spielstart als auswählbar markieren" -#: src/editor.c:4679 +#: src/editor.c:4683 msgid "All _but intermissions" msgstr "Alle _außer den Zwischenspielen" -#: src/editor.c:4679 +#: src/editor.c:4683 msgid "Make all caves but intermissions selectable as game start" msgstr "Alle Höhlen außer den Zwischenspielen zum Spielstart auswählbar machen" -#: src/editor.c:4680 +#: src/editor.c:4684 msgid "All _after intermissions" msgstr "Alle _nach Zwischenspielen" -#: src/editor.c:4680 +#: src/editor.c:4684 msgid "Make all caves after intermissions selectable as game start" msgstr "Alle Höhlen nach Zwischenspielen zum Spielstart auswählbar machen" -#: src/editor.c:4681 +#: src/editor.c:4685 msgid "Remove all unknown tags" msgstr "Alle unbekannten Markierungen entfernen" -#: src/editor.c:4681 +#: src/editor.c:4685 msgid "Removes all unknown tags found in the BDCFF file" msgstr "Entfernt alle unbekannten Markierungen in der BDCFF-Datei" -#: src/editor.c:4682 +#: src/editor.c:4686 msgid "Remove bad replays" -msgstr "" +msgstr "Ungültige Wiederholungen entfernen" -#: src/editor.c:4682 +#: src/editor.c:4686 msgid "Removes replays which won't play as they have their caves modified." msgstr "" +"Entfernt Wiederholungen, die nicht abgespielt werden können, da die " +"dazugehörigen Höhlen verändert wurden." -#: src/editor.c:4683 +#: src/editor.c:4687 msgid "Fix replay checksums" -msgstr "" +msgstr "Wiederholungen-Prüfsummen reparieren" -#: src/editor.c:4683 +#: src/editor.c:4687 msgid "Treats all replays with wrong checksums as working ones." msgstr "" +"Behandelt alle Wiederholungen mit falscher Prüfsumme wie funktionierende " +"Wiederholungen." -#: src/editor.c:4688 +#: src/editor.c:4692 msgid "_Export as CrLi cave file" msgstr "E_xportiere als CrLi-Höhlen-Datei" -#: src/editor.c:4689 +#: src/editor.c:4693 msgid "Open cave selector" msgstr "Öffne Höhlen-Auswahl" -#: src/editor.c:4690 +#: src/editor.c:4694 msgid "_Next cave" msgstr "N_ächste Höhle" -#: src/editor.c:4690 +#: src/editor.c:4694 msgid "Next cave" msgstr "Nächste Höhle" -#: src/editor.c:4691 +#: src/editor.c:4695 msgid "_Previous cave" msgstr "_Vorherige Höhle" -#: src/editor.c:4691 +#: src/editor.c:4695 msgid "Previous cave" msgstr "Vorherige Höhle" -#: src/editor.c:4692 +#: src/editor.c:4696 msgid "_Test" msgstr "_Test" -#: src/editor.c:4692 src/help.c:230 +#: src/editor.c:4696 src/help.c:239 msgid "Test cave" msgstr "Teste Höhle" -#: src/editor.c:4693 +#: src/editor.c:4697 msgid "Ca_ve properties" msgstr "_Höhlen-Eigenschaften" -#: src/editor.c:4693 +#: src/editor.c:4697 msgid "Cave settings" msgstr "Höhlen-Einstellungen" -#: src/editor.c:4694 +#: src/editor.c:4698 msgid "Set engine defaults" msgstr "Engine Standardwerte einstellen" -#: src/editor.c:4695 +#: src/editor.c:4699 msgid "Cave co_lors" msgstr "Höhlen-F_arben" -#: src/editor.c:4695 +#: src/editor.c:4699 msgid "Select cave colors" msgstr "Wähle Höhlen-Farben aus" -#: src/editor.c:4696 +#: src/editor.c:4700 msgid "Remove objects" msgstr "Objekte entfernen" -#: src/editor.c:4696 +#: src/editor.c:4700 msgid "Clear cave objects" msgstr "Höhlen-Objekte löschen" -#: src/editor.c:4697 +#: src/editor.c:4701 msgid "Convert to map" msgstr "Zur Karte konvertieren" -#: src/editor.c:4697 +#: src/editor.c:4701 msgid "Flatten cave to a single cave map without objects" msgstr "Höhle zu einer einzigen Höhlen-Karte ohne Objekte ebnen" -#: src/editor.c:4698 +#: src/editor.c:4702 msgid "O_verview" msgstr "_Vorschau" -#: src/editor.c:4698 +#: src/editor.c:4702 msgid "Full screen overview of cave" msgstr "Vollbild-Karte der Höhle" -#: src/editor.c:4699 +#: src/editor.c:4703 msgid "O_verview (simple)" msgstr "V_orschau (nahezu wie im Spiel)" -#: src/editor.c:4699 +#: src/editor.c:4703 msgid "Full screen overview of cave almost as in game" msgstr "Vollbild-Karte der Höhle, wie sie annähernd im Spiel erscheint" -#: src/editor.c:4700 +#: src/editor.c:4704 msgid "_Auto shrink" msgstr "_Automatische Anpassung" -#: src/editor.c:4700 +#: src/editor.c:4704 msgid "Automatically set the visible region of the cave" msgstr "Den sichtbaren Bereich der Höhle automatisch einstellen" -#: src/editor.c:4705 +#: src/editor.c:4709 msgid "To _bottom" msgstr "Nach _unten" -#: src/editor.c:4705 +#: src/editor.c:4709 msgid "Push object to bottom" msgstr "Verschiebe Objekt nach unten" -#: src/editor.c:4706 +#: src/editor.c:4710 msgid "To t_op" msgstr "Nach _oben" -#: src/editor.c:4706 +#: src/editor.c:4710 msgid "Bring object to top" msgstr "Verschiebe Objekt nach oben" -#: src/editor.c:4707 +#: src/editor.c:4711 msgid "Show on this level" msgstr "In diesem Level anzeigen" -#: src/editor.c:4707 +#: src/editor.c:4711 msgid "Enable object on currently visible level" msgstr "Schaltet dieses Objekt im momentan ausgewählten Level ein." -#: src/editor.c:4708 +#: src/editor.c:4712 msgid "Hide on this level" msgstr "In diesem Level ausblenden" -#: src/editor.c:4708 +#: src/editor.c:4712 msgid "Disable object on currently visible level" msgstr "Schaltet dieses Objekt im momentan ausgewählten Level aus." -#: src/editor.c:4709 +#: src/editor.c:4713 msgid "Only on this level" msgstr "Nur in diesem Level" -#: src/editor.c:4709 +#: src/editor.c:4713 msgid "Enable object only on the currently visible level" msgstr "Schaltet dieses Objekt nur im momentan ausgewählten Level ein." -#: src/editor.c:4710 +#: src/editor.c:4714 msgid "Show on all levels" msgstr "In allen Levels anzeigen" -#: src/editor.c:4710 +#: src/editor.c:4714 msgid "Enable object on all levels" msgstr "Schaltet dieses Objekt in allen Levels ein." -#: src/editor.c:4714 +#: src/editor.c:4718 msgid "Ob_ject properties" msgstr "Ob_jekt-Eigenschaften" -#: src/editor.c:4714 +#: src/editor.c:4718 msgid "Set object properties" msgstr "Objekt-Eigenschaften einstellen" -#: src/editor.c:4719 +#: src/editor.c:4723 msgid "Map" msgstr "Karte" -#: src/editor.c:4720 +#: src/editor.c:4724 msgid "Shift _left" msgstr "Nach _links verschieben" -#: src/editor.c:4721 +#: src/editor.c:4725 msgid "Shift _right" msgstr "Nach _rechts verschieben" -#: src/editor.c:4722 +#: src/editor.c:4726 msgid "Shift _up" msgstr "Nach _oben verschieben" -#: src/editor.c:4723 +#: src/editor.c:4727 msgid "Shift _down" msgstr "Nach _unten verschieben" -#: src/editor.c:4724 +#: src/editor.c:4728 msgid "Remove m_ap" msgstr "K_arte entfernen" -#: src/editor.c:4724 +#: src/editor.c:4728 msgid "Remove cave map, if it has one" msgstr "Lösche Höhlen-Karte, falls eine vorhanden ist" -#: src/editor.c:4729 +#: src/editor.c:4733 msgid "Setup cave _random fill" msgstr "_Zufällige Füllung der Höhle einstellen" -#: src/editor.c:4729 +#: src/editor.c:4733 msgid "Setup initial fill random elements for the cave" msgstr "Anfängliche Füllung der zufälligen Elemente für die Höhle einstellen" -#: src/editor.c:4734 +#: src/editor.c:4738 msgid "Cut to clipboard" msgstr "Objekt in die Zwischenablage ausschneiden" -#: src/editor.c:4735 +#: src/editor.c:4739 msgid "Copy to clipboard" msgstr "Objekt in die Zwischenablage kopieren" -#: src/editor.c:4736 +#: src/editor.c:4740 msgid "Delete" msgstr "Löschen" -#: src/editor.c:4741 +#: src/editor.c:4745 msgid "Paste object from clipboard" msgstr "Objekt aus der Zwischenablage einfügen" -#: src/editor.c:4746 +#: src/editor.c:4750 msgid "Undo last action" msgstr "Letzte Aktion rückgängig machen" -#: src/editor.c:4751 +#: src/editor.c:4755 msgid "Redo last action" msgstr "Letzte Aktion wiederherstellen" -#: src/editor.c:4759 +#: src/editor.c:4763 msgid "_Animated view" msgstr "_Animierte Ansicht" -#: src/editor.c:4759 +#: src/editor.c:4763 msgid "Animated view" msgstr "Animierte Ansicht" -#: src/editor.c:4760 +#: src/editor.c:4764 msgid "_Colored objects" msgstr "_Eingefärbte Objekte" -#: src/editor.c:4760 +#: src/editor.c:4764 msgid "Cave objects are colored" msgstr "Die Objekte der Höhle sind eingefärbt" -#: src/editor.c:4761 +#: src/editor.c:4765 msgid "_Object list" msgstr "_Objekt-Liste" -#: src/editor.c:4761 +#: src/editor.c:4765 msgid "Object list sidebar" msgstr "Objekt-Liste Seitenleiste" -#: src/editor.c:4762 +#: src/editor.c:4766 msgid "_Show variables in test" msgstr "_Zeige Variablen während des Tests" -#: src/editor.c:4762 +#: src/editor.c:4766 msgid "Show a label during tests with some cave parameters" msgstr "" "Zeige eine kurze Übersicht mit einigen Höhlen-Parametern während der Tests" -#: src/editor.c:5096 +#: src/editor.c:5100 msgid "Level shown:" msgstr "Angezeigter Level:" -#: src/editor.c:5100 +#: src/editor.c:5104 msgid "" "Element used to draw points, lines, and rectangles. You can use middle-click " "to pick one from the cave." @@ -3725,7 +3948,7 @@ msgstr "" "Rechtecken verwendet. Mit der mittleren Maustaste lässt sich ein Element aus " "der aktuellen Höhle auswählen." -#: src/editor.c:5105 +#: src/editor.c:5109 msgid "" "Element used to fill rectangles, and second element of joins. You can use " "Ctrl + middle-click to pick one from the cave." @@ -3734,61 +3957,35 @@ msgstr "" "eine Verbindung verwendet. Mit CTRL + mittlere Maustaste lässt sich ein " "Element aus der aktuellen Höhle auswählen." -#: src/editor.c:5142 +#: src/editor.c:5146 msgid "_Objects" msgstr "_Objekte" -#: src/editorexport.c:462 +#: src/editorexport.c:472 msgid "Saving HTML gallery" msgstr "Speichere als HTML-Galerie" -#: src/editorexport.c:484 -#, c-format -msgid "Caves: %d
\n" -msgstr "Höhlen: %d
\n" - -#: src/editorexport.c:486 -#, c-format -msgid "Author: %s
\n" -msgstr "Author: %s
\n" - -#: src/editorexport.c:488 -#, c-format -msgid "Description: %s
\n" -msgstr "Beschreibung: %s
\n" - -#: src/editorexport.c:490 -#, c-format -msgid "WWW: %s
\n" -msgstr "WWW: %s
\n" - -#: src/editorexport.c:492 -#, c-format -msgid "Remark: %s
\n" -msgstr "Anmerkung: %s
\n" - -#: src/editorexport.c:494 -#, fuzzy, c-format -msgid "Story:
%s
\n" -msgstr "Notizen:
%s
\n" +#: src/editorexport.c:524 src/help.c:41 +msgid "Caves" +msgstr "Höhlen" -#: src/editorexport.c:573 src/gtkmain.c:1801 +#: src/editorexport.c:631 src/gtkmain.c:1805 msgid "Normal cave" msgstr "Normale Höhle" -#: src/editorexport.c:576 +#: src/editorexport.c:634 msgid "Diamond value" msgstr "Diamanten-Wert" -#: src/editorexport.c:577 +#: src/editorexport.c:635 msgid "Extra diamond value" msgstr "Extra-Diamanten-Wert" -#: src/editorexport.c:580 +#: src/editorexport.c:638 msgid "Amoeba threshold and time (s)" msgstr "Amöbe Ansprechwert und Zeit (s)" -#: src/editorexport.c:582 +#: src/editorexport.c:640 msgid "Magic wall milling time (s)" msgstr "Zaubermauerzeit (s)" @@ -3833,12 +4030,12 @@ msgid "Elements" msgstr "Elemente" #. TRANSLATORS: cave name, level x -#: src/gtkmain.c:511 +#: src/gtkmain.c:512 #, c-format msgid "%s, level %d" msgstr "%s, Level %d" -#: src/gtkmain.c:549 +#: src/gtkmain.c:551 #, c-format msgid "" "%s\n" @@ -3847,131 +4044,140 @@ msgid "" "\n" "Press fire to continue" msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Drücken Sie den Feuerknopf um fortzufahren" -#: src/gtkmain.c:589 +#: src/gtkmain.c:592 #, c-format msgid "You have %d points, and achieved a highscore." msgstr "Sie haben %d Punkte und einen Highscore-Eintrag erreicht!" -#: src/gtkmain.c:590 src/gtkmain.c:606 +#: src/gtkmain.c:593 src/gtkmain.c:609 msgid "Game over!" msgstr "Game Over!" -#: src/gtkmain.c:605 +#: src/gtkmain.c:608 #, c-format msgid "You have %d points." msgstr "Sie haben %d Punkte." -#: src/gtkmain.c:627 +#: src/gtkmain.c:630 #, c-format msgid "Lives: %d" msgstr "Leben: %d" -#: src/gtkmain.c:629 +#: src/gtkmain.c:632 msgid "Bonus life" msgstr "Bonus-Leben" -#: src/gtkmain.c:634 +#: src/gtkmain.c:637 msgid "Continuing from snapshot" msgstr "Fortsetzen von Schnappschuß" -#: src/gtkmain.c:637 +#: src/gtkmain.c:640 msgid "Testing cave" msgstr "Teste Höhle" -#: src/gtkmain.c:640 +#: src/gtkmain.c:643 msgid "Playing replay" msgstr "Spiele Wiederholung" -#: src/gtkmain.c:643 +#: src/gtkmain.c:646 msgid "Continuing replay" msgstr "Fortsetzen von Wiederholung" -#: src/gtkmain.c:654 +#: src/gtkmain.c:657 #, c-format msgid "Diamonds: %03d Value: %02d" msgstr "Diamanten: %3d Wert: %02d" -#: src/gtkmain.c:656 +#: src/gtkmain.c:659 #, c-format msgid "Diamonds: ??? Value: %02d" msgstr "Diamanten: ??? Wert: %02d" -#: src/gtkmain.c:666 +#: src/gtkmain.c:669 #, c-format msgid "Keys: %d, %d, %d" msgstr "Schlüsseln: %d, %d, %d" -#: src/gtkmain.c:667 +#: src/gtkmain.c:670 #, c-format msgid "Skeletons: %d Gravity change: %d" msgstr "Skelette: %d Gravitationswechsel: %d" -#: src/gtkmain.c:672 +#: src/gtkmain.c:675 #, c-format msgid "" "Speed: %dms, Amoeba timer: %ds %d, %ds %d, Magic wall timer: %ds\n" "Expanding wall: %s, Creatures: %ds, %s, Gravity: %s\n" -"Kill player: %s, Sweet eaten: %s, Diamond key: %s" +"Kill player: %s, Sweet eaten: %s, Diamond key: %s, Diamonds: %d" msgstr "" +"Geschwindigkeit: %dms, Amöben-Timer: %ds %d, %ds %d, Zaubermauer-Timer: %ds\n" +"Wachsmauer: %s, Gegner: %ds, %s, Gravitation: %s\n" +"Spieler zerstören: %s, Eingesammelte Bonbons: %s, Diamanten-Schlüssel: %s, " +"Diamanten: %d" -#: src/gtkmain.c:682 +#: src/gtkmain.c:685 msgid "vertical" -msgstr "" +msgstr "Vertikal" -#: src/gtkmain.c:682 +#: src/gtkmain.c:685 msgid "horizontal" msgstr "Horizontal" -#: src/gtkmain.c:684 +#: src/gtkmain.c:687 msgid "backwards" msgstr "rückwärts" -#: src/gtkmain.c:684 +#: src/gtkmain.c:687 msgid "forwards" msgstr "vorwärts" -#: src/gtkmain.c:686 src/gtkmain.c:687 src/gtkmain.c:688 +#: src/gtkmain.c:689 src/gtkmain.c:690 src/gtkmain.c:691 msgid "yes" msgstr "ja" -#: src/gtkmain.c:686 src/gtkmain.c:687 src/gtkmain.c:688 +#: src/gtkmain.c:689 src/gtkmain.c:690 src/gtkmain.c:691 msgid "no" msgstr "nein" -#: src/gtkmain.c:1291 +#: src/gtkmain.c:1294 msgid "GDash cannot load file from a network link." msgstr "GDash kann keine Dateien aus einer Netzwerkverbindung laden." -#: src/gtkmain.c:1310 +#: src/gtkmain.c:1313 msgid "Loaded caveset from file:" msgstr "Geladener Höhlensatz von Datei:" -#: src/gtkmain.c:1424 +#: src/gtkmain.c:1427 msgid "There are no caves in this cave set!" msgstr "Es befinden sich keine Höhlen in diesem Höhlensatz!" -#: src/gtkmain.c:1428 +#: src/gtkmain.c:1431 msgid "Select cave to play" msgstr "Wähle die zu spielende Höhle" -#: src/gtkmain.c:1450 +#: src/gtkmain.c:1453 msgid "Cave:" msgstr "Höhle:" -#: src/gtkmain.c:1471 +#: src/gtkmain.c:1474 msgid "Level:" msgstr "Level:" -#: src/gtkmain.c:1482 +#: src/gtkmain.c:1486 msgid "Preview" msgstr "Vorschau" -#: src/gtkmain.c:1641 src/help.c:126 +#: src/gtkmain.c:1645 src/help.c:135 msgid "Replays" msgstr "Wiederholungen" -#: src/gtkmain.c:1646 +#: src/gtkmain.c:1650 msgid "" "Hint: When watching a replay, you can use the usual movement keys (left, " "right...) to stop the replay and immediately continue the playing of the " @@ -3982,260 +4188,274 @@ msgstr "" "diesem Moment selbst die Höhle weiterspielen." #. TRANSLATORS: "Lvl" here stands for Level. Some shorthand should be used. -#: src/gtkmain.c:1699 +#: src/gtkmain.c:1703 msgid "Lvl" msgstr "Lvl" -#: src/gtkmain.c:1710 src/gtkui.c:1001 +#: src/gtkmain.c:1714 src/gtkui.c:1003 msgid "Score" msgstr "Punkte" -#: src/gtkmain.c:1715 +#: src/gtkmain.c:1719 msgid "Comment" msgstr "Kommentar" -#: src/gtkmain.c:1722 +#: src/gtkmain.c:1726 msgid "Saved" msgstr "Gespeichert" -#: src/gtkmain.c:1763 src/gtkmain.c:1806 +#: src/gtkmain.c:1767 src/gtkmain.c:1810 msgid "Description: " msgstr "Beschreibung: " -#: src/gtkmain.c:1768 src/gtkmain.c:1811 +#: src/gtkmain.c:1772 src/gtkmain.c:1815 msgid "Author: " msgstr "Author: " -#: src/gtkmain.c:1773 src/gtkmain.c:1816 +#: src/gtkmain.c:1777 src/gtkmain.c:1820 msgid "Date: " msgstr "Datum: " -#: src/gtkmain.c:1778 +#: src/gtkmain.c:1782 msgid "Diffuculty: " msgstr "Schwierigkeitsgrad: " -#: src/gtkmain.c:1783 src/gtkmain.c:1827 +#: src/gtkmain.c:1787 src/gtkmain.c:1831 msgid "Story:\n" -msgstr "" +msgstr "Geschichte:\n" -#: src/gtkmain.c:1788 src/gtkmain.c:1832 -#, fuzzy +#: src/gtkmain.c:1792 src/gtkmain.c:1836 msgid "Remark:\n" -msgstr "Anmerkung: " +msgstr "Anmerkung:\n" -#: src/gtkmain.c:1800 +#: src/gtkmain.c:1804 msgid "Type: " msgstr "Art: " -#: src/gtkmain.c:1821 +#: src/gtkmain.c:1825 msgid "Difficulty: " msgstr "Schwierigkeitsgrad: " -#: src/gtkmain.c:1852 +#: src/gtkmain.c:1856 msgid "Caveset information" msgstr "Höhlensatz-Information" -#: src/gtkmain.c:1921 +#: src/gtkmain.c:1925 msgid "_Play" msgstr "_Spiel" -#: src/gtkmain.c:1923 +#: src/gtkmain.c:1927 msgid "_Settings" msgstr "_Einstellungen" -#: src/gtkmain.c:1927 +#: src/gtkmain.c:1931 msgid "_Error console" msgstr "_Fehler-Konsole" -#: src/gtkmain.c:1929 +#: src/gtkmain.c:1933 msgid "Caveset _information" msgstr "Höhlensatz-_Information" -#: src/gtkmain.c:1929 +#: src/gtkmain.c:1933 msgid "Show information about the game and its caves" msgstr "Zeige Informationen über die Höhlensätze und deren Höhlen" -#: src/gtkmain.c:1934 +#: src/gtkmain.c:1938 msgid "_Control keys" msgstr "_Steuerungstasten" -#: src/gtkmain.c:1935 +#: src/gtkmain.c:1939 msgid "_New game" msgstr "_Neues Spiel" -#: src/gtkmain.c:1935 +#: src/gtkmain.c:1939 msgid "Start new game" msgstr "Starte neues Spiel" -#: src/gtkmain.c:1936 +#: src/gtkmain.c:1940 msgid "Cave _editor" msgstr "Höhlen _Editor" -#: src/gtkmain.c:1938 +#: src/gtkmain.c:1942 msgid "Load _internal game" msgstr "Lade _internes Spiel" -#: src/gtkmain.c:1939 +#: src/gtkmain.c:1943 msgid "Open _recent" msgstr "Öffne _letzte Dateien" -#: src/gtkmain.c:1944 +#: src/gtkmain.c:1951 msgid "Show _replays" msgstr "Zeige _Wiederholungen" -#: src/gtkmain.c:1948 +#: src/gtkmain.c:1951 +msgid "List replays which are recorded for caves in this caveset" +msgstr "" +"Zeige die für die Höhlen dieses Höhlensatzes aufgenommenen Wiederholungen" + +#: src/gtkmain.c:1955 msgid "_Take snapshot" msgstr "Schnappschuss _erstellen" -#: src/gtkmain.c:1949 +#: src/gtkmain.c:1956 msgid "Re_start level" msgstr "Level _wiederholen" -#: src/gtkmain.c:1949 +#: src/gtkmain.c:1956 msgid "Restart current level" msgstr "Aktuellen Level neu starten" -#: src/gtkmain.c:1950 +#: src/gtkmain.c:1957 msgid "_End game" msgstr "Spiel _beenden" -#: src/gtkmain.c:1950 +#: src/gtkmain.c:1957 msgid "End current game" msgstr "Aktuelles Spiel beenden" -#: src/gtkmain.c:1954 +#: src/gtkmain.c:1961 msgid "_Revert to snapshot" msgstr "_Zurück zum Schnappschuss" -#: src/gtkmain.c:1958 +#: src/gtkmain.c:1965 msgid "Pause game" msgstr "Spiel anhalten" -#: src/gtkmain.c:1959 +#: src/gtkmain.c:1966 msgid "Fullscreen mode during play" msgstr "Vollbildmodus während des Spiels" -#: src/gtkmain.c:1960 +#: src/gtkmain.c:1967 msgid "Fast for_ward" msgstr "Schnell vor_wärts" -#: src/gtkmain.c:1960 +#: src/gtkmain.c:1967 msgid "Fast forward" msgstr "Schnell vorwärts" -#: src/gtkmain.c:2168 +#: src/gtkmain.c:2180 msgid "Start editor" msgstr "Starte Editor" -#: src/gtkmain.c:2169 +#: src/gtkmain.c:2181 msgid "Save caveset in a HTML gallery" msgstr "Speichere Höhlensatz in einer HTML Gallerie" -#: src/gtkmain.c:2170 +#: src/gtkmain.c:2182 +msgid "Link stylesheet from file to a HTML gallery, eg. \"../style.css\"" +msgstr "" +"Verknüpfe die Formatforlage der Datei mit einer HTML Galerie (z. B. \"../" +"style.css\")" + +#: src/gtkmain.c:2183 +msgid "Link shortcut icon to a HTML gallery, eg. \"../favicon.ico\"" +msgstr "" +"Verknüpfe das Iconkürzel mit einer HTML Galerie (z. B. \"../favicon.ico\")" + +#: src/gtkmain.c:2184 msgid "" "Save cave C, level L in a PNG image. If no cave selected, uses a random one" msgstr "" "Speichere Höhle C, Level L in ein PNG-Bild. Wenn keine Höhle ausgewählt " "wurde, wird eine zufällig ausgewählte Höhle verwendet." -#: src/gtkmain.c:2171 +#: src/gtkmain.c:2185 msgid "Set PNG image size. Default is 128x96, set to 0x0 for unscaled" msgstr "" "Definiere PNG-Bildgröße. Voreingestellt ist 128x96, verwende 0x0 für keine " "Skalierung" -#: src/gtkmain.c:2172 +#: src/gtkmain.c:2186 msgid "Save caveset in a BDCFF file" msgstr "Speichere Höhlensatz in eine BDCFF-Datei" -#: src/gtkmain.c:2173 +#: src/gtkmain.c:2187 msgid "Batch mode: quit after specified tasks" msgstr "Stapelmodus: Beende das Spiel nach angegebenen Tätigkeiten" -#: src/gtkmain.c:2228 src/sdlmain.c:1228 +#: src/gtkmain.c:2242 src/sdlmain.c:731 #, c-format msgid "Errors during loading caveset from file '%s'" msgstr "Fehler während des Ladens des Höhlensatzes von der Datei '%s'" -#: src/gtkmain.c:2233 src/sdlmain.c:1235 +#: src/gtkmain.c:2247 src/sdlmain.c:738 #, c-format msgid "%d: no such internal caveset" msgstr "%d: keinen solchen internen Höhlensatz gefunden" -#: src/gtkmain.c:2262 -#, fuzzy +#: src/gtkmain.c:2276 msgid "Invalid cave or level number!" -msgstr "Ungültige Höhlen- oder Level-Nummer!\n" +msgstr "Ungültige Höhlen- oder Level-Nummer!" -#: src/gtkmain.c:2275 +#: src/gtkmain.c:2289 #, c-format msgid "Invalid image size: %s" msgstr "Ungültige Bildgröße: %s" -#: src/gtkui.c:350 +#: src/gtkui.c:351 msgid "Default" msgstr "Standard" -#: src/gtkui.c:439 +#: src/gtkui.c:440 msgid "All image files" msgstr "Alle Bilddateien" -#: src/gtkui.c:509 +#: src/gtkui.c:510 msgid "Add Theme from Image File" msgstr "Füge ein Thema von einer Bilddatei hinzu" -#: src/gtkui.c:544 +#: src/gtkui.c:545 msgid "The selected image cannot be used as a GDash theme." msgstr "Das ausgewählte Bild kann nicht als GDash-Thema verwendet werden." -#: src/gtkui.c:569 +#: src/gtkui.c:570 #, c-format msgid "Do you really want to remove theme '%s'?" msgstr "Wollen Sie wirklich das Thema '%s' löschen?" -#: src/gtkui.c:570 +#: src/gtkui.c:571 #, c-format msgid "The image file of the theme is '%s'." msgstr "Die Bilddatei des Themas ist '%s'." -#: src/gtkui.c:582 +#: src/gtkui.c:583 msgid "Cannot delete the image file." msgstr "Die Bilddatei kann nicht gelöscht werden." -#: src/gtkui.c:630 +#: src/gtkui.c:631 msgid "Language (requires restart)" msgstr "Sprache (Neustart erforderlich)" -#: src/gtkui.c:631 +#: src/gtkui.c:632 msgid "The language of the application. Requires restart!" msgstr "Die Sprache des Programms. Erfordert einen Neustart!" -#: src/gtkui.c:632 +#: src/gtkui.c:633 msgid "Cave options" msgstr "Höhlenoptionen" -#: src/gtkui.c:633 +#: src/gtkui.c:634 msgid "Mouse play (experimental!)" msgstr "Mausspiel (experimentell)" -#: src/gtkui.c:633 +#: src/gtkui.c:634 msgid "Use the mouse to play. The player will follow the cursor!" msgstr "Verwende die Maus zum Spielen. Der Spieler folgt dem Cursor!" -#: src/gtkui.c:634 +#: src/gtkui.c:635 msgid "All caves selectable" msgstr "Alle Höhlen auswählbar" -#: src/gtkui.c:634 +#: src/gtkui.c:635 msgid "All caves and intermissions can be selected at game start." msgstr "" "Alle Höhlen und Zwischenspiele können beim Spielstart ausgewählt werden." -#: src/gtkui.c:635 +#: src/gtkui.c:636 msgid "Import as all caves selectable" msgstr "Alle Höhlen als auswählbar importieren" -#: src/gtkui.c:635 +#: src/gtkui.c:636 msgid "" "Original, C64 games are imported not with A, E, I, M caves selectable, but " "all caves (ABCD, EFGH... excluding intermissions). This does not affect " @@ -4246,11 +4466,11 @@ msgstr "" "Zwischenspiele) freigeschalten. Diese Funktion beeinflusst nicht BDCFF-" "Höhlen." -#: src/gtkui.c:636 +#: src/gtkui.c:637 msgid "Use BDCFF highscore" msgstr "Verwende BDCFF Highscore" -#: src/gtkui.c:636 +#: src/gtkui.c:637 msgid "" "Use BDCFF highscores. GDash saves highscores in its own configuration " "directory and also in the *.bd files. However, it prefers loading them from " @@ -4266,54 +4486,72 @@ msgstr "" "allerdings auch über das 'Öffnen'-Dialog-Fenster für eine spezifische Datei " "ausgewählt werden." -#: src/gtkui.c:637 +#: src/gtkui.c:638 msgid "Show story" -msgstr "" +msgstr "Geschichte anzeigen" -#: src/gtkui.c:637 +#: src/gtkui.c:638 msgid "" "If the cave has a story, it will be shown when the cave is first started." msgstr "" +"Wenn die Höhle eine Geschichte enthält, wird sie beim ersten Start der Höhle " +"angezeigt." -#: src/gtkui.c:639 +#: src/gtkui.c:640 msgid "Time as min:sec" msgstr "Zeit als min:sek" -#: src/gtkui.c:639 +#: src/gtkui.c:640 msgid "Show times in minutes and seconds, instead of seconds only." msgstr "" "Zeigt die Zeit in Minuten und Sekunden anstatt ausschließlich Sekunden." -#: src/gtkui.c:640 +#: src/gtkui.c:641 msgid "No invisible outbox" msgstr "Kein unsichtbarer Ausgang" -#: src/gtkui.c:640 +#: src/gtkui.c:641 msgid "Show invisible outboxes as visible (blinking) ones." msgstr "Zeigt unsichtbare Ausgänge als sichtbare, blinkende Ausgänge an." -#: src/gtkui.c:641 +#: src/gtkui.c:642 msgid "Sound options (require restart)" msgstr "Ton-Einstellungen (Neustart erforderlich)" -#: src/gtkui.c:642 +#: src/gtkui.c:643 msgid "Play sounds. Enabling this setting requires a restart!" msgstr "" "Spielgeräusche. Die Aktivierung dieser Einstellung erfordert einen Neustart!" -#: src/gtkui.c:643 +#: src/gtkui.c:644 +msgid "Music volume" +msgstr "Lautstärke Musik" + +#: src/gtkui.c:644 +msgid "Volume of title screen music." +msgstr "Die Lautstärke der Titelbild-Musik." + +#: src/gtkui.c:645 +msgid "Cave volume" +msgstr "Lautstärke Höhle" + +#: src/gtkui.c:645 +msgid "Volume of sounds played in a cave." +msgstr "Die Lautstärke der Geräusche in einer Höhle." + +#: src/gtkui.c:646 msgid "Classic sounds only" msgstr "Nur klassische Spielgeräusche" -#: src/gtkui.c:643 +#: src/gtkui.c:646 msgid "Play only classic sounds taken from the original game." msgstr "Spielt nur klassische Spielgeräusche des Originalspiels ab." -#: src/gtkui.c:644 +#: src/gtkui.c:647 msgid "16-bit mixing" msgstr "16-bit-Mischung" -#: src/gtkui.c:644 +#: src/gtkui.c:647 msgid "" "Use 16-bit mixing of sounds. Try changing this setting if sound is clicky. " "Changing this setting requires a restart!" @@ -4322,11 +4560,11 @@ msgstr "" "zu ändern, falls die Geräusche Tonstörungen verursachen. Veränderte " "Einstellungen erfordern einen Neustart des Spiels!" -#: src/gtkui.c:645 +#: src/gtkui.c:648 msgid "44kHz mixing" msgstr "44kHz-Mischung" -#: src/gtkui.c:645 +#: src/gtkui.c:648 msgid "" "Use 44kHz mixing of sounds. Try changing this setting if sound is clicky. " "Changing this setting requires a restart!" @@ -4335,94 +4573,94 @@ msgstr "" "zu ändern, falls die Geräusche Tonstörungen verursachen. Veränderte " "Einstellungen erfordern einen Neustart des Spiels!" -#: src/gtkui.c:649 +#: src/gtkui.c:652 msgid "Display options" msgstr "Anzeigeoptionen" -#: src/gtkui.c:650 +#: src/gtkui.c:653 msgid "Random colors" msgstr "Zufällige Farben" -#: src/gtkui.c:650 +#: src/gtkui.c:653 msgid "Use randomly selected colors for caves." msgstr "Verwende zufällig ausgefählte Farben für die Höhlen." -#: src/gtkui.c:655 +#: src/gtkui.c:654 msgid "PAL emulation for game" msgstr "PAL-Emulation für das Spiel" -#: src/gtkui.c:655 src/gtkui.c:656 +#: src/gtkui.c:654 src/gtkui.c:655 msgid "Use PAL emulated graphics, ie. lines are striped." msgstr "" "Verwendet PAL-emulierte Grafiken (z. B. jede zweite Zeile in einer dunkleren " "Farbe)" -#: src/gtkui.c:656 +#: src/gtkui.c:655 msgid "PAL emulation for editor" msgstr "PAL-Emulation für den Editor" -#: src/gtkui.c:658 +#: src/gtkui.c:657 msgid "Fine scroll" msgstr "Feines Scrolling" -#: src/gtkui.c:658 +#: src/gtkui.c:657 msgid "Fine scroll - 50 frames per second." msgstr "Feines Scrolling - 50 Bilder pro Sekunde." -#: src/gtkui.c:659 +#: src/gtkui.c:658 #, c-format msgid "PAL scanline shade (%%)" msgstr "PAL-Scanline-Schatten (%%)" -#: src/gtkui.c:659 +#: src/gtkui.c:658 msgid "Darker rows for PAL emulation." msgstr "Dunklere Zeilen für die PAL-Emulation." -#: src/gtkui.c:660 +#: src/gtkui.c:659 msgid "C64 palette" msgstr "C64-Palette" -#: src/gtkui.c:661 +#: src/gtkui.c:660 msgid "The color palette for games imported from C64 files." msgstr "Die Farbpalette für importierte C64-Spiele." -#: src/gtkui.c:662 +#: src/gtkui.c:661 msgid "C64 DTV palette" msgstr "C64DTV-Palette" -#: src/gtkui.c:663 +#: src/gtkui.c:662 msgid "The color palette for imported C64 DTV games." msgstr "Die Farbpalette für importierte C64DTV-Spiele." -#: src/gtkui.c:664 +#: src/gtkui.c:663 msgid "Atari palette" msgstr "Atari-Palette" -#: src/gtkui.c:665 +#: src/gtkui.c:664 msgid "The color palette for imported Atari games." msgstr "Die Farbpalette für importierte Atari-Spiele." -#: src/gtkui.c:666 +#: src/gtkui.c:665 msgid "Preferred palette" msgstr "Bevorzugte Palette" -#: src/gtkui.c:667 +#: src/gtkui.c:666 msgid "New caves and random colored caves use this palette." msgstr "Neue Höhlen und zufällig eingefärbte Höhlen benützen diese Palette." -#: src/gtkui.c:679 +#: src/gtkui.c:678 msgid "GDash Preferences" msgstr "GDash-Einstellungen" -#: src/gtkui.c:684 +#: src/gtkui.c:683 msgid "_Remove theme" msgstr "Thema ent_fernen" -#: src/gtkui.c:689 +#: src/gtkui.c:688 msgid "_Add theme" msgstr "Thema _hinzufügen" -#: src/gtkui.c:766 +#: src/gtkui.c:765 msgid "" "This is the list of available themes. Use the Add Theme button to install a " "new one." @@ -4430,39 +4668,39 @@ msgstr "" "Das ist die Liste aller verfügbaren Themen. Verwenden Sie den 'Thema " "hinzufügen'-Knopf, um ein neues Thema hinzuzufügen." -#: src/gtkui.c:787 +#: src/gtkui.c:786 msgid "Theme" msgstr "Thema" -#: src/gtkui.c:879 +#: src/gtkui.c:881 msgid "GDash Control Keys" msgstr "GDash Steuerungstasten" -#: src/gtkui.c:888 +#: src/gtkui.c:890 msgid "Movements" msgstr "Bewegungen" -#: src/gtkui.c:893 +#: src/gtkui.c:895 msgid "Fire" msgstr "Feuer" -#: src/gtkui.c:894 +#: src/gtkui.c:896 msgid "Fire" msgstr "Feuer" -#: src/gtkui.c:895 +#: src/gtkui.c:897 msgid "Fire (alternative)" msgstr "Feuer (alternativ)" -#: src/gtkui.c:896 +#: src/gtkui.c:898 msgid "Suicide" msgstr "Selbstmord" -#: src/gtkui.c:897 +#: src/gtkui.c:899 msgid "Suicide" msgstr "Selbstmord" -#: src/gtkui.c:899 +#: src/gtkui.c:901 msgid "" "Click on a button to change a key. You can set two keys for fire (snapping) " "for convenience. Those behave exactly the same way in the game." @@ -4472,83 +4710,83 @@ msgstr "" "zweite Taste definieren - diese reagiert dann genauso, wie die erste " "Feuertaste im Spiel." -#: src/gtkui.c:986 src/help.c:225 +#: src/gtkui.c:988 src/help.c:234 msgid "Highscores" msgstr "Highscores" -#: src/gtkui.c:992 +#: src/gtkui.c:994 msgid "Rank" msgstr "Rang" -#: src/gtkui.c:1138 -#, c-format -msgid "Cave set \"%s\" is edited. Discard changes?" +#: src/gtkui.c:1140 +#, fuzzy, c-format +msgid "Caveset \"%s\" is edited or new replays are added. Discard changes?" msgstr "Der Höhlensatz \"%s\" wurde editiert. Änderungen verwerfen?" -#: src/gtkui.c:1139 +#: src/gtkui.c:1141 msgid "If you discard the caveset, all changes and new replays will be lost." msgstr "" "Wenn Sie den Höhlensatz verwerfen, werden alle Änderungen und neuen " "Wiederholungen verloren sein." -#: src/gtkui.c:1143 +#: src/gtkui.c:1145 msgid "_Discard" msgstr "_Verwerfen" -#: src/gtkui.c:1162 +#: src/gtkui.c:1164 #, c-format msgid "The file (%s) already exists, and will be overwritten." msgstr "Die Datei (%s) existiert bereits und wird überschrieben." -#: src/gtkui.c:1163 +#: src/gtkui.c:1165 msgid "The file already exists. Do you want to overwrite it?" msgstr "Diese Datei existiert bereits. Wollen Sie sie überschreiben?" -#: src/gtkui.c:1231 +#: src/gtkui.c:1233 msgid "Save File As" msgstr "Speichere Datei als" -#: src/gtkui.c:1235 +#: src/gtkui.c:1237 msgid "BDCFF cave sets (*.bd)" msgstr "BDCFF-Höhlensätze (*.bd)" -#: src/gtkui.c:1240 +#: src/gtkui.c:1242 msgid "All files (*)" msgstr "Alle Dateien (*)" -#: src/gtkui.c:1332 +#: src/gtkui.c:1334 msgid "Open File" msgstr "Öffne Datei" -#: src/gtkui.c:1334 +#: src/gtkui.c:1336 msgid "Load _highscores from BDCFF file" msgstr "Lade _Highscores von der BDCFF-Datei" -#: src/gtkui.c:1341 +#: src/gtkui.c:1343 msgid "GDash cave sets" msgstr "GDash-Höhlensätze" -#: src/gtkui.c:1391 +#: src/gtkui.c:1393 msgid "Loaded game:" msgstr "Geladenes Spiel:" -#: src/gtkui.c:1467 +#: src/gtkui.c:1469 msgid "GDash Errors" msgstr "GDash-Fehler" -#: src/gtkui.c:1537 +#: src/gtkui.c:1539 msgid "_Show all" msgstr "_Zeige alles" -#: src/gtkui.c:1587 +#: src/gtkui.c:1589 msgid "Select Key" msgstr "Taste auswählen" -#: src/gtkui.c:1595 +#: src/gtkui.c:1597 msgid "Press key for action:" msgstr "Taste drücken für die Aktion:" -#: src/gtkui.c:1623 +#: src/gtkui.c:1625 #, c-format msgid "Click here to set the key for action: %s" msgstr "Klicken Sie hier, um die Taste einzustellen für die Aktion: %s" @@ -4563,54 +4801,44 @@ msgstr "" "der angegebenen Zeit einzusammeln und die Höhle zu verlassen. Sie steuern " "die Bewegungen des Spielers, um die Aufgabe(n) in der Höhle zu lösen." -#: src/help.c:41 -msgid "Caves" -msgstr "Höhlen" - #: src/help.c:42 msgid "" "The game comes with many built-in and pre-installed cave sets, and you can " "also make up your own levels. Just use the options in the File menu. You can " "load caves stored in the BDCFF format, and import from other older file " "formats, like the No One's Final Boulder, the Construction Kit file format, " -"No One's Delight Boulder, an Atari game format, and many more." +"No One's Delight Boulder, an Atari game format and many more." msgstr "" "Das Spiel wird mit vielen eingebauten und vorinstallierten Höhlensätzen " "geliefert. Natürlich kann man auch eigene Höhlen entwerfen. Verwenden Sie " "einfach die Optionen im Datei-Menü. Sie können Höhlen im BDCFF-Format laden, " -"aber auch andere, ältere Formate, wie z. B. No One's Final Boulder, das " -"Construction Kit Datei-Format, No One's Delight Boulder, ein Atari-Format " -"und viele mehr." +"aber auch andere, ältere Formate importieren, wie z. B. No One's Final " +"Boulder, das Construction Kit Datei-Format, No One's Delight Boulder, ein " +"Atari-Format und viele mehr." #: src/help.c:48 msgid "Playing the game" msgstr "Das Spiel spielen" #: src/help.c:49 -#, fuzzy msgid "" -"To play the game, press the New Game button. You can select which level you " -"start playing at. During the game, you can control your player with the " -"cursor keys. The Ctrl key has a special meaning: you can snap items, ie. " -"pick up things without moving. If you get stuck, press Escape to restart the " -"level. If there are too many players in the cave and you cannot move, " -"pressing F2 causes the active one to explode. With F11, you can switch to " -"full screen mode. To view the alternative status bar which show keys and " -"skeletons collected, hold down the left shift button.\n" -"These are the game elements:" -msgstr "" -"Um ein Spiel zu beginnen, drücken Sie den 'Neues Spiel'-Knopf. Im darauf " -"erscheinenden Fenster können Sie den gewünschten Level, mit dem Sie beginnen " -"möchten, auswählen. Während des Spiels steuern Sie den Spieler mit den " -"Cursor-Tasten. Die CTRL-Taste hat eine spezielle Bedeutung: Sie können z. B. " -"Diamanten aus einer Entfernung von einem Feld einsammeln ohne sich zu " -"bewegen. Falls Sie irgendwo hängen bleiben, können Sie jederzeit ESC " -"drücken, um den Level neu zu starten. Falls zu viele Spieler in der Höhle " -"sind und Sie sich trotzdem nicht bewegen können, drücken Sie F2, damit der " -"aktive Spieler zerstört wird. Mit F11 kann man in den Vollbildmodus " -"wechseln. Das sind die Spiel-Elemente:" +"The main idea of this game is very simple. You have to guide your player " +"through the mazes of dirt and stones, to collect diamonds within a given " +"time limit. Make sure not to let stones fall on your head or enemies touch " +"you! After you collect the correct amount of diamonds, the screen will flash " +"quickly and a secret door is revealed for you to advance to the next level. " +"As the game progresses, levels usually become more intricate and difficult." +msgstr "" +"Die Hauptaufgabe in diesem Spiel ist sehr einfach. Man muß den Spieler durch " +"ein Labyrinth aus Erde und Felsbrocken steuern, um die vorgegebene Anzahl an " +"Diamanten in der vorgegebenen Zeit einzusammeln. Achten Sie darauf, daß " +"Ihnen keine Felsbrocken auf den Kopf fallen oder daß Sie von Gegnern berührt " +"werden. Nachdem man die korrekte Anzahl an Diamanten eingesammelt hat, wird " +"der Bildschirm kurz aufblitzen. In diesem Moment wird sich eine geheime Tür " +"öffnen, um in den nächsten Level weiterzukommen. Im Laufe des Spiels werden " +"die Level normalerweise komplizierter und schwieriger werden." -#: src/help.c:51 +#: src/help.c:54 msgid "" "This is the player. He can move through space and dirt. He can pick up " "diamonds and push stones, but he should avoid flies." @@ -4619,19 +4847,19 @@ msgstr "" "graben. Er kann Diamanten einsammeln und Felsbrocken verschieben. Aber er " "sollte Glühwürmchen und Schmetterlinge meiden." -#: src/help.c:52 +#: src/help.c:55 msgid "Stones and diamonds fall down in space, creatures can freely move here." msgstr "" "Felsbrocken und Diamanten fallen in Leerfeldern nach unten, Gegner können " "sich darin frei bewegen." -#: src/help.c:53 +#: src/help.c:56 msgid "You can move through dirt leaving empty space behind. Amoeba eats it." msgstr "" "Sie können sich durch Erde graben und hinterlassen dadurch Leerfelder. Die " "Amöbe verschlingt Erde." -#: src/help.c:54 +#: src/help.c:57 msgid "" "This is also dirt, but has a different color. In any other sense, it is " "identical to the above one." @@ -4639,19 +4867,26 @@ msgstr "" "Das ist auch Erde, hat aber eine andere Farbe. Ansonst besitzt sie die " "gleichen Eigenschaften wie auch die normale Erde." -#: src/help.c:55 +#: src/help.c:58 +msgid "Dirt ball and loose dirt" +msgstr "Erde-Brocken und Lockere Erde" + +#: src/help.c:58 msgid "" -"A rolling ball of dirt. You cannot push it, but you can dig it away. " -"Sometimes it helps you to solve puzzles." +"A rolling ball and a falling piece of dirt. You cannot push them, but you " +"can dig them away. Sometimes they help you to solve puzzles." msgstr "" +"Ein rollender Erde-Brocken und ein fallendes Stück Erde. Man kann sie nicht " +"verschieben, aber man kann sie weggraben. Manchmal können sie dabei helfen " +"Rätzel zu lösen." -#: src/help.c:56 +#: src/help.c:59 msgid "The main object of the game is to collect required number of diamonds." msgstr "" "Das Hauptziel des Spiels ist es, die geforderte Anzahl an Diamanten " "einzusammeln." -#: src/help.c:57 +#: src/help.c:60 msgid "" "Stones can be pushed by the player, and he can drop them on flies to make an " "explosion." @@ -4659,14 +4894,29 @@ msgstr "" "Felsbrocken können vom Spieler verschoben werden. Außerdem kann er sie auf " "Glühwürmchen und Schmetterlinge fallen lassen, damit sie explodieren." -#: src/help.c:58 +#: src/help.c:61 +msgid "" +"Exactly like a diamond, but instead of falling down, it flies upwards, as " +"high as it can." +msgstr "" +"Verhält sich wie ein Diamant, nur fällt er nach oben anstatt nach unten." + +#: src/help.c:62 +msgid "" +"The flying variant of a stone. Note that this one can also crush enemies as " +"well as the player!" +msgstr "" +"Eine fliegende Variante eines Felsbrocken. Beachten Sie, daß dieser " +"fliegende Felsbrocken sowohl Gegner als auch den Spieler zerschmettern kann!" + +#: src/help.c:63 msgid "" "Like ordinary stones, but these are so heavy, that you cannot push them." msgstr "" "Wie normale Felsbrocken, nur sind diese so schwer, dass man sie nicht " "verschieben kann - außer man hat vorher ein Bonbon eingesammelt (optional)." -#: src/help.c:59 +#: src/help.c:64 msgid "" "The wall can't be moved but an explosion destroys it. You can't pass through " "the wall - instead try to blow it up." @@ -4675,17 +4925,17 @@ msgstr "" "zerstören. Man kann nicht durch die Ziegelmauer gehen - stattdessen sollte " "man versuchen sie zu sprengen." -#: src/help.c:60 +#: src/help.c:65 msgid "This is rock stable wall. It's impossible to move or blow it up." msgstr "" "Das ist im wahrsten Sinn des Wortes eine Titanmauer. Es ist unmöglich sie zu " "bewegen oder sie zu sprengen." -#: src/help.c:61 +#: src/help.c:66 msgid "Sloped steel wall" msgstr "Titanmauer mit Gefälle" -#: src/help.c:61 +#: src/help.c:66 msgid "" "Acts like an ordinary steel wall, but it is sloped: stones and diamonds will " "roll down on it in some direction. Brick walls and dirt also have sloped " @@ -4696,7 +4946,7 @@ msgstr "" "hinunterrollen. Es gibt auch Variationen von Ziegelmauern und Erde mit " "Gefälle." -#: src/help.c:62 +#: src/help.c:67 msgid "" "After collecting the required number of diamonds, look for a flashing out " "box to exit the cave. Closed out box looks like steel wall, but beware of " @@ -4709,7 +4959,7 @@ msgstr "" "des Ausgangs - diese können unbeabsichtigterweise diesen auch zerstören, was " "natürlich den erfolgreichen Abschluss der Höhle verhindert." -#: src/help.c:65 +#: src/help.c:70 msgid "" "This is also an exit, but it remains non-flashing and thus is difficult to " "find." @@ -4717,16 +4967,17 @@ msgstr "" "Das ist auch ein Ausgang, der jedoch niemals zu blinken beginnt. Deshalb ist " "er auch schwierig zu finden." -#: src/help.c:66 -msgid "Guard" +#: src/help.c:71 +msgid "Firefly" msgstr "Glühwürmchen" -#: src/help.c:66 +#: src/help.c:71 msgid "" -"Guards move through the space. They can fly in the entire cave. Guards blow " -"up when hit by falling stone or diamond. Amoeba is also deadly for them. " -"They explode into space, producing 3x3 square of empty space. Guards are " -"left spinning - they prefer turning left, usually counter clockwise." +"Fireflies move through the space. They can fly in the entire cave. Fireflies " +"blow up when hit by falling stone or diamond. Amoeba is also deadly for " +"them. They explode into space, producing 3x3 square of empty space. " +"Fireflies are left spinning - they prefer turning left, usually counter " +"clockwise." msgstr "" "Glühwürmchen bewegen sich in Leerfeldern. Sie können in den Leerfeldern der " "ganzen Höhle herumfliegen. Glühwürmchen explodieren, wenn sie von " @@ -4735,33 +4986,37 @@ msgstr "" "Glühwürmchen sind linksdrehend - sie bevorzugen es, sich nach links, also " "gegen den Uhrzeigersinn, zu bewegen." -#: src/help.c:67 -msgid "Alternative guard" +#: src/help.c:72 +msgid "Alternative firefly" msgstr "Alternatives Glühwürmchen" -#: src/help.c:67 -msgid "Just like a normal guard, but it is right spinning." +#: src/help.c:72 +msgid "Just like a normal firefly, but it is right spinning." msgstr "" "Genauso wie ein normales Glühwürmchen, es dreht sich jedoch nach rechts." -#: src/help.c:68 -#, fuzzy +#: src/help.c:73 msgid "Dragonfly" -msgstr "Freies Zeichnen" +msgstr "Libelle" -#: src/help.c:68 +#: src/help.c:73 msgid "" "These creatures also guard the diamonds you would like to collect. But they " "move very differently. They like to run straight ahead, and only change " "direction if they bump into something. Like normal guards, you must not " "touch them. But you can easily crush them with stones." msgstr "" +"Diese Gegner bewachen ebenfalls die Diamanten, die man gerne einsammeln " +"würde. Sie bewegen sich jedoch sehr unterschiedlich. Am liebsten bewegen sie " +"sich geradeaus und wechseln die Richtung nur dann, wenn sie an etwas " +"anstoßen. Wie normale Gegner darf man sie nicht berühren. Man kann sie " +"jedoch einfach mit Felsbrocken zerschmettern." -#: src/help.c:69 +#: src/help.c:74 msgid "Butterfly" msgstr "Schmetterling" -#: src/help.c:69 +#: src/help.c:74 msgid "" "Butterflies are similar to guards. In contrast to guards they explode into " "diamonds, producing 3x3 square of diamonds. Butterflies are right spinning, " @@ -4771,20 +5026,20 @@ msgstr "" "Unterschied, dass sie zu 3 x 3 großen Feldern aus Diamanten explodieren. " "Schmetterlinge sind rechtsdrehend - bewegen sich also im Uhrzeigersinn." -#: src/help.c:70 +#: src/help.c:75 msgid "Alternative butterfly" msgstr "Alternativer Schmetterling" -#: src/help.c:70 +#: src/help.c:75 msgid "Just like a normal butterfly, but it is left spinning." msgstr "" "Genauso wie ein normaler Schmetterling, er dreht sich jedoch nach links." -#: src/help.c:71 +#: src/help.c:76 msgid "Stonefly" msgstr "Felsschmetterling" -#: src/help.c:71 +#: src/help.c:76 msgid "" "This flying moth behaves just like a butterfly, except that it explodes into " "stones instead of diamonds." @@ -4792,11 +5047,11 @@ msgstr "" "Diese fliegende Motte verhält sich wie ein Schmetterling, allerdings " "explodiert sie zu Felsbrocken anstatt zu Diamanten." -#: src/help.c:72 +#: src/help.c:77 msgid "Cow" msgstr "Kuh" -#: src/help.c:72 +#: src/help.c:77 msgid "" "This creature wanders around the cave like a guard, but you can touch it. If " "it is enclosed, it turns into a skeleton." @@ -4805,7 +5060,7 @@ msgstr "" "jedoch gefahrenlos berühren. Wird die Kuh eingeschlossen, verwandelt sie " "sich in ein Skelett." -#: src/help.c:73 +#: src/help.c:78 msgid "" "This is ghost which wanders aimlessly. If it touches you, it will explode in " "an x-shape to many different elements." @@ -4813,7 +5068,7 @@ msgstr "" "Das ist ein Geist, der ziellos umherwandert. Berührt er den Spieler, " "explodiert er x-förmig zu vielen verschiedenen zufälligen Elementen." -#: src/help.c:74 +#: src/help.c:79 msgid "" "Biters will eat all the dirt they can reach. They move in a predictable way. " "They also can eat diamonds, so better don't let them be taken away. They " @@ -4827,7 +5082,7 @@ msgstr "" "bahnen, indem sie den vor ihnen befindlichen Felsbrocken einfach hinter sich " "werfen. Auf diese Weise kann man den Weg versperrende Felsbrocken los werden." -#: src/help.c:75 +#: src/help.c:80 msgid "" "A chasing stone looks like an ordinary stone, it can even pass slime. It is " "lightweight, you can push it at once, as long as it is sleeping. Once it " @@ -4841,7 +5096,7 @@ msgstr "" "verfolgen. Hat man ein Bonbon eingesammelt, kann man auch wache, verfolgende " "Mutanten-Felsbrocken verschieben." -#: src/help.c:76 +#: src/help.c:81 msgid "" "Amoeba grows randomly through space and dirt. When it is closed, stops " "growing and transforms into diamonds. When it is grown too big, it suddenly " @@ -4854,7 +5109,7 @@ msgstr "" "Felsbrocken. Zu Beginn wächst die Amöbe recht langsam, aber nach einer " "gewissen Zeit beginnt sie sich sehr schnell zu verbreiten." -#: src/help.c:77 +#: src/help.c:82 msgid "" "Another amoeba, which behaves exactly like the above one. But it lives its " "own life. Sometimes, when they collide, they produce an explosion." @@ -4863,7 +5118,7 @@ msgstr "" "Amöbe. Sie verhält sich jedoch vollkommen eigenständig. Manchmal explodieren " "die angrenzenden Teile der beiden, wenn sie sich berühren." -#: src/help.c:78 +#: src/help.c:83 msgid "" "Slime is permeable. It means that stones and diamonds laying on the slime " "can randomly pass on." @@ -4871,7 +5126,7 @@ msgstr "" "Schleim ist durchlässig. Das bedeutet, dass Felsbrocken und Diamanten, die " "auf dem Schleim liegen, unterschiedlich schnell durchfallen können." -#: src/help.c:79 +#: src/help.c:84 msgid "" "Acid eats dirt. Sometimes it spreads in all four directions, leaving a small " "explosion behind. If there is no dirt to swallow, it just disappears." @@ -4880,19 +5135,27 @@ msgstr "" "aus und hinterlässt eine kleine Explosion. Falls keine Erde mehr vorhanden " "ist, verschwindet sie einfach." -#: src/help.c:80 +#: src/help.c:85 msgid "Water, which floods all empty space slowly." msgstr "Wasser, das den gesamten Leerraum langsam füllt." -#: src/help.c:81 +#: src/help.c:86 msgid "" "This very special wall converts stones into diamonds and vice versa. Note " -"that a magic wall can only be activated for some limited time." +"that a magic wall can only be activated for some limited time. It can also " +"turn mega stones into nitro packs, nitro packs into mega stones. Even flying " +"diamonds and stones pass them to be converted to each other - but these two " +"do that from bottom to up, of course." msgstr "" "Diese spezielle Mauer verwandelt Felsbrocken in Diamanten und umgekehrt. " -"Zaubermauern können nur für eine begrenzte Zeit aktiviert werden." +"Beachten Sie, daß eine Zaubermauer nur für eine begrenzte Zeit aktiviert " +"werden können. Sie kann auch Mega-Felsbrocken in Nitro-Packs und umgekehrt " +"verwandeln. Sogar fliegende Diamanten und Felsbrocken können durch sie " +"durchfallen und sich in das jeweilige Gegenstück verwandeln - nur machen " +"diese beiden speziellen Elemente das natürlich von der Unterseite der " +"Zaubermauer." -#: src/help.c:82 +#: src/help.c:87 msgid "" "Expanding wall expands in horizontal or vertical (or both) direction, if " "there is an empty space to fill up. You should be very careful not to be " @@ -4903,11 +5166,11 @@ msgstr "" "ist Vorsicht geboten, da die Wachsmauern den Spieler auch ungewollt " "einschließen können." -#: src/help.c:83 +#: src/help.c:88 msgid "Expanding wall, but made of steel. You cannot even blow it up!" -msgstr "" +msgstr "Wachsmauer, die aus Titan besteht. Man kann sie nicht einmal sprengen!" -#: src/help.c:84 +#: src/help.c:89 msgid "" "Whenever there is a falling wall above the player merely separated by empty " "space, it starts falling. It does so at any distance. If it hits the player, " @@ -4919,7 +5182,7 @@ msgstr "" "Verhalten auslösen. Falls sie den Spieler trifft, explodiert sie. Falls sie " "ein anderes Objekt trifft, bleibt sie einfach stehen." -#: src/help.c:85 +#: src/help.c:90 msgid "" "You can pick up this bomb like a diamond. To use it, press control and a " "direction... and then quickly run away! You can hold only one bomb at a time." @@ -4928,7 +5191,7 @@ msgstr "" "drücken Sie CTRL + die gewünschte Richtung - dann sollte man allerdings " "schnell aus dem Weg gehen! Man kann nur eine Bombe auf einmal tragen." -#: src/help.c:86 +#: src/help.c:91 msgid "" "Eat this sweet and you will become strong. You will be able to push stones " "at once. You will also be able to push chasing stones." @@ -4938,22 +5201,22 @@ msgstr "" "Felsbrocken und optional auch Mega-Felsbrocken verzögerungsfrei verschoben " "werden." -#: src/help.c:88 +#: src/help.c:93 msgid "This is an indestructible door with a diamond." msgstr "Das ist eine unzerstörbare Tür mit einem Diamanten." -#: src/help.c:89 +#: src/help.c:94 msgid "" "If you get this key, all doors will convert into diamonds you can collect." msgstr "" "Sammelt man diesen Diamant-Schlüssel ein, verwandeln sich alle Diamant-Türen " "in Diamanten, die sich dann einsammeln lassen." -#: src/help.c:90 +#: src/help.c:95 msgid "Keys" msgstr "Schlüssel" -#: src/help.c:90 +#: src/help.c:95 msgid "" "There are three types of keys, which open three different colored doors. You " "can collect more from these; and for every door, always one key is used." @@ -4962,17 +5225,17 @@ msgstr "" "Man kann jeweils mehrere von ihnen einsammeln - für jede Tür wird jeweils " "ein Schlüssel verwendet." -#: src/help.c:91 +#: src/help.c:96 msgid "Doors" msgstr "Türen" -#: src/help.c:91 +#: src/help.c:96 msgid "This is a door which can only be opened by the key of the same color." msgstr "" "Das ist eine Tür, die nur mit einem Schlüssel der gleichen Farbe geöffnet " "werden kann." -#: src/help.c:92 +#: src/help.c:97 msgid "" "Sometimes you have to block a passage, for example to protect a voodoo. This " "is when a box like this comes handy. You can push it in every direction " @@ -4982,7 +5245,7 @@ msgstr "" "zu beschützen. Das ist genau die Situation, in der diese Box sehr gelegen " "kommt. Man kann sie mittels der CTRL-Taste in jede Richtung verschieben." -#: src/help.c:93 +#: src/help.c:98 msgid "" "Sometimes diamonds or keys are buried in brick walls. You can use a " "pneumatic hammer to break these walls, or simple brick walls which contain " @@ -4996,31 +5259,44 @@ msgstr "" "aufbrechen wollen, und benützen Sie den Presslufthammer, indem Sie links " "oder rechts in Kombination mit dem Feuerknopf drücken." -#: src/help.c:94 +#: src/help.c:99 msgid "" "This machine replicates the element which is on the top of it. At regular " "intervals, a new element drops out underneath; if there is space to do this. " "The rate of materializing the new elements can be different in every cave." msgstr "" +"Diese Maschine repliziert das auf ihr liegende Element. In regelmäßigen " +"Intervallen fällt ein neues Element unterhalb heraus. Jedoch nur, falls " +"darunter Leerfelder sind. Die Geschwindigkeit, in der die neuen Elemente " +"erscheinen, kann in jeder Höhle unterschiedlich sein." -#: src/help.c:95 +#: src/help.c:100 msgid "" "The indestructible and immobile conveyor belt carries free-moving elements. " "Its direction can be changed or its power can be turned completely off with " -"a switch." +"a switch. It only carries the elements which are resting on it (ie. it will " +"not move a piece of dirt or a firefly.) Flying stones and diamonds under it " +"will also be carried." msgstr "" +"Das unzerstörbare und unbewegliche Förderband befördert bewegbare Elemente. " +"Die Laufrichtung kann geändert werden, es kann aber auch mit einem Schalter " +"komplett ausgeschalten werden. Es befördert nur Elemente die darauf liegen " +"(z. B. wird es keine Erde oder Glühwürmchen bewegen). Fliegende Felsbrocken " +"und Diamanten unterhalb des Förderbandes werden ebenfalls befördert." -#: src/help.c:96 +#: src/help.c:101 msgid "" -"Heavy elemenets sink into the lava, and disappear without any trace left. " +"Heavy elemenets sink into the lava and disappear without any trace left. " "Creatures can also step into the lava." msgstr "" +"Schwere Elemente versinken ohne jede Spur in der Lava. Gegner können " +"ebenfalls in der Lava versinken." -#: src/help.c:97 +#: src/help.c:102 msgid "Collect this to get extra time." msgstr "Sammle die Uhr ein, um Extrazeit zu erhalten." -#: src/help.c:98 +#: src/help.c:103 msgid "" "Bladders can be pushed around easily. They slowly climb up; if they touch a " "voodoo, they convert into clocks. They can also pass slime." @@ -5029,13 +5305,13 @@ msgstr "" "Falls sie eine Voodoo-Puppe berühren, verwandeln sie sich in eine Uhr. Sie " "können auch durch Schleim sickern." -#: src/help.c:99 +#: src/help.c:104 msgid "If there is space above it, the bladder spender turns to a bladder." msgstr "" "Ist oberhalb des Blasen-Spenders leerer Raum, wird er eine Blase erzeugen " "und sich danach in eine Titanmauer verwandeln." -#: src/help.c:100 +#: src/help.c:105 msgid "" "This is your player's look-alike. You must protect him against flies. If a " "voodoo dies by one of them, your player dies immediately too. This doll can " @@ -5053,7 +5329,7 @@ msgstr "" "Grabstein verwandelt. Sie kann sich aber auch möglicherweise durch eine zu " "nahe Explosion in einen Grabstein verwandeln." -#: src/help.c:101 +#: src/help.c:106 msgid "" "The teleporter will move you from one place to another, if you step into it. " "The destination teleporter depends on which direction you step the current " @@ -5063,7 +5339,7 @@ msgstr "" "Ort zum anderen. Der Ziel-Teleporter hängt von der Richtung ab, von der man " "den Anfang-Teleporter betritt." -#: src/help.c:102 +#: src/help.c:107 msgid "" "Stir the pot, and then you will be able to use the gravitation switch. While " "you are stirring the pot, there is no gravitation at all. Press fire after " @@ -5073,16 +5349,16 @@ msgstr "" "werden. Während man den Topf rührt, gibt es keine Gravitation. Drücke den " "Feuerknopf, nachdem der Topf gerührt wurde." -#: src/help.c:103 +#: src/help.c:108 msgid "" "Sometimes you have to collect skeletons before you can use the pot. In some " "other caves, they must be collected like diamonds to open the exit." msgstr "" -"Manchmal muss man Skelette einsammeln, bevor man einen Topf benützen kann. " -"In anderen Höhlen wiederum müssen sie wie Diamanten eingesammelt werden, um " -"den Ausgang zu öffnen." +"Manchmal muss man Skelette einsammeln, bevor man einen Topf rühren kann. In " +"anderen Höhlen wiederum müssen sie wie Diamanten eingesammelt werden, um den " +"Ausgang zu öffnen." -#: src/help.c:104 +#: src/help.c:109 msgid "" "When this switch is active, you can use it to change the gravitation. The " "direction from which you use it will determine the direction the gravitation " @@ -5092,13 +5368,13 @@ msgstr "" "ändern. Die Richtung, aus welcher man ihn benützt, wird die Richtung der " "Gravitation bestimmen." -#: src/help.c:105 +#: src/help.c:110 msgid "With this switch you can controll the direction of the expanding wall." msgstr "" "Mit diesem Schalter kann man die Richtung, in der die Wachsmauer wachsen " "soll, steuern." -#: src/help.c:106 +#: src/help.c:111 msgid "" "With this you can change the direction of creatures, like guards and " "butterflies. Sometimes it works automatically." @@ -5106,28 +5382,31 @@ msgstr "" "Mit diesem Schalter kann man die Richtung der Glühwürmchen und " "Schmetterlinge steuern. Manchmal arbeitet er auch automatisch." -#: src/help.c:107 +#: src/help.c:112 msgid "This switch controls the speed of biters." msgstr "Dieser Schalter steuert die Geschwindigkeit der Beisser." -#: src/help.c:108 +#: src/help.c:113 msgid "This turns the replicator on or off." -msgstr "" +msgstr "Dieser Schalter schaltet den Replikator ein und aus." -#: src/help.c:109 +#: src/help.c:114 msgid "This switch can be used to reverse the direction of conveyor belts." msgstr "" +"Dieser Schalter kann dazu verwendet werden, um die Laufrichtung des " +"Förderbandes umzukehren." -#: src/help.c:110 +#: src/help.c:115 msgid "" "The conveyor belts also have a switch which can completely stop their action." msgstr "" +"Das Förderband besitzt auch einen Schalter um es komplett abzuschalten." -#: src/help.c:111 +#: src/help.c:116 msgid "Strange elements" msgstr "Eigenartige Elemente" -#: src/help.c:111 +#: src/help.c:116 msgid "" "Some caves contain strange elements, for example, diamonds which cannot be " "collected, a player that cannot move... Don't be surprised!" @@ -5136,35 +5415,50 @@ msgstr "" "eingesammelt werden können oder auch Spielfiguren, die sich nicht bewegen " "können. Lassen Sie sich (nicht) überraschen!" -#: src/help.c:113 -#, fuzzy +#: src/help.c:118 msgid "Playing hints" -msgstr "Das Spiel spielen" +msgstr "Spieletipps" -#: src/help.c:113 +#: src/help.c:118 +#, fuzzy msgid "" "Obviously, holding fire and pushing a direction causes you to 'touch' an " "adjacent square without moving into it, collecting diamonds or removing " -"dirt, but a move which is very useful is to push a boulder in this way. It's " -"a good way of making sure you don't 'overpush' the boulder and later on you " -"will have to use this." +"dirt, but a move which is very useful is to push a stone in this way. It's a " +"good way of making sure you don't 'overpush' the stone and later on you will " +"have to use this." msgstr "" +"Den Feuerknopf gedrückt zu halten und in eine Richtung zu steuern " +"verursacht, daß man ein benachbartes Quadrat 'berührt', ohne sich dorthin zu " +"bewegen. So kann man Diamanten einsammeln oder Erde entfernen oder, was " +"ebenfalls sehr nützlich ist, Felsbrocken auf diese Art zu verschieben. Es " +"ist eine gute Methode, um Felsbrocken nicht zu weit zu verschieben. Manchmal " +"ist es sogar zwingend notwendig, diese Methode anzuwenden." -#: src/help.c:114 +#: src/help.c:119 +#, fuzzy msgid "" -"Boulders do not roll off of the side of magic walls. In some caves it is " -"shown where these walls are by placing a boulder to show you that it's magic." +"Stones do not roll off of the side of magic walls. In some caves it is shown " +"where these walls are by placing a stone to show you that it's magic." msgstr "" +"Felsbrocken rollen nicht von der Seite einer Zaubermauer herunter. In " +"manchen Höhlen wird die Position dieser Mauern angezeigt, in dem Felsbrocken " +"so platziert werden, daß man sieht, daß es sich um Zaubermauern handelt." -#: src/help.c:115 +#: src/help.c:120 msgid "" "Expanding walls are always horizontally expanding on both sides. In some " "caves it is shown which parts of the wall are expanding by forcing you to " "pass it on the other side. You will see the passage close in behind you and " "this eliminates some guessword in the next puzzle." msgstr "" +"Wachsmauern wachsen immer horizontal an beiden Enden. In manchen Höhlen wird " +"es angezeigt, welche Teile der Mauer wachsen, in dem sie den Spieler dazu " +"zwingen, sie zur anderen Seite weiterzuführen. Man sieht die Passage hinter " +"sich schließen, was einige Ungewissheiten das nächste Rätzel betreffend " +"beseitigen kann." -#: src/help.c:116 +#: src/help.c:121 msgid "" "The screen starts scrolling at the edge of the screen. This means it's a bad " "idea to run in places where enemies are likely to be, since you won't have " @@ -5174,8 +5468,18 @@ msgid "" "travel) or through undug mud. Never rush unless you're sure you can or you " "need to." msgstr "" +"Das Spielfeld beginnt erst am Rande des Bildschirms zu scrollen. Das " +"bedeutet, daß es in dieser Situation keine gute Idee ist, an Orte zu laufen, " +"an denen möglicherweise Gegner sein könnten, da man dann zu wenig Zeit " +"hätte, um rechtzeitig reagieren zu können. Entweder bewegt man sich in " +"diesem Fall sehr vorsichtig und behält den Überblick, wo sich ungefähr die " +"Gegner in der Höhle befinden könnten oder man nimmt einen anderen Weg, um " +"der Gefahr aus dem Weg gehen zu können (z. B. durch leeren Raum, in dem sich " +"weniger wahrscheinlich Gegner bewegen) oder auch durch noch nicht " +"durchgrabene Erde. Überstürzen Sie nichts, außer Sie sind sicher, daß Sie es " +"auch schaffen oder müssen." -#: src/help.c:117 +#: src/help.c:122 msgid "" "Enemies like to have dirt to move around on. Clearing lots of dirt can " "create safe patches for you. This technique can be used on levels where you " @@ -5184,48 +5488,107 @@ msgid "" "through empty space (when two enemies are circling each other in a certain " "way)." msgstr "" +"Gegner bewegen sich am liebsten um Erde herum. Große Mengen an Erde zu " +"entfernen hilft sichere Ort für den Spieler zu schaffen. Diese Technik kann " +"in Levels behilflich sein, in denen viele Glühwürmchen frei gelassen wurden " +"und es sehr schwierig ist, sie zu zerschmettern. Man sollte jedoch trotzdem " +"vorsichtig sein - manche Gegnerformationen können mitten im leeren Raum " +"schweben und sich sogar langsam durch ihn bewegen (wenn sich z. B. zwei " +"Gegener in einer bestimmten Art gegenseitig umkreisen)." -#: src/help.c:118 +#: src/help.c:123 +#, fuzzy msgid "" "Magic walls often have a fairly strict time limit, some more than others. " -"Collect up as many boulders as you can just above the magic wall, leaving " -"one strip of mud, and then finally remove this strip and watch the goods get " +"Collect up as many stones as you can just above the magic wall, leaving one " +"strip of mud, and then finally remove this strip and watch the goods get " "delivered. Just make sure you've cleared an appropriate amount of space " "under the wall ;)" msgstr "" +"Zaubermauern haben oft ein ziemlich knappes Zeitlimit, manche mehr als " +"andere. Sammeln Sie so viele Felsbrocken wie möglich oberhalb einer " +"Zaubermauer an, die nur durch einen schmalen Streifen Erde davon getrennt " +"sind, um durch das gezielte Entfernen dieses schmalen Streifens Erde so " +"viele Felsbrocken als möglich auf einmal durchfallen lassen zu können. " +"Stellen Sie nur sicher, daß Sie vorher unterhalb der Zaubermauer ausreichend " +"Leerfelder geschaffen haben!" -#: src/help.c:119 +#: src/help.c:124 +#, fuzzy msgid "" "Voodoo dolls need to be protected from enemies at all costs, but dropping a " -"boulder on one is usually harmless!" +"stone on one is usually harmless!" msgstr "" +"Voodoo-Puppen müssen vor Gegner um jeden Preis beschützt werden. Einen " +"Felsbrocken darauffallen zu lassen ist normalerweise ungefährlich." -#: src/help.c:120 +#: src/help.c:125 msgid "" "You can't collect diamonds which are falling, but you can collect them when " "they momentarily bounce off of something or down the side of a pile." msgstr "" +"Man kann fallende Diamanten nicht einsammeln, man kann sie jedoch einfangen, " +"wenn sie vorübergehend von etwas abprallen oder von einem Haufen " +"herunterkullern." -#: src/help.c:121 +#: src/help.c:126 msgid "" "Some levels have hidden exits. These always look like titanium wall, but " "don't flash. You can always tell where they are by visual clues and " "deduction." msgstr "" +"Einige Level haben versteckte Ausgänge. Diese sehen immer wie Titanmauern " +"aus, blinken aber nicht. Man kann jedoch durch sichtbare Hinweise oder " +"Schlussfolgerungen erahnen, wo diese sind." -#: src/help.c:122 +#: src/help.c:127 msgid "" "Don't blindly take all diamonds. Some of them are red herrings, some may be " "unobtainable or part of a trap, and believe it or not, sometimes a diamond " "is more useful to you on the screen than it is collected, due to some " "sadistic puzzles :)" msgstr "" +"Sammeln Sie nicht blind alle Diamanten ein. Manche sind nur ein " +"Ablenkungsmanöver, andere sind unerreichbar oder Teil einer Falle. Und " +"glauben Sie es oder nicht - manchmal sind die Diamanten am Bildschirm auf " +"Grund eines gemeinen Rätzels nützlicher, als wenn sie eingesammelt werden " +"würden." -#: src/help.c:125 +#: src/help.c:130 +msgid "Keys to control the player" +msgstr "Tasten um den Spieler zu steuern" + +#: src/help.c:131 +msgid "" +"To play the game, press the New Game button. You can select which level you " +"start playing at. During the game, you can control your player with the " +"cursor keys. The Ctrl key has a special meaning: you can snap items, ie. " +"pick up things without moving. If you get stuck, press Escape to restart the " +"level. If there are too many players in the cave and you cannot move, " +"pressing F2 causes the active one to explode. With F11, you can switch to " +"full screen mode. To view the alternative status bar which show keys and " +"skeletons collected, hold down the left shift button.\n" +"These are the game elements:" +msgstr "" +"Um ein Spiel zu beginnen, drücken Sie den 'Neues Spiel'-Knopf. Im darauf " +"erscheinenden Fenster können Sie den gewünschten Level, mit dem Sie beginnen " +"möchten, auswählen. Während des Spiels steuern Sie den Spieler mit den " +"Cursor-Tasten. Die CTRL-Taste hat eine spezielle Bedeutung: Sie können z. B. " +"Diamanten aus einer Entfernung von einem Feld einsammeln ohne sich zu " +"bewegen. Falls Sie irgendwo hängen bleiben, können Sie jederzeit ESC " +"drücken, um den Level neu zu starten. Falls zu viele Spieler in der Höhle " +"sind und Sie sich trotzdem nicht bewegen können, drücken Sie F2, damit der " +"aktive Spieler zerstört wird. Mit F11 kann man in den Vollbildmodus " +"wechseln. Um die alternative Statusleiste, die die eingesammelten Schlüssel " +"und Skelette zeigt, anzuzeigen, drücken und halten Sie die linke Umschalt-" +"Taste.\n" +"Das sind die Spiel-Elemente:" + +#: src/help.c:134 msgid "Snapshots" msgstr "Schnappschüsse" -#: src/help.c:125 +#: src/help.c:134 msgid "" "You can experiment with levels by saving and reloading snapshots. However, " "if you are playing a reloaded cave, you will not get score or extra lives." @@ -5234,7 +5597,7 @@ msgstr "" "Umständen besser erforschen. Für eine aus einem Schnappschuss gespielte " "Höhle bekommt man allerdings keine Punkte oder Extraleben." -#: src/help.c:126 +#: src/help.c:135 msgid "" "Every time you play a game, GDash records all your movements. These " "recordings can be viewed later, and can be saved with the caveset. To check " @@ -5245,7 +5608,7 @@ msgstr "" "späteren Zeitpunkt angesehen werden. Um die Aufnahmen anzusehen, klicken Sie " "auf 'Zeige Wiederholungen' im 'Spiel'-Menü." -#: src/help.c:127 +#: src/help.c:136 msgid "" "If you were very lucky in a cave, or something interesting happened, you do " "not have to be worry, as all played caves are recorded. In the Replays " @@ -5263,7 +5626,7 @@ msgstr "" "gespeichert. Somit kann man die Aufnahmen sogar weitergeben, um nicht " "gelöste Höhlen mit anderen Spielern zu diskutieren." -#: src/help.c:128 +#: src/help.c:137 msgid "" "During the replay of the cave, you can gain control of the replay if you use " "the usual cursor keys (left, up, etc.) to move. From that point, you can " @@ -5278,12 +5641,11 @@ msgstr "" "gewesen wenn...' selbst beantworten. Oder man kann die Höhle besser als der " "Originalspieler lösen." -#: src/help.c:131 +#: src/help.c:140 msgid "Themes" msgstr "Themen" -#: src/help.c:131 -#, fuzzy +#: src/help.c:140 msgid "" "The game also supports themes. You can use the installed png file as a " "template. Cells can have any arbitrary size, not necessarily 16x16 pixels. " @@ -5310,14 +5672,15 @@ msgstr "" "Dieses Spiel unterstützt auch Themen. Sie können die installierte PNG-Datei " "als Vorlage verwenden. Zellen können jede beliebige Größe haben und nicht " "unbedingt nur 16 x 16 Pixel. Sie müssen jedoch quadratisch sein und einen " -"Alpha-Kanal besitzen. Falls die Grafik nur eine geringe Anzahl an Farben hat " -"(volles Rot für die Vordergrundfarbe, volles Grün für die Amöbe, etc.), wird " -"das Spiel die originalen C64-Farben verwenden, verschiedene für jede Höhle. " -"Ob die PNG-Datei als Echtfarbgrafik oder als eine mit C64-Farben " -"interpretiert wird, hängt von den verwendeten Farben ab und wird automatisch " -"erkannt. Eine Bilddatei mit nur #000000, #00FF00 und dergleichen wird als " -"C64-Thema erkannt und verwendet werden. Für C64-Themen, bedeuten die Farben " -"Folgendes:\n" +"Alpha-Kanal (oder eine transparente Ebene in manchen Grafikprogrammen) " +"besitzen. Falls die Grafik nur eine geringe Anzahl an Farben hat (volles Rot " +"für die Vordergrundfarbe, volles Grün für die Amöbe, etc.), wird das Spiel " +"die originalen C64-Farben verwenden, verschiedene für jede Höhle. Ob die PNG-" +"Datei als Echtfarbgrafik oder als eine mit C64-Farben interpretiert wird, " +"hängt von den verwendeten Farben ab und wird automatisch erkannt. Eine " +"Bilddatei mit nur #000000, #00FF00 und dergleichen wird als C64-Thema " +"erkannt und verwendet werden.\n" +"Für C64-Themen bedeuten die Farben folgendes:\n" "- Transparent: Sie sollten sie überall dort verwenden, wo sich kein Element " "befindet.\n" "- Schwarz 0x000000: Hintergrundfarbe.\n" @@ -5331,11 +5694,11 @@ msgstr "" "- Weiß 0xffffff: wird intern für den Editor verwendet, wird als Farbe für " "die Pfeile verwendet.\n" -#: src/help.c:146 +#: src/help.c:155 msgid "Some words of warning" msgstr "Einige warnende Worte" -#: src/help.c:147 +#: src/help.c:156 msgid "" "- Importing may not be complete and correct for all games and engines. There " "may be some unplayable caves, as older games had no precise timing.\n" @@ -5358,7 +5721,7 @@ msgstr "" "Markierungen entfernen' im Editor verwenden, um ältere oder unbekannte " "Markierungen zu entfernen.\n" -#: src/help.c:160 +#: src/help.c:169 msgid "" "This editor lets you create your own levels and cave sets. It can operate in " "two modes, a game editor mode, and a cave edit mode.\n" @@ -5367,11 +5730,11 @@ msgstr "" "unterschiedlichen Levels. Er kann in zwei Modi betrieben werden - dem Spiel-" "Editor-Modus und dem Höhlen-Editor-Modus.\n" -#: src/help.c:161 +#: src/help.c:170 msgid "Game editor" msgstr "Spiel-Editor" -#: src/help.c:161 +#: src/help.c:170 msgid "" "In this one, you are presented with an overview of your game. You can click " "on any cave to select it. Then you can select File|Edit Cave to view or " @@ -5389,19 +5752,19 @@ msgstr "" "angeordnet werden. Um eine neue Höhle zu erzeugen, wählen Sie den Menü-" "Befehl 'Datei/Neue Höhle' aus." -#: src/help.c:162 +#: src/help.c:171 msgid "Cave editor" msgstr "Höhlen-Editor" -#: src/help.c:162 +#: src/help.c:171 msgid "In this mode, you can edit a cave." msgstr "In diesem Modus kann man eine Höhle editieren." -#: src/help.c:163 +#: src/help.c:172 msgid "How a cave is generated" msgstr "Wie eine Höhle generiert wird" -#: src/help.c:163 +#: src/help.c:172 msgid "" "A cave is built up of different objects. First, it is filled with random " "elements, of which there can be five. The probabilities of each can be set. " @@ -5415,7 +5778,7 @@ msgstr "" "verschiedene Dateiformate, die von anderen Spielen verwendet werden, " "importieren zu können." -#: src/help.c:164 +#: src/help.c:173 msgid "" "After this step, series of cave objects are rendered over the random data, " "which can be of various types: points, lines, rectangles and so. These are " @@ -5425,17 +5788,17 @@ msgstr "" "zufälligen Daten erstellt, welche verschiedene Arten sein können: " "Einzelpunkte, Linien, Rechtecke und so weiter. Das sind folgende:" -#: src/help.c:165 +#: src/help.c:174 msgid "This is a single element. Click anywhere on the cave map to create one." msgstr "" "Das ist ein einzelnes Element. Klicken Sie irgendwo in die Höhlen-Karte, um " "ein Element zu erzeugen." -#: src/help.c:166 +#: src/help.c:175 msgid "Freehand" msgstr "Freihand" -#: src/help.c:166 +#: src/help.c:175 msgid "" "This is a freehand editing tool, which places many points as you click and " "drag the mouse. Use it wisely; lines and other drawing elements are more " @@ -5446,7 +5809,7 @@ msgstr "" "bewegt. Gehen Sie sparsam damit um. Linien und andere Zeichenelemente sind " "einfacher, und die damit erzeugte Höhle ist somit auch leichter zu editieren." -#: src/help.c:167 +#: src/help.c:176 msgid "" "Click on the map to select the start point, then drag the mouse and finally " "release the button, to set the end point." @@ -5456,7 +5819,7 @@ msgstr "" "gewünschte Stelle und lassen dann die Maustaste wieder los, um den Endpunkt " "zu setzen." -#: src/help.c:168 +#: src/help.c:177 msgid "" "Click on the map and then drag the mouse, to define the two corners of the " "rectangle." @@ -5465,12 +5828,12 @@ msgstr "" "linke Maustaste, ziehen den Cursor an die gewünschte Stelle und lassen dann " "die Maustaste wieder los, um die beiden Ecken des Rechtecks zu definieren." -#: src/help.c:169 +#: src/help.c:178 msgid "Similar to the above, but this is filled with a second element." msgstr "" "Ähnlich dem oben genannten, es wird jedoch mit einem zweiten Element gefüllt." -#: src/help.c:170 +#: src/help.c:179 msgid "" "This one is like a filled rectangle, but the horizontal and vertical " "distance of the elements can be changed. Use the object properties dialog to " @@ -5481,7 +5844,7 @@ msgstr "" "Eigenschaften-Dialog, um die Entfernung zu wählen, nachdem Sie den Raster " "platziert haben." -#: src/help.c:171 +#: src/help.c:180 msgid "" "This one is tricky. A join object scans the map, from top to bottom, " "searching for a specific element. If it finds one, it draws the second " @@ -5511,7 +5874,7 @@ msgstr "" "bereits vorhandenen Diamanten verbindet). Dieser Effekt wurde bei vielen " "älteren Höhlen benutzt, um identische Höhlenteile zu erzeugen." -#: src/help.c:172 +#: src/help.c:181 msgid "" "This tool places a flood fill object. The object will fill an area of any " "shape in the cave with a specific element. The border of the area is set by " @@ -5527,11 +5890,11 @@ msgstr "" "die Begrenzung dieser zu füllenden Fläche aus Objekten besteht und nicht aus " "Zufallsdaten, ansonst wird die gesamte Höhle mit Zufallsdaten gefüllt werden." -#: src/help.c:173 +#: src/help.c:182 msgid "Fill by replacement" msgstr "Ersatzfüllung" -#: src/help.c:173 +#: src/help.c:182 msgid "" "This tool places another kind of fill object. This one will replace an " "element with another one; the area in which this replacement takes place " @@ -5546,7 +5909,7 @@ msgstr "" "nur das neue Element einstellen; das zu findende Element wird automatisch " "eingestellt, sobald man auf die Karte klickt, um das Objekt einzusetzen." -#: src/help.c:176 +#: src/help.c:185 msgid "" "You can use random generated mazes in cave designs. The walls and paths of " "the maze can be made from any freely chosen element. Also you can select 'No " @@ -5564,19 +5927,19 @@ msgstr "" "Streuungswert auf -1 gesetzt wird, ist den Irrgarten bei jedem Spiel " "unterschiedlich." -#: src/help.c:177 +#: src/help.c:186 msgid "The unicursal maze is a long and curvy path." msgstr "Der unikursale Irrgarten ist ein langer und kurviger Pfad." -#: src/help.c:178 +#: src/help.c:187 msgid "The maze like that in PacMan: there are no dead ends." msgstr "Ein Irrgarten wie in PacMan - es gibt keine Sackgassen." -#: src/help.c:179 +#: src/help.c:188 msgid "Random Fill" msgstr "Zufällige Füllung" -#: src/help.c:179 +#: src/help.c:188 msgid "" "This tool can be used to fill a part of a cave with random elements. It is " "similar to the random cave setup. At most five elements can be specified. " @@ -5601,7 +5964,7 @@ msgstr "" "werden. Sie können sie aber auch auf -1 einstellen, damit die Höhle bei " "jedem Spiel anders aussehen wird." -#: src/help.c:180 +#: src/help.c:189 msgid "" "This tool is simple: copies a rectangular part of the cave, and pastes it " "into a new location. The source and destination area may overlap. To select " @@ -5621,7 +5984,7 @@ msgstr "" "horizontal oder vertikal gespiegelt werden. Öffnen Sie das Objekt-" "Eigenschaften-Fenster, um den Inhalt zu spiegeln." -#: src/help.c:181 +#: src/help.c:190 msgid "" "To select an element, you can middle-click any time on the cave map to pick " "one you already use. Use Ctrl together with middle-click to pick a fill " @@ -5633,17 +5996,17 @@ msgstr "" "CTRL + mittlere Maustaste kann ein Füll-Element aufgenommen werden. Mit " "Shift + mittlere Maustaste kann ein Element aus der Höhle aufgenommen werden." -#: src/help.c:182 +#: src/help.c:191 msgid "Managing cave objects" msgstr "Höhlen-Objekte verwalten" -#: src/help.c:182 +#: src/help.c:191 msgid "Use this tool to modify already existing cave objects." msgstr "" "Verwenden Sie dieses Werkzeug, um bereits vorhandene Höhlen-Objekte zu " "verändern." -#: src/help.c:183 +#: src/help.c:192 msgid "" "By looking at the cave, you can see that every object is drawn with a slight " "yellowish color to distinguish them from random data. Click on any object to " @@ -5653,7 +6016,7 @@ msgstr "" "gelblichen Farbe dargestellt, um es von Zufallsdaten zu unterscheiden. " "Klicken Sie auf irgendein Objekt um es auszuwählen." -#: src/help.c:185 +#: src/help.c:194 msgid "" "A selected object can be repositioned with the mouse by clicking and " "dragging. You can resize lines and rectangles by moving them by their end " @@ -5670,7 +6033,7 @@ msgstr "" "Objekte auf diese Weise einstellen. Der Ursprung einer Füllung ist mit einem " "X markiert, falls man sie zum Editieren auswählt." -#: src/help.c:188 +#: src/help.c:197 msgid "" "By double-clicking on an object, or selecting object properties from the " "menu, a dialog pops up, which shows its parameters that you can modify." @@ -5679,7 +6042,7 @@ msgstr "" "Eigenschaften aus dem Menü, erscheint ein Dialog-Fenster, das die Parameter " "anzeigt, die modifiziert werden können." -#: src/help.c:189 +#: src/help.c:198 msgid "" "The order these objects are drawn also affects the cave. To reorder them, " "you can click on the To top and To bottom menu items. The object list on the " @@ -5693,11 +6056,11 @@ msgstr "" "gezeichnet werden, zu ändern. Man kann sie auch löschen oder die " "standardmäßigen Funktionen Ausschneiden, Kopieren und Einfügen benützen." -#: src/help.c:190 +#: src/help.c:199 msgid "Cave properties" msgstr "Höhlen-Eigenschaften" -#: src/help.c:190 +#: src/help.c:199 msgid "" "To view cave properties, select Edit|Cave properties from the menu. A dialog " "will pop up with many different options. Those are not explained here; most " @@ -5711,7 +6074,7 @@ msgstr "" "Erklärungen, die auf dem Bildschirm erscheinen, sobald man mit dem Maus-" "Cursor über sie fährt." -#: src/help.c:191 +#: src/help.c:200 msgid "" "If you want to restart editing, all cave objects can be deleted at once. A " "cave map can also be deleted by selecting Remove map from the menu." @@ -5720,7 +6083,7 @@ msgstr "" "der Höhle auf einmal gelöscht werden. Eine Höhlen-Karte kann auch durch " "Auswählen von 'Karte entfernen' aus dem Menü gelöscht werden." -#: src/help.c:193 +#: src/help.c:202 msgid "" "Cave objects can be merged into a single map. If you designed a new cave, " "this has no particular use; but for editing an imported, map-based cave, it " @@ -5736,11 +6099,11 @@ msgstr "" "Höhle in einer anderen Applikation laden möchten, die keine BDCFF-Höhlen-" "Objekte unterstützt)." -#: src/help.c:194 +#: src/help.c:203 msgid "More on random cave data" msgstr "Mehr über die zufälligen Höhlen-Daten" -#: src/help.c:195 +#: src/help.c:204 msgid "" "The elements which fill the cave initially are not really random. They are " "generated using a predictable random number generator, which can come up " @@ -5766,7 +6129,7 @@ msgstr "" "definiert wird. Der anzuzeigende Level kann mit dem Schieberegler, der sich " "auf der rechten oberen Ecke des Editors befindet, eingestellt werden." -#: src/help.c:203 +#: src/help.c:212 msgid "" "A cave can be made totally random, by entering -1 in the random seed entry. " "Remember that you cannot test every cave that is generated this way, and " @@ -5781,7 +6144,7 @@ msgstr "" "Diamanten' ein negativer Wert eingegeben, werden diese bei Beginn des Spiels " "gezählt und vom angegebenen Wert abgezogen." -#: src/help.c:207 +#: src/help.c:216 msgid "" "The Edit menu contains a random elements setup tool, which can be used to " "setup the random number generator for the cave. It is able to edit all five " @@ -5792,11 +6155,11 @@ msgstr "" "Generator für die Höhle einzustellen. Es ist dazu fähig, alle fünf Levels zu " "editieren und Änderungen in der Höhle sofort anzuzeigen." -#: src/help.c:209 +#: src/help.c:218 msgid "Visible region of a cave" msgstr "Sichtbarer Bereich der Höhle" -#: src/help.c:210 +#: src/help.c:219 msgid "" "Every cave can have a rectangular area, which may be smaller than the cave " "itself, and will be visible during the game. Cave elements outside this " @@ -5811,11 +6174,11 @@ msgstr "" "Anpassung'-Werkzeug verwenden, um die Größe automatisch durch das " "Kontrollieren von Titanmauern und Eingang/Ausgang-Elementen einzustellen." -#: src/help.c:214 +#: src/help.c:223 msgid "Shift cave map" msgstr "Höhlen-Karte verschieben" -#: src/help.c:215 +#: src/help.c:224 msgid "" "If the cave is map-based, you can use the shift tools to move the map. This " "might be useful if you want to enlarge it and otherwise there would be no " @@ -5830,18 +6193,20 @@ msgstr "" "irgendeine Richtung verschoben haben. Für Objekt-basierende Höhlen können " "Sie alle Objekte zugleich auswählen, um sie alle auf einmal zu bewegen." -#: src/help.c:218 -#, fuzzy +#: src/help.c:227 msgid "Cave stories" -msgstr "Höhlensatz-_Eigenschaften" +msgstr "Höhlen-Geschichten" -#: src/help.c:219 +#: src/help.c:228 msgid "" "Every cave can have a story associated to it, which will be shown when the " "cave is played. This story can connect the caves to each other." msgstr "" +"Jede Höhle kann eine damit verbundene Geschichte besitzen, die angezeigt " +"wird sobald die Höhle gespielt wird. Die Geschichte kann die Höhlen " +"miteinander verbinden." -#: src/help.c:222 +#: src/help.c:231 msgid "" "A caveset can have its own title screen. To add one, click Cave set title " "image in the File menu. If your image is transparent (has a transparent " @@ -5849,8 +6214,14 @@ msgid "" "you can also add a small background image, which will be tiled and scrolled " "beneath the big one." msgstr "" +"Ein Höhlensatz kann sein eigenes Titelbild besitzen. Um eines hinzuzufügen, " +"klicken Sie auf 'Höhlensatz Titelbild' im Datei-Menü. Hat Ihr Bild " +"transparente Bereiche (hat es eine transparente Ebene oder Alpha-Kanal; der " +"Ausdruck hängt vom verwendeten Grafikprogramm ab), kann man auch ein kleines " +"Hintergrundbild hinzufügen, daß dann als sich wiederholende, scrollende " +"Kachel hinter dem eigentlichen Titelbild verwendet wird." -#: src/help.c:225 +#: src/help.c:234 msgid "" "The editor can also be used to delete highscore files of a game or any of " "the caves." @@ -5858,7 +6229,7 @@ msgstr "" "Der Editor kann auch dazu benutzt werden, um Highscore-Dateien von Spielen " "oder Höhlen zu löschen." -#: src/help.c:226 +#: src/help.c:235 msgid "" "GDash uses two mechanisms to store highscores: it can save them in a " "separate file (this is done automatically), and it can also save them in the " @@ -5873,17 +6244,17 @@ msgstr "" "die Option, die Highscore-Listen von der BDCFF-Datei oder von der separat " "abgespeicherten Datei zu verwenden." -#: src/help.c:230 +#: src/help.c:239 msgid "If you are finished with drawing, use this button to test the cave." msgstr "" "Mit dem 'Test'-Knopf in der Werkzeugleiste können Sie jederzeit die Höhle " "testen." -#: src/help.c:231 +#: src/help.c:240 msgid "Loading and saving" msgstr "Laden und Speichern" -#: src/help.c:231 +#: src/help.c:240 msgid "" "To save your work, use the File|Save button from the main window. You can " "save games in a BDCFF file, which is a text format used widely on the " @@ -5893,11 +6264,11 @@ msgstr "" "Speichern'-Menüoption des Hauptfensters. Spiele können in eine BDCFF-Datei, " "ein im Internet verbreitetes BD-Textformat, gespeichert werden." -#: src/help.c:232 +#: src/help.c:241 msgid "HTML Galleries" msgstr "HTML-Galerien" -#: src/help.c:232 +#: src/help.c:241 msgid "" "This program is able to save cave sets in a HTML gallery, which you can put " "on a web server, so other ones can preview them online. To do this, select " @@ -5911,11 +6282,11 @@ msgstr "" "Datei. Die .PNG-Dateien werden mit einem ähnlichen Namen in dasselbe " "Verzeichnis abgespeichert." -#: src/help.c:235 +#: src/help.c:244 msgid "Converting to a cavepack" msgstr "In einen Höhlen-Pack konvertieren" -#: src/help.c:235 +#: src/help.c:244 msgid "" "You can convert your individual caves or the complete caveset to a cavepack, " "which is a file format readable by the Crazy Light Construction Kit, written " @@ -5946,11 +6317,11 @@ msgstr "" "weitere Informationen lesen Sie bitte die Dokumentationen dieser " "Applikationen." -#: src/help.c:281 +#: src/help.c:290 msgid "GDash Help" msgstr "GDash Hilfe" -#: src/sdlmain.c:1245 +#: src/sdlmain.c:748 msgid "Invalid cave or level number!\n" msgstr "Ungültige Höhlen- oder Level-Nummer!\n" @@ -5986,26 +6357,138 @@ msgstr "4x Bilinear" msgid "System default" msgstr "System-Standardwert" -#: src/settings.c:612 +#: src/settings.c:627 msgid "Select cave number C" msgstr "Wähle Höhle Nummer C" -#: src/settings.c:613 +#: src/settings.c:628 msgid "Select level number L" msgstr "Wähle Level Nummer L" -#: src/settings.c:614 +#: src/settings.c:629 msgid "Load internal caveset number I" msgstr "Lade internen Höhlensatz Nummer I" -#: src/settings.c:615 +#: src/settings.c:630 msgid "Show license and quit" msgstr "Zeige Lizenz und beende" -#: src/settings.c:616 +#: src/settings.c:631 msgid "Cave names" msgstr "Höhlen-Namen" -#: src/settings.c:621 +#: src/settings.c:636 msgid "[FILE NAME]" msgstr "[DATEINAME]" + +#~ msgid "Converts diamond to" +#~ msgstr "Verwandelt Diamanten in" + +#~ msgid "Converts stone to" +#~ msgstr "Verwandelt Felsbrocken in" + +#~ msgid "Converts mega stone to" +#~ msgstr "Verwandelt Felsbrocken in" + +#~ msgid "Converts nitro pack to" +#~ msgstr "Verwandelt Nitro-Pack in" + +#~ msgid "Converts flying stone to" +#~ msgstr "Verwandelt fliegende Felsbrocken in" + +#~ msgid "Converts flying diamonds to" +#~ msgstr "Verwandelt fliegende Diamanten in" + +#~ msgid "Dragonfly explosion (1)" +#~ msgstr "Libelle Explosion (1)" + +#~ msgid "Dragonfly explosion (2)" +#~ msgstr "Libelle Explosion (2)" + +#~ msgid "Dragonfly explosion (3)" +#~ msgstr "Libelle Explosion (3)" + +#~ msgid "Dragonfly explosion (4)" +#~ msgstr "Libelle Explosion (4)" + +#~ msgid "Dragonfly explosion (5)" +#~ msgstr "Libelle Explosion (5)" + +#~ msgid " Explodes to" +#~ msgstr "Explodiert zu" + +#~ msgid "Stone births convert to" +#~ msgstr "Felsbrocken-Geburten verwandeln sich in" + +#~ msgid "Nitro packs explode to" +#~ msgstr "Nitro-Packs explodieren zu" + +#~ msgid "The number of diamonds each skeleton is worth." +#~ msgstr "Die Anzahl an Diamanten, welche jedes Skelett wert ist." + +#~ msgid "Guard" +#~ msgstr "Glühwürmchen" + +#~ msgid "Alternative guard" +#~ msgstr "Alternatives Glühwürmchen" + +#~ msgid "Random seed value" +#~ msgstr "Wert der zufälligen Streuung" + +#~ msgid "" +#~ "This determines if the amoeba timer starts before the player appearing. " +#~ "Amoeba can always be activated before that; but if this is set to true, " +#~ "the timer will not start." +#~ msgstr "" +#~ "Diese Option bewirkt, ob die Zeit der Amöbe vor dem Erscheinen der " +#~ "Spielfigur startet. Die Amöbe kann jederzeit davor aktiviert werden. Wenn " +#~ "diese Option aktiviert ist, wird die Zeit nicht starten." + +#~ msgid "Active elements" +#~ msgstr "Aktive Elemente" + +#~ msgid "More elements" +#~ msgstr "Mehr Elemente" + +#~ msgid "" +#~ "If this option is enabled, the direction of growing for the horizontal " +#~ "and vertical expanding wall is switched." +#~ msgstr "" +#~ "Wird diese Option aktiviert, wird die Richtung für die horizontale und " +#~ "vertikale Wachsmauer umgekehrt." + +#~ msgid "Cave effects" +#~ msgstr "Höhlen-Effekte" + +#~ msgid "Gravitation effects" +#~ msgstr "Gravitations-Effekte" + +#~ msgid "Elements move on first and last row, too." +#~ msgstr "" +#~ "Wird diese Option aktiviert, können sich die Elemente auch in der ersten " +#~ "und letzten Reihe der Höhle bewegen." + +#~ msgid "" +#~ "This very special wall converts stones into diamonds and vice versa. Note " +#~ "that a magic wall can only be activated for some limited time." +#~ msgstr "" +#~ "Diese spezielle Mauer verwandelt Felsbrocken in Diamanten und umgekehrt. " +#~ "Zaubermauern können nur für eine begrenzte Zeit aktiviert werden." + +#~ msgid "Caves: %d
\n" +#~ msgstr "Höhlen: %d
\n" + +#~ msgid "Author: %s
\n" +#~ msgstr "Author: %s
\n" + +#~ msgid "Description: %s
\n" +#~ msgstr "Beschreibung: %s
\n" + +#~ msgid "WWW: %s
\n" +#~ msgstr "WWW: %s
\n" + +#~ msgid "Remark: %s
\n" +#~ msgstr "Anmerkung: %s
\n" + +#~ msgid "Story:
%s
\n" +#~ msgstr "Geschichte:
%s
\n" diff --git a/po/gdash.pot b/po/gdash.pot index 757175c..adc33c7 100644 --- a/po/gdash.pot +++ b/po/gdash.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gdash 20090113\n" +"Project-Id-Version: gdash 20090122\n" "Report-Msgid-Bugs-To: cirix@fw.hu\n" -"POT-Creation-Date: 2009-01-13 18:01+0100\n" +"POT-Creation-Date: 2009-01-25 19:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,13 +16,13 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/about.c:46 +#: src/about.c:47 msgid "" "Classic game similar to Emerald Mines.\n" "Collect diamonds and find exit!" msgstr "" -#: src/about.c:47 +#: src/about.c:48 msgid "translator-credits" msgstr "" @@ -148,7 +148,7 @@ msgstr "" msgid "None" msgstr "" -#: src/cave.c:34 src/gtkui.c:889 +#: src/cave.c:34 src/gtkui.c:891 msgid "Up" msgstr "" @@ -156,7 +156,7 @@ msgstr "" msgid "Up+right" msgstr "" -#: src/cave.c:34 src/gtkui.c:890 +#: src/cave.c:34 src/gtkui.c:892 msgid "Right" msgstr "" @@ -164,7 +164,7 @@ msgstr "" msgid "Down+right" msgstr "" -#: src/cave.c:34 src/gtkui.c:891 +#: src/cave.c:34 src/gtkui.c:893 msgid "Down" msgstr "" @@ -172,7 +172,7 @@ msgstr "" msgid "Down+left" msgstr "" -#: src/cave.c:34 src/gtkui.c:892 +#: src/cave.c:34 src/gtkui.c:894 msgid "Left" msgstr "" @@ -184,872 +184,868 @@ msgstr "" msgid "Milliseconds" msgstr "" -#: src/cave.c:350 src/editor.c:733 src/editorexport.c:574 +#: src/cave.c:350 src/editor.c:733 src/editorexport.c:632 msgid "Yes" msgstr "" -#: src/cave.c:350 src/editor.c:733 src/editorexport.c:574 +#: src/cave.c:350 src/editor.c:733 src/editorexport.c:632 msgid "No" msgstr "" -#: src/cavedb.c:118 +#: src/cavedb.c:119 msgid "Space" msgstr "" -#: src/cavedb.c:119 +#: src/cavedb.c:120 msgid "Dirt" msgstr "" -#: src/cavedb.c:120 +#: src/cavedb.c:121 msgid "Sloped dirt (up & right)" msgstr "" -#: src/cavedb.c:121 +#: src/cavedb.c:122 msgid "Sloped dirt (up & left)" msgstr "" -#: src/cavedb.c:122 +#: src/cavedb.c:123 msgid "Sloped dirt (down & left)" msgstr "" -#: src/cavedb.c:123 +#: src/cavedb.c:124 msgid "Sloped dirt (down & right)" msgstr "" -#: src/cavedb.c:124 +#: src/cavedb.c:125 msgid "Dirt ball" msgstr "" -#: src/cavedb.c:125 +#: src/cavedb.c:126 msgid "Dirt ball (falling)" msgstr "" -#: src/cavedb.c:126 +#: src/cavedb.c:127 msgid "Loose dirt" msgstr "" -#: src/cavedb.c:127 +#: src/cavedb.c:128 msgid "Loose dirt (falling)" msgstr "" -#: src/cavedb.c:128 +#: src/cavedb.c:129 msgid "Dirt 2" msgstr "" -#: src/cavedb.c:129 +#: src/cavedb.c:130 msgid "Brick wall" msgstr "" -#: src/cavedb.c:130 +#: src/cavedb.c:131 msgid "Sloped brick wall (up & right)" msgstr "" -#: src/cavedb.c:131 +#: src/cavedb.c:132 msgid "Sloped brick wall (up & left)" msgstr "" -#: src/cavedb.c:132 +#: src/cavedb.c:133 msgid "Sloped brick wall (down & left)" msgstr "" -#: src/cavedb.c:133 +#: src/cavedb.c:134 msgid "Sloped brick wall (down & right)" msgstr "" -#: src/cavedb.c:134 +#: src/cavedb.c:135 msgid "Non-sloped brick wall" msgstr "" -#: src/cavedb.c:135 src/cavedb.c:607 +#: src/cavedb.c:136 src/cavedb.c:615 msgid "Magic wall" msgstr "" -#: src/cavedb.c:136 +#: src/cavedb.c:137 msgid "Outbox" msgstr "" -#: src/cavedb.c:137 +#: src/cavedb.c:138 msgid "Outbox (open)" msgstr "" -#: src/cavedb.c:138 +#: src/cavedb.c:139 msgid "Invisible outbox" msgstr "" -#: src/cavedb.c:139 +#: src/cavedb.c:140 msgid "Invisible outbox (open)" msgstr "" -#: src/cavedb.c:140 +#: src/cavedb.c:141 msgid "Steel wall" msgstr "" -#: src/cavedb.c:141 +#: src/cavedb.c:142 msgid "Sloped steel wall (up & right)" msgstr "" -#: src/cavedb.c:142 +#: src/cavedb.c:143 msgid "Sloped steel wall (up & left)" msgstr "" -#: src/cavedb.c:143 +#: src/cavedb.c:144 msgid "Sloped steel wall (down & left)" msgstr "" -#: src/cavedb.c:144 +#: src/cavedb.c:145 msgid "Sloped steel wall (down & right)" msgstr "" -#: src/cavedb.c:145 +#: src/cavedb.c:146 msgid "Explodable steel wall" msgstr "" -#: src/cavedb.c:146 +#: src/cavedb.c:147 msgid "Eatable steel wall" msgstr "" -#: src/cavedb.c:147 +#: src/cavedb.c:148 msgid "Eatable brick wall" msgstr "" -#: src/cavedb.c:148 src/cavedb.c:602 +#: src/cavedb.c:149 src/cavedb.c:610 msgid "Stone" msgstr "" -#: src/cavedb.c:149 +#: src/cavedb.c:150 msgid "Stone, falling" msgstr "" -#: src/cavedb.c:150 +#: src/cavedb.c:151 +msgid "Flying stone" +msgstr "" + +#: src/cavedb.c:152 +msgid "Flying stone, flying" +msgstr "" + +#: src/cavedb.c:153 msgid "Mega stone" msgstr "" -#: src/cavedb.c:151 +#: src/cavedb.c:154 msgid "Mega stone, falling" msgstr "" -#: src/cavedb.c:152 src/cavedb.c:601 +#: src/cavedb.c:155 src/cavedb.c:609 msgid "Diamond" msgstr "" -#: src/cavedb.c:153 +#: src/cavedb.c:156 msgid "Diamond, falling" msgstr "" -#: src/cavedb.c:154 +#: src/cavedb.c:157 +msgid "Flying diamond" +msgstr "" + +#: src/cavedb.c:158 +msgid "Flying diamond, flying" +msgstr "" + +#: src/cavedb.c:159 msgid "Bladder Spender" msgstr "" -#: src/cavedb.c:155 +#: src/cavedb.c:160 msgid "Inbox" msgstr "" -#: src/cavedb.c:156 +#: src/cavedb.c:161 msgid "Expanding wall, horizontal" msgstr "" -#: src/cavedb.c:157 +#: src/cavedb.c:162 msgid "Expanding wall, vertical" msgstr "" -#: src/cavedb.c:158 src/cavedb.c:554 src/cavedb.c:604 +#: src/cavedb.c:163 src/cavedb.c:550 src/cavedb.c:612 msgid "Expanding wall" msgstr "" -#: src/cavedb.c:159 +#: src/cavedb.c:164 msgid "Expanding steel wall, horizontal" msgstr "" -#: src/cavedb.c:160 +#: src/cavedb.c:165 msgid "Expanding steel wall, vertical" msgstr "" -#: src/cavedb.c:161 +#: src/cavedb.c:166 msgid "Expanding steel wall" msgstr "" -#: src/cavedb.c:162 +#: src/cavedb.c:167 msgid "Expanding wall switch" msgstr "" -#: src/cavedb.c:163 +#: src/cavedb.c:168 msgid "Creature direction switch" msgstr "" -#: src/cavedb.c:164 +#: src/cavedb.c:169 msgid "Biter switch" msgstr "" -#: src/cavedb.c:165 +#: src/cavedb.c:170 msgid "Replicator switch" msgstr "" -#: src/cavedb.c:166 +#: src/cavedb.c:171 msgid "Conveyor belt power switch" msgstr "" -#: src/cavedb.c:167 +#: src/cavedb.c:172 msgid "Conveyor belt direction switch" msgstr "" -#: src/cavedb.c:168 src/cavedb.c:539 src/cavedb.c:611 +#: src/cavedb.c:173 src/cavedb.c:538 src/cavedb.c:619 msgid "Acid" msgstr "" -#: src/cavedb.c:169 src/cavedb.c:605 +#: src/cavedb.c:174 src/cavedb.c:613 msgid "Falling wall" msgstr "" -#: src/cavedb.c:170 +#: src/cavedb.c:175 msgid "Falling wall, falling" msgstr "" -#: src/cavedb.c:171 +#: src/cavedb.c:176 msgid "Box" msgstr "" -#: src/cavedb.c:172 +#: src/cavedb.c:177 msgid "Time penalty" msgstr "" -#: src/cavedb.c:173 +#: src/cavedb.c:178 msgid "Gravestone" msgstr "" -#: src/cavedb.c:174 +#: src/cavedb.c:179 msgid "Glued stone" msgstr "" -#: src/cavedb.c:175 +#: src/cavedb.c:180 msgid "Glued diamond" msgstr "" -#: src/cavedb.c:176 +#: src/cavedb.c:181 msgid "Diamond key" msgstr "" -#: src/cavedb.c:177 +#: src/cavedb.c:182 msgid "Trapped diamond" msgstr "" -#: src/cavedb.c:178 src/cavedb.c:476 +#: src/cavedb.c:183 src/cavedb.c:475 msgid "Clock" msgstr "" -#: src/cavedb.c:179 +#: src/cavedb.c:184 msgid "Glued dirt" msgstr "" -#: src/cavedb.c:180 +#: src/cavedb.c:185 msgid "Key 1" msgstr "" -#: src/cavedb.c:181 +#: src/cavedb.c:186 msgid "Key 2" msgstr "" -#: src/cavedb.c:182 +#: src/cavedb.c:187 msgid "Key 3" msgstr "" -#: src/cavedb.c:183 +#: src/cavedb.c:188 msgid "Door 1" msgstr "" -#: src/cavedb.c:184 +#: src/cavedb.c:189 msgid "Door 2" msgstr "" -#: src/cavedb.c:185 +#: src/cavedb.c:190 msgid "Door 3" msgstr "" -#: src/cavedb.c:187 +#: src/cavedb.c:192 msgid "Pot" msgstr "" -#: src/cavedb.c:188 +#: src/cavedb.c:193 msgid "Gravity switch" msgstr "" -#: src/cavedb.c:189 src/cavedb.c:471 src/cavedb.c:615 +#: src/cavedb.c:194 src/cavedb.c:470 src/cavedb.c:623 msgid "Pneumatic hammer" msgstr "" -#: src/cavedb.c:190 +#: src/cavedb.c:195 msgid "Teleporter" msgstr "" -#: src/cavedb.c:191 +#: src/cavedb.c:196 src/cavedb.c:632 msgid "Skeleton" msgstr "" -#: src/cavedb.c:192 src/cavedb.c:535 src/cavedb.c:614 +#: src/cavedb.c:197 src/cavedb.c:561 src/cavedb.c:622 msgid "Water" msgstr "" -#: src/cavedb.c:193 +#: src/cavedb.c:198 msgid "Water (1)" msgstr "" -#: src/cavedb.c:194 +#: src/cavedb.c:199 msgid "Water (2)" msgstr "" -#: src/cavedb.c:195 +#: src/cavedb.c:200 msgid "Water (3)" msgstr "" -#: src/cavedb.c:196 +#: src/cavedb.c:201 msgid "Water (4)" msgstr "" -#: src/cavedb.c:197 +#: src/cavedb.c:202 msgid "Water (5)" msgstr "" -#: src/cavedb.c:198 +#: src/cavedb.c:203 msgid "Water (6)" msgstr "" -#: src/cavedb.c:199 +#: src/cavedb.c:204 msgid "Water (7)" msgstr "" -#: src/cavedb.c:200 +#: src/cavedb.c:205 msgid "Water (8)" msgstr "" -#: src/cavedb.c:201 +#: src/cavedb.c:206 msgid "Water (9)" msgstr "" -#: src/cavedb.c:202 +#: src/cavedb.c:207 msgid "Water (10)" msgstr "" -#: src/cavedb.c:203 +#: src/cavedb.c:208 msgid "Water (11)" msgstr "" -#: src/cavedb.c:204 +#: src/cavedb.c:209 msgid "Water (12)" msgstr "" -#: src/cavedb.c:205 +#: src/cavedb.c:210 msgid "Water (13)" msgstr "" -#: src/cavedb.c:206 +#: src/cavedb.c:211 msgid "Water (14)" msgstr "" -#: src/cavedb.c:207 +#: src/cavedb.c:212 msgid "Water (15)" msgstr "" -#: src/cavedb.c:208 +#: src/cavedb.c:213 msgid "Water (16)" msgstr "" -#: src/cavedb.c:209 +#: src/cavedb.c:214 msgid "Cow (left)" msgstr "" -#: src/cavedb.c:210 +#: src/cavedb.c:215 msgid "Cow (up)" msgstr "" -#: src/cavedb.c:211 +#: src/cavedb.c:216 msgid "Cow (right)" msgstr "" -#: src/cavedb.c:212 +#: src/cavedb.c:217 msgid "Cow (down)" msgstr "" -#: src/cavedb.c:213 +#: src/cavedb.c:218 msgid "Cow (enclosed, 1)" msgstr "" -#: src/cavedb.c:214 +#: src/cavedb.c:219 msgid "Cow (enclosed, 2)" msgstr "" -#: src/cavedb.c:215 +#: src/cavedb.c:220 msgid "Cow (enclosed, 3)" msgstr "" -#: src/cavedb.c:216 +#: src/cavedb.c:221 msgid "Cow (enclosed, 4)" msgstr "" -#: src/cavedb.c:217 +#: src/cavedb.c:222 msgid "Cow (enclosed, 5)" msgstr "" -#: src/cavedb.c:218 +#: src/cavedb.c:223 msgid "Cow (enclosed, 6)" msgstr "" -#: src/cavedb.c:219 +#: src/cavedb.c:224 msgid "Cow (enclosed, 7)" msgstr "" -#: src/cavedb.c:220 +#: src/cavedb.c:225 msgid "Walled diamond" msgstr "" -#: src/cavedb.c:221 +#: src/cavedb.c:226 msgid "Walled key 1" msgstr "" -#: src/cavedb.c:222 +#: src/cavedb.c:227 msgid "Walled key 2" msgstr "" -#: src/cavedb.c:223 +#: src/cavedb.c:228 msgid "Walled key 3" msgstr "" -#: src/cavedb.c:225 src/cavedb.c:486 src/cavedb.c:490 src/cavedb.c:606 +#: src/cavedb.c:230 src/cavedb.c:485 src/cavedb.c:489 src/cavedb.c:614 msgid "Amoeba" msgstr "" -#: src/cavedb.c:226 src/cavedb.c:497 +#: src/cavedb.c:231 src/cavedb.c:496 msgid "Amoeba 2" msgstr "" -#: src/cavedb.c:227 src/cavedb.c:558 src/cavedb.c:610 +#: src/cavedb.c:232 src/cavedb.c:553 src/cavedb.c:618 msgid "Replicator" msgstr "" -#: src/cavedb.c:228 +#: src/cavedb.c:233 msgid "Conveyor belt (left)" msgstr "" -#: src/cavedb.c:229 +#: src/cavedb.c:234 msgid "Conveyor belt (right)" msgstr "" -#: src/cavedb.c:230 src/cavedb.c:609 +#: src/cavedb.c:235 src/cavedb.c:617 msgid "Lava" msgstr "" -#: src/cavedb.c:231 src/cavedb.c:467 +#: src/cavedb.c:236 src/cavedb.c:466 msgid "Sweet" msgstr "" -#: src/cavedb.c:232 +#: src/cavedb.c:237 msgid "Voodoo doll" msgstr "" -#: src/cavedb.c:233 src/cavedb.c:521 src/cavedb.c:608 +#: src/cavedb.c:238 src/cavedb.c:522 src/cavedb.c:616 msgid "Slime" msgstr "" -#: src/cavedb.c:234 src/cavedb.c:550 src/cavedb.c:613 +#: src/cavedb.c:239 src/cavedb.c:547 src/cavedb.c:621 msgid "Bladder" msgstr "" -#: src/cavedb.c:235 +#: src/cavedb.c:240 msgid "Bladder (1)" msgstr "" -#: src/cavedb.c:236 +#: src/cavedb.c:241 msgid "Bladder (2)" msgstr "" -#: src/cavedb.c:237 +#: src/cavedb.c:242 msgid "Bladder (3)" msgstr "" -#: src/cavedb.c:238 +#: src/cavedb.c:243 msgid "Bladder (4)" msgstr "" -#: src/cavedb.c:239 +#: src/cavedb.c:244 msgid "Bladder (5)" msgstr "" -#: src/cavedb.c:240 +#: src/cavedb.c:245 msgid "Bladder (6)" msgstr "" -#: src/cavedb.c:241 +#: src/cavedb.c:246 msgid "Bladder (7)" msgstr "" -#: src/cavedb.c:242 +#: src/cavedb.c:247 msgid "Bladder (8)" msgstr "" -#: src/cavedb.c:244 +#: src/cavedb.c:249 msgid "Waiting stone" msgstr "" -#: src/cavedb.c:245 +#: src/cavedb.c:250 msgid "Chasing stone" msgstr "" -#: src/cavedb.c:246 +#: src/cavedb.c:251 msgid "Ghost" msgstr "" -#: src/cavedb.c:247 +#: src/cavedb.c:252 msgid "Guard, left" msgstr "" -#: src/cavedb.c:248 +#: src/cavedb.c:253 msgid "Guard, up" msgstr "" -#: src/cavedb.c:249 +#: src/cavedb.c:254 msgid "Guard, right" msgstr "" -#: src/cavedb.c:250 +#: src/cavedb.c:255 msgid "Guard, down" msgstr "" -#: src/cavedb.c:251 +#: src/cavedb.c:256 msgid "Alternative guard, left" msgstr "" -#: src/cavedb.c:252 +#: src/cavedb.c:257 msgid "Alternative guard, up" msgstr "" -#: src/cavedb.c:253 +#: src/cavedb.c:258 msgid "Alternative guard, right" msgstr "" -#: src/cavedb.c:254 +#: src/cavedb.c:259 msgid "Alternative guard, down" msgstr "" -#: src/cavedb.c:255 +#: src/cavedb.c:260 msgid "Butterfly, left" msgstr "" -#: src/cavedb.c:256 +#: src/cavedb.c:261 msgid "Butterfly, up" msgstr "" -#: src/cavedb.c:257 +#: src/cavedb.c:262 msgid "Butterfly, right" msgstr "" -#: src/cavedb.c:258 +#: src/cavedb.c:263 msgid "Butterfly, down" msgstr "" -#: src/cavedb.c:259 +#: src/cavedb.c:264 msgid "Alternative butterfly, left" msgstr "" -#: src/cavedb.c:260 +#: src/cavedb.c:265 msgid "Alternative butterfly, up" msgstr "" -#: src/cavedb.c:261 +#: src/cavedb.c:266 msgid "Alternative butterfly, right" msgstr "" -#: src/cavedb.c:262 +#: src/cavedb.c:267 msgid "Alternative butterfly, down" msgstr "" -#: src/cavedb.c:263 +#: src/cavedb.c:268 msgid "Stonefly, left" msgstr "" -#: src/cavedb.c:264 +#: src/cavedb.c:269 msgid "Stonefly, up" msgstr "" -#: src/cavedb.c:265 +#: src/cavedb.c:270 msgid "Stonefly, right" msgstr "" -#: src/cavedb.c:266 +#: src/cavedb.c:271 msgid "Stonefly, down" msgstr "" -#: src/cavedb.c:267 +#: src/cavedb.c:272 msgid "Biter, up" msgstr "" -#: src/cavedb.c:268 +#: src/cavedb.c:273 msgid "Biter, right" msgstr "" -#: src/cavedb.c:269 +#: src/cavedb.c:274 msgid "Biter, down" msgstr "" -#: src/cavedb.c:270 +#: src/cavedb.c:275 msgid "Biter, left" msgstr "" -#: src/cavedb.c:271 +#: src/cavedb.c:276 msgid "Dragonfly, left" msgstr "" -#: src/cavedb.c:272 +#: src/cavedb.c:277 msgid "Dragonfly, up" msgstr "" -#: src/cavedb.c:273 +#: src/cavedb.c:278 msgid "Dragonfly, right" msgstr "" -#: src/cavedb.c:274 +#: src/cavedb.c:279 msgid "Dragonfly, down" msgstr "" -#: src/cavedb.c:276 +#: src/cavedb.c:281 msgid "Player birth (1)" msgstr "" -#: src/cavedb.c:277 +#: src/cavedb.c:282 msgid "Player birth (2)" msgstr "" -#: src/cavedb.c:278 +#: src/cavedb.c:283 msgid "Player birth (3)" msgstr "" -#: src/cavedb.c:279 src/cavedb.c:460 +#: src/cavedb.c:284 src/cavedb.c:459 msgid "Player" msgstr "" -#: src/cavedb.c:280 +#: src/cavedb.c:285 msgid "Player with bomb" msgstr "" -#: src/cavedb.c:281 +#: src/cavedb.c:286 msgid "Glued player" msgstr "" -#: src/cavedb.c:282 +#: src/cavedb.c:287 msgid "Player stirring" msgstr "" -#: src/cavedb.c:284 +#: src/cavedb.c:289 msgid "Bomb" msgstr "" -#: src/cavedb.c:285 +#: src/cavedb.c:290 msgid "Ticking bomb (1)" msgstr "" -#: src/cavedb.c:286 +#: src/cavedb.c:291 msgid "Ticking bomb (2)" msgstr "" -#: src/cavedb.c:287 +#: src/cavedb.c:292 msgid "Ticking bomb (3)" msgstr "" -#: src/cavedb.c:288 +#: src/cavedb.c:293 msgid "Ticking bomb (4)" msgstr "" -#: src/cavedb.c:289 +#: src/cavedb.c:294 msgid "Ticking bomb (5)" msgstr "" -#: src/cavedb.c:290 +#: src/cavedb.c:295 msgid "Ticking bomb (6)" msgstr "" -#: src/cavedb.c:291 +#: src/cavedb.c:296 msgid "Ticking bomb (7)" msgstr "" -#: src/cavedb.c:293 src/cavedb.c:603 +#: src/cavedb.c:298 src/cavedb.c:611 msgid "Nitro pack" msgstr "" -#: src/cavedb.c:294 -msgid "Nitro pack, falling" -msgstr "" - -#: src/cavedb.c:295 -msgid "Nitro pack, triggered" -msgstr "" - -#: src/cavedb.c:297 -msgid "Clock birth (1)" -msgstr "" - -#: src/cavedb.c:298 -msgid "Clock birth (2)" -msgstr "" - #: src/cavedb.c:299 -msgid "Clock birth (3)" +msgid "Nitro pack, falling" msgstr "" #: src/cavedb.c:300 -msgid "Clock birth (4)" -msgstr "" - -#: src/cavedb.c:301 -msgid "Diamond birth (1)" +msgid "Nitro pack, triggered" msgstr "" #: src/cavedb.c:302 -msgid "Diamond birth (2)" +msgid "Clock birth (1)" msgstr "" #: src/cavedb.c:303 -msgid "Diamond birth (3)" +msgid "Clock birth (2)" msgstr "" #: src/cavedb.c:304 -msgid "Diamond birth (4)" +msgid "Clock birth (3)" msgstr "" #: src/cavedb.c:305 -msgid "Diamond birth (5)" +msgid "Clock birth (4)" msgstr "" #: src/cavedb.c:306 -msgid "Explosion (1)" +msgid "Diamond birth (1)" msgstr "" #: src/cavedb.c:307 -msgid "Explosion (2)" +msgid "Diamond birth (2)" msgstr "" #: src/cavedb.c:308 -msgid "Explosion (3)" +msgid "Diamond birth (3)" msgstr "" #: src/cavedb.c:309 -msgid "Explosion (4)" +msgid "Diamond birth (4)" msgstr "" #: src/cavedb.c:310 -msgid "Explosion (5)" +msgid "Diamond birth (5)" msgstr "" #: src/cavedb.c:311 -msgid "Stone birth (1)" +msgid "Explosion (1)" msgstr "" #: src/cavedb.c:312 -msgid "Stone birth (2)" +msgid "Explosion (2)" msgstr "" #: src/cavedb.c:313 -msgid "Stone birth (3)" +msgid "Explosion (3)" msgstr "" #: src/cavedb.c:314 -msgid "Stone birth (4)" +msgid "Explosion (4)" msgstr "" #: src/cavedb.c:315 -msgid "Steel birth (1)" +msgid "Explosion (5)" msgstr "" #: src/cavedb.c:316 -msgid "Steel birth (2)" +msgid "Stone birth (1)" msgstr "" #: src/cavedb.c:317 -msgid "Steel birth (3)" +msgid "Stone birth (2)" msgstr "" #: src/cavedb.c:318 -msgid "Steel birth (4)" +msgid "Stone birth (3)" msgstr "" #: src/cavedb.c:319 -msgid "Ghost explosion (1)" +msgid "Stone birth (4)" msgstr "" #: src/cavedb.c:320 -msgid "Ghost explosion (2)" +msgid "Steel birth (1)" msgstr "" #: src/cavedb.c:321 -msgid "Ghost explosion (3)" +msgid "Steel birth (2)" msgstr "" #: src/cavedb.c:322 -msgid "Ghost explosion (4)" +msgid "Steel birth (3)" msgstr "" #: src/cavedb.c:323 -msgid "Bomb explosion (1)" +msgid "Steel birth (4)" msgstr "" #: src/cavedb.c:324 -msgid "Bomb explosion (2)" +msgid "Ghost explosion (1)" msgstr "" #: src/cavedb.c:325 -msgid "Bomb explosion (3)" +msgid "Ghost explosion (2)" msgstr "" #: src/cavedb.c:326 -msgid "Bomb explosion (4)" +msgid "Ghost explosion (3)" msgstr "" #: src/cavedb.c:327 -msgid "Nitro pack explosion (1)" +msgid "Ghost explosion (4)" msgstr "" #: src/cavedb.c:328 -msgid "Nitro pack explosion (2)" +msgid "Bomb explosion (1)" msgstr "" #: src/cavedb.c:329 -msgid "Nitro pack explosion (3)" +msgid "Bomb explosion (2)" msgstr "" #: src/cavedb.c:330 -msgid "Nitro pack explosion (4)" +msgid "Bomb explosion (3)" msgstr "" #: src/cavedb.c:331 -msgid "Amoeba 2 explosion (1)" +msgid "Bomb explosion (4)" msgstr "" #: src/cavedb.c:332 -msgid "Amoeba 2 explosion (2)" +msgid "Nitro pack explosion (1)" msgstr "" #: src/cavedb.c:333 -msgid "Amoeba 2 explosion (3)" +msgid "Nitro pack explosion (2)" msgstr "" #: src/cavedb.c:334 -msgid "Amoeba 2 explosion (4)" +msgid "Nitro pack explosion (3)" msgstr "" #: src/cavedb.c:335 -msgid "Dragonfly explosion (1)" +msgid "Nitro pack explosion (4)" msgstr "" #: src/cavedb.c:336 -msgid "Dragonfly explosion (2)" +msgid "Amoeba 2 explosion (1)" msgstr "" #: src/cavedb.c:337 -msgid "Dragonfly explosion (3)" +msgid "Amoeba 2 explosion (2)" msgstr "" #: src/cavedb.c:338 -msgid "Dragonfly explosion (4)" +msgid "Amoeba 2 explosion (3)" msgstr "" #: src/cavedb.c:339 -msgid "Dragonfly explosion (5)" +msgid "Amoeba 2 explosion (4)" msgstr "" #: src/cavedb.c:346 @@ -1064,7 +1060,7 @@ msgstr "" msgid "Cave data" msgstr "" -#: src/cavedb.c:393 src/caveset.c:56 src/gtkmain.c:1694 src/gtkui.c:996 +#: src/cavedb.c:393 src/caveset.c:56 src/gtkmain.c:1698 src/gtkui.c:998 msgid "Name" msgstr "" @@ -1072,7 +1068,8 @@ msgstr "" msgid "Name of game" msgstr "" -#: src/cavedb.c:394 src/caveset.c:57 src/editorexport.c:550 +#: src/cavedb.c:394 src/caveset.c:57 src/editorexport.c:528 +#: src/editorexport.c:600 msgid "Description" msgstr "" @@ -1080,7 +1077,8 @@ msgstr "" msgid "Some words about the game" msgstr "" -#: src/cavedb.c:395 src/caveset.c:58 src/editorexport.c:548 +#: src/cavedb.c:395 src/caveset.c:58 src/editorexport.c:526 +#: src/editorexport.c:598 msgid "Author" msgstr "" @@ -1088,7 +1086,7 @@ msgstr "" msgid "Name of author" msgstr "" -#: src/cavedb.c:396 src/caveset.c:59 src/gtkmain.c:1703 +#: src/cavedb.c:396 src/caveset.c:59 src/gtkmain.c:1707 msgid "Date" msgstr "" @@ -1096,7 +1094,7 @@ msgstr "" msgid "Date of creation" msgstr "" -#: src/cavedb.c:397 src/caveset.c:60 +#: src/cavedb.c:397 src/caveset.c:60 src/editorexport.c:530 msgid "WWW" msgstr "" @@ -1112,7 +1110,7 @@ msgstr "" msgid "Difficulty (informative)" msgstr "" -#: src/cavedb.c:400 src/editorexport.c:574 +#: src/cavedb.c:400 src/editorexport.c:632 msgid "Selectable as start" msgstr "" @@ -1120,7 +1118,7 @@ msgstr "" msgid "This sets whether the game can be started at this cave." msgstr "" -#: src/cavedb.c:401 src/editorexport.c:573 src/gtkmain.c:1801 +#: src/cavedb.c:401 src/editorexport.c:631 src/gtkmain.c:1805 msgid "Intermission" msgstr "" @@ -1207,7 +1205,8 @@ msgstr "" msgid "Font used during the game. Not used by GDash." msgstr "" -#: src/cavedb.c:414 src/caveset.c:67 src/editorexport.c:570 +#: src/cavedb.c:414 src/caveset.c:67 src/editorexport.c:534 +#: src/editorexport.c:628 msgid "Story" msgstr "" @@ -1215,7 +1214,8 @@ msgstr "" msgid "Story for the cave. It will be shown when the cave is played." msgstr "" -#: src/cavedb.c:417 src/caveset.c:68 src/editorexport.c:559 +#: src/cavedb.c:417 src/caveset.c:68 src/editorexport.c:532 +#: src/editorexport.c:613 msgid "Remark" msgstr "" @@ -1291,7 +1291,7 @@ msgstr "" msgid "Diamonds" msgstr "" -#: src/cavedb.c:431 src/editorexport.c:575 +#: src/cavedb.c:431 src/editorexport.c:633 msgid "Diamonds needed" msgstr "" @@ -1322,7 +1322,7 @@ msgstr "" msgid "Time" msgstr "" -#: src/cavedb.c:435 src/editorexport.c:578 +#: src/cavedb.c:435 src/editorexport.c:636 msgid "Time (s)" msgstr "" @@ -1368,388 +1368,415 @@ msgstr "" #: src/cavedb.c:439 msgid "" "On the PAL version of the C64 computer, the timer was actually slower than " -"normal seconds. This flag is used to compensate for this. Most original " -"games are authored for the PAL version." +"normal seconds. This flag is used to compensate for this. If enabled, one " +"game second will last 1.2 real seconds. Most original games were authored " +"for the PAL version. This is a compatibility setting for imported caves; it " +"is not recommended to enable it for newly authored ones." msgstr "" -#: src/cavedb.c:441 -msgid " Delay (c64-style)" +#: src/cavedb.c:440 +msgid " Speed (ms)" msgstr "" -#: src/cavedb.c:441 +#: src/cavedb.c:440 msgid "" -"The length of the delay loop between game frames. Used when milliseconds-" -"based timing is inactive, ie. C64 scheduling is on." +"Number of milliseconds between game frames. Used when milliseconds-based " +"timing is active, ie. C64 scheduling is off." msgstr "" -#: src/cavedb.c:442 -msgid " Hatching time (seconds)" +#: src/cavedb.c:441 +msgid " Hatching delay (frames)" msgstr "" -#: src/cavedb.c:442 +#: src/cavedb.c:441 msgid "" "This value sets how much the cave will move until the player enters the " -"cave. This is used for the C64-like schedulings." +"cave, and is expressed in frames. This is used for the milliseconds-based " +"scheduling." msgstr "" -#: src/cavedb.c:443 -msgid " Speed (ms)" +#: src/cavedb.c:442 +msgid " Delay (C64-style)" msgstr "" -#: src/cavedb.c:443 +#: src/cavedb.c:442 msgid "" -"Number of milliseconds between game frames. Used when milliseconds-based " -"timing is active, ie. C64 scheduling is off." +"The length of the delay loop between game frames. Used when milliseconds-" +"based timing is inactive, ie. some kind of C64 or Atari scheduling is " +"selected." msgstr "" -#: src/cavedb.c:444 -msgid " Hatching delay (frames)" +#: src/cavedb.c:443 +msgid " Hatching time (seconds)" msgstr "" -#: src/cavedb.c:444 +#: src/cavedb.c:443 msgid "" "This value sets how much the cave will move until the player enters the " -"cave. This is used for the milliseconds-based scheduling." -msgstr "" - -#: src/cavedb.c:447 -msgid "Random seed value" -msgstr "" - -#: src/cavedb.c:447 src/editor.c:1447 -msgid "" -"Random seed value controls the predictable random number generator, which " -"fills the cave initially. If set to -1, cave is totally random every time it " -"is played." +"cave. This is used for the C64-like schedulings." msgstr "" -#: src/cavedb.c:462 +#: src/cavedb.c:461 msgid "Player movements" msgstr "" -#: src/cavedb.c:463 +#: src/cavedb.c:462 msgid "Diagonal movements" msgstr "" -#: src/cavedb.c:463 +#: src/cavedb.c:462 msgid "Controls if the player can move diagonally." msgstr "" -#: src/cavedb.c:464 +#: src/cavedb.c:463 msgid "Uppermost player active" msgstr "" -#: src/cavedb.c:464 +#: src/cavedb.c:463 msgid "" "In 1stB, cave is scrolled to the uppermost and leftmost player found, " "whereas in the original game to the last one. Chasing stones also follow the " "active player." msgstr "" -#: src/cavedb.c:465 +#: src/cavedb.c:464 msgid "Snap element" msgstr "" -#: src/cavedb.c:465 +#: src/cavedb.c:464 msgid "" "Snapping (pressing fire while moving) usually creates space, but it can " "create any other element." msgstr "" -#: src/cavedb.c:466 src/cavedb.c:468 +#: src/cavedb.c:465 src/cavedb.c:467 msgid "Probability of pushing (%)" msgstr "" -#: src/cavedb.c:466 +#: src/cavedb.c:465 msgid "" "Chance of player managing to push a stone, every game cycle he tries. This " "is the normal probability." msgstr "" -#: src/cavedb.c:468 +#: src/cavedb.c:467 msgid "" "Chance of player managing to push a stone, every game cycle he tries. This " "is used after eating sweet." msgstr "" -#: src/cavedb.c:469 +#: src/cavedb.c:468 msgid "Mega stones pushable" msgstr "" -#: src/cavedb.c:469 +#: src/cavedb.c:468 msgid "If it is true, mega stones can be pushed after eating sweet." msgstr "" -#: src/cavedb.c:472 +#: src/cavedb.c:471 msgid "Time for hammer (frames)" msgstr "" -#: src/cavedb.c:472 +#: src/cavedb.c:471 msgid "" "This is the number of game frames, a pneumatic hammer is required to break a " "wall." msgstr "" -#: src/cavedb.c:473 +#: src/cavedb.c:472 msgid "Hammered walls reappear" msgstr "" -#: src/cavedb.c:473 +#: src/cavedb.c:472 msgid "" "If this is set to true, walls broken with a pneumatic hammer will reappear " "later." msgstr "" -#: src/cavedb.c:474 +#: src/cavedb.c:473 msgid " Timer for reappear (frames)" msgstr "" -#: src/cavedb.c:474 +#: src/cavedb.c:473 msgid "" "This sets the number of game frames, after hammered walls reappear, when the " "above setting is true." msgstr "" -#: src/cavedb.c:477 +#: src/cavedb.c:476 msgid "Time bonus (s)" msgstr "" -#: src/cavedb.c:477 +#: src/cavedb.c:476 msgid "Bonus time when a clock is collected." msgstr "" -#: src/cavedb.c:479 +#: src/cavedb.c:478 msgid "Voodoo Doll" msgstr "" -#: src/cavedb.c:480 +#: src/cavedb.c:479 msgid "Can collect diamonds" msgstr "" -#: src/cavedb.c:480 +#: src/cavedb.c:479 msgid "Controls if a voodoo doll can collect diamonds for the player." msgstr "" -#: src/cavedb.c:481 +#: src/cavedb.c:480 msgid "Can be destroyed by explosion" msgstr "" -#: src/cavedb.c:481 +#: src/cavedb.c:480 msgid "" "Controls if the voodoo can be destroyed by an explosion nearby. If not, it " "is converted to a gravestone, and you get a time penalty." msgstr "" -#: src/cavedb.c:482 +#: src/cavedb.c:481 msgid "Dies if hit by a stone" msgstr "" -#: src/cavedb.c:482 +#: src/cavedb.c:481 msgid "" "Controls if the voodoo doll dies if it is hit by a stone. Then the player " "gets a time penalty." msgstr "" -#: src/cavedb.c:483 +#: src/cavedb.c:482 msgid "Time penalty (s)" msgstr "" -#: src/cavedb.c:483 +#: src/cavedb.c:482 msgid "Penalty time when the voodoo is destroyed by a stone." msgstr "" -#: src/cavedb.c:487 src/cavedb.c:518 -msgid "Timer waits for hatching" +#: src/cavedb.c:486 +msgid "Timer started immediately" msgstr "" -#: src/cavedb.c:487 +#: src/cavedb.c:486 msgid "" -"This determines if the amoeba timer starts before the player appearing. " -"Amoeba can always be activated before that; but if this is set to true, the " -"timer will not start." +"If this flag is enabled, the amoeba slow growth timer will start at the " +"beginning of the cave, regardless of the amoeba being let free or not. This " +"can make a big difference when playing the cave!" msgstr "" -#: src/cavedb.c:488 -msgid "Timer started immediately" +#: src/cavedb.c:487 src/cavedb.c:511 +msgid "Timer waits for hatching" msgstr "" -#: src/cavedb.c:488 +#: src/cavedb.c:487 msgid "" -"If this flag is enabled, the amoeba slow growth timer will start at the " -"beginning of the cave, regardless of the amoeba being let free or not." +"This determines if the amoeba timer starts before the player appearing. " +"Amoeba can always be activated before that; but if this is set to true, the " +"timer will not start. This setting is for compatiblity for some old imported " +"caves. As the player is usually born within a few seconds, changing this " +"setting makes not much difference. It is not advised to change it, set the " +"slow growth time to fit your needs instead." msgstr "" -#: src/cavedb.c:491 src/cavedb.c:498 +#: src/cavedb.c:490 src/cavedb.c:497 msgid "Threshold (cells)" msgstr "" -#: src/cavedb.c:491 src/cavedb.c:498 +#: src/cavedb.c:490 src/cavedb.c:497 msgid "" "If the amoeba grows more than this fraction of the cave, it is considered " -"too big." +"too big and it converts to the element specified below." msgstr "" -#: src/cavedb.c:492 src/cavedb.c:499 +#: src/cavedb.c:491 src/cavedb.c:498 msgid "Slow growth time (s)" msgstr "" -#: src/cavedb.c:492 src/cavedb.c:499 +#: src/cavedb.c:491 src/cavedb.c:498 msgid "After this time, amoeba will grow very quickly." msgstr "" -#: src/cavedb.c:493 src/cavedb.c:500 +#: src/cavedb.c:492 src/cavedb.c:499 msgid "Growth ratio, slow (%)" msgstr "" -#: src/cavedb.c:493 src/cavedb.c:500 +#: src/cavedb.c:492 src/cavedb.c:499 msgid "This sets the speed at which a slow amoeba grows." msgstr "" -#: src/cavedb.c:494 src/cavedb.c:501 +#: src/cavedb.c:493 src/cavedb.c:500 msgid "Growth ratio, fast (%)" msgstr "" -#: src/cavedb.c:494 src/cavedb.c:501 +#: src/cavedb.c:493 src/cavedb.c:500 msgid "This sets the speed at which a fast amoeba grows." msgstr "" -#: src/cavedb.c:495 src/cavedb.c:504 +#: src/cavedb.c:494 src/cavedb.c:503 msgid "If too big, converts to" msgstr "" -#: src/cavedb.c:495 src/cavedb.c:504 +#: src/cavedb.c:494 src/cavedb.c:503 msgid "Controls which element an overgrown amoeba converts to." msgstr "" -#: src/cavedb.c:496 src/cavedb.c:505 +#: src/cavedb.c:495 src/cavedb.c:504 msgid "If enclosed, converts to" msgstr "" -#: src/cavedb.c:496 src/cavedb.c:505 +#: src/cavedb.c:495 src/cavedb.c:504 msgid "Controls which element an enclosed amoeba converts to." msgstr "" -#: src/cavedb.c:502 +#: src/cavedb.c:501 msgid "Explodes by amoeba" msgstr "" -#: src/cavedb.c:502 +#: src/cavedb.c:501 msgid "" "If this setting is enabled, an amoeba 2 will explode if it is touched by a " "normal amoeba." msgstr "" -#: src/cavedb.c:503 -msgid " Explodes to" +#: src/cavedb.c:502 +msgid " Explosion ends in" msgstr "" -#: src/cavedb.c:503 +#: src/cavedb.c:502 msgid "" "An amoeba 2 explodes to this element, when touched by the original amoeba." msgstr "" -#: src/cavedb.c:506 +#: src/cavedb.c:505 msgid "Looks like" msgstr "" -#: src/cavedb.c:506 +#: src/cavedb.c:505 msgid "" "Amoeba 2 can look like any other element. Hint: it can also look like a " "normal amoeba. Or it can look like slime, and then you have two different " "colored amoebas!" msgstr "" -#: src/cavedb.c:509 -msgid "Active elements" +#: src/cavedb.c:508 +msgid "Magic Wall" msgstr "" -#: src/cavedb.c:511 -msgid "Magic Wall" +#: src/cavedb.c:509 +msgid "Timing" msgstr "" -#: src/cavedb.c:512 +#: src/cavedb.c:510 msgid "Milling time (s)" msgstr "" -#: src/cavedb.c:512 +#: src/cavedb.c:510 msgid "Magic wall will stop after this time, and it cannot be activated again." msgstr "" -#: src/cavedb.c:513 -msgid "Converts diamond to" +#: src/cavedb.c:511 +msgid "" +"This determines if the magic wall timer starts before the player appearing. " +"Magic can always be activated before that; but if this is set to true, the " +"timer will not start." +msgstr "" + +#: src/cavedb.c:512 +msgid "Stops amoeba" +msgstr "" + +#: src/cavedb.c:512 +msgid "When the magic wall is activated, it can convert amoeba into diamonds." msgstr "" #: src/cavedb.c:513 -msgid "" -"As a special effect, magic walls can convert diamonds to any other element." +msgid "Conversions" msgstr "" #: src/cavedb.c:514 -msgid "Converts stone to" +msgid "Diamond to" msgstr "" #: src/cavedb.c:514 msgid "" -"As a special effect, magic walls can convert stones to any other element." +"As a special effect, magic walls can convert diamonds to any other element." msgstr "" #: src/cavedb.c:515 -msgid "Converts mega stone to" +msgid "Stone to" msgstr "" #: src/cavedb.c:515 -msgid "If a mega stone falls into the magic wall, it will drop this element." +msgid "" +"As a special effect, magic walls can convert stones to any other element." msgstr "" #: src/cavedb.c:516 -msgid "Converts nitro pack to" +msgid "Mega stone to" msgstr "" #: src/cavedb.c:516 -msgid "" -"If a nitro pack falls into the magic wall, it will be turned to this element." +msgid "If a mega stone falls into the magic wall, it will drop this element." msgstr "" #: src/cavedb.c:517 -msgid "Stops amoeba" +msgid "Nitro pack to" msgstr "" #: src/cavedb.c:517 -msgid "When the magic wall is activated, it can convert amoeba into diamonds." +msgid "" +"If a nitro pack falls into the magic wall, it will be turned to this element." +msgstr "" + +#: src/cavedb.c:518 +msgid "Flying stone to" msgstr "" #: src/cavedb.c:518 msgid "" -"This determines if the magic wall timer starts before the player appearing. " -"Magic can always be activated before that; but if this is set to true, the " -"timer will not start." +"If a flying stone climbs up into the magic wall, it will be turned to this " +"element. Remember that flying stones enter the magic wall from its bottom, " +"not from the top!" +msgstr "" + +#: src/cavedb.c:519 +msgid "Flying diamonds to" msgstr "" -#: src/cavedb.c:522 +#: src/cavedb.c:519 +msgid "" +"If a flying diamond enters the magic wall, it will be turned to this " +"element. Remember that flying diamonds enter the magic wall from its bottom, " +"not from the top!" +msgstr "" + +#: src/cavedb.c:523 +msgid "Permeability" +msgstr "" + +#: src/cavedb.c:524 msgid "Predictable" msgstr "" -#: src/cavedb.c:522 +#: src/cavedb.c:524 msgid "" "Controls if the predictable random generator is used for slime. It is " "required for compatibility with some older caves." msgstr "" -#: src/cavedb.c:524 +#: src/cavedb.c:526 msgid "Permeability (unpredictable, %)" msgstr "" -#: src/cavedb.c:524 +#: src/cavedb.c:526 msgid "" "This controls the rate at which elements go through the slime. Higher values " "represent higher probability of passing. This one is for unpredictable slime." msgstr "" -#: src/cavedb.c:525 +#: src/cavedb.c:527 msgid "Permeability (predictable, bits)" msgstr "" -#: src/cavedb.c:525 +#: src/cavedb.c:527 msgid "" "This controls the rate at which elements go through the slime. This one is " "for predictable slime, and the value is used for a bitwise AND function. The " @@ -1757,395 +1784,526 @@ msgid "" "255." msgstr "" -#: src/cavedb.c:526 +#: src/cavedb.c:528 msgid "Random seed (predictable)" msgstr "" -#: src/cavedb.c:526 +#: src/cavedb.c:528 msgid "" "The random number seed for predictable slime. Use -1 to leave on its " "default. Not recommended to change. Does not affect unpredictable slime." msgstr "" -#: src/cavedb.c:527 src/cavedb.c:529 +#: src/cavedb.c:529 +msgid "Passing elements" +msgstr "" + +#: src/cavedb.c:530 src/cavedb.c:532 msgid "Eats this..." msgstr "" -#: src/cavedb.c:527 src/cavedb.c:528 src/cavedb.c:529 src/cavedb.c:530 +#: src/cavedb.c:530 src/cavedb.c:531 src/cavedb.c:532 src/cavedb.c:533 msgid "" "Slime can let other elements than stone and diamond go through. It always " -"lets a waiting or a chasing stone pass, though." +"lets a waiting or a chasing stone pass, though. Also, flying diamonds and " +"stones, as well as bladders are always passed." msgstr "" -#: src/cavedb.c:528 src/cavedb.c:530 +#: src/cavedb.c:531 src/cavedb.c:533 msgid " ... and converts to" msgstr "" -#: src/cavedb.c:533 -msgid "More elements" -msgstr "" - -#: src/cavedb.c:536 -msgid "Does not flow downwards" -msgstr "" - #: src/cavedb.c:536 -msgid "" -"In CrDr, the water element had the odd property that it did not flow " -"downwards, only in other directions. This flag emulates this behaviour." +msgid "Other elements" msgstr "" -#: src/cavedb.c:540 +#: src/cavedb.c:539 msgid "Eats this element" msgstr "" -#: src/cavedb.c:540 +#: src/cavedb.c:539 msgid "" "The element which acid eats. If it cannot find any, it simply disappears." msgstr "" -#: src/cavedb.c:541 +#: src/cavedb.c:540 msgid "Spread ratio (%)" msgstr "" -#: src/cavedb.c:541 +#: src/cavedb.c:540 msgid "" "The probability at which an acid will explode and eat neighbouring elements." msgstr "" -#: src/cavedb.c:542 +#: src/cavedb.c:541 msgid "Leaves this behind" msgstr "" -#: src/cavedb.c:542 +#: src/cavedb.c:541 msgid "" "If acid converts to an explosion puff on spreading or any other element." msgstr "" -#: src/cavedb.c:545 src/cavedb.c:612 src/help.c:74 +#: src/cavedb.c:543 src/cavedb.c:620 src/help.c:79 msgid "Biter" msgstr "" -#: src/cavedb.c:546 src/cavedb.c:560 +#: src/cavedb.c:544 src/cavedb.c:555 msgid "Delay (frame)" msgstr "" -#: src/cavedb.c:546 +#: src/cavedb.c:544 msgid "Number of frames biters wait between movements." msgstr "" -#: src/cavedb.c:547 +#: src/cavedb.c:545 msgid "Eats this" msgstr "" -#: src/cavedb.c:547 +#: src/cavedb.c:545 msgid "Biters eat this element. (They always eat dirt.)" msgstr "" -#: src/cavedb.c:551 +#: src/cavedb.c:548 msgid "Converts to clock by touching" msgstr "" -#: src/cavedb.c:555 src/cavedb.c:564 +#: src/cavedb.c:551 src/cavedb.c:559 msgid "Direction changed" msgstr "" -#: src/cavedb.c:555 +#: src/cavedb.c:551 msgid "" "If this option is enabled, the direction of growing for the horizontal and " -"vertical expanding wall is switched." +"vertical expanding wall is switched. As you can use both horizontal and " +"vertical expanding walls in a cave, it is not recommended to change this " +"setting, as it might be confusing. You should rather select the type with " +"the correct direction from the element box when drawing the cave." msgstr "" -#: src/cavedb.c:559 src/cavedb.c:563 +#: src/cavedb.c:554 src/cavedb.c:558 msgid "Active at start" msgstr "" -#: src/cavedb.c:559 +#: src/cavedb.c:554 msgid "Whether the replicators are turned on or off at the cave start." msgstr "" -#: src/cavedb.c:560 +#: src/cavedb.c:555 msgid "Number of frames to wait between replicating elements." msgstr "" -#: src/cavedb.c:562 src/help.c:95 +#: src/cavedb.c:557 src/help.c:100 msgid "Conveyor belt" msgstr "" -#: src/cavedb.c:563 +#: src/cavedb.c:558 msgid "Whether the conveyor belts are moving when the cave starts." msgstr "" -#: src/cavedb.c:564 +#: src/cavedb.c:559 msgid "" "If the conveyor belts' movement is changed, ie. they are running in the " -"opposite direction." +"opposite direction. As you can freely use left and right going versions of " +"the conveyor belt in a cave, it is not recommended to change this setting, " +"rather you should select the correct one from the element box when drawing." msgstr "" -#: src/cavedb.c:567 src/cavedb.c:581 +#: src/cavedb.c:562 +msgid "Does not flow downwards" +msgstr "" + +#: src/cavedb.c:562 +msgid "" +"In CrDr, the water element had the odd property that it did not flow " +"downwards, only in other directions. This flag emulates this behaviour." +msgstr "" + +#: src/cavedb.c:565 msgid "Effects" msgstr "" +#: src/cavedb.c:567 +msgid "Stone and diamond effects" +msgstr "" + +#: src/cavedb.c:568 +msgid "Falling stones convert to" +msgstr "" + +#: src/cavedb.c:568 +msgid "When a stone begins falling, it converts to this element." +msgstr "" + #: src/cavedb.c:569 -msgid "Cave effects" +msgid "Bouncing stones convert to" +msgstr "" + +#: src/cavedb.c:569 +msgid "When a stone stops falling and rolling, it converts to this element." msgstr "" #: src/cavedb.c:570 -msgid "Explosions convert to" +msgid "Falling diamonds convert to" msgstr "" #: src/cavedb.c:570 -msgid "This element appears in places where an explosion happens." +msgid "When a diamond begins falling, it converts to this element." msgstr "" #: src/cavedb.c:571 -msgid "Diamond births convert to" +msgid "Bouncing diamonds convert to" msgstr "" -#: src/cavedb.c:572 -msgid "Dragonfly explodes to" +#: src/cavedb.c:571 +msgid "When a diamond stops falling and rolling, it converts to this element." msgstr "" -#: src/cavedb.c:572 -msgid "An exploding dragonfly will create this element." +#: src/cavedb.c:573 +msgid "Creature explosion effects" msgstr "" -#: src/cavedb.c:573 -msgid "Bombs explode to" +#: src/cavedb.c:574 +msgid "Fireflies explode to" msgstr "" #: src/cavedb.c:574 -msgid "Nitro packs explode to" +msgid "" +"When a firefly explodes, it will create this element. Change this setting " +"wisely. The firefly is a traditional element which is expected to explode to " +"empty space." msgstr "" #: src/cavedb.c:575 -msgid "Falling stones convert to" +msgid "Alt. fireflies explode to" msgstr "" #: src/cavedb.c:575 -msgid "When a stone begins falling, it converts to this element." +msgid "" +"When an alternative firefly explodes, it will create this element. Use this " +"setting wisely. Do not create a firefly which explodes to stones, for " +"example: use the stonefly instead." msgstr "" #: src/cavedb.c:576 -msgid "Bouncing stones convert to" +msgid "Butterflies explode to" msgstr "" #: src/cavedb.c:576 -msgid "When a stone stops falling and rolling, it converts to this element." +msgid "" +"When a butterfly explodes, it will create this element. Use this setting " +"wisely. Butterflies should explode to diamonds. If you need a creature which " +"explodes to space, use the firefly instead." msgstr "" #: src/cavedb.c:577 -msgid "Falling diamonds convert to" +msgid "Alt. butterflies explode to" msgstr "" #: src/cavedb.c:577 -msgid "When a diamond begins falling, it converts to this element." +msgid "" +"When an alternative butterfly explodes, it will create this element. Use " +"this setting wisely." msgstr "" #: src/cavedb.c:578 -msgid "Bouncing diamonds convert to" +msgid "Stoneflies explode to" msgstr "" #: src/cavedb.c:578 -msgid "When a diamond stops falling and rolling, it converts to this element." +msgid "When a stonefly explodes, it will create this element." +msgstr "" + +#: src/cavedb.c:579 +msgid "Dragonflies explode to" +msgstr "" + +#: src/cavedb.c:579 +msgid "When a dragonfly explodes, it will create this element." +msgstr "" + +#: src/cavedb.c:581 +msgid "Explosion effects" +msgstr "" + +#: src/cavedb.c:582 +msgid "Explosions end in" +msgstr "" + +#: src/cavedb.c:582 +msgid "This element appears in places where an explosion finishes." +msgstr "" + +#: src/cavedb.c:583 +msgid "Diamond births end in" msgstr "" #: src/cavedb.c:583 -msgid "Creature effects" +msgid "" +"When a diamond birth animation reaches its end, it will leave this element " +"there. This can be used to change the element butterflies explode to." msgstr "" #: src/cavedb.c:584 -msgid "Start backwards" +msgid "Bombs explosions end in" msgstr "" -#: src/cavedb.c:585 -msgid "Automatically turn (s)" +#: src/cavedb.c:584 +msgid "Use this setting to select the element the exploding bomb creates." msgstr "" #: src/cavedb.c:585 -msgid "" -"If this is greater than zero, creatures will automatically change direction " -"in every x seconds." +msgid "Nitro explosions end in" msgstr "" -#: src/cavedb.c:586 -msgid "Automatically turn on start" +#: src/cavedb.c:585 +msgid "The nitro explosions can create some element other than space." msgstr "" -#: src/cavedb.c:586 -msgid "" -"If this is set to true, creatures also turn at the start signal. If false, " -"the first change in direction occurs only later." +#: src/cavedb.c:588 +msgid "More effects" msgstr "" -#: src/cavedb.c:588 +#: src/cavedb.c:590 msgid "Visual effects" msgstr "" -#: src/cavedb.c:589 +#: src/cavedb.c:591 msgid "Expanding wall looks like" msgstr "" -#: src/cavedb.c:590 +#: src/cavedb.c:591 +msgid "" +"This is a compatibility setting for old caves. If you need an expanding wall " +"which looks like steel, you should rather choose the expanding steel wall " +"from the element box." +msgstr "" + +#: src/cavedb.c:592 msgid "Dirt looks like" msgstr "" #: src/cavedb.c:592 -msgid "Gravitation effects" +msgid "" +"Compatibility setting. Use it wisely! Anything other than Dirt 2 (which can " +"be used to emulate the Dirt Mod) is not recommended." +msgstr "" + +#: src/cavedb.c:595 +msgid "Creature movement" +msgstr "" + +#: src/cavedb.c:596 +msgid "Start backwards" +msgstr "" + +#: src/cavedb.c:596 +msgid "" +"Whether the direction creatures travel will already be switched at the cave " +"start." msgstr "" -#: src/cavedb.c:593 +#: src/cavedb.c:597 +msgid "Automatically turn (s)" +msgstr "" + +#: src/cavedb.c:597 +msgid "" +"If this is greater than zero, creatures will automatically change direction " +"in every x seconds." +msgstr "" + +#: src/cavedb.c:598 +msgid "Auto turn on hatching" +msgstr "" + +#: src/cavedb.c:598 +msgid "" +"If this is set to true, creatures also turn at the start signal. If false, " +"the first change in direction occurs only later." +msgstr "" + +#: src/cavedb.c:600 +msgid "Gravitation change" +msgstr "" + +#: src/cavedb.c:601 msgid "Direction" msgstr "" -#: src/cavedb.c:593 +#: src/cavedb.c:601 msgid "The direction where stones and diamonds fall." msgstr "" -#: src/cavedb.c:594 +#: src/cavedb.c:602 msgid "Switch active at start" msgstr "" -#: src/cavedb.c:594 +#: src/cavedb.c:602 msgid "" "If set to true, the gravitation switch will be already activated, when the " "cave is started, as if a pot has already been collected." msgstr "" -#: src/cavedb.c:595 +#: src/cavedb.c:603 msgid "Skeletons needed for pot" msgstr "" -#: src/cavedb.c:595 +#: src/cavedb.c:603 msgid "The number of skeletons to be collected to be able to use a pot." msgstr "" -#: src/cavedb.c:596 +#: src/cavedb.c:604 msgid "Gravitation switch delay" msgstr "" -#: src/cavedb.c:596 +#: src/cavedb.c:604 msgid "" "The gravitation changes after a while using the gravitation switch. This " "option sets the number of seconds to wait." msgstr "" -#: src/cavedb.c:599 src/gtkui.c:642 +#: src/cavedb.c:607 src/gtkui.c:643 msgid "Sound" msgstr "" -#: src/cavedb.c:600 +#: src/cavedb.c:608 msgid "Sound for elements" msgstr "" -#: src/cavedb.c:601 +#: src/cavedb.c:609 msgid "If true, falling diamonds will have sound." msgstr "" -#: src/cavedb.c:602 +#: src/cavedb.c:610 msgid "If true, falling and pushed stones will have sound." msgstr "" -#: src/cavedb.c:603 +#: src/cavedb.c:611 msgid "If true, falling and pushed nitro packs will have sound." msgstr "" -#: src/cavedb.c:604 +#: src/cavedb.c:612 msgid "If true, expanding wall will have sound." msgstr "" -#: src/cavedb.c:605 +#: src/cavedb.c:613 msgid "If true, falling wall will have sound." msgstr "" -#: src/cavedb.c:606 +#: src/cavedb.c:614 msgid "Controls if the living amoeba has sound or not." msgstr "" -#: src/cavedb.c:607 +#: src/cavedb.c:615 msgid "If true, the activated magic wall will have sound." msgstr "" -#: src/cavedb.c:608 +#: src/cavedb.c:616 msgid "If true, the elements passing slime will have sound." msgstr "" -#: src/cavedb.c:609 +#: src/cavedb.c:617 msgid "If true, the elements sinking in lava will have sound." msgstr "" -#: src/cavedb.c:610 +#: src/cavedb.c:618 msgid "" "If true, the new element appearing under the replicator will make sound." msgstr "" -#: src/cavedb.c:611 +#: src/cavedb.c:619 msgid "If true, the acid spreading will have sound." msgstr "" -#: src/cavedb.c:612 +#: src/cavedb.c:620 msgid "Biters eating something or pushing a stone will have sound." msgstr "" -#: src/cavedb.c:613 +#: src/cavedb.c:621 msgid "Bladders moving and being pushed can have sound." msgstr "" -#: src/cavedb.c:614 +#: src/cavedb.c:622 msgid "If true, the cave containing water will have sound." msgstr "" -#: src/cavedb.c:615 +#: src/cavedb.c:623 msgid "If true, using the pneumatic hammer will have sound." msgstr "" -#: src/cavedb.c:616 +#: src/cavedb.c:624 msgid "Bladder spender" msgstr "" -#: src/cavedb.c:616 +#: src/cavedb.c:624 msgid "If true, the bladder spender will make sound, when the bladder appears." msgstr "" -#: src/cavedb.c:617 +#: src/cavedb.c:625 msgid "Bladder convert" msgstr "" -#: src/cavedb.c:617 +#: src/cavedb.c:625 msgid "If true, the bladder converting to a clock will make sound." msgstr "" -#: src/cavedb.c:618 +#: src/cavedb.c:626 msgid "Event sounds" msgstr "" -#: src/cavedb.c:619 +#: src/cavedb.c:627 msgid "Gravity change" msgstr "" -#: src/cavedb.c:619 +#: src/cavedb.c:627 msgid "If true, the gravity changing will make sound." msgstr "" -#: src/cavedb.c:623 src/cavedb.c:624 +#: src/cavedb.c:628 +msgid "Creature direction change" +msgstr "" + +#: src/cavedb.c:628 +msgid "" +"If this is set to true, creatures changing direction will be signaled by a " +"sound." +msgstr "" + +#: src/cavedb.c:631 msgid "Compatibility" msgstr "" -#: src/cavedb.c:625 +#: src/cavedb.c:633 +msgid "Skeletons worth diamonds" +msgstr "" + +#: src/cavedb.c:633 +msgid "" +"The number of diamonds each skeleton is worth. Normally skeletons are used " +"for letting the player use the pot! They are not intended to be used as a " +"second kind of diamond." +msgstr "" + +#: src/cavedb.c:634 +msgid "Borders" +msgstr "" + +#: src/cavedb.c:635 msgid "Line shifting border" msgstr "" -#: src/cavedb.c:625 +#: src/cavedb.c:635 msgid "" "If this is set to true, the player exiting on either side will appear one " "row lower or upper on the other side." msgstr "" -#: src/cavedb.c:626 +#: src/cavedb.c:636 msgid "Objects wrap around" msgstr "" -#: src/cavedb.c:626 +#: src/cavedb.c:636 msgid "" "If true, objects will wrap around the cave borders as well, ie. if you drag " "a line to the left, part of it will appear on the right hand side of the " @@ -2155,44 +2313,47 @@ msgid "" "or the bottom boundary will have no effect at all." msgstr "" -#: src/cavedb.c:627 +#: src/cavedb.c:637 msgid "Scan first and last row" msgstr "" -#: src/cavedb.c:627 -msgid "Elements move on first and last row, too." -msgstr "" - -#: src/cavedb.c:628 -msgid "Short explosions" +#: src/cavedb.c:637 +msgid "" +"Elements move on first and last row, too. Usually those rows are the border. " +"The games created by the original editor were not allowed to put anything " +"but steel wall there, so it was not apparent that the borders were not " +"processed by the engine. Some old caves need this for compatibility; it is " +"not recommended to change this setting for newly designed caves, though." msgstr "" -#: src/cavedb.c:628 -msgid "" -"In 1stB, explosions were longer, took five cave frames to complete, as " -"opposed to four in the original." +#: src/cavedb.c:638 +msgid "Other" msgstr "" -#: src/cavedb.c:629 -msgid "Skeletons worth diamonds" +#: src/cavedb.c:639 +msgid "Short explosions" msgstr "" -#: src/cavedb.c:629 -msgid "The number of diamonds each skeleton is worth." +#: src/cavedb.c:639 +msgid "" +"In 1stB and newer engines, explosions were longer, they took five cave " +"frames to complete, as opposed to four frames in the original." msgstr "" -#: src/cavedb.c:630 +#: src/cavedb.c:640 msgid "Gravity change affects everything" msgstr "" -#: src/cavedb.c:630 +#: src/cavedb.c:640 msgid "" "If this is enabled, changing the gravity will also affect bladders (moving " "and pushing), bladder spenders, falling walls and waiting stones. Otherwise, " -"those elements behave as gravity was always pointing downwards." +"those elements behave as gravity was always pointing downwards. This is a " +"compatibility setting which is not recommended to change. It is intended for " +"imported caves." msgstr "" -#: src/cavedb.c:647 +#: src/cavedb.c:654 msgid "Replay" msgstr "" @@ -2207,11 +2368,11 @@ msgstr "" #. Set the translated string to "lowercase-element-names-yes", if your language #. allows writing nouns with lowercase initials. Set it to "lowercase-element-names-no", #. if not: for example, german. Do not translate the string, but set the behavior! -#: src/cavedb.c:902 +#: src/cavedb.c:920 msgid "lowercase-element-names-yes" msgstr "" -#: src/caveobject.c:29 src/help.c:165 +#: src/caveobject.c:29 src/help.c:174 msgid "Point" msgstr "" @@ -2229,7 +2390,7 @@ msgstr "" msgid "Draw" msgstr "" -#: src/caveobject.c:30 src/help.c:167 +#: src/caveobject.c:30 src/help.c:176 msgid "Line" msgstr "" @@ -2246,11 +2407,11 @@ msgstr "" msgid "Ending coordinates" msgstr "" -#: src/caveobject.c:31 src/help.c:168 +#: src/caveobject.c:31 src/help.c:177 msgid "Outline" msgstr "" -#: src/caveobject.c:32 src/help.c:169 +#: src/caveobject.c:32 src/help.c:178 msgid "Rectangle" msgstr "" @@ -2266,7 +2427,7 @@ msgstr "" msgid "Fill" msgstr "" -#: src/caveobject.c:33 src/help.c:170 +#: src/caveobject.c:33 src/help.c:179 msgid "Raster" msgstr "" @@ -2274,7 +2435,7 @@ msgstr "" msgid "Distance" msgstr "" -#: src/caveobject.c:34 src/help.c:171 +#: src/caveobject.c:34 src/help.c:180 msgid "Join" msgstr "" @@ -2298,7 +2459,7 @@ msgstr "" msgid "Replace" msgstr "" -#: src/caveobject.c:36 src/help.c:172 +#: src/caveobject.c:36 src/help.c:181 msgid "Fill to border" msgstr "" @@ -2306,7 +2467,7 @@ msgstr "" msgid "Border" msgstr "" -#: src/caveobject.c:37 src/help.c:176 +#: src/caveobject.c:37 src/help.c:185 msgid "Maze" msgstr "" @@ -2341,11 +2502,11 @@ msgstr "" msgid "Horizontal (%%)" msgstr "" -#: src/caveobject.c:38 src/help.c:177 +#: src/caveobject.c:38 src/help.c:186 msgid "Unicursal maze" msgstr "" -#: src/caveobject.c:39 src/help.c:178 +#: src/caveobject.c:39 src/help.c:187 msgid "Braid maze" msgstr "" @@ -2369,7 +2530,7 @@ msgstr "" msgid "C64 random numbers" msgstr "" -#: src/caveobject.c:41 src/help.c:180 +#: src/caveobject.c:41 src/help.c:189 msgid "Copy and paste" msgstr "" @@ -2494,7 +2655,7 @@ msgstr "" msgid "Remark (informative)." msgstr "" -#: src/caveset.c:70 src/help.c:221 +#: src/caveset.c:70 src/help.c:230 msgid "Title screen" msgstr "" @@ -2729,6 +2890,13 @@ msgstr "" msgid "Level shown" msgstr "" +#: src/editor.c:1447 +msgid "" +"Random seed value controls the predictable random number generator, which " +"fills the cave initially. If set to -1, cave is totally random every time it " +"is played." +msgstr "" + #: src/editor.c:1462 msgid "Initial border" msgstr "" @@ -2746,7 +2914,7 @@ msgstr "" msgid "Object Properties" msgstr "" -#: src/editor.c:1621 src/editorexport.c:573 +#: src/editor.c:1621 src/editorexport.c:631 msgid "Type" msgstr "" @@ -2772,132 +2940,132 @@ msgstr "" msgid "Enabled this object on all levels." msgstr "" -#: src/editor.c:2634 +#: src/editor.c:2638 msgid "Cave Name" msgstr "" -#: src/editor.c:2726 +#: src/editor.c:2730 #, c-format msgid "%d caves selected" msgstr "" -#: src/editor.c:2950 +#: src/editor.c:2954 msgid "Cave Initial Random Fill" msgstr "" -#: src/editor.c:2987 +#: src/editor.c:2991 msgid "Save Cave as PNG Image" msgstr "" -#: src/editor.c:2994 +#: src/editor.c:2998 msgid "PNG files" msgstr "" -#: src/editor.c:3070 +#: src/editor.c:3074 msgid "Cave Overview" msgstr "" -#: src/editor.c:3071 +#: src/editor.c:3075 msgid "Save as _PNG" msgstr "" -#: src/editor.c:3229 +#: src/editor.c:3233 msgid "Cave Colors" msgstr "" -#: src/editor.c:3262 +#: src/editor.c:3266 msgid "Set random..." msgstr "" -#: src/editor.c:3269 +#: src/editor.c:3273 msgid "" "Hint: As the palette can be changed for C64 and Atari colors, it is not " "recommended to use different types together (for example, RGB color for " "background, Atari color for Slime.)" msgstr "" -#: src/editor.c:3314 +#: src/editor.c:3318 msgid "Do you really want to delete cave(s)?" msgstr "" -#: src/editor.c:3314 +#: src/editor.c:3318 msgid "This operation cannot be undone." msgstr "" -#: src/editor.c:3487 +#: src/editor.c:3491 msgid "" "At least one object would have been totally hidden (not visible on any of " "the levels)." msgstr "" -#: src/editor.c:3487 +#: src/editor.c:3491 msgid "Enabled those objects on the current level." msgstr "" -#: src/editor.c:3677 +#: src/editor.c:3681 msgid "Do you really want to clear cave objects?" msgstr "" -#: src/editor.c:3698 +#: src/editor.c:3702 msgid "Do you really want to remove cave map?" msgstr "" -#: src/editor.c:3698 +#: src/editor.c:3702 msgid "This operation destroys all cave objects." msgstr "" -#: src/editor.c:3719 +#: src/editor.c:3723 msgid "This cave has no objects." msgstr "" -#: src/editor.c:3723 +#: src/editor.c:3727 msgid "Do you really want to flatten cave?" msgstr "" -#: src/editor.c:3723 +#: src/editor.c:3727 msgid "" "This operation merges all cave objects currently seen in a single map. " "Further objects may later be added, but the ones already seen will behave " "like the random fill elements; they will not be editable." msgstr "" -#: src/editor.c:3856 +#: src/editor.c:3860 msgid "Save Cave Set in HTML" msgstr "" -#: src/editor.c:3864 +#: src/editor.c:3868 msgid "HTML files" msgstr "" -#: src/editor.c:3900 +#: src/editor.c:3904 msgid "Export Cave as CrLi Cave File" msgstr "" -#: src/editor.c:3939 +#: src/editor.c:3943 msgid "Export Cave as CrLi Cave Pack" msgstr "" -#: src/editor.c:4050 +#: src/editor.c:4054 msgid "Create New Cave" msgstr "" -#: src/editor.c:4061 src/gtkmain.c:1439 +#: src/editor.c:4065 src/gtkmain.c:1442 msgid "Name:" msgstr "" -#: src/editor.c:4067 +#: src/editor.c:4071 msgid "New cave" msgstr "" -#: src/editor.c:4071 +#: src/editor.c:4075 msgid "Description:" msgstr "" -#: src/editor.c:4080 +#: src/editor.c:4084 msgid "Intermission:" msgstr "" -#: src/editor.c:4082 +#: src/editor.c:4086 msgid "" "Intermission caves are usually small and fast caves, which are not required " "to be solved. The player will not lose a life if he is not successful. The " @@ -2906,11 +3074,11 @@ msgid "" "intermissions." msgstr "" -#: src/editor.c:4210 +#: src/editor.c:4214 msgid "Do you really want to remove unknown cave tags?" msgstr "" -#: src/editor.c:4210 +#: src/editor.c:4214 msgid "" "This operation removes all unknown tags associated with all caves. Unknown " "tags might come from another BDCFF-compatible game or an older version of " @@ -2918,578 +3086,552 @@ msgid "" "you use this caveset in this application, they are of no use." msgstr "" -#: src/editor.c:4327 src/editor.c:4338 +#: src/editor.c:4331 src/editor.c:4342 #, c-format msgid "%s Element" msgstr "" -#: src/editor.c:4331 src/editor.c:4348 +#: src/editor.c:4335 src/editor.c:4352 msgid "Draw Element" msgstr "" -#: src/editor.c:4342 src/editor.c:4352 +#: src/editor.c:4346 src/editor.c:4356 msgid "Fill Element" msgstr "" -#: src/editor.c:4430 +#: src/editor.c:4434 #, c-format msgid "%s: removed %d replay(s)\n" msgstr "" -#: src/editor.c:4436 +#: src/editor.c:4440 msgid "Some replays were removed." msgstr "" -#: src/editor.c:4466 +#: src/editor.c:4470 #, c-format msgid "%s: marked %d replay(s) as working ones\n" msgstr "" -#: src/editor.c:4472 +#: src/editor.c:4476 msgid "" "Some replay checksums were recalculated. This does not mean that those " "replays actually play correctly!" msgstr "" -#: src/editor.c:4528 src/editor.c:4545 +#: src/editor.c:4532 src/editor.c:4549 msgid "Error loading image file." msgstr "" -#: src/editor.c:4528 +#: src/editor.c:4532 msgid "Cannot recognize file format." msgstr "" -#: src/editor.c:4535 +#: src/editor.c:4539 #, c-format msgid "Maximum sizes: %dx%d pixels" msgstr "" -#: src/editor.c:4536 +#: src/editor.c:4540 msgid "The image selected is too big!" msgstr "" -#: src/editor.c:4570 +#: src/editor.c:4574 msgid "Select Image File for Title Screen" msgstr "" -#: src/editor.c:4577 +#: src/editor.c:4581 msgid "Select Image File for Background Tile" msgstr "" -#: src/editor.c:4591 +#: src/editor.c:4595 msgid "Set Title Image" msgstr "" -#: src/editor.c:4607 +#: src/editor.c:4611 msgid "Load _image" msgstr "" -#: src/editor.c:4608 +#: src/editor.c:4612 msgid "Load _tile" msgstr "" -#: src/editor.c:4614 +#: src/editor.c:4618 #, c-format msgid "" "Recommended image sizes are 320x176 pixels for title image and 8x8 pixels " "for the scrolling tile. Maximum sizes are %dx%d and %dx%d, respectively." msgstr "" -#: src/editor.c:4645 src/gtkmain.c:1922 +#: src/editor.c:4649 src/gtkmain.c:1926 msgid "_File" msgstr "" -#: src/editor.c:4646 +#: src/editor.c:4650 msgid "_Cave" msgstr "" -#: src/editor.c:4647 +#: src/editor.c:4651 msgid "_Edit" msgstr "" -#: src/editor.c:4648 +#: src/editor.c:4652 msgid "_View" msgstr "" -#: src/editor.c:4649 +#: src/editor.c:4653 msgid "_Tools" msgstr "" -#: src/editor.c:4650 src/gtkmain.c:1924 +#: src/editor.c:4654 src/gtkmain.c:1928 msgid "_Help" msgstr "" -#: src/editor.c:4651 +#: src/editor.c:4655 msgid "Close cave editor" msgstr "" -#: src/editor.c:4652 +#: src/editor.c:4656 msgid "New _cave" msgstr "" -#: src/editor.c:4652 +#: src/editor.c:4656 msgid "Create new cave" msgstr "" -#: src/editor.c:4654 +#: src/editor.c:4658 msgid "Save cave set to file" msgstr "" -#: src/editor.c:4655 +#: src/editor.c:4659 msgid "Save cave set as new file" msgstr "" -#: src/editor.c:4656 +#: src/editor.c:4660 msgid "Load cave set from file" msgstr "" -#: src/editor.c:4657 src/gtkmain.c:1940 +#: src/editor.c:4661 src/gtkmain.c:1944 msgid "O_pen shipped" msgstr "" -#: src/editor.c:4657 +#: src/editor.c:4661 msgid "Load shipped cave set from file" msgstr "" -#: src/editor.c:4658 src/gtkmain.c:1943 +#: src/editor.c:4662 src/gtkmain.c:1947 msgid "Hi_ghscores" msgstr "" -#: src/editor.c:4659 +#: src/editor.c:4663 msgid "Select all items" msgstr "" -#: src/editor.c:4660 +#: src/editor.c:4664 msgid "Cave set _properties" msgstr "" -#: src/editor.c:4660 +#: src/editor.c:4664 msgid "Set properties of cave set" msgstr "" -#: src/editor.c:4661 +#: src/editor.c:4665 msgid "Cave set _title image" msgstr "" -#: src/editor.c:4661 +#: src/editor.c:4665 msgid "Set caveset title image" msgstr "" -#: src/editor.c:4666 +#: src/editor.c:4670 msgid "_Edit cave" msgstr "" -#: src/editor.c:4666 +#: src/editor.c:4670 msgid "Edit selected cave" msgstr "" -#: src/editor.c:4667 +#: src/editor.c:4671 msgid "_Rename cave" msgstr "" -#: src/editor.c:4667 +#: src/editor.c:4671 msgid "Rename selected cave" msgstr "" -#: src/editor.c:4668 +#: src/editor.c:4672 msgid "Make cave _selectable" msgstr "" -#: src/editor.c:4668 +#: src/editor.c:4672 msgid "Make the cave selectable as game start" msgstr "" -#: src/editor.c:4669 +#: src/editor.c:4673 msgid "Make cave _unselectable" msgstr "" -#: src/editor.c:4669 +#: src/editor.c:4673 msgid "Make the cave unselectable as game start" msgstr "" -#: src/editor.c:4674 +#: src/editor.c:4678 msgid "_New cave set" msgstr "" -#: src/editor.c:4674 +#: src/editor.c:4678 msgid "Create new cave set with no caves" msgstr "" -#: src/editor.c:4675 +#: src/editor.c:4679 msgid "Save _HTML gallery" msgstr "" -#: src/editor.c:4675 +#: src/editor.c:4679 msgid "Save game in a HTML gallery" msgstr "" -#: src/editor.c:4676 +#: src/editor.c:4680 msgid "Export _CrLi cave pack" msgstr "" -#: src/editor.c:4677 +#: src/editor.c:4681 msgid "_Make caves selectable" msgstr "" -#: src/editor.c:4678 +#: src/editor.c:4682 msgid "All _caves" msgstr "" -#: src/editor.c:4678 +#: src/editor.c:4682 msgid "Make all caves selectable as game start" msgstr "" -#: src/editor.c:4679 +#: src/editor.c:4683 msgid "All _but intermissions" msgstr "" -#: src/editor.c:4679 +#: src/editor.c:4683 msgid "Make all caves but intermissions selectable as game start" msgstr "" -#: src/editor.c:4680 +#: src/editor.c:4684 msgid "All _after intermissions" msgstr "" -#: src/editor.c:4680 +#: src/editor.c:4684 msgid "Make all caves after intermissions selectable as game start" msgstr "" -#: src/editor.c:4681 +#: src/editor.c:4685 msgid "Remove all unknown tags" msgstr "" -#: src/editor.c:4681 +#: src/editor.c:4685 msgid "Removes all unknown tags found in the BDCFF file" msgstr "" -#: src/editor.c:4682 +#: src/editor.c:4686 msgid "Remove bad replays" msgstr "" -#: src/editor.c:4682 +#: src/editor.c:4686 msgid "Removes replays which won't play as they have their caves modified." msgstr "" -#: src/editor.c:4683 +#: src/editor.c:4687 msgid "Fix replay checksums" msgstr "" -#: src/editor.c:4683 +#: src/editor.c:4687 msgid "Treats all replays with wrong checksums as working ones." msgstr "" -#: src/editor.c:4688 +#: src/editor.c:4692 msgid "_Export as CrLi cave file" msgstr "" -#: src/editor.c:4689 +#: src/editor.c:4693 msgid "Open cave selector" msgstr "" -#: src/editor.c:4690 +#: src/editor.c:4694 msgid "_Next cave" msgstr "" -#: src/editor.c:4690 +#: src/editor.c:4694 msgid "Next cave" msgstr "" -#: src/editor.c:4691 +#: src/editor.c:4695 msgid "_Previous cave" msgstr "" -#: src/editor.c:4691 +#: src/editor.c:4695 msgid "Previous cave" msgstr "" -#: src/editor.c:4692 +#: src/editor.c:4696 msgid "_Test" msgstr "" -#: src/editor.c:4692 src/help.c:230 +#: src/editor.c:4696 src/help.c:239 msgid "Test cave" msgstr "" -#: src/editor.c:4693 +#: src/editor.c:4697 msgid "Ca_ve properties" msgstr "" -#: src/editor.c:4693 +#: src/editor.c:4697 msgid "Cave settings" msgstr "" -#: src/editor.c:4694 +#: src/editor.c:4698 msgid "Set engine defaults" msgstr "" -#: src/editor.c:4695 +#: src/editor.c:4699 msgid "Cave co_lors" msgstr "" -#: src/editor.c:4695 +#: src/editor.c:4699 msgid "Select cave colors" msgstr "" -#: src/editor.c:4696 +#: src/editor.c:4700 msgid "Remove objects" msgstr "" -#: src/editor.c:4696 +#: src/editor.c:4700 msgid "Clear cave objects" msgstr "" -#: src/editor.c:4697 +#: src/editor.c:4701 msgid "Convert to map" msgstr "" -#: src/editor.c:4697 +#: src/editor.c:4701 msgid "Flatten cave to a single cave map without objects" msgstr "" -#: src/editor.c:4698 +#: src/editor.c:4702 msgid "O_verview" msgstr "" -#: src/editor.c:4698 +#: src/editor.c:4702 msgid "Full screen overview of cave" msgstr "" -#: src/editor.c:4699 +#: src/editor.c:4703 msgid "O_verview (simple)" msgstr "" -#: src/editor.c:4699 +#: src/editor.c:4703 msgid "Full screen overview of cave almost as in game" msgstr "" -#: src/editor.c:4700 +#: src/editor.c:4704 msgid "_Auto shrink" msgstr "" -#: src/editor.c:4700 +#: src/editor.c:4704 msgid "Automatically set the visible region of the cave" msgstr "" -#: src/editor.c:4705 +#: src/editor.c:4709 msgid "To _bottom" msgstr "" -#: src/editor.c:4705 +#: src/editor.c:4709 msgid "Push object to bottom" msgstr "" -#: src/editor.c:4706 +#: src/editor.c:4710 msgid "To t_op" msgstr "" -#: src/editor.c:4706 +#: src/editor.c:4710 msgid "Bring object to top" msgstr "" -#: src/editor.c:4707 +#: src/editor.c:4711 msgid "Show on this level" msgstr "" -#: src/editor.c:4707 +#: src/editor.c:4711 msgid "Enable object on currently visible level" msgstr "" -#: src/editor.c:4708 +#: src/editor.c:4712 msgid "Hide on this level" msgstr "" -#: src/editor.c:4708 +#: src/editor.c:4712 msgid "Disable object on currently visible level" msgstr "" -#: src/editor.c:4709 +#: src/editor.c:4713 msgid "Only on this level" msgstr "" -#: src/editor.c:4709 +#: src/editor.c:4713 msgid "Enable object only on the currently visible level" msgstr "" -#: src/editor.c:4710 +#: src/editor.c:4714 msgid "Show on all levels" msgstr "" -#: src/editor.c:4710 +#: src/editor.c:4714 msgid "Enable object on all levels" msgstr "" -#: src/editor.c:4714 +#: src/editor.c:4718 msgid "Ob_ject properties" msgstr "" -#: src/editor.c:4714 +#: src/editor.c:4718 msgid "Set object properties" msgstr "" -#: src/editor.c:4719 +#: src/editor.c:4723 msgid "Map" msgstr "" -#: src/editor.c:4720 +#: src/editor.c:4724 msgid "Shift _left" msgstr "" -#: src/editor.c:4721 +#: src/editor.c:4725 msgid "Shift _right" msgstr "" -#: src/editor.c:4722 +#: src/editor.c:4726 msgid "Shift _up" msgstr "" -#: src/editor.c:4723 +#: src/editor.c:4727 msgid "Shift _down" msgstr "" -#: src/editor.c:4724 +#: src/editor.c:4728 msgid "Remove m_ap" msgstr "" -#: src/editor.c:4724 +#: src/editor.c:4728 msgid "Remove cave map, if it has one" msgstr "" -#: src/editor.c:4729 +#: src/editor.c:4733 msgid "Setup cave _random fill" msgstr "" -#: src/editor.c:4729 +#: src/editor.c:4733 msgid "Setup initial fill random elements for the cave" msgstr "" -#: src/editor.c:4734 +#: src/editor.c:4738 msgid "Cut to clipboard" msgstr "" -#: src/editor.c:4735 +#: src/editor.c:4739 msgid "Copy to clipboard" msgstr "" -#: src/editor.c:4736 +#: src/editor.c:4740 msgid "Delete" msgstr "" -#: src/editor.c:4741 +#: src/editor.c:4745 msgid "Paste object from clipboard" msgstr "" -#: src/editor.c:4746 +#: src/editor.c:4750 msgid "Undo last action" msgstr "" -#: src/editor.c:4751 +#: src/editor.c:4755 msgid "Redo last action" msgstr "" -#: src/editor.c:4759 +#: src/editor.c:4763 msgid "_Animated view" msgstr "" -#: src/editor.c:4759 +#: src/editor.c:4763 msgid "Animated view" msgstr "" -#: src/editor.c:4760 +#: src/editor.c:4764 msgid "_Colored objects" msgstr "" -#: src/editor.c:4760 +#: src/editor.c:4764 msgid "Cave objects are colored" msgstr "" -#: src/editor.c:4761 +#: src/editor.c:4765 msgid "_Object list" msgstr "" -#: src/editor.c:4761 +#: src/editor.c:4765 msgid "Object list sidebar" msgstr "" -#: src/editor.c:4762 +#: src/editor.c:4766 msgid "_Show variables in test" msgstr "" -#: src/editor.c:4762 +#: src/editor.c:4766 msgid "Show a label during tests with some cave parameters" msgstr "" -#: src/editor.c:5096 +#: src/editor.c:5100 msgid "Level shown:" msgstr "" -#: src/editor.c:5100 +#: src/editor.c:5104 msgid "" "Element used to draw points, lines, and rectangles. You can use middle-click " "to pick one from the cave." msgstr "" -#: src/editor.c:5105 +#: src/editor.c:5109 msgid "" "Element used to fill rectangles, and second element of joins. You can use " "Ctrl + middle-click to pick one from the cave." msgstr "" -#: src/editor.c:5142 +#: src/editor.c:5146 msgid "_Objects" msgstr "" -#: src/editorexport.c:462 +#: src/editorexport.c:472 msgid "Saving HTML gallery" msgstr "" -#: src/editorexport.c:484 -#, c-format -msgid "Caves: %d
\n" -msgstr "" - -#: src/editorexport.c:486 -#, c-format -msgid "Author: %s
\n" -msgstr "" - -#: src/editorexport.c:488 -#, c-format -msgid "Description: %s
\n" -msgstr "" - -#: src/editorexport.c:490 -#, c-format -msgid "WWW: %s
\n" -msgstr "" - -#: src/editorexport.c:492 -#, c-format -msgid "Remark: %s
\n" -msgstr "" - -#: src/editorexport.c:494 -#, c-format -msgid "Story:
%s
\n" +#: src/editorexport.c:524 src/help.c:41 +msgid "Caves" msgstr "" -#: src/editorexport.c:573 src/gtkmain.c:1801 +#: src/editorexport.c:631 src/gtkmain.c:1805 msgid "Normal cave" msgstr "" -#: src/editorexport.c:576 +#: src/editorexport.c:634 msgid "Diamond value" msgstr "" -#: src/editorexport.c:577 +#: src/editorexport.c:635 msgid "Extra diamond value" msgstr "" -#: src/editorexport.c:580 +#: src/editorexport.c:638 msgid "Amoeba threshold and time (s)" msgstr "" -#: src/editorexport.c:582 +#: src/editorexport.c:640 msgid "Magic wall milling time (s)" msgstr "" @@ -3534,12 +3676,12 @@ msgid "Elements" msgstr "" #. TRANSLATORS: cave name, level x -#: src/gtkmain.c:511 +#: src/gtkmain.c:512 #, c-format msgid "%s, level %d" msgstr "" -#: src/gtkmain.c:549 +#: src/gtkmain.c:551 #, c-format msgid "" "%s\n" @@ -3549,130 +3691,130 @@ msgid "" "Press fire to continue" msgstr "" -#: src/gtkmain.c:589 +#: src/gtkmain.c:592 #, c-format msgid "You have %d points, and achieved a highscore." msgstr "" -#: src/gtkmain.c:590 src/gtkmain.c:606 +#: src/gtkmain.c:593 src/gtkmain.c:609 msgid "Game over!" msgstr "" -#: src/gtkmain.c:605 +#: src/gtkmain.c:608 #, c-format msgid "You have %d points." msgstr "" -#: src/gtkmain.c:627 +#: src/gtkmain.c:630 #, c-format msgid "Lives: %d" msgstr "" -#: src/gtkmain.c:629 +#: src/gtkmain.c:632 msgid "Bonus life" msgstr "" -#: src/gtkmain.c:634 +#: src/gtkmain.c:637 msgid "Continuing from snapshot" msgstr "" -#: src/gtkmain.c:637 +#: src/gtkmain.c:640 msgid "Testing cave" msgstr "" -#: src/gtkmain.c:640 +#: src/gtkmain.c:643 msgid "Playing replay" msgstr "" -#: src/gtkmain.c:643 +#: src/gtkmain.c:646 msgid "Continuing replay" msgstr "" -#: src/gtkmain.c:654 +#: src/gtkmain.c:657 #, c-format msgid "Diamonds: %03d Value: %02d" msgstr "" -#: src/gtkmain.c:656 +#: src/gtkmain.c:659 #, c-format msgid "Diamonds: ??? Value: %02d" msgstr "" -#: src/gtkmain.c:666 +#: src/gtkmain.c:669 #, c-format msgid "Keys: %d, %d, %d" msgstr "" -#: src/gtkmain.c:667 +#: src/gtkmain.c:670 #, c-format msgid "Skeletons: %d Gravity change: %d" msgstr "" -#: src/gtkmain.c:672 +#: src/gtkmain.c:675 #, c-format msgid "" "Speed: %dms, Amoeba timer: %ds %d, %ds %d, Magic wall timer: %ds\n" "Expanding wall: %s, Creatures: %ds, %s, Gravity: %s\n" -"Kill player: %s, Sweet eaten: %s, Diamond key: %s" +"Kill player: %s, Sweet eaten: %s, Diamond key: %s, Diamonds: %d" msgstr "" -#: src/gtkmain.c:682 +#: src/gtkmain.c:685 msgid "vertical" msgstr "" -#: src/gtkmain.c:682 +#: src/gtkmain.c:685 msgid "horizontal" msgstr "" -#: src/gtkmain.c:684 +#: src/gtkmain.c:687 msgid "backwards" msgstr "" -#: src/gtkmain.c:684 +#: src/gtkmain.c:687 msgid "forwards" msgstr "" -#: src/gtkmain.c:686 src/gtkmain.c:687 src/gtkmain.c:688 +#: src/gtkmain.c:689 src/gtkmain.c:690 src/gtkmain.c:691 msgid "yes" msgstr "" -#: src/gtkmain.c:686 src/gtkmain.c:687 src/gtkmain.c:688 +#: src/gtkmain.c:689 src/gtkmain.c:690 src/gtkmain.c:691 msgid "no" msgstr "" -#: src/gtkmain.c:1291 +#: src/gtkmain.c:1294 msgid "GDash cannot load file from a network link." msgstr "" -#: src/gtkmain.c:1310 +#: src/gtkmain.c:1313 msgid "Loaded caveset from file:" msgstr "" -#: src/gtkmain.c:1424 +#: src/gtkmain.c:1427 msgid "There are no caves in this cave set!" msgstr "" -#: src/gtkmain.c:1428 +#: src/gtkmain.c:1431 msgid "Select cave to play" msgstr "" -#: src/gtkmain.c:1450 +#: src/gtkmain.c:1453 msgid "Cave:" msgstr "" -#: src/gtkmain.c:1471 +#: src/gtkmain.c:1474 msgid "Level:" msgstr "" -#: src/gtkmain.c:1482 +#: src/gtkmain.c:1486 msgid "Preview" msgstr "" -#: src/gtkmain.c:1641 src/help.c:126 +#: src/gtkmain.c:1645 src/help.c:135 msgid "Replays" msgstr "" -#: src/gtkmain.c:1646 +#: src/gtkmain.c:1650 msgid "" "Hint: When watching a replay, you can use the usual movement keys (left, " "right...) to stop the replay and immediately continue the playing of the " @@ -3680,264 +3822,276 @@ msgid "" msgstr "" #. TRANSLATORS: "Lvl" here stands for Level. Some shorthand should be used. -#: src/gtkmain.c:1699 +#: src/gtkmain.c:1703 msgid "Lvl" msgstr "" -#: src/gtkmain.c:1710 src/gtkui.c:1001 +#: src/gtkmain.c:1714 src/gtkui.c:1003 msgid "Score" msgstr "" -#: src/gtkmain.c:1715 +#: src/gtkmain.c:1719 msgid "Comment" msgstr "" -#: src/gtkmain.c:1722 +#: src/gtkmain.c:1726 msgid "Saved" msgstr "" -#: src/gtkmain.c:1763 src/gtkmain.c:1806 +#: src/gtkmain.c:1767 src/gtkmain.c:1810 msgid "Description: " msgstr "" -#: src/gtkmain.c:1768 src/gtkmain.c:1811 +#: src/gtkmain.c:1772 src/gtkmain.c:1815 msgid "Author: " msgstr "" -#: src/gtkmain.c:1773 src/gtkmain.c:1816 +#: src/gtkmain.c:1777 src/gtkmain.c:1820 msgid "Date: " msgstr "" -#: src/gtkmain.c:1778 +#: src/gtkmain.c:1782 msgid "Diffuculty: " msgstr "" -#: src/gtkmain.c:1783 src/gtkmain.c:1827 +#: src/gtkmain.c:1787 src/gtkmain.c:1831 msgid "Story:\n" msgstr "" -#: src/gtkmain.c:1788 src/gtkmain.c:1832 +#: src/gtkmain.c:1792 src/gtkmain.c:1836 msgid "Remark:\n" msgstr "" -#: src/gtkmain.c:1800 +#: src/gtkmain.c:1804 msgid "Type: " msgstr "" -#: src/gtkmain.c:1821 +#: src/gtkmain.c:1825 msgid "Difficulty: " msgstr "" -#: src/gtkmain.c:1852 +#: src/gtkmain.c:1856 msgid "Caveset information" msgstr "" -#: src/gtkmain.c:1921 +#: src/gtkmain.c:1925 msgid "_Play" msgstr "" -#: src/gtkmain.c:1923 +#: src/gtkmain.c:1927 msgid "_Settings" msgstr "" -#: src/gtkmain.c:1927 +#: src/gtkmain.c:1931 msgid "_Error console" msgstr "" -#: src/gtkmain.c:1929 +#: src/gtkmain.c:1933 msgid "Caveset _information" msgstr "" -#: src/gtkmain.c:1929 +#: src/gtkmain.c:1933 msgid "Show information about the game and its caves" msgstr "" -#: src/gtkmain.c:1934 +#: src/gtkmain.c:1938 msgid "_Control keys" msgstr "" -#: src/gtkmain.c:1935 +#: src/gtkmain.c:1939 msgid "_New game" msgstr "" -#: src/gtkmain.c:1935 +#: src/gtkmain.c:1939 msgid "Start new game" msgstr "" -#: src/gtkmain.c:1936 +#: src/gtkmain.c:1940 msgid "Cave _editor" msgstr "" -#: src/gtkmain.c:1938 +#: src/gtkmain.c:1942 msgid "Load _internal game" msgstr "" -#: src/gtkmain.c:1939 +#: src/gtkmain.c:1943 msgid "Open _recent" msgstr "" -#: src/gtkmain.c:1944 +#: src/gtkmain.c:1951 msgid "Show _replays" msgstr "" -#: src/gtkmain.c:1948 +#: src/gtkmain.c:1951 +msgid "List replays which are recorded for caves in this caveset" +msgstr "" + +#: src/gtkmain.c:1955 msgid "_Take snapshot" msgstr "" -#: src/gtkmain.c:1949 +#: src/gtkmain.c:1956 msgid "Re_start level" msgstr "" -#: src/gtkmain.c:1949 +#: src/gtkmain.c:1956 msgid "Restart current level" msgstr "" -#: src/gtkmain.c:1950 +#: src/gtkmain.c:1957 msgid "_End game" msgstr "" -#: src/gtkmain.c:1950 +#: src/gtkmain.c:1957 msgid "End current game" msgstr "" -#: src/gtkmain.c:1954 +#: src/gtkmain.c:1961 msgid "_Revert to snapshot" msgstr "" -#: src/gtkmain.c:1958 +#: src/gtkmain.c:1965 msgid "Pause game" msgstr "" -#: src/gtkmain.c:1959 +#: src/gtkmain.c:1966 msgid "Fullscreen mode during play" msgstr "" -#: src/gtkmain.c:1960 +#: src/gtkmain.c:1967 msgid "Fast for_ward" msgstr "" -#: src/gtkmain.c:1960 +#: src/gtkmain.c:1967 msgid "Fast forward" msgstr "" -#: src/gtkmain.c:2168 +#: src/gtkmain.c:2180 msgid "Start editor" msgstr "" -#: src/gtkmain.c:2169 +#: src/gtkmain.c:2181 msgid "Save caveset in a HTML gallery" msgstr "" -#: src/gtkmain.c:2170 +#: src/gtkmain.c:2182 +msgid "Link stylesheet from file to a HTML gallery, eg. \"../style.css\"" +msgstr "" + +#: src/gtkmain.c:2183 +msgid "Link shortcut icon to a HTML gallery, eg. \"../favicon.ico\"" +msgstr "" + +#: src/gtkmain.c:2184 msgid "" "Save cave C, level L in a PNG image. If no cave selected, uses a random one" msgstr "" -#: src/gtkmain.c:2171 +#: src/gtkmain.c:2185 msgid "Set PNG image size. Default is 128x96, set to 0x0 for unscaled" msgstr "" -#: src/gtkmain.c:2172 +#: src/gtkmain.c:2186 msgid "Save caveset in a BDCFF file" msgstr "" -#: src/gtkmain.c:2173 +#: src/gtkmain.c:2187 msgid "Batch mode: quit after specified tasks" msgstr "" -#: src/gtkmain.c:2228 src/sdlmain.c:1228 +#: src/gtkmain.c:2242 src/sdlmain.c:731 #, c-format msgid "Errors during loading caveset from file '%s'" msgstr "" -#: src/gtkmain.c:2233 src/sdlmain.c:1235 +#: src/gtkmain.c:2247 src/sdlmain.c:738 #, c-format msgid "%d: no such internal caveset" msgstr "" -#: src/gtkmain.c:2262 +#: src/gtkmain.c:2276 msgid "Invalid cave or level number!" msgstr "" -#: src/gtkmain.c:2275 +#: src/gtkmain.c:2289 #, c-format msgid "Invalid image size: %s" msgstr "" -#: src/gtkui.c:350 +#: src/gtkui.c:351 msgid "Default" msgstr "" -#: src/gtkui.c:439 +#: src/gtkui.c:440 msgid "All image files" msgstr "" -#: src/gtkui.c:509 +#: src/gtkui.c:510 msgid "Add Theme from Image File" msgstr "" -#: src/gtkui.c:544 +#: src/gtkui.c:545 msgid "The selected image cannot be used as a GDash theme." msgstr "" -#: src/gtkui.c:569 +#: src/gtkui.c:570 #, c-format msgid "Do you really want to remove theme '%s'?" msgstr "" -#: src/gtkui.c:570 +#: src/gtkui.c:571 #, c-format msgid "The image file of the theme is '%s'." msgstr "" -#: src/gtkui.c:582 +#: src/gtkui.c:583 msgid "Cannot delete the image file." msgstr "" -#: src/gtkui.c:630 +#: src/gtkui.c:631 msgid "Language (requires restart)" msgstr "" -#: src/gtkui.c:631 +#: src/gtkui.c:632 msgid "The language of the application. Requires restart!" msgstr "" -#: src/gtkui.c:632 +#: src/gtkui.c:633 msgid "Cave options" msgstr "" -#: src/gtkui.c:633 +#: src/gtkui.c:634 msgid "Mouse play (experimental!)" msgstr "" -#: src/gtkui.c:633 +#: src/gtkui.c:634 msgid "Use the mouse to play. The player will follow the cursor!" msgstr "" -#: src/gtkui.c:634 +#: src/gtkui.c:635 msgid "All caves selectable" msgstr "" -#: src/gtkui.c:634 +#: src/gtkui.c:635 msgid "All caves and intermissions can be selected at game start." msgstr "" -#: src/gtkui.c:635 +#: src/gtkui.c:636 msgid "Import as all caves selectable" msgstr "" -#: src/gtkui.c:635 +#: src/gtkui.c:636 msgid "" "Original, C64 games are imported not with A, E, I, M caves selectable, but " "all caves (ABCD, EFGH... excluding intermissions). This does not affect " "BDCFF caves." msgstr "" -#: src/gtkui.c:636 +#: src/gtkui.c:637 msgid "Use BDCFF highscore" msgstr "" -#: src/gtkui.c:636 +#: src/gtkui.c:637 msgid "" "Use BDCFF highscores. GDash saves highscores in its own configuration " "directory and also in the *.bd files. However, it prefers loading them from " @@ -3946,271 +4100,287 @@ msgid "" "selected for a specific file in the file open dialog, too." msgstr "" -#: src/gtkui.c:637 +#: src/gtkui.c:638 msgid "Show story" msgstr "" -#: src/gtkui.c:637 +#: src/gtkui.c:638 msgid "" "If the cave has a story, it will be shown when the cave is first started." msgstr "" -#: src/gtkui.c:639 +#: src/gtkui.c:640 msgid "Time as min:sec" msgstr "" -#: src/gtkui.c:639 +#: src/gtkui.c:640 msgid "Show times in minutes and seconds, instead of seconds only." msgstr "" -#: src/gtkui.c:640 +#: src/gtkui.c:641 msgid "No invisible outbox" msgstr "" -#: src/gtkui.c:640 +#: src/gtkui.c:641 msgid "Show invisible outboxes as visible (blinking) ones." msgstr "" -#: src/gtkui.c:641 +#: src/gtkui.c:642 msgid "Sound options (require restart)" msgstr "" -#: src/gtkui.c:642 +#: src/gtkui.c:643 msgid "Play sounds. Enabling this setting requires a restart!" msgstr "" -#: src/gtkui.c:643 +#: src/gtkui.c:644 +msgid "Music volume" +msgstr "" + +#: src/gtkui.c:644 +msgid "Volume of title screen music." +msgstr "" + +#: src/gtkui.c:645 +msgid "Cave volume" +msgstr "" + +#: src/gtkui.c:645 +msgid "Volume of sounds played in a cave." +msgstr "" + +#: src/gtkui.c:646 msgid "Classic sounds only" msgstr "" -#: src/gtkui.c:643 +#: src/gtkui.c:646 msgid "Play only classic sounds taken from the original game." msgstr "" -#: src/gtkui.c:644 +#: src/gtkui.c:647 msgid "16-bit mixing" msgstr "" -#: src/gtkui.c:644 +#: src/gtkui.c:647 msgid "" "Use 16-bit mixing of sounds. Try changing this setting if sound is clicky. " "Changing this setting requires a restart!" msgstr "" -#: src/gtkui.c:645 +#: src/gtkui.c:648 msgid "44kHz mixing" msgstr "" -#: src/gtkui.c:645 +#: src/gtkui.c:648 msgid "" "Use 44kHz mixing of sounds. Try changing this setting if sound is clicky. " "Changing this setting requires a restart!" msgstr "" -#: src/gtkui.c:649 +#: src/gtkui.c:652 msgid "Display options" msgstr "" -#: src/gtkui.c:650 +#: src/gtkui.c:653 msgid "Random colors" msgstr "" -#: src/gtkui.c:650 +#: src/gtkui.c:653 msgid "Use randomly selected colors for caves." msgstr "" -#: src/gtkui.c:655 +#: src/gtkui.c:654 msgid "PAL emulation for game" msgstr "" -#: src/gtkui.c:655 src/gtkui.c:656 +#: src/gtkui.c:654 src/gtkui.c:655 msgid "Use PAL emulated graphics, ie. lines are striped." msgstr "" -#: src/gtkui.c:656 +#: src/gtkui.c:655 msgid "PAL emulation for editor" msgstr "" -#: src/gtkui.c:658 +#: src/gtkui.c:657 msgid "Fine scroll" msgstr "" -#: src/gtkui.c:658 +#: src/gtkui.c:657 msgid "Fine scroll - 50 frames per second." msgstr "" -#: src/gtkui.c:659 +#: src/gtkui.c:658 #, c-format msgid "PAL scanline shade (%%)" msgstr "" -#: src/gtkui.c:659 +#: src/gtkui.c:658 msgid "Darker rows for PAL emulation." msgstr "" -#: src/gtkui.c:660 +#: src/gtkui.c:659 msgid "C64 palette" msgstr "" -#: src/gtkui.c:661 +#: src/gtkui.c:660 msgid "The color palette for games imported from C64 files." msgstr "" -#: src/gtkui.c:662 +#: src/gtkui.c:661 msgid "C64 DTV palette" msgstr "" -#: src/gtkui.c:663 +#: src/gtkui.c:662 msgid "The color palette for imported C64 DTV games." msgstr "" -#: src/gtkui.c:664 +#: src/gtkui.c:663 msgid "Atari palette" msgstr "" -#: src/gtkui.c:665 +#: src/gtkui.c:664 msgid "The color palette for imported Atari games." msgstr "" -#: src/gtkui.c:666 +#: src/gtkui.c:665 msgid "Preferred palette" msgstr "" -#: src/gtkui.c:667 +#: src/gtkui.c:666 msgid "New caves and random colored caves use this palette." msgstr "" -#: src/gtkui.c:679 +#: src/gtkui.c:678 msgid "GDash Preferences" msgstr "" -#: src/gtkui.c:684 +#: src/gtkui.c:683 msgid "_Remove theme" msgstr "" -#: src/gtkui.c:689 +#: src/gtkui.c:688 msgid "_Add theme" msgstr "" -#: src/gtkui.c:766 +#: src/gtkui.c:765 msgid "" "This is the list of available themes. Use the Add Theme button to install a " "new one." msgstr "" -#: src/gtkui.c:787 +#: src/gtkui.c:786 msgid "Theme" msgstr "" -#: src/gtkui.c:879 +#: src/gtkui.c:881 msgid "GDash Control Keys" msgstr "" -#: src/gtkui.c:888 +#: src/gtkui.c:890 msgid "Movements" msgstr "" -#: src/gtkui.c:893 +#: src/gtkui.c:895 msgid "Fire" msgstr "" -#: src/gtkui.c:894 +#: src/gtkui.c:896 msgid "Fire" msgstr "" -#: src/gtkui.c:895 +#: src/gtkui.c:897 msgid "Fire (alternative)" msgstr "" -#: src/gtkui.c:896 +#: src/gtkui.c:898 msgid "Suicide" msgstr "" -#: src/gtkui.c:897 +#: src/gtkui.c:899 msgid "Suicide" msgstr "" -#: src/gtkui.c:899 +#: src/gtkui.c:901 msgid "" "Click on a button to change a key. You can set two keys for fire (snapping) " "for convenience. Those behave exactly the same way in the game." msgstr "" -#: src/gtkui.c:986 src/help.c:225 +#: src/gtkui.c:988 src/help.c:234 msgid "Highscores" msgstr "" -#: src/gtkui.c:992 +#: src/gtkui.c:994 msgid "Rank" msgstr "" -#: src/gtkui.c:1138 +#: src/gtkui.c:1140 #, c-format -msgid "Cave set \"%s\" is edited. Discard changes?" +msgid "Caveset \"%s\" is edited or new replays are added. Discard changes?" msgstr "" -#: src/gtkui.c:1139 +#: src/gtkui.c:1141 msgid "If you discard the caveset, all changes and new replays will be lost." msgstr "" -#: src/gtkui.c:1143 +#: src/gtkui.c:1145 msgid "_Discard" msgstr "" -#: src/gtkui.c:1162 +#: src/gtkui.c:1164 #, c-format msgid "The file (%s) already exists, and will be overwritten." msgstr "" -#: src/gtkui.c:1163 +#: src/gtkui.c:1165 msgid "The file already exists. Do you want to overwrite it?" msgstr "" -#: src/gtkui.c:1231 +#: src/gtkui.c:1233 msgid "Save File As" msgstr "" -#: src/gtkui.c:1235 +#: src/gtkui.c:1237 msgid "BDCFF cave sets (*.bd)" msgstr "" -#: src/gtkui.c:1240 +#: src/gtkui.c:1242 msgid "All files (*)" msgstr "" -#: src/gtkui.c:1332 +#: src/gtkui.c:1334 msgid "Open File" msgstr "" -#: src/gtkui.c:1334 +#: src/gtkui.c:1336 msgid "Load _highscores from BDCFF file" msgstr "" -#: src/gtkui.c:1341 +#: src/gtkui.c:1343 msgid "GDash cave sets" msgstr "" -#: src/gtkui.c:1391 +#: src/gtkui.c:1393 msgid "Loaded game:" msgstr "" -#: src/gtkui.c:1467 +#: src/gtkui.c:1469 msgid "GDash Errors" msgstr "" -#: src/gtkui.c:1537 +#: src/gtkui.c:1539 msgid "_Show all" msgstr "" -#: src/gtkui.c:1587 +#: src/gtkui.c:1589 msgid "Select Key" msgstr "" -#: src/gtkui.c:1595 +#: src/gtkui.c:1597 msgid "Press key for action:" msgstr "" -#: src/gtkui.c:1623 +#: src/gtkui.c:1625 #, c-format msgid "Click here to set the key for action: %s" msgstr "" @@ -4222,17 +4392,13 @@ msgid "" "solve given cave." msgstr "" -#: src/help.c:41 -msgid "Caves" -msgstr "" - #: src/help.c:42 msgid "" "The game comes with many built-in and pre-installed cave sets, and you can " "also make up your own levels. Just use the options in the File menu. You can " "load caves stored in the BDCFF format, and import from other older file " "formats, like the No One's Final Boulder, the Construction Kit file format, " -"No One's Delight Boulder, an Atari game format, and many more." +"No One's Delight Boulder, an Atari game format and many more." msgstr "" #: src/help.c:48 @@ -4241,80 +4407,93 @@ msgstr "" #: src/help.c:49 msgid "" -"To play the game, press the New Game button. You can select which level you " -"start playing at. During the game, you can control your player with the " -"cursor keys. The Ctrl key has a special meaning: you can snap items, ie. " -"pick up things without moving. If you get stuck, press Escape to restart the " -"level. If there are too many players in the cave and you cannot move, " -"pressing F2 causes the active one to explode. With F11, you can switch to " -"full screen mode. To view the alternative status bar which show keys and " -"skeletons collected, hold down the left shift button.\n" -"These are the game elements:" +"The main idea of this game is very simple. You have to guide your player " +"through the mazes of dirt and stones, to collect diamonds within a given " +"time limit. Make sure not to let stones fall on your head or enemies touch " +"you! After you collect the correct amount of diamonds, the screen will flash " +"quickly and a secret door is revealed for you to advance to the next level. " +"As the game progresses, levels usually become more intricate and difficult." msgstr "" -#: src/help.c:51 +#: src/help.c:54 msgid "" "This is the player. He can move through space and dirt. He can pick up " "diamonds and push stones, but he should avoid flies." msgstr "" -#: src/help.c:52 +#: src/help.c:55 msgid "Stones and diamonds fall down in space, creatures can freely move here." msgstr "" -#: src/help.c:53 +#: src/help.c:56 msgid "You can move through dirt leaving empty space behind. Amoeba eats it." msgstr "" -#: src/help.c:54 +#: src/help.c:57 msgid "" "This is also dirt, but has a different color. In any other sense, it is " "identical to the above one." msgstr "" -#: src/help.c:55 +#: src/help.c:58 +msgid "Dirt ball and loose dirt" +msgstr "" + +#: src/help.c:58 msgid "" -"A rolling ball of dirt. You cannot push it, but you can dig it away. " -"Sometimes it helps you to solve puzzles." +"A rolling ball and a falling piece of dirt. You cannot push them, but you " +"can dig them away. Sometimes they help you to solve puzzles." msgstr "" -#: src/help.c:56 +#: src/help.c:59 msgid "The main object of the game is to collect required number of diamonds." msgstr "" -#: src/help.c:57 +#: src/help.c:60 msgid "" "Stones can be pushed by the player, and he can drop them on flies to make an " "explosion." msgstr "" -#: src/help.c:58 +#: src/help.c:61 +msgid "" +"Exactly like a diamond, but instead of falling down, it flies upwards, as " +"high as it can." +msgstr "" + +#: src/help.c:62 +msgid "" +"The flying variant of a stone. Note that this one can also crush enemies as " +"well as the player!" +msgstr "" + +#: src/help.c:63 msgid "" "Like ordinary stones, but these are so heavy, that you cannot push them." msgstr "" -#: src/help.c:59 +#: src/help.c:64 msgid "" "The wall can't be moved but an explosion destroys it. You can't pass through " "the wall - instead try to blow it up." msgstr "" -#: src/help.c:60 +#: src/help.c:65 msgid "This is rock stable wall. It's impossible to move or blow it up." msgstr "" -#: src/help.c:61 +#: src/help.c:66 msgid "Sloped steel wall" msgstr "" -#: src/help.c:61 +#: src/help.c:66 msgid "" "Acts like an ordinary steel wall, but it is sloped: stones and diamonds will " "roll down on it in some direction. Brick walls and dirt also have sloped " "variations." msgstr "" -#: src/help.c:62 +#: src/help.c:67 msgid "" "After collecting the required number of diamonds, look for a flashing out " "box to exit the cave. Closed out box looks like steel wall, but beware of " @@ -4322,37 +4501,38 @@ msgid "" "prevents you from successfully finishing the cave." msgstr "" -#: src/help.c:65 +#: src/help.c:70 msgid "" "This is also an exit, but it remains non-flashing and thus is difficult to " "find." msgstr "" -#: src/help.c:66 -msgid "Guard" +#: src/help.c:71 +msgid "Firefly" msgstr "" -#: src/help.c:66 +#: src/help.c:71 msgid "" -"Guards move through the space. They can fly in the entire cave. Guards blow " -"up when hit by falling stone or diamond. Amoeba is also deadly for them. " -"They explode into space, producing 3x3 square of empty space. Guards are " -"left spinning - they prefer turning left, usually counter clockwise." +"Fireflies move through the space. They can fly in the entire cave. Fireflies " +"blow up when hit by falling stone or diamond. Amoeba is also deadly for " +"them. They explode into space, producing 3x3 square of empty space. " +"Fireflies are left spinning - they prefer turning left, usually counter " +"clockwise." msgstr "" -#: src/help.c:67 -msgid "Alternative guard" +#: src/help.c:72 +msgid "Alternative firefly" msgstr "" -#: src/help.c:67 -msgid "Just like a normal guard, but it is right spinning." +#: src/help.c:72 +msgid "Just like a normal firefly, but it is right spinning." msgstr "" -#: src/help.c:68 +#: src/help.c:73 msgid "Dragonfly" msgstr "" -#: src/help.c:68 +#: src/help.c:73 msgid "" "These creatures also guard the diamonds you would like to collect. But they " "move very differently. They like to run straight ahead, and only change " @@ -4360,52 +4540,52 @@ msgid "" "touch them. But you can easily crush them with stones." msgstr "" -#: src/help.c:69 +#: src/help.c:74 msgid "Butterfly" msgstr "" -#: src/help.c:69 +#: src/help.c:74 msgid "" "Butterflies are similar to guards. In contrast to guards they explode into " "diamonds, producing 3x3 square of diamonds. Butterflies are right spinning, " "they usually fly clockwise." msgstr "" -#: src/help.c:70 +#: src/help.c:75 msgid "Alternative butterfly" msgstr "" -#: src/help.c:70 +#: src/help.c:75 msgid "Just like a normal butterfly, but it is left spinning." msgstr "" -#: src/help.c:71 +#: src/help.c:76 msgid "Stonefly" msgstr "" -#: src/help.c:71 +#: src/help.c:76 msgid "" "This flying moth behaves just like a butterfly, except that it explodes into " "stones instead of diamonds." msgstr "" -#: src/help.c:72 +#: src/help.c:77 msgid "Cow" msgstr "" -#: src/help.c:72 +#: src/help.c:77 msgid "" "This creature wanders around the cave like a guard, but you can touch it. If " "it is enclosed, it turns into a skeleton." msgstr "" -#: src/help.c:73 +#: src/help.c:78 msgid "" "This is ghost which wanders aimlessly. If it touches you, it will explode in " "an x-shape to many different elements." msgstr "" -#: src/help.c:74 +#: src/help.c:79 msgid "" "Biters will eat all the dirt they can reach. They move in a predictable way. " "They also can eat diamonds, so better don't let them be taken away. They " @@ -4413,7 +4593,7 @@ msgid "" "turning. That way, you can get rid of stones blocking your way." msgstr "" -#: src/help.c:75 +#: src/help.c:80 msgid "" "A chasing stone looks like an ordinary stone, it can even pass slime. It is " "lightweight, you can push it at once, as long as it is sleeping. Once it " @@ -4421,7 +4601,7 @@ msgid "" "awakened stones, if you have eaten the sweet." msgstr "" -#: src/help.c:76 +#: src/help.c:81 msgid "" "Amoeba grows randomly through space and dirt. When it is closed, stops " "growing and transforms into diamonds. When it is grown too big, it suddenly " @@ -4429,99 +4609,102 @@ msgid "" "time it starts growing very rapidly." msgstr "" -#: src/help.c:77 +#: src/help.c:82 msgid "" "Another amoeba, which behaves exactly like the above one. But it lives its " "own life. Sometimes, when they collide, they produce an explosion." msgstr "" -#: src/help.c:78 +#: src/help.c:83 msgid "" "Slime is permeable. It means that stones and diamonds laying on the slime " "can randomly pass on." msgstr "" -#: src/help.c:79 +#: src/help.c:84 msgid "" "Acid eats dirt. Sometimes it spreads in all four directions, leaving a small " "explosion behind. If there is no dirt to swallow, it just disappears." msgstr "" -#: src/help.c:80 +#: src/help.c:85 msgid "Water, which floods all empty space slowly." msgstr "" -#: src/help.c:81 +#: src/help.c:86 msgid "" "This very special wall converts stones into diamonds and vice versa. Note " -"that a magic wall can only be activated for some limited time." +"that a magic wall can only be activated for some limited time. It can also " +"turn mega stones into nitro packs, nitro packs into mega stones. Even flying " +"diamonds and stones pass them to be converted to each other - but these two " +"do that from bottom to up, of course." msgstr "" -#: src/help.c:82 +#: src/help.c:87 msgid "" "Expanding wall expands in horizontal or vertical (or both) direction, if " "there is an empty space to fill up. You should be very careful not to be " "catched by the expanding wall." msgstr "" -#: src/help.c:83 +#: src/help.c:88 msgid "Expanding wall, but made of steel. You cannot even blow it up!" msgstr "" -#: src/help.c:84 +#: src/help.c:89 msgid "" "Whenever there is a falling wall above the player merely separated by empty " "space, it starts falling. It does so at any distance. If it hits the player, " "it explodes. If hit on anything else, it just stops." msgstr "" -#: src/help.c:85 +#: src/help.c:90 msgid "" "You can pick up this bomb like a diamond. To use it, press control and a " "direction... and then quickly run away! You can hold only one bomb at a time." msgstr "" -#: src/help.c:86 +#: src/help.c:91 msgid "" "Eat this sweet and you will become strong. You will be able to push stones " "at once. You will also be able to push chasing stones." msgstr "" -#: src/help.c:88 +#: src/help.c:93 msgid "This is an indestructible door with a diamond." msgstr "" -#: src/help.c:89 +#: src/help.c:94 msgid "" "If you get this key, all doors will convert into diamonds you can collect." msgstr "" -#: src/help.c:90 +#: src/help.c:95 msgid "Keys" msgstr "" -#: src/help.c:90 +#: src/help.c:95 msgid "" "There are three types of keys, which open three different colored doors. You " "can collect more from these; and for every door, always one key is used." msgstr "" -#: src/help.c:91 +#: src/help.c:96 msgid "Doors" msgstr "" -#: src/help.c:91 +#: src/help.c:96 msgid "This is a door which can only be opened by the key of the same color." msgstr "" -#: src/help.c:92 +#: src/help.c:97 msgid "" "Sometimes you have to block a passage, for example to protect a voodoo. This " "is when a box like this comes handy. You can push it in every direction " "using the Ctrl key." msgstr "" -#: src/help.c:93 +#: src/help.c:98 msgid "" "Sometimes diamonds or keys are buried in brick walls. You can use a " "pneumatic hammer to break these walls, or simple brick walls which contain " @@ -4529,41 +4712,43 @@ msgid "" "hammer on a wall which is near the player, next to the element you stand on." msgstr "" -#: src/help.c:94 +#: src/help.c:99 msgid "" "This machine replicates the element which is on the top of it. At regular " "intervals, a new element drops out underneath; if there is space to do this. " "The rate of materializing the new elements can be different in every cave." msgstr "" -#: src/help.c:95 +#: src/help.c:100 msgid "" "The indestructible and immobile conveyor belt carries free-moving elements. " "Its direction can be changed or its power can be turned completely off with " -"a switch." +"a switch. It only carries the elements which are resting on it (ie. it will " +"not move a piece of dirt or a firefly.) Flying stones and diamonds under it " +"will also be carried." msgstr "" -#: src/help.c:96 +#: src/help.c:101 msgid "" -"Heavy elemenets sink into the lava, and disappear without any trace left. " +"Heavy elemenets sink into the lava and disappear without any trace left. " "Creatures can also step into the lava." msgstr "" -#: src/help.c:97 +#: src/help.c:102 msgid "Collect this to get extra time." msgstr "" -#: src/help.c:98 +#: src/help.c:103 msgid "" "Bladders can be pushed around easily. They slowly climb up; if they touch a " "voodoo, they convert into clocks. They can also pass slime." msgstr "" -#: src/help.c:99 +#: src/help.c:104 msgid "If there is space above it, the bladder spender turns to a bladder." msgstr "" -#: src/help.c:100 +#: src/help.c:105 msgid "" "This is your player's look-alike. You must protect him against flies. If a " "voodoo dies by one of them, your player dies immediately too. This doll can " @@ -4573,90 +4758,90 @@ msgid "" "may not turn into a gravestone by nearby explosions." msgstr "" -#: src/help.c:101 +#: src/help.c:106 msgid "" "The teleporter will move you from one place to another, if you step into it. " "The destination teleporter depends on which direction you step the current " "one into." msgstr "" -#: src/help.c:102 +#: src/help.c:107 msgid "" "Stir the pot, and then you will be able to use the gravitation switch. While " "you are stirring the pot, there is no gravitation at all. Press fire after " "using the pot." msgstr "" -#: src/help.c:103 +#: src/help.c:108 msgid "" "Sometimes you have to collect skeletons before you can use the pot. In some " "other caves, they must be collected like diamonds to open the exit." msgstr "" -#: src/help.c:104 +#: src/help.c:109 msgid "" "When this switch is active, you can use it to change the gravitation. The " "direction from which you use it will determine the direction the gravitation " "will change to." msgstr "" -#: src/help.c:105 +#: src/help.c:110 msgid "With this switch you can controll the direction of the expanding wall." msgstr "" -#: src/help.c:106 +#: src/help.c:111 msgid "" "With this you can change the direction of creatures, like guards and " "butterflies. Sometimes it works automatically." msgstr "" -#: src/help.c:107 +#: src/help.c:112 msgid "This switch controls the speed of biters." msgstr "" -#: src/help.c:108 +#: src/help.c:113 msgid "This turns the replicator on or off." msgstr "" -#: src/help.c:109 +#: src/help.c:114 msgid "This switch can be used to reverse the direction of conveyor belts." msgstr "" -#: src/help.c:110 +#: src/help.c:115 msgid "" "The conveyor belts also have a switch which can completely stop their action." msgstr "" -#: src/help.c:111 +#: src/help.c:116 msgid "Strange elements" msgstr "" -#: src/help.c:111 +#: src/help.c:116 msgid "" "Some caves contain strange elements, for example, diamonds which cannot be " "collected, a player that cannot move... Don't be surprised!" msgstr "" -#: src/help.c:113 +#: src/help.c:118 msgid "Playing hints" msgstr "" -#: src/help.c:113 +#: src/help.c:118 msgid "" "Obviously, holding fire and pushing a direction causes you to 'touch' an " "adjacent square without moving into it, collecting diamonds or removing " -"dirt, but a move which is very useful is to push a boulder in this way. It's " -"a good way of making sure you don't 'overpush' the boulder and later on you " -"will have to use this." +"dirt, but a move which is very useful is to push a stone in this way. It's a " +"good way of making sure you don't 'overpush' the stone and later on you will " +"have to use this." msgstr "" -#: src/help.c:114 +#: src/help.c:119 msgid "" -"Boulders do not roll off of the side of magic walls. In some caves it is " -"shown where these walls are by placing a boulder to show you that it's magic." +"Stones do not roll off of the side of magic walls. In some caves it is shown " +"where these walls are by placing a stone to show you that it's magic." msgstr "" -#: src/help.c:115 +#: src/help.c:120 msgid "" "Expanding walls are always horizontally expanding on both sides. In some " "caves it is shown which parts of the wall are expanding by forcing you to " @@ -4664,7 +4849,7 @@ msgid "" "this eliminates some guessword in the next puzzle." msgstr "" -#: src/help.c:116 +#: src/help.c:121 msgid "" "The screen starts scrolling at the edge of the screen. This means it's a bad " "idea to run in places where enemies are likely to be, since you won't have " @@ -4675,7 +4860,7 @@ msgid "" "need to." msgstr "" -#: src/help.c:117 +#: src/help.c:122 msgid "" "Enemies like to have dirt to move around on. Clearing lots of dirt can " "create safe patches for you. This technique can be used on levels where you " @@ -4685,35 +4870,35 @@ msgid "" "way)." msgstr "" -#: src/help.c:118 +#: src/help.c:123 msgid "" "Magic walls often have a fairly strict time limit, some more than others. " -"Collect up as many boulders as you can just above the magic wall, leaving " -"one strip of mud, and then finally remove this strip and watch the goods get " +"Collect up as many stones as you can just above the magic wall, leaving one " +"strip of mud, and then finally remove this strip and watch the goods get " "delivered. Just make sure you've cleared an appropriate amount of space " "under the wall ;)" msgstr "" -#: src/help.c:119 +#: src/help.c:124 msgid "" "Voodoo dolls need to be protected from enemies at all costs, but dropping a " -"boulder on one is usually harmless!" +"stone on one is usually harmless!" msgstr "" -#: src/help.c:120 +#: src/help.c:125 msgid "" "You can't collect diamonds which are falling, but you can collect them when " "they momentarily bounce off of something or down the side of a pile." msgstr "" -#: src/help.c:121 +#: src/help.c:126 msgid "" "Some levels have hidden exits. These always look like titanium wall, but " "don't flash. You can always tell where they are by visual clues and " "deduction." msgstr "" -#: src/help.c:122 +#: src/help.c:127 msgid "" "Don't blindly take all diamonds. Some of them are red herrings, some may be " "unobtainable or part of a trap, and believe it or not, sometimes a diamond " @@ -4721,24 +4906,41 @@ msgid "" "sadistic puzzles :)" msgstr "" -#: src/help.c:125 +#: src/help.c:130 +msgid "Keys to control the player" +msgstr "" + +#: src/help.c:131 +msgid "" +"To play the game, press the New Game button. You can select which level you " +"start playing at. During the game, you can control your player with the " +"cursor keys. The Ctrl key has a special meaning: you can snap items, ie. " +"pick up things without moving. If you get stuck, press Escape to restart the " +"level. If there are too many players in the cave and you cannot move, " +"pressing F2 causes the active one to explode. With F11, you can switch to " +"full screen mode. To view the alternative status bar which show keys and " +"skeletons collected, hold down the left shift button.\n" +"These are the game elements:" +msgstr "" + +#: src/help.c:134 msgid "Snapshots" msgstr "" -#: src/help.c:125 +#: src/help.c:134 msgid "" "You can experiment with levels by saving and reloading snapshots. However, " "if you are playing a reloaded cave, you will not get score or extra lives." msgstr "" -#: src/help.c:126 +#: src/help.c:135 msgid "" "Every time you play a game, GDash records all your movements. These " "recordings can be viewed later, and can be saved with the caveset. To check " "them out, click on Show replays in the Play menu." msgstr "" -#: src/help.c:127 +#: src/help.c:136 msgid "" "If you were very lucky in a cave, or something interesting happened, you do " "not have to be worry, as all played caves are recorded. In the Replays " @@ -4748,7 +4950,7 @@ msgid "" "unsuccessful missions for others to discuss." msgstr "" -#: src/help.c:128 +#: src/help.c:137 msgid "" "During the replay of the cave, you can gain control of the replay if you use " "the usual cursor keys (left, up, etc.) to move. From that point, you can " @@ -4757,11 +4959,11 @@ msgid "" "original player!" msgstr "" -#: src/help.c:131 +#: src/help.c:140 msgid "Themes" msgstr "" -#: src/help.c:131 +#: src/help.c:140 msgid "" "The game also supports themes. You can use the installed png file as a " "template. Cells can have any arbitrary size, not necessarily 16x16 pixels. " @@ -4786,11 +4988,11 @@ msgid "" "- White 0xffffff: for the editor; will the color of arrows.\n" msgstr "" -#: src/help.c:146 +#: src/help.c:155 msgid "Some words of warning" msgstr "" -#: src/help.c:147 +#: src/help.c:156 msgid "" "- Importing may not be complete and correct for all games and engines. There " "may be some unplayable caves, as older games had no precise timing.\n" @@ -4802,17 +5004,17 @@ msgid "" "option in the editor menu to get rid of older or unknown options.\n" msgstr "" -#: src/help.c:160 +#: src/help.c:169 msgid "" "This editor lets you create your own levels and cave sets. It can operate in " "two modes, a game editor mode, and a cave edit mode.\n" msgstr "" -#: src/help.c:161 +#: src/help.c:170 msgid "Game editor" msgstr "" -#: src/help.c:161 +#: src/help.c:170 msgid "" "In this one, you are presented with an overview of your game. You can click " "on any cave to select it. Then you can select File|Edit Cave to view or " @@ -4822,19 +5024,19 @@ msgid "" "File|New Cave." msgstr "" -#: src/help.c:162 +#: src/help.c:171 msgid "Cave editor" msgstr "" -#: src/help.c:162 +#: src/help.c:171 msgid "In this mode, you can edit a cave." msgstr "" -#: src/help.c:163 +#: src/help.c:172 msgid "How a cave is generated" msgstr "" -#: src/help.c:163 +#: src/help.c:172 msgid "" "A cave is built up of different objects. First, it is filled with random " "elements, of which there can be five. The probabilities of each can be set. " @@ -4842,52 +5044,52 @@ msgid "" "the ability to import different file formats, used by other games.)" msgstr "" -#: src/help.c:164 +#: src/help.c:173 msgid "" "After this step, series of cave objects are rendered over the random data, " "which can be of various types: points, lines, rectangles and so. These are " "the following:" msgstr "" -#: src/help.c:165 +#: src/help.c:174 msgid "This is a single element. Click anywhere on the cave map to create one." msgstr "" -#: src/help.c:166 +#: src/help.c:175 msgid "Freehand" msgstr "" -#: src/help.c:166 +#: src/help.c:175 msgid "" "This is a freehand editing tool, which places many points as you click and " "drag the mouse. Use it wisely; lines and other drawing elements are more " "simple and the resulting cave is easier to edit." msgstr "" -#: src/help.c:167 +#: src/help.c:176 msgid "" "Click on the map to select the start point, then drag the mouse and finally " "release the button, to set the end point." msgstr "" -#: src/help.c:168 +#: src/help.c:177 msgid "" "Click on the map and then drag the mouse, to define the two corners of the " "rectangle." msgstr "" -#: src/help.c:169 +#: src/help.c:178 msgid "Similar to the above, but this is filled with a second element." msgstr "" -#: src/help.c:170 +#: src/help.c:179 msgid "" "This one is like a filled rectangle, but the horizontal and vertical " "distance of the elements can be changed. Use the object properties dialog to " "set the distances after creating the raster." msgstr "" -#: src/help.c:171 +#: src/help.c:180 msgid "" "This one is tricky. A join object scans the map, from top to bottom, " "searching for a specific element. If it finds one, it draws the second " @@ -4902,7 +5104,7 @@ msgid "" "cave parts." msgstr "" -#: src/help.c:172 +#: src/help.c:181 msgid "" "This tool places a flood fill object. The object will fill an area of any " "shape in the cave with a specific element. The border of the area is set by " @@ -4912,11 +5114,11 @@ msgid "" "otherwise it might fill the whole cave for different random seed values." msgstr "" -#: src/help.c:173 +#: src/help.c:182 msgid "Fill by replacement" msgstr "" -#: src/help.c:173 +#: src/help.c:182 msgid "" "This tool places another kind of fill object. This one will replace an " "element with another one; the area in which this replacement takes place " @@ -4926,7 +5128,7 @@ msgid "" "place the object." msgstr "" -#: src/help.c:176 +#: src/help.c:185 msgid "" "You can use random generated mazes in cave designs. The walls and paths of " "the maze can be made from any freely chosen element. Also you can select 'No " @@ -4936,19 +5138,19 @@ msgid "" "played. If the seed value is -1, the maze is always different." msgstr "" -#: src/help.c:177 +#: src/help.c:186 msgid "The unicursal maze is a long and curvy path." msgstr "" -#: src/help.c:178 +#: src/help.c:187 msgid "The maze like that in PacMan: there are no dead ends." msgstr "" -#: src/help.c:179 +#: src/help.c:188 msgid "Random Fill" msgstr "" -#: src/help.c:179 +#: src/help.c:188 msgid "" "This tool can be used to fill a part of a cave with random elements. It is " "similar to the random cave setup. At most five elements can be specified. " @@ -4961,7 +5163,7 @@ msgid "" "so the cave will be different every time you play." msgstr "" -#: src/help.c:180 +#: src/help.c:189 msgid "" "This tool is simple: copies a rectangular part of the cave, and pastes it " "into a new location. The source and destination area may overlap. To select " @@ -4972,7 +5174,7 @@ msgid "" "object properties window to set this behavior." msgstr "" -#: src/help.c:181 +#: src/help.c:190 msgid "" "To select an element, you can middle-click any time on the cave map to pick " "one you already use. Use Ctrl together with middle-click to pick a fill " @@ -4980,22 +5182,22 @@ msgid "" "cave." msgstr "" -#: src/help.c:182 +#: src/help.c:191 msgid "Managing cave objects" msgstr "" -#: src/help.c:182 +#: src/help.c:191 msgid "Use this tool to modify already existing cave objects." msgstr "" -#: src/help.c:183 +#: src/help.c:192 msgid "" "By looking at the cave, you can see that every object is drawn with a slight " "yellowish color to distinguish them from random data. Click on any object to " "select it." msgstr "" -#: src/help.c:185 +#: src/help.c:194 msgid "" "A selected object can be repositioned with the mouse by clicking and " "dragging. You can resize lines and rectangles by moving them by their end " @@ -5005,13 +5207,13 @@ msgid "" "to edit. " msgstr "" -#: src/help.c:188 +#: src/help.c:197 msgid "" "By double-clicking on an object, or selecting object properties from the " "menu, a dialog pops up, which shows its parameters that you can modify." msgstr "" -#: src/help.c:189 +#: src/help.c:198 msgid "" "The order these objects are drawn also affects the cave. To reorder them, " "you can click on the To top and To bottom menu items. The object list on the " @@ -5019,11 +5221,11 @@ msgid "" "You can also delete them, or use the standard cut, copy and paste operations." msgstr "" -#: src/help.c:190 +#: src/help.c:199 msgid "Cave properties" msgstr "" -#: src/help.c:190 +#: src/help.c:199 msgid "" "To view cave properties, select Edit|Cave properties from the menu. A dialog " "will pop up with many different options. Those are not explained here; most " @@ -5031,13 +5233,13 @@ msgid "" "them with your mouse." msgstr "" -#: src/help.c:191 +#: src/help.c:200 msgid "" "If you want to restart editing, all cave objects can be deleted at once. A " "cave map can also be deleted by selecting Remove map from the menu." msgstr "" -#: src/help.c:193 +#: src/help.c:202 msgid "" "Cave objects can be merged into a single map. If you designed a new cave, " "this has no particular use; but for editing an imported, map-based cave, it " @@ -5046,11 +5248,11 @@ msgid "" "application, which does not support BDCFF cave objects.)" msgstr "" -#: src/help.c:194 +#: src/help.c:203 msgid "More on random cave data" msgstr "" -#: src/help.c:195 +#: src/help.c:204 msgid "" "The elements which fill the cave initially are not really random. They are " "generated using a predictable random number generator, which can come up " @@ -5064,7 +5266,7 @@ msgid "" "the top right corner of the editor window." msgstr "" -#: src/help.c:203 +#: src/help.c:212 msgid "" "A cave can be made totally random, by entering -1 in the random seed entry. " "Remember that you cannot test every cave that is generated this way, and " @@ -5073,18 +5275,18 @@ msgid "" "game they are counted, and the number you specify is subtracted." msgstr "" -#: src/help.c:207 +#: src/help.c:216 msgid "" "The Edit menu contains a random elements setup tool, which can be used to " "setup the random number generator for the cave. It is able to edit all five " "levels, and updates the cave at every change." msgstr "" -#: src/help.c:209 +#: src/help.c:218 msgid "Visible region of a cave" msgstr "" -#: src/help.c:210 +#: src/help.c:219 msgid "" "Every cave can have a rectangular area, which may be smaller than the cave " "itself, and will be visible during the game. Cave elements outside this " @@ -5093,11 +5295,11 @@ msgid "" "and inbox/outbox elements." msgstr "" -#: src/help.c:214 +#: src/help.c:223 msgid "Shift cave map" msgstr "" -#: src/help.c:215 +#: src/help.c:224 msgid "" "If the cave is map-based, you can use the shift tools to move the map. This " "might be useful if you want to enlarge it and otherwise there would be no " @@ -5106,17 +5308,17 @@ msgid "" "object at once and move them together." msgstr "" -#: src/help.c:218 +#: src/help.c:227 msgid "Cave stories" msgstr "" -#: src/help.c:219 +#: src/help.c:228 msgid "" "Every cave can have a story associated to it, which will be shown when the " "cave is played. This story can connect the caves to each other." msgstr "" -#: src/help.c:222 +#: src/help.c:231 msgid "" "A caveset can have its own title screen. To add one, click Cave set title " "image in the File menu. If your image is transparent (has a transparent " @@ -5125,13 +5327,13 @@ msgid "" "beneath the big one." msgstr "" -#: src/help.c:225 +#: src/help.c:234 msgid "" "The editor can also be used to delete highscore files of a game or any of " "the caves." msgstr "" -#: src/help.c:226 +#: src/help.c:235 msgid "" "GDash uses two mechanisms to store highscores: it can save them in a " "separate file (this is done automatically), and it can also save them in the " @@ -5140,26 +5342,26 @@ msgid "" "file or the one saved automatically in the configuration directory of GDash." msgstr "" -#: src/help.c:230 +#: src/help.c:239 msgid "If you are finished with drawing, use this button to test the cave." msgstr "" -#: src/help.c:231 +#: src/help.c:240 msgid "Loading and saving" msgstr "" -#: src/help.c:231 +#: src/help.c:240 msgid "" "To save your work, use the File|Save button from the main window. You can " "save games in a BDCFF file, which is a text format used widely on the " "Internet." msgstr "" -#: src/help.c:232 +#: src/help.c:241 msgid "HTML Galleries" msgstr "" -#: src/help.c:232 +#: src/help.c:241 msgid "" "This program is able to save cave sets in a HTML gallery, which you can put " "on a web server, so other ones can preview them online. To do this, select " @@ -5167,11 +5369,11 @@ msgid "" "files will be put in the same directory and with a similar name." msgstr "" -#: src/help.c:235 +#: src/help.c:244 msgid "Converting to a cavepack" msgstr "" -#: src/help.c:235 +#: src/help.c:244 msgid "" "You can convert your individual caves or the complete caveset to a cavepack, " "which is a file format readable by the Crazy Light Construction Kit, written " @@ -5187,11 +5389,11 @@ msgid "" "these applications." msgstr "" -#: src/help.c:281 +#: src/help.c:290 msgid "GDash Help" msgstr "" -#: src/sdlmain.c:1245 +#: src/sdlmain.c:748 msgid "Invalid cave or level number!\n" msgstr "" @@ -5227,26 +5429,26 @@ msgstr "" msgid "System default" msgstr "" -#: src/settings.c:612 +#: src/settings.c:627 msgid "Select cave number C" msgstr "" -#: src/settings.c:613 +#: src/settings.c:628 msgid "Select level number L" msgstr "" -#: src/settings.c:614 +#: src/settings.c:629 msgid "Load internal caveset number I" msgstr "" -#: src/settings.c:615 +#: src/settings.c:630 msgid "Show license and quit" msgstr "" -#: src/settings.c:616 +#: src/settings.c:631 msgid "Cave names" msgstr "" -#: src/settings.c:621 +#: src/settings.c:636 msgid "[FILE NAME]" msgstr "" diff --git a/po/hu.gmo b/po/hu.gmo dissimilarity index 87% index 02e55c6d250b2c2f7274f14c32ac21b723fcf5d5..62178c09663a93e5daa09a91f3ae184f3f55d944 100644 GIT binary patch delta 50376 zcwU^m2YeJ&_dY(e2{y1IDk!?xD8^7!q$q+Qs31kKAS!OMlVsV=Zrl<`6o(Fi)Tp6| z0s@MNElL!-c~L=70kI$*={691`#hQe#pY#quG{q7O>6*mUYolmi5PVmic=!&$3PhE>e60*Z{ar@mt`Dz+>|*>jYqZ z;PJpFz_Wp^f%Skl0Z#@7fpvjH^UZj!H8r0dKLb1tSOaVV{18|l__K82L1RBVZd_nl zwSkuvuzn}K?xEMW0_yGzps#l{RO-nSi8uwid@^WI^*O# z;L`!ix&rv|Aj>)icznpR#-QS9#h@P7vw@J3)gWS7(}3qh$odz6bAj(f$T5Ej3A_(@ z655Ri&KJV&=FB@rNoWbsl^NY1C5z?&+W{9x$&p=Avi$d`$~b0OX9DZTIM8J=%C?u5 zJBq_&)TP;4Z&{2S_yl-5aF3!D2mghVGve&1B@nu2bpsv)>Sj7+$HggCGejL~W_{tCxvQN=2qfVRwYy@mtMxE#mtObmgvELzX8D%wEajM>! z4Llb3R2c_&5!fEM6L=P8)~K8vb-2f}js|wQN3B5dRz<&JiQ>JA;}qQo^<>UHl=0Jw zuPLqqjs|Gnf$)=RXB99DxO*rG-#?Vf`!lcu&~u;qh5M*Gs98ODBo z8b&2NdN{4>g5kVwCx||+TZdEDrNcSnVZ&8M!)d1v>is3d*>Ux74zzqYXSjYiIk;Ex zC#|0~g8dvnf`rx|!T!z%-T@uD66i`tvqqA##UrWJZ;j+YpN?dQUyWo(2S$>We=25; z0-J%yj$-@nqgem0Q6#Jw=m3WU;Z&{Nqu6iH(Zt(Fga2J|GH5g#JU?1lIht$0=fDX- z8*cC>;6xxy+S)OO1oR(EP7G9xD7uQ1$I_)g20TalA4}a@GnNEz9qaPs$Fa2Ub)PUCa^aUF2uSQh{;-qfOi7R#$zRv35}=k zKXC#%+RdFniuz9A0C^Lr9QRBh0W&6$z$Ye9G_OtIvbuHxt>J)nRObQqbH)SYWa9^D zX6+v!2Ye6EYGMyi7Y1v&J3>z$R9vX|vf@g`jf&rD2jV|v;Mx=E5l^2;mU|UjOr+=Q zIFV~Wp5na|N%+GPO@FTS{6v~b%|tqsPbN}(znI9G?$C12B-T565=C{!B#P>sNhGZC zByy~+-tRVv1ooUnrMyk=7fzy%B}{wBf1GwOMRA_ui;C|mem;pJ*ry#^lgWuXliBg< zlS$wOlgW|RlgWvzfK7qDCR3@)Ces1UllEf&uS}-w|1+7CZc^MgnVk4}G6}G!kP~&M zC=aKRK3G)1pxOrdVn0NwL&vUdtsr{kxR!b_)8tM8af z-#rodJ#fKP4*c*m;%vqF(`b&1r;)(tr;)Iw)5xK>rg6p}X!-VOB=GBL;J=*wF^#ON zQ$bcXtYAkMRge=cD%jx43X0%{3W^}Vf*nS*yiBhrSI}x^XuW4DNWiiRa%zp@&I<6q z16<*+D1g_r+B`(%Sf;r8A$GX+A&Ow%LnP=Ay?^Y(RKl|q&j%vBvvPn41*``jChL!{ zw5+=^&S{m5kj70Xr{}vkX(;fG1-RE&2pO#1FQK#*4c+P{@DMJa#;H z9%uHFR`_@xIkHI`emzfDL7-U8pIYANanAU{$I05Zz>7o#k5ebg=d*moe2ThqKHIGT zULyAY;e0L*o&_AR?E=pD+6C-*-~tj9U7)Mm0(Llg0hMb$@M7SS1tjpx1tf5{V(o>* z<_lTB??OgYw*%c=oRlpjE1z7*f&a6R1An=Y1An`acKrK7is+~(sGMg!L4vvfW0-Nj zCrH5iPqO|ePtq@Jc~Z?y@mIy;7lHqB(r6K7b=e{|?7WBr_gti@mX;STB4N=*RKC%R z$gxKkaj{vV*B>n+i#IPK0Xr6PVtW;>r`Yf5Pq{of?%0C1Z{{f!zA|0Rm8BPYG;IyR(I)J6XKEQ)ZInyrHynYc_hz3W!Oh*!ag@nKV z3OTS9h)msTy^Nl1Ca?{#26zeZ4`4H3i&weU3;;fDL;fRPr3Y*Nx@ENj-u^l>oyov% zzz<$$2X)_oHw1QjgVu5{P?Wdo4RU6?-oNNg&h)M~$-((=GWXjD>uOyzY*bL}O!xk&)`7T?@z@Ya^c38TST6~XQ zPg+R_Qn8XQ_K}s;_7_%irf;mIReZ3LTEA9tlh)g_lGb%-B}MkvO2}V2?)Cu(?(qRV zTl52NM2rPq1$^fNa>TQWGrwXLSFamZvE%S6I+XHN9B|Sqa%RRVa_;$64BJ0m#kJ!5 zRV4Vh)h=gv`f9Se*=lxhtzzHRBjvxnp^D>H(}Py5rqVtOYy;8$yqe0~ z;v-HV^btk8@FQ~YL-!+6`qf7?i$6Z1`JDGLEA;r71Lu8A9Vq~I1jaw+fG>Saj;#5Z zBHI2j&2IO{B+R>p?JinF4z*pw3Ei-U?cBUIWJPQZWj9Q($F9-ja}9N4$r|ktR<)FuBFWDuchvsx0Ys_v)1(IT0X5%yq268yq1(tUP}UIDpo13 zQrx+gGy7{TXI5t&Ipzg=fUVcDpSJ6Gzl+|#bsY&0uM+|w|JXWRR@X7=oxG0b^X58= zlaQ;|b0WRhQ>SiIEM8ChAGV%^OjBG4yh7}M8BX#= zSw3Zh0iV-u!=JOm`Ja=u&wS4NuYOKZefT+9x*mw=%i8=oS$^La6v?PBbkph!5;*e< zI;RA58mjqqmdiQni(6};oObX`e!$ig)29*-kOb^+3t;; z@gcqbTd(VEVn3&EqG-<9#DSV@V!xN__0^jwqMq(1D$yNUFkurt)XYs>gkIdlb^Yee zWclZtNzkUvbSPhKX1lYua8LN+Efn2bTe#e=+`=uIAGdJkmv1G9+HYk)ZjY^;SzjO& z+6rtX=QBFm)RTp1qCxf=_QFi#KhfgK4y#oM^pW!}9H%SoiH5 z*x`NG3T-Fr;@fpcVmk?%x}7q7La&!>=jvCZ9d6i8!glNRZ`-+*d-M(t)OQEl74KlQ zJ8}mnFlPsK;>{h>Kji=A4%*|k9h~uxJE&~Oe?#`-*1M`YX=7*H?^!@6_w@ zT5rZzi%z7wL5`2XCUYVRDplRxoN2?|RHB^S?C{Fn3_QB;rZT&Fy<|5D*tVM!{8{n1J>)>cJ>b7Ak4^T_ zwfgsHMze>kUZVK!9ul}^4@Gj~Uc>~zdV5Le=X)vRul6#SwfE8C`1a8O4d2J*ecnFm zz+3yMBU|>lWX-Sp$huSabHJSaRK{!ev!h$~v!lWL+0pd<>}ctJvU2@?a%vyYCo|no zj`jbVk8tvVm2&@U?hlOkhU4yYzab^Hz9p;90iKVw;4&bxBiJF~;hs~Ge~rM&v!~j|545UhTSHJG3@pO+?$cPY_vyCD<^BXp_S*Rj+vv(M z^=+%S+y_eXITt87VXX$XVfCdA$eAaBBD%f68-X3pv`w-*^-RQH3o+pFXW14OF6+gH zwuL;>diZSH`Vq3d=^WeGefM*1= zAfT*{^DbmRyMPaP#Q!(8t#8r6Y$WMRfe&0{TO)v-FD8rM&9$xB!2LkkP`tmnZS}={ zPYc^PsGA{Z(f%UEGR5(VvlO3Jd|mNFpu`jI7MzHEegzae{-z}<{1Yf<)3}w*RSzg; z*sB#gxV;r+U99)VwxVv#(Rxn+#ZkQo6wmq|P|R-&@FvWBA8>})e@AEOza;gaT%};m8N}Lo69Uv!t$E7lx5@gw#nW4110nt-kt-!+Md?&7w{(FWmnk7 zK~1=VoLK>sRdV|kB=CF1zXiqqPq>l=4S^CM?S4tyr-PSPUEulvwVEE7|eS zSCTWeI`I0q4iv!|9oX*$dVQ&4C&ivXS6t-)oQO;Gb)bxbilvIf6(3NnRGg={MBBft z_>ST##ZMKtD(+J})B*M{Cx4+pT<amYfqjAR_oNP-)r%}|(u=aaq!(p*wO;q?MMCfFMMC|( zs1u1^w1$zrsQndM&wWHYoY#voS)v_P_o98js};BQA_2Sf`k>-3ihluRxy|m)>oa?E z;6}aKZ}Z+9r)_T%+@-f6#I^eH#JWuz=JzHG1HDN|iFV{_!->7gnVH)0Gm0Ge-q{||Ew`#Y)+38>SD6xQoQJNE)5QMk4b9f-dVJ1*3ErG4n(hHLu= z`%vbyf$&w<+&(npFK#6M43w>%dVRU3bO1IG`ybes70UZ^2GfBT0-pm)RQp+9vi4A4 zI+WV|xJ;klj|BATN6+T($M_)xYy^A^crPe_yC2tz4!3Xuy>Fpz3^TRTFqSuw;O39oHpz1tskG0dOg_!yjDH3qsIiX00w9UT>3-Y9h#UNLP$xR9-^`&| zb$7VF4**JD@R&oEzoGcCL(y(`IMLq}Pj(B~VUq&tK<5H>;47f=4J#mPA1Po5&ujUL z0_w(2MNc8M{G386d%x^8?K*Ixcsj~x| z>2}})z=Oa((!n6xM9FIgF%&x|sAd~fvkg)?Ck9E_LqU%7XwbND*QyCp#=i$C^LimR zya*_1b6cS71rH3dgP9@9?s2WRG(?g8Cq!1S50QY~A;t|qg{U*liy729#pKkiu=EG} zn-?Yr7AwB2xLk3q;ugiP6@OJcDnicGjc@|z>2=!(!|&@NH0J{mF4Jd}&=EBR))o6d zuY?}$a>ee7153!6SP6AtVhN+$dD_965^~@(-~iyx63)ES-MruXZiaF<-%XYe)A9v( zQ^ytqU184PpJMLsrxy-1H zgp`((z>&baWWaLH!<$hf?WEhjJzhhSD!A9ZEvi4&}^t4<)O=8%j?8K9sJu_I>PU$$j+sD}j>UAH2_) zr)ymg5lA{c(q%}r8aN*4A7-00`nzFtEWL)?W`A$aa1QYGaL)XX;nan?BREi-5hUcM z5fq7U1VtPhL7f;gf*hYSLO2QgTRMU+_&+1)aJGz~+0+_I*)|_ZhtX{$JMKA>9J*~J zI|?g~Qk<#yoZ`ER8%I)v2S-wbf6KMl|M8=^t~XG;WE7RH$0*LQcoYX5HHtHtK8m7P zJcIivP;3J<@BeiiP1f`tO&2>zF*cfZey`$~ z(PZfqy`DFk1V62~TyeAF&x$9Fp>j4IL(yG3hMc^04D4TK1 z$1p11Jcg{SGnQs_?pO|R@mRL&s(9mA&iu}?tnZAaBfDoTXFgo(-9Of4g@?vc2NsW| zR=+!zvD%k9Q1&?6>~fz7lx_8nCw7Qr(K7q)8pMUo%I^dpiW&rg9P2E z*HdQDgDwW1EYJVmn?Z;0#Y~NYXY%?l#X7Ty4HTOwww^^1b(uw7xMdba7o0@`C(PnN zFU+Eqd^n4Q?$-NNJNO>_5ll9!}vLa^R^s^!-cc zaKNpK$Ij*bR&zN(hq;vL?Q>aw=3H9Gf9BE*x6S3iKPX!BDB9!a(LbC&kDR*G#R>Gx zDxSv~WX_xmdBYVt>WRe9mu-qLF+zLl#iR4=>=1URt2ra|<}|+683k4lO^R_3VXgcfvvj zAQvyBV_Uq??3lXNOE~!w1@)icz&}1gE&lTf+JD0*ZEFqieBd*{pPtk}WDz@F3VaH< z9=H@Z>?v-^T)x;gFPYr8n4#8ti^+kePjd_A>Zc`B}gKHbAU)@tW%z` z&7+v1&$7Y1=WJ^Oa1Rh}-l}bWLt6ZBf#s06V)WV zKd_su|3j*oO1)K0k9Nw-q`b?^)bfchQ)yPe%thwtS8NNXR%>8$Tz|KW_s@Bi9~ zR^a$oxmfLZmHnLX8aKImzQ*SV>zk*u-(+XOdwUXthyDL@870+Kuv$<#`J7}|#W_9gKI-r|ZlF&TuV982mw^b|2 z!M%F__m%XFT|eNK%|jp1YF2ze9op~#>$}IU;(C7ODzf;BRl51SimWSMMGrS+6bgeBN%wf+un#Eu1D63OH;ecm+LKdI*31@KCCnT)zCmg8%CnTWg z6FRJWJ|T<$^9g5eujk{tM(Zh}57*OC9sMc&MyF3<|6ZKLJ|$}&{FJhq_bFNZ+NYHD z`cE~=)oagZwp9QfX#j-tvxa|80 zTe&O`-^u~r+e#L1+seJ)W477m4T=}Gk&pq~Df7FwbHlP|yAUAxKTam0VAXbVV!#fH z!r8$`FSB>B;ej30>R)$o2KB$9*c9GyZyV>z+yIHTV>b!DXE&|lVW2AwpV`gLq<3~R+&*s)vHKnd7_mK!+aKRU7Js^j9Qkt(2dK4| zoH=W+n&Douy!T$-ziBUZBD9xEcmG~abmm^zzp(7Jy`*fVR@}LlGx6*rA*b)-46fQo zS>LgbEFHX$N?NgxI`QH@D(C8b6v2*tToaDk&;GC8&-VuI*iXV1?04DmYx`+#8}@U6 zzxBHQ*Ce3B*EFYsuUWtBYevnLU(?~d{x!A#&#x((I^U2JXMaPHwfcqxU;PdHxl{3O z_ZvPq81)SUkN3YJg+G16RjR|coY@_UrQeb>lfR|Qo&POEvv0noE_C^hvhDdDCs6Pm z`(2pE=%8%s8)4;1>hHwAKJi-2%Z@WDAGnKK!FEr22zmOAsei4qs{%-k&9hCgS znUDU3GnoGi9n-77P`lq%+@*Nbufz*~rB-+SmAl=y{K{4I=-Ct=LwvhoIR1 zz~5-E(ceg6*>5CZ>~ECmqrXwPp8SoIc7@i!(OU;oCpX8QcjjfiExQv|pF z!HJ9j4gya6gR=hx=*ob#{^S64|D;`?`zJZk>`%_%x2nnFan(OHoGy+I-n#TC!FdrKSr??XdW(|<`EUL znxF15kbN(R-pzQ_27r-8!RuYn?xLqHKx1Gj<4M7yswAOTrtd91gA*8q=4 z`OytM#wzNa?Xj?sSq}q0#`O@d$9e^LT_X;Vb*{%kKx}me#&KQue2?`ea2!w`-(7ow z$NCjG@d9#W?1df^?7E-hM8fXIjXBd8P;$Iy8k1$snt04Md>AOo^&wDlyUUw;tj93m z2H?-QF2BfQUgL@8c&rDY{x@IjG4{Trg~vFc+ATfSeqdYRm1uWCE05JfzW>R;#ABXR zK6k0dWTo9N^O*H{JWwK@&w;Ye*K17~4*;$a*#esb?`rF@pdQwg_8tovw>9HRk6E;O zUgfdg1KtOejfbussVn~hin6!5+GCmT|2mlyXrp4GV!7f(#W{*qKyfJV0>wN(0E%l~ z50t&6Z-HjBsWX+d6Hu(o*O~1jKv`o(09%UkJc1JmC_V&=nQiDy3U_p-wjbdBgHx~f7*BTo^&FrHP#j4spt#;Efn~t{KylUUfU-v1*4<wzNDivDE%=KfUfo&71&13(|J_HD*-xmGbw z&tt;&hw~`P4}txF zoAO9Nt9**C15lRh8}o%A*k8Wh7@AM>n5x$^6qn>v+1}14fuH45WSh18>wFIA@pGV) z{WRN#e%5cJ+Sb*roa2C%yk@EMyzL;p~xfY#NdfD_0m;J_XAx_5!6r$e(har_ z|C@=jA{>{a&R`s}h1nzf@Hz;itvvM82IV($EZ3Taf?Klq9=-h4SDb}P1rnLyD8YR! zvDSIOzm&M~=wKbN5cO8!yjeD1-cJDKHO5!9A2=EtII8ik)$c^zh@ZZ*VkD^-*!#t;e|t6HSONe}AF5FPqW|Kqcfy9FO7rPaMxH0anrn4MO4h+Uc2D{C?zY41StO4#%5XPu#bBOCkX(7G$fL zc8*xpDpCSsIKRWgAF=AL?HZ!b{%G@mS!3-;K5#(l zXF{<;;1V6|17HhWBVo2eGO!Yk0NYw*^B2{+qpUTKVJPdIEtwlsRQr`lcfk3iY@I){ zH)|h`XK?(6>yvPE1I}|Z^gW>GH^^W(THui7{#Mkz66f1-e-e%haOB~5SnHpMes<|O zLJ^ZqeWCKoG2{JhIR^14#myPnq zXjg^nM{xYDoyp^!K6-vBj@eoK04n)69t70!q^}2Mi~Mo&RtB4Y&1i687JuqN{>Ey< zM{#_hWdoFJGc10QbsXxKquyF2LK5IRwXS?1F$v`rXfq@|o@;W#Iw<%`2axUhty`+=lCOwESUQ_W~lNv^L>*9oIu~?^~QlQQj__KkXoYPbpC!$fQzSfc%@F z(k>LPz@VL4R_%1;@+`IBG7(~o*ymcsE@qJr1@XtD98QZ zaeYx1KZ2}{I&b29tB!BorH$pYo(8z_J+K0YB(Em{A5sGPp(FVOASXkHk|D3ev0Un- z-bfs~J^W2E`IBg^RL_^;_*47ZtYz+eG;D@K$rl?cA)PQ#dz8sja{0JPQndcKZlv;- zT=EZGpNM-8;rt!k58^s%^P@%i+lYHU9jqbFCwTa^T_wuy)Cshgw7wFZK8?boa9ohZ zFJF^?va?cx%91b(na?+KjG%mV*! z#z}3x@e_{Maq~AEU)uZ~5ZR0^rf`u_vCu@{xH(NJDc z9%1pPSLCmyvg{r-_yxxXmH+2i{DO9YUhl^B?>M|x`tMB-KW=Y`K0eg4_jTs48KN_C z0C^TPL~Iqf$>JxNm!tA67~l~cWlG4k+QG}f-6%gTn?Hav6-PfMrV^dsX zIN}*1zf>ah4q9=F-Z)>cugQ{6JJXei<9ZA5HsE}ekHo-lYn%O9{N11qTK9a#(^0P# z?p+JK0>>LTKZyQ+!ny2Ix|2~*jEmQBA>R+mcB}09T%|;OitDc0*<(16M4R8BEy3Vl z+x!^14*Iwn*OPH?qf|usR3*G8%0I^a9$Eaj{gP~c;M^7Wn`UM5AAcLsa1w6VHovI7 zL0Nva-d||*tLp?h`vQ1Vw)t%!t8O+wf(|Ls4)8c7U^MQv#dU9KtK2G8oSJp`_|^lc z{6GfF&&0L7!qW!FuQ)!_dnW+*0hehqPTdw(!+n-V2^O|l2^362~Porhz;#DD8h;a*$} z)R{cxkuR)y{vgVp#rgReGgyJ^7lhrwOKrn7&MvL~YMIFuj4 zbv5vP?fWZ~zbpQKFbXyR>)ZUzpU-eEPety)^%pwZGMxLh;Ug%!3r9GcKhY(BXWIN# zE&2Nh#~xf?f@6>LgL=h!??Di77OwlD{X87*3=~|3lPOAhFWju3R5ooi24!Q=*|{jc z6~|{N`vvtQI3J)yB?Og&+fd#F$LT0*2i&Rsbpbw%cAw(Bezy7A-nD*0VFVZJQTYrU z*W!FCjtV8{65OAz9gITR$2ito|NNVZwnwAg`xbu$`)jnR1?-Bl$AuW}L%JP?vU6~4 zXG8vraB>C;23hMvf?$jLamXxRdb zzu5LAu3td?W6*B6n=y#|Eyc}OadVEHE?bQAA3XY_hB#lWR6GA3$H`gz;ezXc zc^QNx|6W&YrDMu(4jktHWQVO%lqQS68J7#(tAxlSoK@QCY+);oSvc<|76P1r>rvVK zIgf6r7sB~;lnvMR3$?90Q@UKsnoIn5ua*8Ag#qtJ#lkH9DCH8Zcmg`Bhx3xuGZ$hj`=-L4Jh;rth^ zEAOISj!xTX$MOpJD>!aJ-HtfEK=~)Q?vCSP998J^ri^jq;a4je|6CNFfyzJW&0H}z zT;Hoie5?)RY4{e@@n;ZMs)Tt_HZGe#f-Haa(f(c3U9QA!$>PuZ6=(CeC1W@j-E;qg zlV&&`_wd&=j{Iwi@_lH03MxN|dPm`q-FCm;pNRWIaO9vofa_&AFU4^*>eNP?({aqe zy&JRm)6VkO8)a{xPS51}zZ5rnc=$^xH)P1EyHJbk3xG>-9l`l~IDSAC*18{Bz zQTO4zH;xAA=vd%8sPl>5uLb-W$9HA^&@8dWYojqskZ_?xbFi|$(T{^(^xc?@~R$2U+NBLWeqmiDw6SDcc zQOUn9xUoHBw({p!id%?gqw~1lpMtt!?WmpNBU)D;c*tuWn=)oDpNsa_`xmnh*IJ8{ zC$z)Xz*#s7&?rwEU8xOnJ^TSn`J0RT(=Glsp!_vJ$2;`A6V9*3(HY0zIPO5*7g65x zh)H$9(NWg_fv6C|aSR5!5DlWh(ZIrt2K_V6uh$thMZK$VJ_biQjy5>XLA{XH`${=- zcG5(Fo3)=EdT)iu%JO=>U7V1w%-f`M>q{?=#mhoYQz^V=NJ%IX3q-kmZZx!(Sfgg4(84oBkNl0>Y? z8!vK-bG&(pxVMaVP_NLGdVPa^Wx3wIkzywvD0X5}SmrHqLM5hZJmQT-LZuG6DbFqs zIkBpnowGg1_~PDJ+!u{k-CH;yt5vS_9CxAxp#VB?gm}M$rdFpAXekIpog?p5Gzy+p zv3JnDNAqS`)u7;;*{4Lj@kBK2#k7lj@%$pptKzbf>#Am!{FqfoxDgX}fEyJL#-FGi z^*hm+b#){W&aY@R?To6M6F1o>96n0bywdMHRgacEY}*4Xy!V`15xXa+leaVyN)$U* zXJ4t)&io(a|4!U{?gg=Py#aLL55yh6Hxl)Rox$FyQvw;qyuPU8_4)l39q*}Mwd|e^ zS#EKOFCNGXgaYw0FPg_eaIW{JnBxt^y@LZWCsfwR+bLWYmzj7YU~ClJ1@F5+M&4H5 zCWDIt`9($=d5$*`!-!zFQ=AC-;*Q9H6>o_6n+j1P%&3zeDJ}*V9DlA=HO*b%sbv^b z(PBiaig6=Ocf+Ml8OY9aLUF5eB;(54B;*vtn;uyh4HOprqZB&i>4$)A!TcI3HXX5I1M^wsdI?Z9esk`QWW1ZOfe?VM76(ZMwysJC=!7X#1g8; zj=9lx!;Nth75$+yZ`>Dz6j9O7zGKvVF&&x%NQ*)e5LOgj$8weoKga7&I5bQU7W4T7v3MX~3{>pX+Ya1-OuQ`#t*kB;yT&%X zy)Y8~hk161`b=?I`V5^%28T1RMQt*#jmBgaBuc7kkE@sMLh}<~ELdD5?2kqU(_~~i zc@Z(!TyH;|7y5(``JxBlb6%OL5J9(KYsi=$$cBbFM&r>V)Xi8%3EY=2X-?wHVsXa_ zc?XL$<3%o72&0Yh`DiY_5(o%7CVY%%5E4uGUlNVvJF!@r5+@8ooTOHS{IE|r2RH&D zq6mU00C}*&wC%Sy5~?VeRqs-2KI^GRF!kX^z!<+13lxSO?J`Fgl_)H#IOl=C-LO+E z!U+X}Mzlq!U=&y`#8SXXcsjVGaIUv=$nlA8LeJx|q|Y~QgiM7_6u@DN3w1~?6iavy zqT)_|Q8;in6e!c}MBFgsT}dGv@Ox|K)i7bghq{Qf&n80 zr#RPpwKJGvm&tiA_U1cLF&QDG*cUf$95g#RV@S7mA)w#*w|<$+ByYNDi3 z#lb0UTpd7q)8#8PSXQzkm|J-y95?3bqzHlU$pfpru>dqR*Lz)@o*BBiBb1$IMVH zip3*g=dg<-Z>BqeAjR46#MrYxQPtqVRjiqDsp~6+#6z<3IuKqg z5DsGEkc_Y@x7qqM8uAb-<2f}_9p8Ae2^~VG+T#9y)KUl+Elye575fUYm{I>t7zK@ho07ngtAL8##16UM8-c}n46Ncu zbQ@#8M|A5gh`Nzt^c@prk4F#}i~STtQ7ARzk&;H%b+V)vWO5(gq&QE^JUzw#XHwk^ zT21f&mD2x>&|;_1r(_lwQ~y6n^hfWElpIbQy9o#4Q8Cf{;Q!Lif1hd9oJSINb6q2_ zREEWm#k|^=)`ItT@&g3{#{^7~!BzDhoolcKli6L`Dp`}YBZ~4T98x#31@sE#!k>ciBPI8n|FzQY9`Bt*Rrfs zT>5z9+Ofk~=>97UxpWpAvE&&M6eQrO3b{xqSC!8h%#D|oIL2We#_BZH|HAOo59fG_ zfmMZ%H>_3B>&atJ6c4HDB`&R^#gpe$jC%5-io2f3ZYIfLvM>5esR<^iDNEvr^&9bQ z)q_vInstiNHZ;O*MwzjS15cls1x>CvZpr0G6+|U6uIRX=UPbq(=T+Ub#9OQ4mKSy; zbL5JvsxCjx$PIoz8VPZcgyfxQ#obj+vOrx`Wz~sDcY?yBXgps6mwZ`jBVhTp{ch-i z*c(Yi6hXTKW}cgy+q}S6Dphjv-?>%~Sq;oCM6Aeh)YTLOLeBrygQ=gJAB#!*7?kW1 zO_!;9%%}1t?DjKsW;79|%=4LfS3Uk>ef#WG+Gh1gou-q#ie)d2b(4Nb>=XLRKv}jy z0#TTCEFKMrG9c6PN?;IAW^WM_kU|+v#DUnRGqWl2=g_udS>DtW`_h^_D1rI-@+1IN zFX*P+AY$-R#!QYGwnQ98al)UYu?c7^kc0+QMV(@HAv$iVN|nJ9pPPOQBN41sg!4Xk+BdE0 zu=FTTmh8N=efg$r34kgpUhZ7y2G~`;?ub;Ze|h%F&XF-uMevn!({95nITa0;O}l_v zDjG4^7ZCf550*?dsp}@@4pq%ww%T^{N&}HZOmf5`BvNumRN2g4cBQ1imtmjzKDdfl zGE{6Fk0kPo8k?E=2VqjOX55_+eM$x;U@J{CE?HkrGDS{?0IrDvpmIh4>cQd+=zYv9 zQtlC4FH2_Pff%#RSdllmtR~gf?3G<7iI2~SO$v2 zEZCRXq43Fak2#kmqh6!P7*@Qc43%3^^x7ErI!TmdvjKV~Z6$Yx%gdLb$utZ3pe8MI zTVamAklulM-w=t#(>XOWZjd|-lWmS3J&9NIK9j0|-%6IBcQ`JT9{dLr}-cATLbN&(N2~TOiX7w2CNHT)B zDdh8;bU!2ak+j0`S2g*tewM2_ui<@B09C_?`VnxMjfz;R33A?`rsjdTFC0h|s}m4S zGNJ}SzF1KzAxk!l3mwd;Q}GIx%F=-Blz8*&h7t~GhjUCYSgC5i=8~+cdh2`Ibs33k zgv^|!;`UFwHjzxAuciR>jlBHFChOu)_qgKH{1GnyFb^neK{B+Fyo<`4@~Z!L(x>x? zIT;xxrUQ4MPg_nVDyD_e?GsI0Zng@{Fcp(NyQAvQ&z`lfJv`E53ZdSd0{5o3M@1V$ zPTVmr-UP2sAnNrQj#VxE;<#*A6`~YNurI7za)z2*Z_kL?O*I=pn2ZVLlQ~O%RIEI; zagf%W^xE3U>Q|(O$22E_2-C!~MbP9JW$q>e9cd?<1+q%Q%Ndsklktg7#U0E7hL6?9 z5%!s_4>RMis74;bZy&r+EKu$+)DJtdHH9f*-Yr`XY1!Ia5*Xr$l&*~omYta#s#S5q zjhRS^{xOzXgS>%a$)Jm6EzyxMiIO6p3F^X5$lFBRK-3qG=|-8EvbZ~D(@|dugb>qR zxmZ)^M?pr%MLyvtsB^*XVp(az36tW0|8T}=f#o|PYhX-*NweXXbUrwoLT+lAs@|4R z=OgMCnoUrt4J&Z+e7U)~O>?+riad-56s||yq^s-P`cfS^Clw`|aGM)pj`8!N+qvFb zikx_nu97K1X&@Xei8?|6V-Sh3?XX;NA;zN9s`JMLm{zqAgt%gkL8e41hSMhB2`15t;0g#^#8M9;bC=jxE8 zk1d9f@^;=lTxLpH>f8v%wir@Sz#9M51F6$H5rxHTwSt0wsn$xW^><`@*xSNIJ*oLG z^)8Wm-Haj$S*)e%WC%_;O0NtPL)hp@dFL`;vVoMFZ55*#jOmigCk-RVO{GMd?lQy5 zGu)ujCUJhg=(U8k7QXM1*;)+6z0+BWTy;2C9UuX=6M^>)S4TUNON zM1BY|Wi^qt+UQ$xaU@SP>+oDQAH9j!la%;k4Um%SwFEh_!$LE&S*#hj7=Ua`@IjE? z<7R-H>8oX}G1{DT=_c1Ss+}A>o=(RO&lqBHM%SW!O(fw@?mLKMlBCY^~UmxusWMP zUz4QrDNL@BL9uKlV;S{vO~rj9m1IB}3kWZ`L?i>e!h|flFtMmEFkac!c4b@J*r~7F zNpI?B#x*AMW7d+2dxX0tp)L%_{%<<*K?s=29fV_OZ1(e+<4D+`(Pz|KBpchVI7eLu zP2er}8hJYv#C0ztIdnWDwN7UpNrLEW^x>6Zwh4^9cP9e*L5UW{03=L}O12}Gc8Q!vM0n0(@?!qV7ZR*4wHH6MJppSq2qqlvIY1rq8x$%jOl z&s$_gk_R+GB$95pp?qdSgH3o$Bj*j>%a}aKgAO+JULT=Zi&ewtv> zjet)aBUOFBT9oAqGtygf#)B0m%(J&5C+!Z%a9OvL4-(aEbG=t5jOfcU_?=<~+$EJR z*-E61MZ{-z;Cyfpu7)o3-Q2TFuMU9%cAb|f*6nfgyt~M3+4Ybzwp=nfmv2sUW!|Z$*CuRF>6Gv`^^nf&4{_m@G*=%%o9Bx;nSr2gx8@g_ojGH7|MFBb zwZ~c~b62}6``b5axy3$tr6;{Bdid&}-ip!SS@JyCxh!R!Wb3*x5%NVDf+3=o9LJlv z|LTuMO3)ViV;1``Or@y3YNm-)Z&xD*Q~i8k!PgNa(_j{io&&y6pgifDGrEr@qnxw@ z5#Nx?CaPZj;ml($JN!i+S=OS;tF*0{_&YQ6t$OeG-AA7-(G&TR-ZU0Yn7FT?(wlAf zJS&wwfb&tlvmlSv&3;^EINQFWvPrgmM`fLC`>e{Rvh5MBXkIGSHLq5spA_lSo%Ayw za5UqBcQdNPUrU7X-#1?PY}c46m#X~hGehBw=kOPseG@u(d2VmS;nVGAKI$?%VI?`_ zRw5d!ZdS|gW!uHov7_up$F@xxop_q`{(n*xR5?QtK821H=jkdQ%dH-NqTSMVWxLaC zmP$k(qy78SPbPA$nuyHxH*5W9H0z_%vP{YRW9Ul=i*K#;;zk5hE6 zOD-Vh^%l%97LVy>612D^b1y|yAnatirXpXoSeA}P)-AW(QoZdY`!3r}zJ6Dh-2I8A zpVMgobNI8!n_|iRXyqhdS2GSc^&+2IetJVGCH5oyN&D2&q*k1y!U#yLE+-Y?XndaX zWR-1Cv3qpSL$Hg;KOEp2A|^yAGW$*pCGBohq)N`_mUfWMUJLP=-^}WQ( z_$hYpbN$IznEor%DxW#Uh9^~u|3}t#{+CyPlHBc=$pCIG_>k;j#`5OVk&X}pLTk=a z`$u^MnKdrM8>i4LWjbGU_BBH4N4!#!YB= zZ8}P|&B&Qk;TogDWb%n(zj>LEIk6a!C~=R>P7m)hy(H+a4WGNGmWO0mpKf3M)2a5t zqh(jJar|Gh##ElI`^SgB8k~{p6{lt_fum>vcO&!UwOc2-nVgFDgdTY>iVP3b;r_BD z>LI84;j`?aS;w@x%-gbUyB4i0&-B{fV_IG6ZP}vTWi2W@d+oI+d!4*Ij8F19;*Y9k{{NUy<2w0c@| zdvVr9xge(`ShFaIv?DJM6wHnJ_;Pdzb8#|@E8AXTS62RUiG6JK=a<;uW}n|R5@mN7 zYf#PHIC_b|NXkLEgNvAhVJe?FWY@3!u8rNU`o^~Qo!RxT#-is-_ZkTrrlLvZnk()9 z)as7O$EzRgV83La(&HbLRbSiDo}N|xeP?^QUFmkVkFf_9U!j$8?roCi3pG8wWDwYTcu^pV zfyzoj2+9t-6ZDnj$0E@3>c4v0E9@&H!Y!*u&7yGG5v@$wVS1A)Dvp#F8b#XL+g@M! zULSi#yKZGQi!e`lfSRE;NtLkDw}XjLek^?*fsWj0Uua*^RhaD!`SSceE92bTM6Ivs zVWncCAz!(VGOB*1ul=Cy_H?|3Wy_x*6p#76HA|rn^4vR&P$?Mk8xhnj3I#=uzH+@E zLxU6{FlwAbzyVYWdh=txAl443gE#@W{9+>_U)+e2whtpkFHxr)W?JfsE{fkk%M#ES zMXPcrfZQTjGdJqRx>Ihp=gn1EK9&d@qn9QrGQ1+p9Ox0WtO&G#OTtMGMidA`UaI-*I?a6>NBW3QvKjf_Vn!9xD`VckzM6gx7qbwZ_RL+Agm`(^2KuK zi@f0zjR+b;_Zc4wU6Q;O#uLmH8goOnR1hya4(XVJAt#*yvgxFatFfU$XCb}^O{ zdF(1N2GTrVaFFad<#=5v78)2q3(p`?2a$MKmMjVwVS-nz)q72Gz!z7^8y|yG9YG%R zOC}}vBw>z(3M1u45Ta;CVRTl$OcjHAxQhytlkf%##kN8Lu)(}Ju>5&2)DKq4RWRdK za9K(s&-f(_AYR zJcxc(KRUpEB+I=)?E5fRV4?|MDhhF8GB5E7(h6lPM&O14!4}o>Vqc*z7WJuCClG_y z+%Gj?9Y^YT=AF)m-^zjKUQ!+_m%WhKfA0ZtaLsFlh0CWx7EY|P?Ld3yl|5^gmO8;w z)HW3)pU7y1#TQG$5pszo`O&Dd;azqcXk<9E6Hz?`JV9{-5)*|IL0zlFb0ozBeH#Qf z5On;aqCJzIQFSS-b{hz)R;v}Vdk%+|js$3~6O}DC2_y!2(F!rC#KLGH+v->wa=krJ z48jW{g%Q6|NpUp}8boWV5L7abio*1ZYnB$mGn#K|Ok7!>cG@Tx`w-t&WV}RB$cP8) zI^{C)q$3wq%&qKqmmRwB#-!_(uh-0SWTlGI0a*1HciFW)XLR~U)Yo<=bPk zE0+|3YO7mipBL36M5&>EJ^;eZm2#cXgAGr zujOJL{U>jXmYBt$)CbKhk3p}*6{T06V%RFw#al}MEIQg1e#i+8l1Hw-)ME0_&Sg0a zB|=y)szP3)i$bE;e3+SshOz>bIP$Tj@btA1R3_BOI+E6)Q7LsAhE_Q;sm;h&l7t75 z>;z$0QA51@|ATrX_9Wr|4|J=zh3XVf-2w?h;0VQt)0{PI#f%2wA}os@#>`Fi6NqDc zaX}$tX&E#Am##!eA@IPfLAiWia1E}?MZ%%#_F?-mJD2L^lS)vxJhOx8m&G@eTgoWp zmm4DX7Q1C9Z$UZ=kEBCrX{~ilNFfQ0Y}=Gq&K+c*=8|o2ngPk~Q&ADua?Q+AE8pSS zhu4H`hE@h@xE=EOC6CR_6k<6UAq4V&aZ%+Ms{lD+%^gdOe+G>*U;5kx;ur}~O}rBh z8Wz+niuxUXdWgCZr!0~Z7|7H>l<5UMm=G)|${|TYW%b?m_iYdbc*7Dpi&-Mu%ELM* zFRB`G#%1-_l+-kXZBj?dD;o{APphnn+COKZi^}z@>~nj|GH4daBj=RnvI&e#7|AC! zQkn`lGE+EdSN%%Nu4PwVH^e^ms17+(7- zzZ+{e!=gL4)K`7RIQuM#yHlPc?36Bl-WxChFZgB>PVtn<*Wtm`fZ1Tk@s@=C<*oXE zbQO!&ED0rIAz#UV?Xc&OJ!ZURpPGdjglzU1F8*_mC4`g{-qh^qTyno%XrI#~m6TiQ z({vJFIb*zipPS)?eL)dmVVN%&HIkO#FjkK2$2c63I5WW4f+pKF)*X};Oe#uD9SI64 zF|h~p?o4^0FcPgdq5 z5&ToBFNXmZGIB0kpi07HztF7C`@q_jiVJ;*E#(kYH?CCT*ORG8Y5^4zsjZld ziQkf3F+Nhle~37U5VKv=>UtCG*`8X4{>nuY?S6G`$OsK9YfrKV9Dkb=c2fIjmChu4 zdEI~8vO9OOJHNG56t4W9?!c8X7ag+H<0wFv6h$fOTO4vlc zUbkjqW?E!2YNmzU2yrAUOiGG3FgYpoGyPHt%d#qKGpsmc=T@>%Q)>`3ycp5@Ao)Hq z>`UeeVaGKHPK8VcBk5f{Qfho#TpoWX{G50;pJII zJL$kH|9;SZSav^?F^LpcPJ75+a6)eK4I@>F0wG`X&RVd<_CK>T=96hTu)^8q!qdp%8?DS&Pfzd^PKo z*xXklGR>{7v&7ENs&4qa{jzuFp_l!7R6kQk}E7ylNGF&WB zTyvhJ;~}$~YWx5Qr+{?GFpRFU(J%J7m4jZi$5bEvl3mx+|FAe+=nce7tCV65@-fWB zN)(dMF9sRMRh$wKFG)L4uS)v5)aLljaWp7##xB@%iHQT za|eaen{Uts_^OyM54j@59X9Hn4?duO^abJQK9DTVShJTu?*z#bv#laRk;PYbbJdOV zg9GCa<#7yF;B;DEDB*@Ed(scfc15|QaFUuW^XdMd>Dp)d&{f$ySPKQ2#rQ%6W-AOq zTUbJ`kk@U(XGU}5R4AwnY(4H27CNCEjWCkIX;m_emw+$a)NFj}SSDP^*nY2BBCiRE zV+|FR5yuG%mlMo1;Hz}hri76{!6=ZUD_n$EM7h}&xCFK zOu-innpcv$b&)qkqwEYT(i3(LY7QO$&8DEo2^9E>O?#uuW1Am zvg3-bV6RvtWg{LVag$iYp!pu9@sCd#%zmja772?alMHdw3Y~K#%|Wweou*e_-|v*F z1T{BNrq9F+PAu7_W~v%t>mHs2IP%d0mbj#zwKFN0D~o-GKvWz>vVU&2w!?vNe#~f~ zyuja8Wawmk?Er;~i_VzArN+%>t2vhOxkJm`lxC%B^$3J~ri#mt5L*39oxWJK3Vr&u zfOK@pzf`)-1oWAoIY1@NXAa%PsW9&@=II{rI$tE|d;~6VNX7rTfb&dI?3_loP z=r0v@%`q{Sy!Rt&o_wZMo*q)eQ8Q+83nX}WTn&AS`}CQ(w~6jDiB9%W3cPmHTs{~_QsPV6?GgKYChw0O5u<0s+wehH$w~uZ#M_qXENJ|sc`933__}@H z|JTUXgvL>Z;eH89Td9{CtWxXdrkKV?sekRIVvy>^DhlGo+3s{RJDW+#ZX#LGIe04K zp%>>;kU~Xr5)nF3Vh=7+LlykFiM@DeEa*W*TPuj~^Ss~BOp=zKO1e9L-_QF#f3t^q zVSO6{z+`xV>~8=hyxa?Ww&4T>FO|t17Dv|2?mSMN#gguJh60bLitTH;f)Io|92h5)0jf-YS?hINEq|$OyS&rc* z(kImrNy|)yF{-8z|Kk>ZY)at_N?->jnv9r+3an%)3l(yiw2pB!Cm{1E%Tb2pGp(<} zCN5M>C2e4_pa|d(0hUpwPR4`}zQ_PVzmO#(3!Bv~A#rtUt2P+5lE=x(mw>fsBn>G^u{F~|ykj=-6QzslQ>u3f(7$b(ib2Knz{FV3U!aQYLOiXkw?*kQtEXe8 zJ>4hRyF%i$k2)Aj_p+l{%_BMN(MpE^zgp?ZgY?IlJE|z|jt0`n!VdTMwntl|rH#q}YMi{6E^KnGxmX`UD!6O|NC8@P@IHoI7eCh6?UVDxc0#eg8q@UF zbL$qd+_Zq{ojAwq$(-oWRhN|v}cC(r20}^&4 ze1e;V6Wx2Beu^!(a+4Wepmo$+&M8FzN_bXrv6UNfvDzXo1-Lx+rTJ*2Xn$pPeXwTk z8Q@!`HwH(N#&MY)HfMR5E}|lV!)(@mKr_4#!Qzxt*Y<~01t_Pm_cZ>6O|g}$ zgF9BdtQpFido&Z?L5R5XrHf@x1{(qqo(^;l`?$T9nv21IA_b9pIv-CK2QqVi`T3eT zXLdGYG*^T_%jA-IX{7k+8}q;m*y`;Vi^8`f?VZxe$osUc)jga(0f+2a8CBaGleD;c z!0elH_wLh$2xb6fY*u-+<&>X%Yo59@myHH`c>ZXrk>@eKAv=#>P5)q~^In<}I~dMUXs za&ujadYq7BIaZZxYRRL=szj~){YP_VM{(|k8GEE|mWaWhN9l1!p zDG0EE9@wiA5~6r3Jt5`tMyL!kiuZm-h~oKK^kTUUuo=w?x@-a3Vekxq2g~ta%^7po z(ZC?em8)iI=dmLLw>DHC^3^h`AcQ89&GpnEWDEPFU zU3yt28u%1d9b3_(u0b$n_!WJz$Nht!kmid%&8VsJomFk59?hxPs3c^#EdQGv-2fS& zr%*h$)<4N0Ll@w5}g5D_3&Sfoq+vn6@<{cA3(TziYt7ar>gTYdxAzNgrLoH^9 zmKh$0pl9V_c89rC>Qa;yAFi9R7Ms3JYG{FFOSb7lSKTULU9Gq<1-cI>DrGiu%+*%l z$>QI?&8tQCWwW!vw|^8UHX>{0vBE9S0|NAmsY_tGMF$#UFw^}B_SA~uz za~R1)sgRuobU3b`t{Z6#A=r%btL$*-T%k4CsX`u6XK7b$=M?W>GjHeQFV;c0t@TzN zl4@4}wogzSoV>Ddw#Y}^{A#zDj9W~_ri-;}R}(-)(CG?|-4R^QVK?|X8!|@E)Ykv3 zcVzq~D9v^AgUO$Dm+OSY)`nP;b_yw?`{Tfd+}kFIYM_`oV&IZ64WD8Gm+*&$zS-te zydGzA*3h@MZFN6Bw2|tjBg2=&Y!j#c=L11fRFMwP%J2U%Pi(&%fRYwIIaTq;TjriO yqk3vSw!Uzr6HD&ZjpJUR3G=L-UI$ATPDX&Ybo3fz1E~|~_0m=@cg!RGVUmRDVPYsNUKGl5GQb?* z=}_oD7aSK5uu``yl#-1PBj*V>36F$Ph1WqJ@K?}`mU@NLpDV&JI)N1<*nm;sOwbN? z2J=T6Mn^3m*c)6GX=fk3iDbdKM^dulpcc$$BsEYGtO?d1NkM`~QUhO!f8j{lz;>{# z7IY+S;4X;4WaJ&i@(Yb(7x@Y++a;ntm>cvP#frLsO>_ldX|!<9C>C@z$}n<*x1w0U zFTy9ne}uWC$zsB?!fL`s(QKH#tvLLJHgGB!8%;s}iKg*Yk0I;Ca8xuDb`}m6j*6is zl7wks1#oQ)HG4LO4ZaxT=?c4XCx%^6IhMxMD3%jTZ_um@jHSe}u^h(}!RFu$@t=w1 z@VXL94LtyNfRAIT(N%G5*cRdbI0|+yPTL6j{|7kcAmEQU4wvzxS#Y^AWVJEU;xRJQ zjiGT37{h`>#?bf@#&Gnci+_vo%oqxCe+;|s*%&tHEm#8e8#&{dz!J}bE61~>H4t-@@dt>x$>=$b-`Wg9Sj5g!B-%<&*=IU1vvT@TX0%Y_ikH&e%D1=9vJsfsH|!hcOIH0)GIpju?RxF@(V*6FIlPo=5>| zO=7t%C$Z)ICQ;DvNwf{SeUdCDlbB(HB-}NL!{)4Hcshxr!7Gt{oGX#xMT8ZE4TK$q z1BBs1yW~$zWWDyqiJa-yCsLK$g@+S4lU+#U-2N<))}B9!^iAS?P$P-PST~95eRByP zBk*`9aK{M(lKU-NWhB;LGV;mdnnd#+re(z+p33e)?mA^}67ZsUH zP58`}UG!Wr(zz^W=vfnue)IjbuYN$dQ1!8#k9PTN=wmP5n72JO1w3kxXWoduj&eqX?e z#JrHpaUKvs#?XZ<@XbQ1GRGq3D+#*5^5Amt+9GN&elg3N26g~fEM@~AfK7GzOQ8Qm z-J&JfG=N8!aDV>sQWy#(w1R%{Z(D|G8vF~q3MQf!oUV)kIR0SIVeAF5gEt!B5YYo% zx03$XU_UTq6$Qy!#RlC3amX@it+sQbNW;djA$VXljqxQ|8LYB~Q*du^GXxsHhVw$@ zb%s$J?6Z#B^c1i?czhl67g&!K5p2Dl#yDF1YuB?uH^H`G8T$sFSZrWd-O>$g={s;C zDx9^E%W9>~JnMDX%o*?jh&jvXxrH;@ZEz~mo4%$Eq-^DkIcFJy6K|v z-gD779|_+`I`0gQf1}hB7;7m0;gDqMOTENT<7H}nl!}X^O7W^WE zEmoP-NXbm@Asc3L>g}6J!J;zR5PK%4?zx#V{`rz~=1y63c2b~cJ88Um-8AyrZpIIA%gG9~>%NVJqa~Q=W<^KcZ228G zHS@&H(ec7ffoklc1{&{@Ieiz?2kv4^V|K}oXO}EqyEyLW@8TM=br&^xdKdJsE4Z?Y zR(ewkcpwG7+(nJ#+RZ*Iu$z5fVmF6V+1)Itx5NkRrhs9)S>b5m9N`Axk=<;-&E0mY zr6IR~Cbj|lrBVX=e#r^iksd*2#X0dyy@-=&SfH@1c09)^+ zh9~XiqL#Innt5X1OUd8urE%omN0#2lVOe7z1!yJo2T`UGBI(Lwtkwe?>}NUQ`>Dav z`x&3KpIzbHPt7d_F^L-MB;4Nq043>qfD^{R15{Da0eKX2fW|cM05!7t04s7Ipn!)D z&}J?kpk^K&pa6eKdUcQj<~zty)cPPtN8mxve1Q3%4r9+jO7!F)`~HS)2V4-7d!LP@t`bWoT6Yq}E$UZ*KnXmG3wy@)I3gCa7&ya$S zQ{`#LIbU2qPR%?#4*hGDy*SR6nom#wpA$?_{saZ7dV+n}TKpYO&^QO5pvq%UP>@OD zPdmZqeJf9}+=r4c*GcXXeNR&0CMWGQivA~ALEK3WvvDWc!Z|19OepcYPO_o{Cpk(k zoMcNMoaEl|wfHNXV!FDg*y8r5_EjUYueJ z@|@;L$8wtColf&X#o*Hvbcuv-In4$f7XS6r%>Uon-^(l6GUwS!!U{ zS*~hXXE|lQJ4>T$agM6)Ahe#NfC=Z=B^$wbaN9WwTKOCHas6+&N9^?tCmh!|oPaKV z!{zs{Z?p}d{|ld|k<>a*)pR~jO$pf&TT5<}m{LfDNxQV$M}oxCCql zuDZ(k;K!@%iu+gD(zg-vh(fHngIMx|O?_uiK%CiiY^HN4KxEj>PSh{uk5}Q~n&vGg>O!kNN!DPWaw zi_k4REIcE;EW9ne59*1}{tOPi>Xj+1Jj-umP|r|tg{j*8U>oqIgf}gsJZnNCh!xkU zT$C+(CH%K2ZNRIT@(kl*#h7nIF?Q+pVzikG#XXv}8&%sSgEsC4MhoGLNtzs28Q;;;-gQo2dil*5kjG zFDvToONo2?QjkDlm}HFgrRv7|QjkefP^#ox=1a|N_NBmwgr|Kux-Ln+Kcu|3pj{WJ z$}k{T8D=OT{t{&&nn97S8f2Ixu` zsCQ1kTQL4Tr{1#4^Ms-_XaU=nrBMzm%Y+llvIWaPeY|#qdXM)*S*rGJS&s9 z)1Y3CZ;QW3Me=iDvx*e7XGNA1BK~o9IP{*+QISTpp(0hBS&{0=H!4GsiHS5n3(@KR;vd8edZRb|WuyH#VC*l$-?o(;s$)oDzV zYbeh?z)^!;QN1Pw=>}rfHHLyXcN&q{o#-u8?b__B;Mz<-sWwN`Do~&KT%g_wy{t`5 z7q3HpUdPigyV1A~3+PdYeH~VZ8B*%d$TrlWRUfNE8@MjvPwLPH^4BFR*X8JFUzbML zwJsadr!F=4RG7OSY4H%_uR%Skuq&vyMgzdl^}1hA1gOs$@K}AeEDub02KWi+dDskg z0bhf9hts|xZ6v)RHM*`LjWDwz1>4_{8a)m+(BuDVL-yrIjW`M_HDVw4Y{UYFgZj`I z2kI@?;zlg!Y9kuc9ZC1B5ert0sp7(oDML*1LQ0Yk+f2kK4il%^cM)thnk^lygouP2)R&Dh67g)zcp z;o@c-x7(U=IDH4|UGs0vI8haEP7Ra>2Y{8Ev*lBobLW)SoLzgcIn&>5P8)mB+)fqd zZlOHe>(VVa1BSFOO_MUk}aMJZUvnncH&0+Rvg~d zT9b`hQ$ua-t(jp!YZe&Vn%0@nn!_ozHCwy`)DH|!v}Q{lw3aUM+=!Aq{mjdqlQJ@!~{-NRHHY{*iTje>f zXSU_=eBPG%^S5JsnRe{LdhIw0I<}+0J=%HF*^PmcFrpn>kkpPXc7WmFdN2Vj-kyS_ zwx^&=!J**h_H0r94(!wN9k>_t12=&Q9hkpjM`er$S9GNDmFc7f!}u%Ti4ryxejyy% zi4#jqCmLI7Cl0Seoj5OC=tM#P?8KItI#cC&I#YASJ2QX9&YaTyKz+y!?abkr1$NZq z|L@M+>9qSod462J1?ndk!@F=oISFTZCz;t=L)|obYGiYvD)T$qL=sHBGv+;tt~P z-JQ#Fpm1Dw+E7||*0Zxa#=maS>F$*1$L>_+>+ZA#)q|23?7_Lceh;Q=)`RK%g@bxf z<+dKQ{@5Oz&}IwMdvMsU5N_&0BhBm~>;DOfxZZ=3{w(}kSga>mUD&=SyI^QfRy?^U zhf`WlwrqV*YII*u3VgCBZRk!OXYdyTlY&2(;;8-1hwo-3S__VCHMJ;KU>h)pDODj z>@6JPPeF$JbI%tk;Zgq7+*p4OtI7V`kiw*srrRr}CrKE49;IdX4WizXcXDj0atz3>% ztW@o0E4y%)m0k9Ym80NiD~<7`mBZN-K*0+IFkRIEjDJ06w+di_p#kjs$N*aTqyYA5 zasXAgAb>`8R?=Mv;M96IfYzTckQLSoq_wvMyMhw}+2Zqod?0Zvkb+x+?3@y-2C;zN zLVFMstPf&eW(2WszYAjef;JjuV;kp>J~nD7L>OmdS0vgvx)$2lz)N5ny7*@s8xU^~ zmM0Ox9M6k_smfKt-NN(2UxKN+x53m*!Qu3m9nNy<4`(@ThckVb;hd-fhjSuI9?ltc z`Ec0>9G48YhEwIg441Rna4x60Lm2;g2wPS&gx1?EgaUL4p=t+%uv;Tc;?Im=`kNzI z&b<+wCvt`=&ttek;7vXLV?$X%k1!fxzc3EJc<=%^0sI>587{lq2o_ivw1TxFXrzt^ zJ~!AL!R`4|aG-8sBu+r!_n>}M+jS(4P(R_E9LMv(xj4=bWkxH{TQ5CE(-;?yrY+nU&8fHO7-j6z zzT7xI1sel3ZL>lG&L|Xa3iR{WkNf1z5e-hI-or3YNEBa!J@;ri#pTaqM z`xIL5CEiM;b67M=W_b5x8e?zapk%f@D47L}N~ZNsOy+zsJDGwllKj6W^T_o_GBs6h8jZN_ zG}=I0`!q(xOylY{Wg1nsZW@Q-o@vy`wP~Dq-cF+?Dx^@wZBi(3zZ6bLBU32g%oLvQ z7p73Kr74^lHwrUT*kJpi6mBk0gB`)*)4Ay!I-SO~eL5$OKc;g{@R}j3;tW17>^Fk~ zrOlwKGiGqH+7Ie?ysk=o(V1*$otYG%?M%i?O^nJxb;&KtF7anb2Hi)+NNS=2=6Eao30oH~nLGk=yY595FFEDErG7F+I` z#frRUvnvYDX2wrvQ^mD~-GpJnX|rjpYlZtH{JYugibu0q&$HRo$NZUzs|VHbp@a=uuT%JF&}S;%tjwcywQNBf1!^JDXq zg%oJvBKGaFMSQxoZV@v)2WNqK7gHk(7qcr?FXrR;?-w&)%_TJ2hD+FxzDv0G3)10O z1MEvYnzS3smQvy^OF7dWSxVLavXr)va~Zqj(`8K8U>WytUo7MLK6@F{|FMk5R$w{P z6%|%mPMc}IoEqvX;X{{e+rs#ZT`tdJmvhQ>ET^Q~m(%LcE~fx@m-B(ctL5Bu_FF+t zT*2jg!wPOvudkqr^R1*N>a1k>O;%DPJy){4D9}rf|0$AS`brwb%9S*_gDcsxZ&%Xj zp01=|#ww;OwTdlixQc>wS;Yp#u3}$1R#AgnR?$dLt)fjlSjDb1ug3V-DlfU3b9vL% ztYFM)?r0pVDcH@`Ecoea4!449SV6rt^mkiB0bp9GlH*kVU+rZuH?hUNiXCqbH zR5)lOyX>ot)a3GwY|vie)s5`BXB(;6g7!^R(Px`zG+j1{DmQVbvUn3EJ+_HPa|@gR zJ`sP^X61RQWC|Du=HEg=leVzJ^;@WkqhJdRyX#xHn=ZLk@yp1QTRGl)Z=;b7*hUS6 zY~yJ-avN3Zvz-Oi-_DkI-p&?`*v^S*;&xj14B=+sS>YesY1H|4@X4sp4*C7>+zvU* z3GWJD3iG%qn2(EnSH(pms^_8+wQ(_BZx?MS1PlV>!QtQ!E^4@a1_ccVM}T88bk}11 z{hYy;JkDT6IWt*7u}qHN@|kRL)lBwj=S)t)!!qTt3YwtWNtxW!P2S1vd&W-A2fys( z=Cp)cd0t9y>!vYhf_v>I!+7mx!puE1#(N-k%trpbJcy+3W5uQSQ(GTj!{F2$Ef1z$N0cv`!QD7>$oxw8~VLJXcqbVoS^aA zPAbnk=D(iA`2QA;)u)uPTT6bL$LtzslyM#z!q4!1fM)0T6U+|qHTd!zTm0l3p6^?q z=O#AwJU6Yk&hx}m;#+ED-nV?BdhJ`W7BdmhR5f6vwO@9()0>2!--H5I&|-?RX0fHUsE zhQNLHpOgW+GmhQm)9Hj?`7+6?U-?XE;%_v@viE3gHHCh{-og;!IN@yJ%6lB%nfEw) z_T1xeK6;O!gAVso<3Gmhj1Q_ObU1c1@laEU$>rNBEhrmaqwE z*N(Ol(Cr2LzMm8nEF39}7fupR7tRwddBNek_5~NMyDvB@{(ix|VUw2}O|xHeQ@Z~p z^si?q^DE`~^t#h44#P*UsH%&vxp}K}>QPeJi{&-;V*YksEYIEr4!z#@mV^Vn*wQdi8{K$N?-A!p zd?u)^`WUD;EZ4;UPAVwuP5OFMu*%-7u(mhrX(av@Oo#r5Lm!cPf_l7;2lXge;LR2+ z@n*%_#edkFExZiszWxbBR~pAL>D)xdzd+12#uT_AlX2V37n38wWw83cej#-RtPg)#NHY-W^&D~-`~_i` zr0i(3es2&fqKW>A@M8;U{HE9crSMEO^J~VPpnltFCD>Xr>njlc>w4ipSa0)(@KJC- z1H;UGr++NcU`;aqFd6@I^)vJB=)>SJ+`miN_L5p9im%PK0y`t)5~<*5wu-c%QxHGb z%oj)XP6qo3BR^Wb(xeTLZ%dCySmkVjV{hVF$n>h`k2KwJ>pjFZ_?w&1|7%6kKX4}_ z@*VEq;BJa=y$5KdTa7TiXka5_bb`MwDlG&)mWmF-T}9jz!J0^q^~ZPw76mKd){D?i z-1@DUJh=6P&vttLzXiuD+~1;*uF~QrsGu#}!AMw43Wl9|_5k|2D?;b>;wKodjsLyQ z-qm5sh|J?zLo+GiXeJ#podYigzHys0uYx& z@g;J7orU|Fl+h9eW4*$}WO#N~V-??+uI6R@cjYtl4cp($hG&~+)JNpCY<;cZ--`nD zhU9`2JR9)^5q1ae9}RxRP*~z}nD~ybuj1?5`a$Jlgf;Wx+s?|w7ti&z3-?DzcLHp! zzrWE7&s-#^gT#vwQ9=aKzlfI>H5Wnn=h=)(Kd5{zakCBn_Z)p~)nRb!gUeS2KT6eC zbH(pTx10Fo+pm)TFxw9cM!;JsP)TG9q@0c$iqDj&Dz$j=(|vul6#?5L4L00{OOO9)61ddF zH`=F~^zsXXL&gZWr{L~``;m#CQSJuI;>O{~bBwxyTc7{7A#C(}O@Reb#(vyu6u%wN z*JMMl{dDVth>zV%zT-vUV%*-ivH9_Q<$PJELdMpTxwGPDR5_7Hzlt|k=?w|Svc&6O zxAdN1xb8~a=Onxe($7ZR3Ej;MG9ut^V%F~gi8Q;-dJ}@_7YWx(SUnVwtoRLAIEZto zVb$GacwQGUax1(K{i}^C}})$}}r}VJR2K-+e>|AoNc& zU%l5?CrPmcw?1-(;eKW2=NccweGr@peY?xm7;IMQP0ZM4K)NgET=R={1<%nuZB z1oV7>ps!yP|BX}jtG`*F|M16xTOYp@BtaMo-Uhe+>Fp5wA@KJ_noa+k-*_s*)dd%r z_;tfEX?-o^O^3S$gw_Yua!3;@an*#L{ohC_q!AKbhPz0%&e;KXcZ3fy^XnCT?fE~g zz^Tm`DPg`yKMU?(O#C>-CS?uEmR=wAszaz>z;r$T7lkJd340=A6A)W`&$ED^aUVd% zH>8k_U`96Kd=QrtcVX$4OA@}<%&#LGgUgYAg5p(G6R+jvEBwdV&3zz3Al})v?Bw>n~|B!Af?*1ly8e;fQlJ1FAQUKxiaL*I}?`B7< zP9N)`t^cc_KGq~4cB{m?;T~ktXC;g?+-}@oOI)IG1;Q*++X?WBxbGpnlbIiP%>zF} z`T)2$g4N*v8~jSj@JucGQA9NT#%+lR6aNatZ8tt#D{(uJCO-=D151e-K1L&MnfYG` zod{nIPQ)E9`F@mi&Bb38Y3Avz?PNsMLc(N`-Wvt!SC{m0#)YtwViE5oevk3t(m(V? z8T`K)pJ(eE{oE`M@*PtA=Uz3WQA2T8&z8=qk2VWG_&xs-Fx}vngZlcy#IJ!Xps;RW z5ikA=o97T(|Cr|lcOcK-aNk1OesGsY*nYTw22)3a_0|3VJp$Hzh&T4YKMeN?B+`!~ z%Sm`HDdbBq0&#`BKIA!#dlAAL;J$~ra2LltUdmgCJfYdjJ*Vpr zg5wAx{=xmLB>V_`olS@i(((qT4`Ejje@D`^0`S5j*RcQHN3qp+snEEB&( zeWt^a{-p@3e=plB4Y~u?LfQ&i6B4iA-R$>42D|aj;HRtgBxIQ+Y>13^MX((b_bL3f zrSNb`*B<_b2>(<3UuVFdMomhhJd`&QeBZhsv!zl|Ru1^felc~l;st)TDV zc8dEk(got)jRNX|pCeAcJ6}_VS2cv2vUS~K#7~BQDZ)odSk!wv(E6W=NCy&qDg~UA z$g`5hYUW41`r&K|-KTJ$2LBZSD zXD~0%N8cR({SZ+A0bRiRlDTTO+3Nk3AMv$K{O>VcbT^40lTeZV32c$1JAyk#=?A-* zJ+%a65V71l8G-=?+Dk2c_#rb?amc2ZzH#ec>#0r!q@M7e!RKIqgiTlS55c62ILV`*K-bZuL-D^*90%JVjeeyi1$=?9lPIT(8K)j! z$+Qsx^A$hjUyS>V2vJV#U^wDVfjv;bOC4abSlZaatnrr51MAnV79A5GW~-zF+m0C- z78zuVw!}obz6)rV$F(f{6H_i*m@V8E5fkk?967-3NQy4(2#Ox(9UN>Xr7Ee_N8b*}B>M=DoC`>&>)wqe6;fvBj&q{Yfou0nJ?dd>vtTPnNh?R9T*idGA1N4;zPS)W=+l$ z$P#qcce9GQ%FOmwt^sqtP>%Gu^$2ZG9bL3nRn=jh( zA){;liZ#lSw0fs&&6?}x_pNp$ZAf<%-&oVTy+^aXS2YpWf>pD`RbzE$N4t%6T@N-c zH@QY^h1zm&U!feATxT6uGOjs_?R@SU=q{;T;k!$FI}RPF;;MUax!KV_YpGAI=$O`3 zEjHc1(P&b%Wwb5IW(kXgCZno4ys{cNT4xn?y~?t9JL;c0CY@_K-N5nX=}%qbPUlyy z=4Xp5N6fj&uG;6#CWqgJPTn4~aHL-FbNqN=u_NufXh-pjWs8NxL`7OgS_4C)SsnYi z-o<%4F6~v0S67l88CQ!ctK;-li>v>&3d%9>`Z!0~8!4_`H}abu{y+FR7Qf8p`uEls z=DgOZ(D%A`wf(V{ayfo_o5OYWehIT{>YvrjcAG6ocX@bpRZFYzNLzr_5)%?`({>mX zjl1f9>|zZL3ABucC1y*J2i9(l2nvY^_QdF#s#^S_Y*yGRZ3%uI);`J_7ZMY%6XfX} zf-**8=%A1ap4eWaZMGN-a@itSL>sZTP@5-PQ_*0(@p zRD5IIE@@rQzg)`I>xGw>tJS;SN>xpBskBxN{a&gH(>;){!G^5$@1p>XCBiETMLIyBGPYqPg79DynNa zosX-l_Rh;SR2}D&>Z+Y~ee4`jLsf9*s;MTq{cEW%%DthsDwW%vv#I(_IU}2?;syKk z>0{vjZxFa&G*d&BvqVeP#`$MU)xw#pwHog}@27Svcb|4@WlncWS2fz4t5zLLt%i+j z)^g_VsVuo_*0a>A-?(N&XRV&mvchO#|Za(+ZA*z`vhi8%rbvF)Bo6OFl z!<56hZ9+(q&n*EJxXOLw@sC#pqI;WgZ#;7vR+VQHgbJ7^qxqNp|Esc#< ztPdp{-No_WbmZWeJYY+7O<#A|fU-)EeWw(@Pc2)5;Q> zwKL8ZYNOxTaFX(I@0_Ggs*+hQ;|nw*-WF;Ju%Y;{tSwq7Ylw4ilDb^z3tQHfDEL1p zX!c~a(2QD~g{G(?zP8YSW2yf&(P;m^ZcAuvSYWg}aEhv^+{dRXhjNCcsD`aKIn0@c8IeW401+3JJlX$J4ba*tS~@|sj{=exhuC(Z)P)VJ<_ z%hhzR|2n|=Xtg@$%vhtExo0g=L(mm#R8#k+wW_k&)HcD{qnxR@`}QW4s@zMrsN2f9 za+`YS%FWsG8%1b#jGSu(N>a1MPRK__pLwPwr-KnaS4Yfp2^+9M`h$RHd zjEIl11V-DUvNnW8z%cWptbm9rbLPLU3OVDis}AlaH`H+D+<8-_IR|~OR=Nw^Qg6)8AMcQ#W&|&z;_nRVOrL#bY(w?2LV`3c3qC zR~^mvUbX;Rbad8+U~TdiJs(@ckEI4!J>K_Iu{h$aP;Nr>Fl!iN^K=!>!>|~L?9mBX zJEOF@GY#kAV9z|9wIVPi%jKDjJ7uki$=VPaSq+wF3m*PHb6{*}WK^h?p5Xtrbp*Qo zU#UIHS^16Xm=AS+o)C)-MV70Qd&wK!RfGOk>x+Gf>QQurEhgJ6?Kc0TikaN8@6>a% z`_Ejajwa{oe5RS@tYOxXS$ixYXhDJ=mlz#!)(G9w;CKv*2n?f<`AwyqGe0sdsGe=y z>sGD^w`yhCA|m2Lu!;o7!{#C*Vqgpj7-muKriD!F%mof~^S\n" "Language-Team: Hungarian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/about.c:46 +#: src/about.c:47 msgid "" "Classic game similar to Emerald Mines.\n" "Collect diamonds and find exit!" @@ -22,7 +22,7 @@ msgstr "" "Emerald Mine-szerű klasszikus játék. Gyűjtsd össze a gyémántokat és keresd a " "kijáratot!" -#: src/about.c:47 +#: src/about.c:48 msgid "translator-credits" msgstr "cirix " @@ -148,7 +148,7 @@ msgstr "%02d. pálya" msgid "None" msgstr "Nincs" -#: src/cave.c:34 src/gtkui.c:889 +#: src/cave.c:34 src/gtkui.c:891 msgid "Up" msgstr "Fel" @@ -156,7 +156,7 @@ msgstr "Fel" msgid "Up+right" msgstr "Fel+jobbra" -#: src/cave.c:34 src/gtkui.c:890 +#: src/cave.c:34 src/gtkui.c:892 msgid "Right" msgstr "Jobbra" @@ -164,7 +164,7 @@ msgstr "Jobbra" msgid "Down+right" msgstr "Le+jobbra" -#: src/cave.c:34 src/gtkui.c:891 +#: src/cave.c:34 src/gtkui.c:893 msgid "Down" msgstr "Le" @@ -172,7 +172,7 @@ msgstr "Le" msgid "Down+left" msgstr "Le+balra" -#: src/cave.c:34 src/gtkui.c:892 +#: src/cave.c:34 src/gtkui.c:894 msgid "Left" msgstr "Balra" @@ -184,896 +184,870 @@ msgstr "Fel+balra" msgid "Milliseconds" msgstr "Milliszekundum" -#: src/cave.c:350 src/editor.c:733 src/editorexport.c:574 +#: src/cave.c:350 src/editor.c:733 src/editorexport.c:632 msgid "Yes" msgstr "Igen" -#: src/cave.c:350 src/editor.c:733 src/editorexport.c:574 +#: src/cave.c:350 src/editor.c:733 src/editorexport.c:632 msgid "No" msgstr "Nem" -#: src/cavedb.c:118 +#: src/cavedb.c:119 msgid "Space" msgstr "Üres" -#: src/cavedb.c:119 +#: src/cavedb.c:120 msgid "Dirt" msgstr "Föld" -#: src/cavedb.c:120 +#: src/cavedb.c:121 msgid "Sloped dirt (up & right)" msgstr "Ferde föld (fel és jobbra)" -#: src/cavedb.c:121 +#: src/cavedb.c:122 msgid "Sloped dirt (up & left)" msgstr "Ferde föld (fel és balra)" -#: src/cavedb.c:122 +#: src/cavedb.c:123 msgid "Sloped dirt (down & left)" msgstr "Ferde föld (le és balra)" -#: src/cavedb.c:123 +#: src/cavedb.c:124 msgid "Sloped dirt (down & right)" msgstr "Ferde föld (le és jobbra)" -#: src/cavedb.c:124 -#, fuzzy +#: src/cavedb.c:125 msgid "Dirt ball" -msgstr "Föld 2" +msgstr "Föld labda" -#: src/cavedb.c:125 -#, fuzzy +#: src/cavedb.c:126 msgid "Dirt ball (falling)" -msgstr "Zuhanó fal (zuhanó)" +msgstr "Föld labda (zuhanó)" -#: src/cavedb.c:126 -#, fuzzy +#: src/cavedb.c:127 msgid "Loose dirt" -msgstr "Ragasztott föld" +msgstr "Laza föld" -#: src/cavedb.c:127 -#, fuzzy +#: src/cavedb.c:128 msgid "Loose dirt (falling)" -msgstr "Ragasztott föld" +msgstr "Laza föld (zuhanó)" -#: src/cavedb.c:128 +#: src/cavedb.c:129 msgid "Dirt 2" msgstr "Föld 2" -#: src/cavedb.c:129 +#: src/cavedb.c:130 msgid "Brick wall" msgstr "Téglafal" -#: src/cavedb.c:130 +#: src/cavedb.c:131 msgid "Sloped brick wall (up & right)" msgstr "Ferde téglafal (föl és jobbra)" -#: src/cavedb.c:131 +#: src/cavedb.c:132 msgid "Sloped brick wall (up & left)" msgstr "Ferde téglafal (föl és balra)" -#: src/cavedb.c:132 +#: src/cavedb.c:133 msgid "Sloped brick wall (down & left)" msgstr "Ferde téglafal (le és balra)" -#: src/cavedb.c:133 +#: src/cavedb.c:134 msgid "Sloped brick wall (down & right)" msgstr "Ferde tégla fal (le és jobbra)" -#: src/cavedb.c:134 +#: src/cavedb.c:135 msgid "Non-sloped brick wall" msgstr "Nem ferde téglafal" -#: src/cavedb.c:135 src/cavedb.c:607 +#: src/cavedb.c:136 src/cavedb.c:615 msgid "Magic wall" msgstr "Varázsfal" -#: src/cavedb.c:136 +#: src/cavedb.c:137 msgid "Outbox" msgstr "Kijárat" -#: src/cavedb.c:137 +#: src/cavedb.c:138 msgid "Outbox (open)" msgstr "Kijárat (nyitva)" -#: src/cavedb.c:138 +#: src/cavedb.c:139 msgid "Invisible outbox" msgstr "Láthatatlan kijárat" -#: src/cavedb.c:139 +#: src/cavedb.c:140 msgid "Invisible outbox (open)" msgstr "Láthatatlan kijárat (nyitva)" -#: src/cavedb.c:140 +#: src/cavedb.c:141 msgid "Steel wall" msgstr "Törhetetlen fal" -#: src/cavedb.c:141 +#: src/cavedb.c:142 msgid "Sloped steel wall (up & right)" msgstr "Ferde törhetetlen fal (föl és jobbra)" -#: src/cavedb.c:142 +#: src/cavedb.c:143 msgid "Sloped steel wall (up & left)" msgstr "Ferde törhetetlen fal (föl és balra)" -#: src/cavedb.c:143 +#: src/cavedb.c:144 msgid "Sloped steel wall (down & left)" msgstr "Ferde törhetetlen fal (le és balra)" -#: src/cavedb.c:144 +#: src/cavedb.c:145 msgid "Sloped steel wall (down & right)" msgstr "Ferde törhetetlen fal (le és jobbra)" -#: src/cavedb.c:145 +#: src/cavedb.c:146 msgid "Explodable steel wall" msgstr "Törhető fal" -#: src/cavedb.c:146 +#: src/cavedb.c:147 msgid "Eatable steel wall" msgstr "Átjárható fal" -#: src/cavedb.c:147 +#: src/cavedb.c:148 msgid "Eatable brick wall" msgstr "Átjárható téglafal" -#: src/cavedb.c:148 src/cavedb.c:602 +#: src/cavedb.c:149 src/cavedb.c:610 msgid "Stone" msgstr "Kő" -#: src/cavedb.c:149 +#: src/cavedb.c:150 msgid "Stone, falling" msgstr "Kő (zuhanó)" -#: src/cavedb.c:150 +#: src/cavedb.c:151 +msgid "Flying stone" +msgstr "Repülő kő" + +#: src/cavedb.c:152 +msgid "Flying stone, flying" +msgstr "Repülő kő (felfelé)" + +#: src/cavedb.c:153 msgid "Mega stone" msgstr "Nehéz kő" -#: src/cavedb.c:151 +#: src/cavedb.c:154 msgid "Mega stone, falling" msgstr "Nehéz kő (zuhanó)" -#: src/cavedb.c:152 src/cavedb.c:601 +#: src/cavedb.c:155 src/cavedb.c:609 msgid "Diamond" msgstr "Gyémánt" -#: src/cavedb.c:153 +#: src/cavedb.c:156 msgid "Diamond, falling" msgstr "Gyémánt (zuhanó)" -#: src/cavedb.c:154 +#: src/cavedb.c:157 +msgid "Flying diamond" +msgstr "Repülő gyémánt" + +#: src/cavedb.c:158 +msgid "Flying diamond, flying" +msgstr "Repülő gyémánt (felfelé)" + +#: src/cavedb.c:159 msgid "Bladder Spender" msgstr "Buborék csapda" -#: src/cavedb.c:155 +#: src/cavedb.c:160 msgid "Inbox" msgstr "Bejárat" -#: src/cavedb.c:156 +#: src/cavedb.c:161 msgid "Expanding wall, horizontal" msgstr "Épülő fal (vízszintes)" -#: src/cavedb.c:157 +#: src/cavedb.c:162 msgid "Expanding wall, vertical" msgstr "Épülő fal (függőleges)" -#: src/cavedb.c:158 src/cavedb.c:554 src/cavedb.c:604 +#: src/cavedb.c:163 src/cavedb.c:550 src/cavedb.c:612 msgid "Expanding wall" msgstr "Épülő fal" -#: src/cavedb.c:159 -#, fuzzy +#: src/cavedb.c:164 msgid "Expanding steel wall, horizontal" -msgstr "Épülő fal (vízszintes)" +msgstr "Épülő törhetetlen fal, vízszintes" -#: src/cavedb.c:160 -#, fuzzy +#: src/cavedb.c:165 msgid "Expanding steel wall, vertical" -msgstr "Épülő fal (függőleges)" +msgstr "Épülő törhetetlen fal, függőleges" -#: src/cavedb.c:161 -#, fuzzy +#: src/cavedb.c:166 msgid "Expanding steel wall" -msgstr "Épülő fal" +msgstr "Épülő törhetetlen fal" -#: src/cavedb.c:162 +#: src/cavedb.c:167 msgid "Expanding wall switch" msgstr "Épülő fal irányváltó" -#: src/cavedb.c:163 +#: src/cavedb.c:168 msgid "Creature direction switch" msgstr "Lény irányváltó" -#: src/cavedb.c:164 +#: src/cavedb.c:169 msgid "Biter switch" msgstr "Zabáló kapcsoló" -#: src/cavedb.c:165 -#, fuzzy +#: src/cavedb.c:170 msgid "Replicator switch" -msgstr "Zabáló kapcsoló" +msgstr "Klónozó kapcsoló" -#: src/cavedb.c:166 -#, fuzzy +#: src/cavedb.c:171 msgid "Conveyor belt power switch" -msgstr "Lény irányváltó" +msgstr "Futószalag kapcsoló" -#: src/cavedb.c:167 -#, fuzzy +#: src/cavedb.c:172 msgid "Conveyor belt direction switch" -msgstr "Lény irányváltó" +msgstr "Futószalag irányváltó" -#: src/cavedb.c:168 src/cavedb.c:539 src/cavedb.c:611 +#: src/cavedb.c:173 src/cavedb.c:538 src/cavedb.c:619 msgid "Acid" msgstr "Sav" -#: src/cavedb.c:169 src/cavedb.c:605 +#: src/cavedb.c:174 src/cavedb.c:613 msgid "Falling wall" msgstr "Zuhanó fal" -#: src/cavedb.c:170 +#: src/cavedb.c:175 msgid "Falling wall, falling" msgstr "Zuhanó fal (zuhanó)" -#: src/cavedb.c:171 +#: src/cavedb.c:176 msgid "Box" msgstr "Doboz" -#: src/cavedb.c:172 +#: src/cavedb.c:177 msgid "Time penalty" msgstr "Idő levonás" -#: src/cavedb.c:173 +#: src/cavedb.c:178 msgid "Gravestone" msgstr "Sírkő" -#: src/cavedb.c:174 +#: src/cavedb.c:179 msgid "Glued stone" msgstr "Ragasztott kő" -#: src/cavedb.c:175 +#: src/cavedb.c:180 msgid "Glued diamond" msgstr "Ragasztott gyémánt" -#: src/cavedb.c:176 +#: src/cavedb.c:181 msgid "Diamond key" msgstr "Gyémánt kulcs" -#: src/cavedb.c:177 +#: src/cavedb.c:182 msgid "Trapped diamond" msgstr "Bezárt gyémánt" -#: src/cavedb.c:178 src/cavedb.c:476 +#: src/cavedb.c:183 src/cavedb.c:475 msgid "Clock" msgstr "Óra" -#: src/cavedb.c:179 +#: src/cavedb.c:184 msgid "Glued dirt" msgstr "Ragasztott föld" -#: src/cavedb.c:180 +#: src/cavedb.c:185 msgid "Key 1" msgstr "1. kulcs" -#: src/cavedb.c:181 +#: src/cavedb.c:186 msgid "Key 2" msgstr "2. kulcs" -#: src/cavedb.c:182 +#: src/cavedb.c:187 msgid "Key 3" msgstr "3. kulcs" -#: src/cavedb.c:183 +#: src/cavedb.c:188 msgid "Door 1" msgstr "1. ajtó" -#: src/cavedb.c:184 +#: src/cavedb.c:189 msgid "Door 2" msgstr "2. ajtó" -#: src/cavedb.c:185 +#: src/cavedb.c:190 msgid "Door 3" msgstr "3. ajtó" -#: src/cavedb.c:187 +#: src/cavedb.c:192 msgid "Pot" msgstr "Üst" -#: src/cavedb.c:188 +#: src/cavedb.c:193 msgid "Gravity switch" msgstr "Gravitáció kapcsoló" -#: src/cavedb.c:189 src/cavedb.c:471 src/cavedb.c:615 +#: src/cavedb.c:194 src/cavedb.c:470 src/cavedb.c:623 msgid "Pneumatic hammer" msgstr "Légkalapács" -#: src/cavedb.c:190 +#: src/cavedb.c:195 msgid "Teleporter" msgstr "Teleport" -#: src/cavedb.c:191 +#: src/cavedb.c:196 src/cavedb.c:632 msgid "Skeleton" msgstr "Csontváz" -#: src/cavedb.c:192 src/cavedb.c:535 src/cavedb.c:614 +#: src/cavedb.c:197 src/cavedb.c:561 src/cavedb.c:622 msgid "Water" msgstr "Víz" -#: src/cavedb.c:193 +#: src/cavedb.c:198 msgid "Water (1)" msgstr "Víz (1)" -#: src/cavedb.c:194 +#: src/cavedb.c:199 msgid "Water (2)" msgstr "VĂ­z¡(2)" -#: src/cavedb.c:195 +#: src/cavedb.c:200 msgid "Water (3)" msgstr "Víz (3)" -#: src/cavedb.c:196 +#: src/cavedb.c:201 msgid "Water (4)" msgstr "Víz (4)" -#: src/cavedb.c:197 +#: src/cavedb.c:202 msgid "Water (5)" msgstr "Víz (5)" -#: src/cavedb.c:198 +#: src/cavedb.c:203 msgid "Water (6)" msgstr "Víz (6)" -#: src/cavedb.c:199 +#: src/cavedb.c:204 msgid "Water (7)" msgstr "Víz (7)" -#: src/cavedb.c:200 +#: src/cavedb.c:205 msgid "Water (8)" msgstr "Víz (8)" -#: src/cavedb.c:201 +#: src/cavedb.c:206 msgid "Water (9)" msgstr "Víz (9)" -#: src/cavedb.c:202 +#: src/cavedb.c:207 msgid "Water (10)" msgstr "Víz (10)" -#: src/cavedb.c:203 +#: src/cavedb.c:208 msgid "Water (11)" msgstr "Víz (11)" -#: src/cavedb.c:204 +#: src/cavedb.c:209 msgid "Water (12)" msgstr "Víz (12)" -#: src/cavedb.c:205 +#: src/cavedb.c:210 msgid "Water (13)" msgstr "Víz (13)" -#: src/cavedb.c:206 +#: src/cavedb.c:211 msgid "Water (14)" msgstr "Víz (14)" -#: src/cavedb.c:207 +#: src/cavedb.c:212 msgid "Water (15)" msgstr "Víz (15)" -#: src/cavedb.c:208 +#: src/cavedb.c:213 msgid "Water (16)" msgstr "Víz (16)" -#: src/cavedb.c:209 +#: src/cavedb.c:214 msgid "Cow (left)" msgstr "Tehén (bal)" -#: src/cavedb.c:210 +#: src/cavedb.c:215 msgid "Cow (up)" msgstr "Tehén (fel)" -#: src/cavedb.c:211 +#: src/cavedb.c:216 msgid "Cow (right)" msgstr "Tehén (jobb)" -#: src/cavedb.c:212 +#: src/cavedb.c:217 msgid "Cow (down)" msgstr "Tehén (le)" -#: src/cavedb.c:213 +#: src/cavedb.c:218 msgid "Cow (enclosed, 1)" msgstr "Tehén (bezárt, 1)" -#: src/cavedb.c:214 +#: src/cavedb.c:219 msgid "Cow (enclosed, 2)" msgstr "Tehén·(bezárt,·2)" -#: src/cavedb.c:215 +#: src/cavedb.c:220 msgid "Cow (enclosed, 3)" msgstr "Tehén·(bezárt,·3)" -#: src/cavedb.c:216 +#: src/cavedb.c:221 msgid "Cow (enclosed, 4)" msgstr "Tehén·(bezárt,·4)" -#: src/cavedb.c:217 +#: src/cavedb.c:222 msgid "Cow (enclosed, 5)" msgstr "Tehén·(bezárt,·5)" -#: src/cavedb.c:218 +#: src/cavedb.c:223 msgid "Cow (enclosed, 6)" msgstr "Tehén·(bezárt,·6)" -#: src/cavedb.c:219 +#: src/cavedb.c:224 msgid "Cow (enclosed, 7)" msgstr "Tehén·(bezárt,·7)" -#: src/cavedb.c:220 +#: src/cavedb.c:225 msgid "Walled diamond" msgstr "Befalazott gyémánt" -#: src/cavedb.c:221 +#: src/cavedb.c:226 msgid "Walled key 1" msgstr "Befalazott 1. kulcs" -#: src/cavedb.c:222 +#: src/cavedb.c:227 msgid "Walled key 2" msgstr "Befalazott 2. kulcs" -#: src/cavedb.c:223 +#: src/cavedb.c:228 msgid "Walled key 3" msgstr "Befalazott 3. kulcs" -#: src/cavedb.c:225 src/cavedb.c:486 src/cavedb.c:490 src/cavedb.c:606 +#: src/cavedb.c:230 src/cavedb.c:485 src/cavedb.c:489 src/cavedb.c:614 msgid "Amoeba" msgstr "Amőba" -#: src/cavedb.c:226 src/cavedb.c:497 +#: src/cavedb.c:231 src/cavedb.c:496 msgid "Amoeba 2" msgstr "Amőba 2" -#: src/cavedb.c:227 src/cavedb.c:558 src/cavedb.c:610 -#, fuzzy +#: src/cavedb.c:232 src/cavedb.c:553 src/cavedb.c:618 msgid "Replicator" -msgstr "Visszajátszás" +msgstr "Klónozó" -#: src/cavedb.c:228 -#, fuzzy +#: src/cavedb.c:233 msgid "Conveyor belt (left)" -msgstr "Tehén (bal)" +msgstr "Futószalag (bal)" -#: src/cavedb.c:229 -#, fuzzy +#: src/cavedb.c:234 msgid "Conveyor belt (right)" -msgstr "Tehén (jobb)" +msgstr "Futószalag (jobb)" -#: src/cavedb.c:230 src/cavedb.c:609 +#: src/cavedb.c:235 src/cavedb.c:617 msgid "Lava" -msgstr "" +msgstr "Láva" -#: src/cavedb.c:231 src/cavedb.c:467 +#: src/cavedb.c:236 src/cavedb.c:466 msgid "Sweet" msgstr "Cukorka" -#: src/cavedb.c:232 +#: src/cavedb.c:237 msgid "Voodoo doll" msgstr "Voodoo" -#: src/cavedb.c:233 src/cavedb.c:521 src/cavedb.c:608 +#: src/cavedb.c:238 src/cavedb.c:522 src/cavedb.c:616 msgid "Slime" msgstr "Iszap" -#: src/cavedb.c:234 src/cavedb.c:550 src/cavedb.c:613 +#: src/cavedb.c:239 src/cavedb.c:547 src/cavedb.c:621 msgid "Bladder" msgstr "Buborék" -#: src/cavedb.c:235 +#: src/cavedb.c:240 msgid "Bladder (1)" msgstr "Buborék (1)" -#: src/cavedb.c:236 +#: src/cavedb.c:241 msgid "Bladder (2)" msgstr "Buborék (2)" -#: src/cavedb.c:237 +#: src/cavedb.c:242 msgid "Bladder (3)" msgstr "Buborék (3)" -#: src/cavedb.c:238 +#: src/cavedb.c:243 msgid "Bladder (4)" msgstr "Buborék (4)" -#: src/cavedb.c:239 +#: src/cavedb.c:244 msgid "Bladder (5)" msgstr "Buborék (5)" -#: src/cavedb.c:240 +#: src/cavedb.c:245 msgid "Bladder (6)" msgstr "Buborék (6)" -#: src/cavedb.c:241 +#: src/cavedb.c:246 msgid "Bladder (7)" msgstr "Buborék (7)" -#: src/cavedb.c:242 +#: src/cavedb.c:247 msgid "Bladder (8)" msgstr "Buborék (8)" -#: src/cavedb.c:244 +#: src/cavedb.c:249 msgid "Waiting stone" msgstr "Alvó kő" -#: src/cavedb.c:245 +#: src/cavedb.c:250 msgid "Chasing stone" msgstr "Üldöző kő" -#: src/cavedb.c:246 +#: src/cavedb.c:251 msgid "Ghost" msgstr "Szellem" -#: src/cavedb.c:247 +#: src/cavedb.c:252 msgid "Guard, left" msgstr "Szörny (balra)" -#: src/cavedb.c:248 +#: src/cavedb.c:253 msgid "Guard, up" msgstr "Szörny (fel)" -#: src/cavedb.c:249 +#: src/cavedb.c:254 msgid "Guard, right" msgstr "Szörny (jobbra)" -#: src/cavedb.c:250 +#: src/cavedb.c:255 msgid "Guard, down" msgstr "Szörny (le)" -#: src/cavedb.c:251 +#: src/cavedb.c:256 msgid "Alternative guard, left" msgstr "Alternatív·szörny, balra" -#: src/cavedb.c:252 +#: src/cavedb.c:257 msgid "Alternative guard, up" msgstr "Alternatív·szörny, jobbra" -#: src/cavedb.c:253 +#: src/cavedb.c:258 msgid "Alternative guard, right" msgstr "Alternatív szörny (jobbra)" -#: src/cavedb.c:254 +#: src/cavedb.c:259 msgid "Alternative guard, down" msgstr "Alternatív szörny, le" -#: src/cavedb.c:255 +#: src/cavedb.c:260 msgid "Butterfly, left" msgstr "Pillangó (balra)" -#: src/cavedb.c:256 +#: src/cavedb.c:261 msgid "Butterfly, up" msgstr "Pillangó (fel)" -#: src/cavedb.c:257 +#: src/cavedb.c:262 msgid "Butterfly, right" msgstr "Pillangó (jobbra)" -#: src/cavedb.c:258 +#: src/cavedb.c:263 msgid "Butterfly, down" msgstr "Pillangó (le)" -#: src/cavedb.c:259 +#: src/cavedb.c:264 msgid "Alternative butterfly, left" msgstr "Alternatív pillangó (balra)" -#: src/cavedb.c:260 +#: src/cavedb.c:265 msgid "Alternative butterfly, up" msgstr "Alternatív pillangó (fel)" -#: src/cavedb.c:261 +#: src/cavedb.c:266 msgid "Alternative butterfly, right" msgstr "Alternatív pillangó (jobbra)" -#: src/cavedb.c:262 +#: src/cavedb.c:267 msgid "Alternative butterfly, down" msgstr "Alternatív pillangó (le)" -#: src/cavedb.c:263 +#: src/cavedb.c:268 msgid "Stonefly, left" msgstr "Molylepke (balra)" -#: src/cavedb.c:264 +#: src/cavedb.c:269 msgid "Stonefly, up" msgstr "Molylepke (fel)" -#: src/cavedb.c:265 +#: src/cavedb.c:270 msgid "Stonefly, right" msgstr "Molylepke (jobbra)" -#: src/cavedb.c:266 +#: src/cavedb.c:271 msgid "Stonefly, down" msgstr "Molylepke (le)" -#: src/cavedb.c:267 +#: src/cavedb.c:272 msgid "Biter, up" msgstr "Zabáló (fel)" -#: src/cavedb.c:268 +#: src/cavedb.c:273 msgid "Biter, right" msgstr "Zabáló (jobbra)" -#: src/cavedb.c:269 +#: src/cavedb.c:274 msgid "Biter, down" msgstr "Zabáló (le)" -#: src/cavedb.c:270 +#: src/cavedb.c:275 msgid "Biter, left" msgstr "Zabáló (balra)" -#: src/cavedb.c:271 -#, fuzzy +#: src/cavedb.c:276 msgid "Dragonfly, left" -msgstr "Molylepke (balra)" +msgstr "Szitakötő (balra)" -#: src/cavedb.c:272 -#, fuzzy +#: src/cavedb.c:277 msgid "Dragonfly, up" -msgstr "Molylepke (fel)" +msgstr "Szitakötő (fel)" -#: src/cavedb.c:273 -#, fuzzy +#: src/cavedb.c:278 msgid "Dragonfly, right" -msgstr "Molylepke (jobbra)" +msgstr "Szitakötő (jobbra)" -#: src/cavedb.c:274 -#, fuzzy +#: src/cavedb.c:279 msgid "Dragonfly, down" -msgstr "Molylepke (le)" +msgstr "Szitakötő (le)" -#: src/cavedb.c:276 +#: src/cavedb.c:281 msgid "Player birth (1)" msgstr "Játékos születés (1)" -#: src/cavedb.c:277 +#: src/cavedb.c:282 msgid "Player birth (2)" msgstr "Játékos születés (2)" -#: src/cavedb.c:278 +#: src/cavedb.c:283 msgid "Player birth (3)" msgstr "Játékos születés (3)" -#: src/cavedb.c:279 src/cavedb.c:460 +#: src/cavedb.c:284 src/cavedb.c:459 msgid "Player" msgstr "Játékos" -#: src/cavedb.c:280 +#: src/cavedb.c:285 msgid "Player with bomb" msgstr "Játékos bombával" -#: src/cavedb.c:281 +#: src/cavedb.c:286 msgid "Glued player" msgstr "Ragasztott játékos" -#: src/cavedb.c:282 +#: src/cavedb.c:287 msgid "Player stirring" msgstr "Keverő játékos" -#: src/cavedb.c:284 +#: src/cavedb.c:289 msgid "Bomb" msgstr "Bomba" -#: src/cavedb.c:285 +#: src/cavedb.c:290 msgid "Ticking bomb (1)" msgstr "Robbanó bomba (1)" -#: src/cavedb.c:286 +#: src/cavedb.c:291 msgid "Ticking bomb (2)" msgstr "Robbanó bomba (2)" -#: src/cavedb.c:287 +#: src/cavedb.c:292 msgid "Ticking bomb (3)" msgstr "Robbanó bomba (3)" -#: src/cavedb.c:288 +#: src/cavedb.c:293 msgid "Ticking bomb (4)" msgstr "Robbanó bomba (4)" -#: src/cavedb.c:289 +#: src/cavedb.c:294 msgid "Ticking bomb (5)" msgstr "Robbanó bomba (5)" -#: src/cavedb.c:290 +#: src/cavedb.c:295 msgid "Ticking bomb (6)" msgstr "Robbanó bomba (6)" -#: src/cavedb.c:291 +#: src/cavedb.c:296 msgid "Ticking bomb (7)" msgstr "Robbanó bomba (7)" -#: src/cavedb.c:293 src/cavedb.c:603 +#: src/cavedb.c:298 src/cavedb.c:611 msgid "Nitro pack" msgstr "Nitró töltet" -#: src/cavedb.c:294 +#: src/cavedb.c:299 msgid "Nitro pack, falling" msgstr "Nitró töltet, zuhan" -#: src/cavedb.c:295 +#: src/cavedb.c:300 msgid "Nitro pack, triggered" msgstr "Nitró töltet, éles" -#: src/cavedb.c:297 +#: src/cavedb.c:302 msgid "Clock birth (1)" msgstr "Óra születés (1)" -#: src/cavedb.c:298 +#: src/cavedb.c:303 msgid "Clock birth (2)" msgstr "Óra születés (2)" -#: src/cavedb.c:299 +#: src/cavedb.c:304 msgid "Clock birth (3)" msgstr "Óra születés (3)" -#: src/cavedb.c:300 +#: src/cavedb.c:305 msgid "Clock birth (4)" msgstr "Óra születés (4)" -#: src/cavedb.c:301 +#: src/cavedb.c:306 msgid "Diamond birth (1)" msgstr "Gyémánt születés (1)" -#: src/cavedb.c:302 +#: src/cavedb.c:307 msgid "Diamond birth (2)" msgstr "Gyémánt születés (2)" -#: src/cavedb.c:303 +#: src/cavedb.c:308 msgid "Diamond birth (3)" msgstr "Gyémánt születés (3)" -#: src/cavedb.c:304 +#: src/cavedb.c:309 msgid "Diamond birth (4)" msgstr "Gyémánt születés (4)" -#: src/cavedb.c:305 +#: src/cavedb.c:310 msgid "Diamond birth (5)" msgstr "Gyémánt születés (5)" -#: src/cavedb.c:306 +#: src/cavedb.c:311 msgid "Explosion (1)" msgstr "Robbanás (1)" -#: src/cavedb.c:307 +#: src/cavedb.c:312 msgid "Explosion (2)" msgstr "Robbanás (2)" -#: src/cavedb.c:308 +#: src/cavedb.c:313 msgid "Explosion (3)" msgstr "Robbanás (3)" -#: src/cavedb.c:309 +#: src/cavedb.c:314 msgid "Explosion (4)" msgstr "Robbanás (4)" -#: src/cavedb.c:310 +#: src/cavedb.c:315 msgid "Explosion (5)" msgstr "Robbanás (5)" -#: src/cavedb.c:311 +#: src/cavedb.c:316 msgid "Stone birth (1)" msgstr "Kő születés (1)" -#: src/cavedb.c:312 +#: src/cavedb.c:317 msgid "Stone birth (2)" msgstr "Kő születés (2)" -#: src/cavedb.c:313 +#: src/cavedb.c:318 msgid "Stone birth (3)" msgstr "Kő születés (3)" -#: src/cavedb.c:314 +#: src/cavedb.c:319 msgid "Stone birth (4)" msgstr "Kő születés (4)" -#: src/cavedb.c:315 +#: src/cavedb.c:320 msgid "Steel birth (1)" msgstr "Törhetetlen fal születés (1)" -#: src/cavedb.c:316 +#: src/cavedb.c:321 msgid "Steel birth (2)" msgstr "Törhetetlen fal születés (2)" -#: src/cavedb.c:317 +#: src/cavedb.c:322 msgid "Steel birth (3)" msgstr "Törhetetlen fal születés (3)" -#: src/cavedb.c:318 +#: src/cavedb.c:323 msgid "Steel birth (4)" msgstr "Törhetetlen fal születés (4)" -#: src/cavedb.c:319 +#: src/cavedb.c:324 msgid "Ghost explosion (1)" msgstr "Szellem robbanás (1)" -#: src/cavedb.c:320 +#: src/cavedb.c:325 msgid "Ghost explosion (2)" msgstr "Szellem robbanás (2)" -#: src/cavedb.c:321 +#: src/cavedb.c:326 msgid "Ghost explosion (3)" msgstr "Szellem robbanás (3)" -#: src/cavedb.c:322 +#: src/cavedb.c:327 msgid "Ghost explosion (4)" msgstr "Szellem robbanás (4)" -#: src/cavedb.c:323 +#: src/cavedb.c:328 msgid "Bomb explosion (1)" msgstr "Bomba robbanás (1)" -#: src/cavedb.c:324 +#: src/cavedb.c:329 msgid "Bomb explosion (2)" msgstr "Bomba robbanás (2)" -#: src/cavedb.c:325 +#: src/cavedb.c:330 msgid "Bomb explosion (3)" msgstr "Bomba robbanás (3)" -#: src/cavedb.c:326 +#: src/cavedb.c:331 msgid "Bomb explosion (4)" msgstr "Bomba robbanás (4)" -#: src/cavedb.c:327 +#: src/cavedb.c:332 msgid "Nitro pack explosion (1)" msgstr "Nitró töltet robbanás (1)" -#: src/cavedb.c:328 +#: src/cavedb.c:333 msgid "Nitro pack explosion (2)" msgstr "Nitró töltet robbanás (2)" -#: src/cavedb.c:329 +#: src/cavedb.c:334 msgid "Nitro pack explosion (3)" msgstr "Nitró töltet robbanás (3)" -#: src/cavedb.c:330 +#: src/cavedb.c:335 msgid "Nitro pack explosion (4)" msgstr "Nitró töltet robbanás (4)" -#: src/cavedb.c:331 +#: src/cavedb.c:336 msgid "Amoeba 2 explosion (1)" msgstr "Amőba 2 robbanás (1)" -#: src/cavedb.c:332 +#: src/cavedb.c:337 msgid "Amoeba 2 explosion (2)" msgstr "Amőba 2 robbanás (2)" -#: src/cavedb.c:333 +#: src/cavedb.c:338 msgid "Amoeba 2 explosion (3)" msgstr "Amőba 2 robbanás (3)" -#: src/cavedb.c:334 +#: src/cavedb.c:339 msgid "Amoeba 2 explosion (4)" msgstr "Amőba 2 robbanás (4)" -#: src/cavedb.c:335 -#, fuzzy -msgid "Dragonfly explosion (1)" -msgstr "Bomba robbanás (1)" - -#: src/cavedb.c:336 -#, fuzzy -msgid "Dragonfly explosion (2)" -msgstr "Bomba robbanás (2)" - -#: src/cavedb.c:337 -#, fuzzy -msgid "Dragonfly explosion (3)" -msgstr "Bomba robbanás (3)" - -#: src/cavedb.c:338 -#, fuzzy -msgid "Dragonfly explosion (4)" -msgstr "Bomba robbanás (4)" - -#: src/cavedb.c:339 -#, fuzzy -msgid "Dragonfly explosion (5)" -msgstr "Bomba robbanás (1)" - #: src/cavedb.c:346 msgid "Unknown element" msgstr "Ismeretlen elem" @@ -1086,7 +1060,7 @@ msgstr "Nincs elem" msgid "Cave data" msgstr "Pálya adatai" -#: src/cavedb.c:393 src/caveset.c:56 src/gtkmain.c:1694 src/gtkui.c:996 +#: src/cavedb.c:393 src/caveset.c:56 src/gtkmain.c:1698 src/gtkui.c:998 msgid "Name" msgstr "Név" @@ -1094,7 +1068,8 @@ msgstr "Név" msgid "Name of game" msgstr "A játék neve" -#: src/cavedb.c:394 src/caveset.c:57 src/editorexport.c:550 +#: src/cavedb.c:394 src/caveset.c:57 src/editorexport.c:528 +#: src/editorexport.c:600 msgid "Description" msgstr "Leírás" @@ -1102,7 +1077,8 @@ msgstr "Leírás" msgid "Some words about the game" msgstr "Néhány szó a játékról" -#: src/cavedb.c:395 src/caveset.c:58 src/editorexport.c:548 +#: src/cavedb.c:395 src/caveset.c:58 src/editorexport.c:526 +#: src/editorexport.c:598 msgid "Author" msgstr "Szerző" @@ -1110,7 +1086,7 @@ msgstr "Szerző" msgid "Name of author" msgstr "Szerző neve" -#: src/cavedb.c:396 src/caveset.c:59 src/gtkmain.c:1703 +#: src/cavedb.c:396 src/caveset.c:59 src/gtkmain.c:1707 msgid "Date" msgstr "Dátum" @@ -1118,7 +1094,7 @@ msgstr "Dátum" msgid "Date of creation" msgstr "Létrehozás időpontja" -#: src/cavedb.c:397 src/caveset.c:60 +#: src/cavedb.c:397 src/caveset.c:60 src/editorexport.c:530 msgid "WWW" msgstr "WWW" @@ -1134,7 +1110,7 @@ msgstr "Nehézség" msgid "Difficulty (informative)" msgstr "Nehézség (informatív)" -#: src/cavedb.c:400 src/editorexport.c:574 +#: src/cavedb.c:400 src/editorexport.c:632 msgid "Selectable as start" msgstr "Kezdéskor kiválasztható" @@ -1142,7 +1118,7 @@ msgstr "Kezdéskor kiválasztható" msgid "This sets whether the game can be started at this cave." msgstr "Azt jelzi, hogy a játékot lehet-e ezen a pályán kezdeni." -#: src/cavedb.c:401 src/editorexport.c:573 src/gtkmain.c:1801 +#: src/cavedb.c:401 src/editorexport.c:631 src/gtkmain.c:1805 msgid "Intermission" msgstr "Jutalom pálya" @@ -1237,7 +1213,8 @@ msgstr "Betűkészlet" msgid "Font used during the game. Not used by GDash." msgstr "A játék közben használt betűkészlet. Nem használja a GDash." -#: src/cavedb.c:414 src/caveset.c:67 src/editorexport.c:570 +#: src/cavedb.c:414 src/caveset.c:67 src/editorexport.c:534 +#: src/editorexport.c:628 msgid "Story" msgstr "Történet" @@ -1247,7 +1224,8 @@ msgstr "" "A pályához tartozó történet. A program mutatni fogja, amikor az adott " "pályához ér a felhasználó." -#: src/cavedb.c:417 src/caveset.c:68 src/editorexport.c:559 +#: src/cavedb.c:417 src/caveset.c:68 src/editorexport.c:532 +#: src/editorexport.c:613 msgid "Remark" msgstr "Megjegyzés" @@ -1329,7 +1307,7 @@ msgstr "C64 színek esetén az iszap színe" msgid "Diamonds" msgstr "Gyémántok" -#: src/cavedb.c:431 src/editorexport.c:575 +#: src/cavedb.c:431 src/editorexport.c:633 msgid "Diamonds needed" msgstr "Gyűjtendő gyémántok" @@ -1363,7 +1341,7 @@ msgstr "Ennyi pont jár gyémántonként, a kapu nyitása után." msgid "Time" msgstr "Idő" -#: src/cavedb.c:435 src/editorexport.c:578 +#: src/cavedb.c:435 src/editorexport.c:636 msgid "Time (s)" msgstr "Idő (mp)" @@ -1418,42 +1396,23 @@ msgstr "PAL időzítés" #: src/cavedb.c:439 msgid "" "On the PAL version of the C64 computer, the timer was actually slower than " -"normal seconds. This flag is used to compensate for this. Most original " -"games are authored for the PAL version." +"normal seconds. This flag is used to compensate for this. If enabled, one " +"game second will last 1.2 real seconds. Most original games were authored " +"for the PAL version. This is a compatibility setting for imported caves; it " +"is not recommended to enable it for newly authored ones." msgstr "" "A C64 számítógép PAL verziójánál az időzítő lassabb volt, mint az igazi " -"másodpercek. Ez a beállítás használható, hogy ezt kompenzálja. A legtöbb " -"eredeti pályát PAL rendszerű számítógéphez rajzolták." - -#: src/cavedb.c:441 -msgid " Delay (c64-style)" -msgstr " Késleltetés (C64-szerű)" - -#: src/cavedb.c:441 -msgid "" -"The length of the delay loop between game frames. Used when milliseconds-" -"based timing is inactive, ie. C64 scheduling is on." -msgstr "" -"A játék mozgásai között eltelt várakozási idő. Ezt akkor használja a " -"program, C64 alapú időzítés van, vagyis nem ezredmásodpercek szerinti." - -#: src/cavedb.c:442 -msgid " Hatching time (seconds)" -msgstr " Születési idő (másodperc)" - -#: src/cavedb.c:442 -msgid "" -"This value sets how much the cave will move until the player enters the " -"cave. This is used for the C64-like schedulings." -msgstr "" -"A kezdeti pálya mozgások száma, mielőtt a játékos megszületik. Ezt a C64-" -"szerű ütemezéseknél használja a program." +"másodpercek. Ez a beállítás arra használható, hogy ezt kompenzálja. Ha " +"engedélyezve van, egy másodperc a játékban igazából 1,2 másodpercig fog " +"tartani. A legtöbb eredeti pályát PAL rendszerű számítógéphez rajzolták. Ez " +"egy kompatibilitási beállítás az importált pályákhoz; nem ajánlott " +"megváltoztatni az újonnan tervezettekhez." -#: src/cavedb.c:443 +#: src/cavedb.c:440 msgid " Speed (ms)" msgstr " Sebesség (ezred mp)" -#: src/cavedb.c:443 +#: src/cavedb.c:440 msgid "" "Number of milliseconds between game frames. Used when milliseconds-based " "timing is active, ie. C64 scheduling is off." @@ -1462,48 +1421,63 @@ msgstr "" "az ezredmásodperc alapú időzítés aktív, vagyis a C64 időzítés ki van " "kapcsolva." -#: src/cavedb.c:444 +#: src/cavedb.c:441 msgid " Hatching delay (frames)" msgstr " Születés késleltetése (képkocka)" -#: src/cavedb.c:444 +#: src/cavedb.c:441 msgid "" "This value sets how much the cave will move until the player enters the " -"cave. This is used for the milliseconds-based scheduling." +"cave, and is expressed in frames. This is used for the milliseconds-based " +"scheduling." msgstr "" -"A kezdeti pálya mozgások száma, mielőtt a játékos megszületik. Ezt az " -"ezredmásodperc alapú ütemezésnél használja a program." +"Ez az érték azt állítja be, a játék elején mennyi idő után jelenik meg a " +"játékos; pálya mozdulatok számában kifejezve. Ezt az ezredmásodperc alapú " +"ütemezésnél használja a program." -#: src/cavedb.c:447 -msgid "Random seed value" -msgstr "Véletlenszám kezdet" +#: src/cavedb.c:442 +msgid " Delay (C64-style)" +msgstr " Késleltetés (C64-szerű)" -#: src/cavedb.c:447 src/editor.c:1447 +#: src/cavedb.c:442 msgid "" -"Random seed value controls the predictable random number generator, which " -"fills the cave initially. If set to -1, cave is totally random every time it " -"is played." +"The length of the delay loop between game frames. Used when milliseconds-" +"based timing is inactive, ie. some kind of C64 or Atari scheduling is " +"selected." msgstr "" -"A véletlenszám kezdeti értéke a pálya kezdeti kitöltését szabályozza. Ha -1-" -"re állítod, a pálya minden egyes játszás alkalmával teljesen máshogy néz ki." +"A játék mozgásai között eltelt várakozási idő. Ezt akkor használja a " +"program, C64 vagy Atari alapú időzítést használ a pálya, vagyis nem az " +"ezredmásodpercek szerintit." -#: src/cavedb.c:462 +#: src/cavedb.c:443 +msgid " Hatching time (seconds)" +msgstr " Születési idő (másodperc)" + +#: src/cavedb.c:443 +msgid "" +"This value sets how much the cave will move until the player enters the " +"cave. This is used for the C64-like schedulings." +msgstr "" +"A kezdeti pálya mozgások száma, mielőtt a játékos megszületik. Ezt a C64-" +"szerű ütemezéseknél használja a program." + +#: src/cavedb.c:461 msgid "Player movements" msgstr "Játékos mozgása" -#: src/cavedb.c:463 +#: src/cavedb.c:462 msgid "Diagonal movements" msgstr "Átlós mozgások" -#: src/cavedb.c:463 +#: src/cavedb.c:462 msgid "Controls if the player can move diagonally." msgstr "Beállítja, hogy a játékos mozogat-e átlós (mind a nyolc) irányban." -#: src/cavedb.c:464 +#: src/cavedb.c:463 msgid "Uppermost player active" msgstr "Bal felső játékos aktív" -#: src/cavedb.c:464 +#: src/cavedb.c:463 msgid "" "In 1stB, cave is scrolled to the uppermost and leftmost player found, " "whereas in the original game to the last one. Chasing stones also follow the " @@ -1513,11 +1487,11 @@ msgstr "" "míg az eredeti játékban a legutolsó megtalálthoz. Az üldöző kövek is az " "aktív játékos után rohannak." -#: src/cavedb.c:465 +#: src/cavedb.c:464 msgid "Snap element" msgstr "Lopott elem helyett" -#: src/cavedb.c:465 +#: src/cavedb.c:464 msgid "" "Snapping (pressing fire while moving) usually creates space, but it can " "create any other element." @@ -1525,11 +1499,11 @@ msgstr "" "Az elemek elcsenése (tűzgomb mozgás közben) általában üres helyet " "eredményez, de bármilyen más elemet is létrehozhat." -#: src/cavedb.c:466 src/cavedb.c:468 +#: src/cavedb.c:465 src/cavedb.c:467 msgid "Probability of pushing (%)" msgstr "Tolás valószínűsége (%)" -#: src/cavedb.c:466 +#: src/cavedb.c:465 msgid "" "Chance of player managing to push a stone, every game cycle he tries. This " "is the normal probability." @@ -1537,7 +1511,7 @@ msgstr "" "Annak esélye játék ciklusonként, hogy a játékos el tudja tolni a követ. Ez a " "normál valószínűség." -#: src/cavedb.c:468 +#: src/cavedb.c:467 msgid "" "Chance of player managing to push a stone, every game cycle he tries. This " "is used after eating sweet." @@ -1545,19 +1519,19 @@ msgstr "" "Annak esélye játék ciklusonként, hogy a játékos el tudja tolni a követ. Ez a " "cukorka evés utáni valószínűség." -#: src/cavedb.c:469 +#: src/cavedb.c:468 msgid "Mega stones pushable" msgstr "Nehéz kövek tolhatóak" -#: src/cavedb.c:469 +#: src/cavedb.c:468 msgid "If it is true, mega stones can be pushed after eating sweet." msgstr "Ha ez igaz, a nehéz köveket is el lehet tolni, miután a cukorkát " -#: src/cavedb.c:472 +#: src/cavedb.c:471 msgid "Time for hammer (frames)" msgstr "Idő a kalapácshoz (képkocka)" -#: src/cavedb.c:472 +#: src/cavedb.c:471 msgid "" "This is the number of game frames, a pneumatic hammer is required to break a " "wall." @@ -1565,11 +1539,11 @@ msgstr "" "A játékbeli képkockák száma, amennyi idő szükséges a légkalapácsnak egy fal " "széttöréséhez." -#: src/cavedb.c:473 +#: src/cavedb.c:472 msgid "Hammered walls reappear" msgstr "Szétrombolt falak megjelennek" -#: src/cavedb.c:473 +#: src/cavedb.c:472 msgid "" "If this is set to true, walls broken with a pneumatic hammer will reappear " "later." @@ -1577,11 +1551,11 @@ msgstr "" "Ha ez igazra van állítva, a légkalapáccsal széttört falak újra meg fognak " "jelenni." -#: src/cavedb.c:474 +#: src/cavedb.c:473 msgid " Timer for reappear (frames)" msgstr " Újra megjelenés ideje (képkocka)" -#: src/cavedb.c:474 +#: src/cavedb.c:473 msgid "" "This sets the number of game frames, after hammered walls reappear, when the " "above setting is true." @@ -1589,33 +1563,33 @@ msgstr "" "Ez a képkockák számát állítja be, amennyi idő után a légkalapáccsal feltört " "falak újra megjelennek, ha a fenti beállítás engedélyezve van." -#: src/cavedb.c:477 +#: src/cavedb.c:476 msgid "Time bonus (s)" msgstr "Plusz idő (mp)" -#: src/cavedb.c:477 +#: src/cavedb.c:476 msgid "Bonus time when a clock is collected." msgstr "Az óra összegyűjtésekor járó plusz idő." -#: src/cavedb.c:479 +#: src/cavedb.c:478 msgid "Voodoo Doll" msgstr "Voodoo" -#: src/cavedb.c:480 +#: src/cavedb.c:479 msgid "Can collect diamonds" msgstr "Gyémántokat gyűjt" -#: src/cavedb.c:480 +#: src/cavedb.c:479 msgid "Controls if a voodoo doll can collect diamonds for the player." msgstr "" "Azt állítja, hogy a voodoo össze tudja-e gyűjteni a feje fölé eső " "gyémántokat." -#: src/cavedb.c:481 +#: src/cavedb.c:480 msgid "Can be destroyed by explosion" msgstr "Robbanás által elpusztítható" -#: src/cavedb.c:481 +#: src/cavedb.c:480 msgid "" "Controls if the voodoo can be destroyed by an explosion nearby. If not, it " "is converted to a gravestone, and you get a time penalty." @@ -1623,11 +1597,11 @@ msgstr "" "Azt állítja, hogy a voodoo eltűnik-e egy szomszédos robbanás hatására. Ha " "igen, akkor sírkő lesz belőle, és idő levonás jár." -#: src/cavedb.c:482 +#: src/cavedb.c:481 msgid "Dies if hit by a stone" msgstr "Kővel fejbevágható" -#: src/cavedb.c:482 +#: src/cavedb.c:481 msgid "" "Controls if the voodoo doll dies if it is hit by a stone. Then the player " "gets a time penalty." @@ -1635,117 +1609,126 @@ msgstr "" "Azt állítja, hogy a voodoo felrobban-e, ha fejbe vágja egy kő. Ha igen, idő " "levonás jár." -#: src/cavedb.c:483 +#: src/cavedb.c:482 msgid "Time penalty (s)" msgstr "Idő levonás (mp)" -#: src/cavedb.c:483 +#: src/cavedb.c:482 msgid "Penalty time when the voodoo is destroyed by a stone." msgstr "Idő levonás, ha a voodoo figurát eltalálja egy kő." -#: src/cavedb.c:487 src/cavedb.c:518 -msgid "Timer waits for hatching" -msgstr "Az időzítő megvárja a játékos születését" - -#: src/cavedb.c:487 -msgid "" -"This determines if the amoeba timer starts before the player appearing. " -"Amoeba can always be activated before that; but if this is set to true, the " -"timer will not start." -msgstr "" -"Ez azt állítja, hogy az amőba időzítő elindul-e, mielőtt a játékos " -"megjelenik. Az amőba bármikor aktiválható az előtt is; de ha ez az érték " -"igaz, a számláló nem indul el." - -#: src/cavedb.c:488 +#: src/cavedb.c:486 msgid "Timer started immediately" msgstr "Időzítő rögtön indul" -#: src/cavedb.c:488 +#: src/cavedb.c:486 msgid "" "If this flag is enabled, the amoeba slow growth timer will start at the " -"beginning of the cave, regardless of the amoeba being let free or not." +"beginning of the cave, regardless of the amoeba being let free or not. This " +"can make a big difference when playing the cave!" msgstr "" "Ha ez a változó engedélyezve van, az amőba lassú növekedés időzítője a pálya " -"elején elindul, függetlenül attól, hogy az amőba épp tud-e nőni vagy nem." +"elején elindul, függetlenül attól, hogy az amőba épp tud-e nőni vagy nem. Ez " +"nagy különbséget jelenthet játék közben!" -#: src/cavedb.c:491 src/cavedb.c:498 +#: src/cavedb.c:487 src/cavedb.c:511 +msgid "Timer waits for hatching" +msgstr "Az időzítő megvárja a játékos születését" + +#: src/cavedb.c:487 +msgid "" +"This determines if the amoeba timer starts before the player appearing. " +"Amoeba can always be activated before that; but if this is set to true, the " +"timer will not start. This setting is for compatiblity for some old imported " +"caves. As the player is usually born within a few seconds, changing this " +"setting makes not much difference. It is not advised to change it, set the " +"slow growth time to fit your needs instead." +msgstr "" +"Ez azt állítja be, hogy az amőba időzítő elindulhat-e, mielőtt a játékos " +"megjelenik. Az amőba azelőtt is bármikor elkezdhet nőni; de ha ez " +"engedélyezve van, az időzítője nem indul el. Ez a beállítás kompatibilitási " +"célokat szolgál néhány importált pályához. Mivel a játékos néhány másodperc " +"alatt megszületik, nagy különbséget nem jelent. Nem ajánlatos " +"megváltoztatni, inkább a lassú növekedés idejét állítsd be a megfelelő " +"értékre." + +#: src/cavedb.c:490 src/cavedb.c:497 msgid "Threshold (cells)" msgstr "Határ (cella)" -#: src/cavedb.c:491 src/cavedb.c:498 +#: src/cavedb.c:490 src/cavedb.c:497 msgid "" "If the amoeba grows more than this fraction of the cave, it is considered " -"too big." +"too big and it converts to the element specified below." msgstr "" "Ha az amőba nagyobbra nőtt, mint a pályának ekkora darabja, akkor túl " -"nagynak számít." +"nagynak számít, és az alább megadott karakterré változik." -#: src/cavedb.c:492 src/cavedb.c:499 +#: src/cavedb.c:491 src/cavedb.c:498 msgid "Slow growth time (s)" msgstr "Lassú növekedés (mp)" -#: src/cavedb.c:492 src/cavedb.c:499 +#: src/cavedb.c:491 src/cavedb.c:498 msgid "After this time, amoeba will grow very quickly." msgstr "Ennyi idő után az amőba nagyon gyorsan fog nőni." -#: src/cavedb.c:493 src/cavedb.c:500 +#: src/cavedb.c:492 src/cavedb.c:499 msgid "Growth ratio, slow (%)" msgstr "Növekedési ráta, lassú (%)" -#: src/cavedb.c:493 src/cavedb.c:500 +#: src/cavedb.c:492 src/cavedb.c:499 msgid "This sets the speed at which a slow amoeba grows." msgstr "Ez a szám a lassú és a gyors amőba növekedési sebességét állítják." -#: src/cavedb.c:494 src/cavedb.c:501 +#: src/cavedb.c:493 src/cavedb.c:500 msgid "Growth ratio, fast (%)" msgstr "Növekedési ráta, gyors (%)" -#: src/cavedb.c:494 src/cavedb.c:501 +#: src/cavedb.c:493 src/cavedb.c:500 msgid "This sets the speed at which a fast amoeba grows." msgstr "Ez a számok gyors amőba növekedési sebességét állítja." -#: src/cavedb.c:495 src/cavedb.c:504 +#: src/cavedb.c:494 src/cavedb.c:503 msgid "If too big, converts to" msgstr "Túl nagyra nőve ezzé válik" -#: src/cavedb.c:495 src/cavedb.c:504 +#: src/cavedb.c:494 src/cavedb.c:503 msgid "Controls which element an overgrown amoeba converts to." msgstr "Beállítja, hogy milyen elemmé változik az amőba, ha túl nagyra nőtt." -#: src/cavedb.c:496 src/cavedb.c:505 +#: src/cavedb.c:495 src/cavedb.c:504 msgid "If enclosed, converts to" msgstr "Bezárva ezzé változik" -#: src/cavedb.c:496 src/cavedb.c:505 +#: src/cavedb.c:495 src/cavedb.c:504 msgid "Controls which element an enclosed amoeba converts to." msgstr "" "Beállítja, hogy milyen elemmé változzon az amőba, ha nem tud tovább nőni." -#: src/cavedb.c:502 +#: src/cavedb.c:501 msgid "Explodes by amoeba" msgstr "Amőba miatt felrobban" -#: src/cavedb.c:502 +#: src/cavedb.c:501 msgid "" "If this setting is enabled, an amoeba 2 will explode if it is touched by a " "normal amoeba." msgstr "Ha ez engedélyezve van, a 2-es amőba felrobban a sima amőbát érintve." -#: src/cavedb.c:503 -msgid " Explodes to" -msgstr " Robbanásokból" +#: src/cavedb.c:502 +msgid " Explosion ends in" +msgstr " Robbanás ebben végződik" -#: src/cavedb.c:503 +#: src/cavedb.c:502 msgid "" "An amoeba 2 explodes to this element, when touched by the original amoeba." msgstr "Az amőba 2 ilyen elemmé robban fel, ha egy normál amőbához ér." -#: src/cavedb.c:506 +#: src/cavedb.c:505 msgid "Looks like" msgstr "Így néz ki" -#: src/cavedb.c:506 +#: src/cavedb.c:505 msgid "" "Amoeba 2 can look like any other element. Hint: it can also look like a " "normal amoeba. Or it can look like slime, and then you have two different " @@ -1754,83 +1737,117 @@ msgstr "" "A 2. amőba bármilyen más elemre hasonlíthat. Tipp: normál amőbaként is " "kinézhet. Vagy iszapként, és akkor két különböző színű amőba van!" -#: src/cavedb.c:509 -msgid "Active elements" -msgstr "Aktív elemek" - -#: src/cavedb.c:511 +#: src/cavedb.c:508 msgid "Magic Wall" msgstr "Varázsfal" -#: src/cavedb.c:512 +#: src/cavedb.c:509 +msgid "Timing" +msgstr "Időzítés" + +#: src/cavedb.c:510 msgid "Milling time (s)" msgstr "Idő (mp)" -#: src/cavedb.c:512 +#: src/cavedb.c:510 msgid "Magic wall will stop after this time, and it cannot be activated again." msgstr "A varázsfal ennyi idő után megáll, és nem lehet újra elindítani azt." -#: src/cavedb.c:513 -msgid "Converts diamond to" -msgstr "A gyémántokat ezzé változtatja" - -#: src/cavedb.c:513 +#: src/cavedb.c:511 msgid "" -"As a special effect, magic walls can convert diamonds to any other element." +"This determines if the magic wall timer starts before the player appearing. " +"Magic can always be activated before that; but if this is set to true, the " +"timer will not start." msgstr "" -"Speciális hatásként a varázsfal a gyémántokat más elemmé is alakíthatja." +"Ez azt állítja, hogy a varázsfal időzítője elindul-e, mielőtt a játékos " +"megszületik. Aktiválni bármelyik esetben lehet az előtt is; de ha ez igazra " +"van állítva, az időzítő nem fog elindulni." + +#: src/cavedb.c:512 +msgid "Stops amoeba" +msgstr "Az amőbát gyémánttá változtatja" + +#: src/cavedb.c:512 +msgid "When the magic wall is activated, it can convert amoeba into diamonds." +msgstr "Amikor a varázsfal elindul, az amőbát gyémánttá változtathatja." + +#: src/cavedb.c:513 +msgid "Conversions" +msgstr "Átalakítások" #: src/cavedb.c:514 -msgid "Converts stone to" -msgstr "A köveket ezzé változtatja" +msgid "Diamond to" +msgstr "Gyémántot" #: src/cavedb.c:514 msgid "" -"As a special effect, magic walls can convert stones to any other element." -msgstr "Speciális hatásként a varázsfal a követket más elemmé is alakíthatja." +"As a special effect, magic walls can convert diamonds to any other element." +msgstr "" +"Speciális hatásként a varázsfal a gyémántokat más elemmé is alakíthatja." #: src/cavedb.c:515 -#, fuzzy -msgid "Converts mega stone to" -msgstr "A köveket ezzé változtatja" +msgid "Stone to" +msgstr "Követ" #: src/cavedb.c:515 -msgid "If a mega stone falls into the magic wall, it will drop this element." -msgstr "" +msgid "" +"As a special effect, magic walls can convert stones to any other element." +msgstr "Speciális hatásként a varázsfal a követket más elemmé is alakíthatja." #: src/cavedb.c:516 -#, fuzzy -msgid "Converts nitro pack to" -msgstr "A köveket ezzé változtatja" +msgid "Mega stone to" +msgstr "Nehéz követ" #: src/cavedb.c:516 -msgid "" -"If a nitro pack falls into the magic wall, it will be turned to this element." -msgstr "" +msgid "If a mega stone falls into the magic wall, it will drop this element." +msgstr "Ha egy nehéz kő a varázsfalra esik, ilyen elem fog megjelenni alul." #: src/cavedb.c:517 -msgid "Stops amoeba" -msgstr "Az amőbát gyémánttá változtatja" +msgid "Nitro pack to" +msgstr "Nitró töltetet" #: src/cavedb.c:517 -msgid "When the magic wall is activated, it can convert amoeba into diamonds." -msgstr "Amikor a varázsfal elindul, az amőbát gyémánttá változtathatja." +msgid "" +"If a nitro pack falls into the magic wall, it will be turned to this element." +msgstr "Ha egy nitró töltet a varázsfalra esik, ilyen elemmé lesz alakítva." + +#: src/cavedb.c:518 +msgid "Flying stone to" +msgstr "Repülő követ" #: src/cavedb.c:518 msgid "" -"This determines if the magic wall timer starts before the player appearing. " -"Magic can always be activated before that; but if this is set to true, the " -"timer will not start." +"If a flying stone climbs up into the magic wall, it will be turned to this " +"element. Remember that flying stones enter the magic wall from its bottom, " +"not from the top!" msgstr "" -"Ez azt állítja, hogy a varázsfal időzítője elindul-e, mielőtt a játékos " -"megszületik. Aktiválni bármelyik esetben lehet az előtt is; de ha ez igazra " -"van állítva, az időzítő nem fog elindulni." +"Ha egy repülő kő felfelé megy egy varázsfalon keresztül, ilyen karakterré " +"fog változni. Figyelj arra, hogy a repülő kövek alulról mennek be a falba, " +"nem pedig felülről!" + +#: src/cavedb.c:519 +msgid "Flying diamonds to" +msgstr "Repülő gyémántot" + +#: src/cavedb.c:519 +msgid "" +"If a flying diamond enters the magic wall, it will be turned to this " +"element. Remember that flying diamonds enter the magic wall from its bottom, " +"not from the top!" +msgstr "" +"Ha egy repülő gyémánt átmegy a varázsfalon, ilyen elemmé fog változni. " +"Figyelj arra, hogy a repülő gyémántok alulról mennek be a falba, nem pedig " +"felülről!" -#: src/cavedb.c:522 +#: src/cavedb.c:523 +msgid "Permeability" +msgstr "Permeabilitás" + +#: src/cavedb.c:524 msgid "Predictable" msgstr "Előre megjósolható" -#: src/cavedb.c:522 +#: src/cavedb.c:524 msgid "" "Controls if the predictable random generator is used for slime. It is " "required for compatibility with some older caves." @@ -1838,11 +1855,11 @@ msgstr "" "Azt állítja be, hogy az iszapon az elemek előre megjósolhatóan jutnak-e át. " "Régi pályákkal való kompatibilitás miatt szerepel ez az opció." -#: src/cavedb.c:524 +#: src/cavedb.c:526 msgid "Permeability (unpredictable, %)" msgstr "Viszkozitás (megjósolhatatlan, %)" -#: src/cavedb.c:524 +#: src/cavedb.c:526 msgid "" "This controls the rate at which elements go through the slime. Higher values " "represent higher probability of passing. This one is for unpredictable slime." @@ -1851,11 +1868,11 @@ msgstr "" "nagyobb értékek az átjutás kisebb valószínűségét jelentik. Ez az érték a " "megjósolhatatlan iszaphoz való." -#: src/cavedb.c:525 +#: src/cavedb.c:527 msgid "Permeability (predictable, bits)" msgstr "Viszkozitás (megjósolható, bitek)" -#: src/cavedb.c:525 +#: src/cavedb.c:527 msgid "" "This controls the rate at which elements go through the slime. This one is " "for predictable slime, and the value is used for a bitwise AND function. The " @@ -1867,11 +1884,11 @@ msgstr "" "operandusa lesz. A C64 motorok által használt értékek a 0, 128, 192, 224, " "240, 248, 252, 254 és 255." -#: src/cavedb.c:526 +#: src/cavedb.c:528 msgid "Random seed (predictable)" msgstr "Véletlenszám kezdet (megjósolható)" -#: src/cavedb.c:526 +#: src/cavedb.c:528 msgid "" "The random number seed for predictable slime. Use -1 to leave on its " "default. Not recommended to change. Does not affect unpredictable slime." @@ -1880,216 +1897,359 @@ msgstr "" "1 értéket az alapértelmezett beállításhoz. Nem ajánlott megváltoztatni. " "Nincs hatással a megjósolhatatlan iszapra." -#: src/cavedb.c:527 src/cavedb.c:529 +#: src/cavedb.c:529 +msgid "Passing elements" +msgstr "Áthaladó elemek" + +#: src/cavedb.c:530 src/cavedb.c:532 msgid "Eats this..." msgstr "Ezt eszi..." -#: src/cavedb.c:527 src/cavedb.c:528 src/cavedb.c:529 src/cavedb.c:530 +#: src/cavedb.c:530 src/cavedb.c:531 src/cavedb.c:532 src/cavedb.c:533 msgid "" "Slime can let other elements than stone and diamond go through. It always " -"lets a waiting or a chasing stone pass, though." +"lets a waiting or a chasing stone pass, though. Also, flying diamonds and " +"stones, as well as bladders are always passed." msgstr "" -"Az iszapon a kövön és a gyémánton kívül más elem is átmehet. (Az alvó és az " -"üldöző kövek egyébként bármikor átjuthatnak rajta.)" +"Az iszapon a kövön és a gyémánton kívül más elem is átmehet. Az alvó és az " +"üldöző kövek egyébként bármikor átjuthatnak rajta. A repülő gyémántok és " +"kövek, illetve a buborékok is mindig áthaladhatnak." -#: src/cavedb.c:528 src/cavedb.c:530 +#: src/cavedb.c:531 src/cavedb.c:533 msgid " ... and converts to" msgstr " ... és ezzé változtatja" -#: src/cavedb.c:533 -msgid "More elements" -msgstr "További elemek" - -#: src/cavedb.c:536 -msgid "Does not flow downwards" -msgstr "Nem folyik lefelé" - #: src/cavedb.c:536 -msgid "" -"In CrDr, the water element had the odd property that it did not flow " -"downwards, only in other directions. This flag emulates this behaviour." -msgstr "" -"A CrDr-ben a víz karakter azzal a furcsa tulajdonsággal rendelkezett, hogy " -"lefelé nem folyt, csak más irányokba. A beállítás ezt a viselkedést emulálja." +msgid "Other elements" +msgstr "Más elemek" -#: src/cavedb.c:540 +#: src/cavedb.c:539 msgid "Eats this element" msgstr "Ezt eszi" -#: src/cavedb.c:540 +#: src/cavedb.c:539 msgid "" "The element which acid eats. If it cannot find any, it simply disappears." msgstr "Az elem, amelyre a sav terjed. Ha nem talál ilyet, akkor eltűnik." -#: src/cavedb.c:541 +#: src/cavedb.c:540 msgid "Spread ratio (%)" msgstr "Terjedés sebessége (%)" -#: src/cavedb.c:541 +#: src/cavedb.c:540 msgid "" "The probability at which an acid will explode and eat neighbouring elements." msgstr "A sav robbanásának és terjedésének valószínűsége." -#: src/cavedb.c:542 +#: src/cavedb.c:541 msgid "Leaves this behind" msgstr "Ez marad utána" -#: src/cavedb.c:542 +#: src/cavedb.c:541 msgid "" "If acid converts to an explosion puff on spreading or any other element." msgstr "" "Ez azt állítja, hogy a sav robbanássá változik-e terjedéskor, vagy bármilyen " "más elemmé." -#: src/cavedb.c:545 src/cavedb.c:612 src/help.c:74 +#: src/cavedb.c:543 src/cavedb.c:620 src/help.c:79 msgid "Biter" msgstr "Zabáló" -#: src/cavedb.c:546 src/cavedb.c:560 +#: src/cavedb.c:544 src/cavedb.c:555 msgid "Delay (frame)" msgstr "Késleltetés (képkocka)" -#: src/cavedb.c:546 +#: src/cavedb.c:544 msgid "Number of frames biters wait between movements." msgstr "A képkockák száma, amennyit a zabálók várnak mozdulataik között." -#: src/cavedb.c:547 +#: src/cavedb.c:545 msgid "Eats this" msgstr "Ezt eszi" -#: src/cavedb.c:547 +#: src/cavedb.c:545 msgid "Biters eat this element. (They always eat dirt.)" msgstr "A zabálók ezt eszik. (A földet mindig megkajálják.)" -#: src/cavedb.c:551 +#: src/cavedb.c:548 msgid "Converts to clock by touching" msgstr "Ezáltal változnak órává" -#: src/cavedb.c:555 src/cavedb.c:564 +#: src/cavedb.c:551 src/cavedb.c:559 msgid "Direction changed" msgstr "Irányok felcserélve" -#: src/cavedb.c:555 +#: src/cavedb.c:551 msgid "" "If this option is enabled, the direction of growing for the horizontal and " -"vertical expanding wall is switched." -msgstr "" -"Ha ez a beállítás engedélyezve van, a vízszintes és függőleges növekvő falak " -"növekedési irányt cserélnek." - -#: src/cavedb.c:559 src/cavedb.c:563 -#, fuzzy +"vertical expanding wall is switched. As you can use both horizontal and " +"vertical expanding walls in a cave, it is not recommended to change this " +"setting, as it might be confusing. You should rather select the type with " +"the correct direction from the element box when drawing the cave." +msgstr "" +"Ha ez engedélyezve van, a növekvő falak vízszintes és függőleges iránya " +"megcserélődik. Mivel a pályán egyszerre használhatsz vízszintes és " +"függőleges növekvő falat is, nem ajánlatos átállítani ezt a beállítást, mert " +"csak kavarodást okoz. A tervezett növekedési iránynak megfelelő elemet " +"érdemes inkább kiválasztani a pálya rajzolásakor." + +#: src/cavedb.c:554 src/cavedb.c:558 msgid "Active at start" -msgstr "A kapcsoló aktív induláskor" +msgstr "Aktív induláskor" -#: src/cavedb.c:559 +#: src/cavedb.c:554 msgid "Whether the replicators are turned on or off at the cave start." -msgstr "" +msgstr "Beállítja, hogy a klónozók be lesznek-e kapcsolva a játék kezdetén." -#: src/cavedb.c:560 -#, fuzzy +#: src/cavedb.c:555 msgid "Number of frames to wait between replicating elements." -msgstr "A képkockák száma, amennyit a zabálók várnak mozdulataik között." +msgstr "A képkockák száma, amennyit várnak mozdulataik között." -#: src/cavedb.c:562 src/help.c:95 -#, fuzzy +#: src/cavedb.c:557 src/help.c:100 msgid "Conveyor belt" -msgstr "A köveket ezzé változtatja" +msgstr "Futószalag" -#: src/cavedb.c:563 +#: src/cavedb.c:558 msgid "Whether the conveyor belts are moving when the cave starts." -msgstr "" +msgstr "Beállítja, hogy a futószalagok működnek-e a pálya indulásakor." -#: src/cavedb.c:564 +#: src/cavedb.c:559 msgid "" "If the conveyor belts' movement is changed, ie. they are running in the " -"opposite direction." +"opposite direction. As you can freely use left and right going versions of " +"the conveyor belt in a cave, it is not recommended to change this setting, " +"rather you should select the correct one from the element box when drawing." +msgstr "" +"A futószalagok mozgása megváltozott, vagyis az ellentétes irányba mennek. " +"Mivel a pálya tervezésekor szabadon használható balra és jobbra haladó " +"futószalag is, nem ajánlatos ezzel fordítani meg az irányukat, hanem inkább " +"érdemes a megfelelőt kiválasztani az elemek közül." + +#: src/cavedb.c:562 +msgid "Does not flow downwards" +msgstr "Nem folyik lefelé" + +#: src/cavedb.c:562 +msgid "" +"In CrDr, the water element had the odd property that it did not flow " +"downwards, only in other directions. This flag emulates this behaviour." msgstr "" +"A CrDr-ben a víz karakter azzal a furcsa tulajdonsággal rendelkezett, hogy " +"lefelé nem folyt, csak más irányokba. A beállítás ezt a viselkedést emulálja." -#: src/cavedb.c:567 src/cavedb.c:581 +#: src/cavedb.c:565 msgid "Effects" msgstr "Hatások" +#: src/cavedb.c:567 +msgid "Stone and diamond effects" +msgstr "Kő és gyémánt hatások" + +#: src/cavedb.c:568 +msgid "Falling stones convert to" +msgstr "A zuhanó kövek ezzé változnak" + +#: src/cavedb.c:568 +msgid "When a stone begins falling, it converts to this element." +msgstr "Amikor egy kő zuhanni kezd, ezzé változik." + +#: src/cavedb.c:569 +msgid "Bouncing stones convert to" +msgstr "A leérkező kövek ezzé változnak" + #: src/cavedb.c:569 -msgid "Cave effects" -msgstr "Pálya hatások" +msgid "When a stone stops falling and rolling, it converts to this element." +msgstr "Amikor egy kő nem tud tovább zuhanni vagy gurulni, ezzé változik." #: src/cavedb.c:570 -msgid "Explosions convert to" -msgstr "A robbanásokból ez lesz" +msgid "Falling diamonds convert to" +msgstr "A zuhanó gyémántok ezzé változnak" #: src/cavedb.c:570 -msgid "This element appears in places where an explosion happens." -msgstr "Ez a karakter jelenik meg ott, ahol egy robbanás történik." +msgid "When a diamond begins falling, it converts to this element." +msgstr "Amikor egy gyémánt zuhanni kezd, ezzé az elemmé változik." #: src/cavedb.c:571 -msgid "Diamond births convert to" -msgstr "A gyémánt születésekből ez lesz" - -#: src/cavedb.c:572 -#, fuzzy -msgid "Dragonfly explodes to" -msgstr "A bombák robbanásából ez lesz" +msgid "Bouncing diamonds convert to" +msgstr "A leérkező gyémántok ezzé változnak" -#: src/cavedb.c:572 -msgid "An exploding dragonfly will create this element." +#: src/cavedb.c:571 +msgid "When a diamond stops falling and rolling, it converts to this element." msgstr "" +"Amikor egy gyémánt nem tud tovább zuhanni vagy gurulni, ilyen elemmé " +"változik." #: src/cavedb.c:573 -msgid "Bombs explode to" -msgstr "A bombák robbanásából ez lesz" +msgid "Creature explosion effects" +msgstr "Lények robbanása" + +#: src/cavedb.c:574 +msgid "Fireflies explode to" +msgstr "A legyek robbanásából" #: src/cavedb.c:574 -msgid "Nitro packs explode to" -msgstr "Nitró töltetek felrobbanva" +msgid "" +"When a firefly explodes, it will create this element. Change this setting " +"wisely. The firefly is a traditional element which is expected to explode to " +"empty space." +msgstr "" +"Amikor egy légy felrobban, ilyen elemeket hoz létre. Meggondoltan állítsd át " +"ezt az opciót. A légy egy tradicionális elem, amelynél a felhasználó arra " +"számít, hogy üres teret hagy maga után robbanáskor." #: src/cavedb.c:575 -msgid "Falling stones convert to" -msgstr "A zuhanó kövek ezzé változnak" +msgid "Alt. fireflies explode to" +msgstr "Alt. legyek robbanása" #: src/cavedb.c:575 -msgid "When a stone begins falling, it converts to this element." -msgstr "Amikor egy kő zuhanni kezd, ezzé változik." +msgid "" +"When an alternative firefly explodes, it will create this element. Use this " +"setting wisely. Do not create a firefly which explodes to stones, for " +"example: use the stonefly instead." +msgstr "" +"Amikor egy alternatív légy felrobban, ilyen elemet hoz létre. Meggondoltan " +"használd ezt a beállítást. Ne hozz létre olyan legyet, amelyik kövekké " +"változik: használd a molylepkét inkább." #: src/cavedb.c:576 -msgid "Bouncing stones convert to" -msgstr "A leérkező kövek ezzé változnak" +msgid "Butterflies explode to" +msgstr "Lepkék robbanása" #: src/cavedb.c:576 -msgid "When a stone stops falling and rolling, it converts to this element." -msgstr "Amikor egy kő nem tud tovább zuhanni vagy gurulni, ezzé változik." +msgid "" +"When a butterfly explodes, it will create this element. Use this setting " +"wisely. Butterflies should explode to diamonds. If you need a creature which " +"explodes to space, use the firefly instead." +msgstr "" +"Amikor egy lepke felrobban, ilyen elemet hoz létre. Meggondoltan állítsd " +"csak át! A lepkék megszokottan gyémánttá változnak. Ha egy olyan lény kell, " +"amelyik üres helyet hagy robbanás után, használd a legyet inkább." #: src/cavedb.c:577 -msgid "Falling diamonds convert to" -msgstr "A zuhanó gyémántok ezzé változnak" +msgid "Alt. butterflies explode to" +msgstr "Alt. lepkék robbanása" #: src/cavedb.c:577 -msgid "When a diamond begins falling, it converts to this element." -msgstr "Amikor egy gyémánt zuhanni kezd, ezzé az elemmé változik." +msgid "" +"When an alternative butterfly explodes, it will create this element. Use " +"this setting wisely." +msgstr "" +"Amikor egy alternatív lepke felrobban, ilyen elemet hoz létre. Meggondoltan " +"használd ezt a beállítást." #: src/cavedb.c:578 -msgid "Bouncing diamonds convert to" -msgstr "A leérkező gyémántok ezzé változnak" +msgid "Stoneflies explode to" +msgstr "Molylepkék robbanása" #: src/cavedb.c:578 -msgid "When a diamond stops falling and rolling, it converts to this element." -msgstr "" -"Amikor egy gyémánt nem tud tovább zuhanni vagy gurulni, ilyen elemmé " -"változik." +msgid "When a stonefly explodes, it will create this element." +msgstr "Amikor egy molylepke felrobban, ilyen elemet hoz létre." + +#: src/cavedb.c:579 +msgid "Dragonflies explode to" +msgstr "Szitakötők robbanása" + +#: src/cavedb.c:579 +msgid "When a dragonfly explodes, it will create this element." +msgstr "Amikor egy szitakötő felrobban, ilyen elemeket hoz létre." + +#: src/cavedb.c:581 +msgid "Explosion effects" +msgstr "Robbanás hatások" + +#: src/cavedb.c:582 +msgid "Explosions end in" +msgstr "Robbanások végül" + +#: src/cavedb.c:582 +msgid "This element appears in places where an explosion finishes." +msgstr "Ez a karakter jelenik meg ott, ahol egy robbanás befejeződik." + +#: src/cavedb.c:583 +msgid "Diamond births end in" +msgstr "Gyémánt születések végül" #: src/cavedb.c:583 -msgid "Creature effects" -msgstr "Lények beállításai" +msgid "" +"When a diamond birth animation reaches its end, it will leave this element " +"there. This can be used to change the element butterflies explode to." +msgstr "" +"Amikor egy gyémánt születés animáció a végéhez ér, ezt a karakter jelenik " +"meg a helyén. Ezzel is be lehet állítani, hogy a lepkék robbanása miket hoz " +"létre." + +#: src/cavedb.c:584 +msgid "Bombs explosions end in" +msgstr "Bomba robbanások végül" #: src/cavedb.c:584 +msgid "Use this setting to select the element the exploding bomb creates." +msgstr "" +"Azt lehet ezzel beállítani, hogy a bomba milyen elemet hoz létre robbanáskor." + +#: src/cavedb.c:585 +msgid "Nitro explosions end in" +msgstr "Nitró robbanások végül" + +#: src/cavedb.c:585 +msgid "The nitro explosions can create some element other than space." +msgstr "" +"A nitró töltetek robbanásai üres helyen kívül más elemeket is létrehozhatnak." + +#: src/cavedb.c:588 +msgid "More effects" +msgstr "Más hatások" + +#: src/cavedb.c:590 +msgid "Visual effects" +msgstr "Látvány hatások" + +#: src/cavedb.c:591 +msgid "Expanding wall looks like" +msgstr "Épülő fal így néz ki" + +#: src/cavedb.c:591 +msgid "" +"This is a compatibility setting for old caves. If you need an expanding wall " +"which looks like steel, you should rather choose the expanding steel wall " +"from the element box." +msgstr "" +"Ez egy kompatibilitási beállítás régebbi pályák számára. Ha olyan növekvő " +"falat szeretnél, amelyik törhetetlen falnak néz ki, inkább használd magát a " +"törhetetlen fal elemet." + +#: src/cavedb.c:592 +msgid "Dirt looks like" +msgstr "A föld így néz ki" + +#: src/cavedb.c:592 +msgid "" +"Compatibility setting. Use it wisely! Anything other than Dirt 2 (which can " +"be used to emulate the Dirt Mod) is not recommended." +msgstr "" +"Kompatibilitási beállítás. Megfontoltan használd! Az alternatív földön kívül " +"(amely a Dirt Mod emulálásához használható) semmi más nem ajánlott." + +#: src/cavedb.c:595 +msgid "Creature movement" +msgstr "Lények mozgása" + +#: src/cavedb.c:596 msgid "Start backwards" msgstr "Hátrafelé indulnak" -#: src/cavedb.c:585 +#: src/cavedb.c:596 +msgid "" +"Whether the direction creatures travel will already be switched at the cave " +"start." +msgstr "A lények mozgási iránya már a pálya elején meg legyen-e fordítva." + +#: src/cavedb.c:597 msgid "Automatically turn (s)" msgstr "Automatikus fordulás (s)" -#: src/cavedb.c:585 +#: src/cavedb.c:597 msgid "" "If this is greater than zero, creatures will automatically change direction " "in every x seconds." @@ -2097,11 +2257,11 @@ msgstr "" "Ha ez a szám nagyobb, mint nulla, akkor a lények ennyi másodpercenként " "automatikusan irányt fognak váltani." -#: src/cavedb.c:586 -msgid "Automatically turn on start" -msgstr "Automatikusan fordulnak a pálya elején" +#: src/cavedb.c:598 +msgid "Auto turn on hatching" +msgstr "Fordulás a játékos születésekor" -#: src/cavedb.c:586 +#: src/cavedb.c:598 msgid "" "If this is set to true, creatures also turn at the start signal. If false, " "the first change in direction occurs only later." @@ -2109,35 +2269,23 @@ msgstr "" "Ha ez be van állítva, a szörnyek a pálya legelején is irányt váltanak. Ha " "nincs, akkor az első fordulás csak később történik." -#: src/cavedb.c:588 -msgid "Visual effects" -msgstr "Látvány hatások" - -#: src/cavedb.c:589 -msgid "Expanding wall looks like" -msgstr "Épülő fal így néz ki" - -#: src/cavedb.c:590 -msgid "Dirt looks like" -msgstr "A föld így néz ki" - -#: src/cavedb.c:592 -msgid "Gravitation effects" -msgstr "Gravitáció hatások" +#: src/cavedb.c:600 +msgid "Gravitation change" +msgstr "Gravitáció változása" -#: src/cavedb.c:593 +#: src/cavedb.c:601 msgid "Direction" msgstr "Irány" -#: src/cavedb.c:593 +#: src/cavedb.c:601 msgid "The direction where stones and diamonds fall." msgstr "A kövek és gyémántok esésének iránya." -#: src/cavedb.c:594 +#: src/cavedb.c:602 msgid "Switch active at start" msgstr "A kapcsoló aktív induláskor" -#: src/cavedb.c:594 +#: src/cavedb.c:602 msgid "" "If set to true, the gravitation switch will be already activated, when the " "cave is started, as if a pot has already been collected." @@ -2145,19 +2293,19 @@ msgstr "" "Ha igaz, a gravitáció kapcsoló már aktiválva lesz, amikor a pálya elindul, " "mintha már egy üstöt összegyűjtött volna a játékos." -#: src/cavedb.c:595 +#: src/cavedb.c:603 msgid "Skeletons needed for pot" msgstr "Csontvázak az üsthöz" -#: src/cavedb.c:595 +#: src/cavedb.c:603 msgid "The number of skeletons to be collected to be able to use a pot." msgstr "A csontvázak száma, amennyit gyűjteni kell az üst használatához." -#: src/cavedb.c:596 +#: src/cavedb.c:604 msgid "Gravitation switch delay" msgstr "Gravitáció kapcsoló késleltetés" -#: src/cavedb.c:596 +#: src/cavedb.c:604 msgid "" "The gravitation changes after a while using the gravitation switch. This " "option sets the number of seconds to wait." @@ -2165,116 +2313,144 @@ msgstr "" "A gravitáció kis idővel azután, hogy a gravitáció kapcsolót használtad. Ez a " "beállítás az időtartamot adja meg, másodpercben." -#: src/cavedb.c:599 src/gtkui.c:642 +#: src/cavedb.c:607 src/gtkui.c:643 msgid "Sound" msgstr "Hang" -#: src/cavedb.c:600 +#: src/cavedb.c:608 msgid "Sound for elements" msgstr "Elemek hangja" -#: src/cavedb.c:601 +#: src/cavedb.c:609 msgid "If true, falling diamonds will have sound." msgstr "Ha engedélyezve van, a zuhanó gyémántok hangot adnak." -#: src/cavedb.c:602 +#: src/cavedb.c:610 msgid "If true, falling and pushed stones will have sound." msgstr "Ha engedélyezve van, a zuhanó és eltolt kövek hangot adnak." -#: src/cavedb.c:603 +#: src/cavedb.c:611 msgid "If true, falling and pushed nitro packs will have sound." msgstr "Ha engedélyezve van, a leeső és eltolt nitró töltetek hangot adnak." -#: src/cavedb.c:604 +#: src/cavedb.c:612 msgid "If true, expanding wall will have sound." msgstr "Ha engedélyezve van, a növekedő fal hangot ad." -#: src/cavedb.c:605 +#: src/cavedb.c:613 msgid "If true, falling wall will have sound." msgstr "Ha engedélyezve van, a zuhanó fal hangot ad." -#: src/cavedb.c:606 +#: src/cavedb.c:614 msgid "Controls if the living amoeba has sound or not." msgstr "Azt állítja be, hogy az élő amőbának van-e hangja." -#: src/cavedb.c:607 +#: src/cavedb.c:615 msgid "If true, the activated magic wall will have sound." msgstr "Ha engedélyezve van, a működő mágikus fal hangot ad." -#: src/cavedb.c:608 +#: src/cavedb.c:616 msgid "If true, the elements passing slime will have sound." msgstr "Ha igaz, az iszap hangot fog adni, amikor valami átmegy rajta." -#: src/cavedb.c:609 -#, fuzzy +#: src/cavedb.c:617 msgid "If true, the elements sinking in lava will have sound." -msgstr "Ha igaz, az iszap hangot fog adni, amikor valami átmegy rajta." +msgstr "Ha igaz, a lávában elnyelődő elemek hangot fognak adni." -#: src/cavedb.c:610 -#, fuzzy +#: src/cavedb.c:618 msgid "" "If true, the new element appearing under the replicator will make sound." -msgstr "Ha igaz, az iszap hangot fog adni, amikor valami átmegy rajta." +msgstr "Ha igaz, a klónozó alatt megjelenő új elem hangot fog adni." -#: src/cavedb.c:611 +#: src/cavedb.c:619 msgid "If true, the acid spreading will have sound." msgstr "Ha engedélyezve van, a terjedő sav hangot ad." -#: src/cavedb.c:612 +#: src/cavedb.c:620 msgid "Biters eating something or pushing a stone will have sound." msgstr "Ha engedélyezve van, a zabálók hangot fognak adni." -#: src/cavedb.c:613 +#: src/cavedb.c:621 msgid "Bladders moving and being pushed can have sound." msgstr "A mozgó és eltolt buborékok hangja." -#: src/cavedb.c:614 +#: src/cavedb.c:622 msgid "If true, the cave containing water will have sound." msgstr "Ha igaz, a víznek hangja lesz a pályán." -#: src/cavedb.c:615 +#: src/cavedb.c:623 msgid "If true, using the pneumatic hammer will have sound." msgstr "Ha engedélyezve van, a működő légkalapács hangot ad." -#: src/cavedb.c:616 +#: src/cavedb.c:624 msgid "Bladder spender" msgstr "Buborék csapda" -#: src/cavedb.c:616 +#: src/cavedb.c:624 msgid "If true, the bladder spender will make sound, when the bladder appears." msgstr "" "Ha engedélyezve van, a buborék csapda hangot ad, amikor előkerül belőle a " "buborék." -#: src/cavedb.c:617 +#: src/cavedb.c:625 msgid "Bladder convert" msgstr "Buborék átalakulás" -#: src/cavedb.c:617 +#: src/cavedb.c:625 msgid "If true, the bladder converting to a clock will make sound." msgstr "Ha igaz, az átalakuló buboréknak hangja lesz." -#: src/cavedb.c:618 +#: src/cavedb.c:626 msgid "Event sounds" msgstr "Esemény hangok" -#: src/cavedb.c:619 +#: src/cavedb.c:627 msgid "Gravity change" msgstr "Gravitáció változás" -#: src/cavedb.c:619 +#: src/cavedb.c:627 msgid "If true, the gravity changing will make sound." msgstr "Ha engedélyezve van, a gravitáció megváltozása hangot ad." -#: src/cavedb.c:623 src/cavedb.c:624 +#: src/cavedb.c:628 +msgid "Creature direction change" +msgstr "Lény irányváltozás" + +#: src/cavedb.c:628 +msgid "" +"If this is set to true, creatures changing direction will be signaled by a " +"sound." +msgstr "" +"Ha ez engedélyezve van, a lények mozgási irányának megváltozását hanggal is " +"jelzi a program." + +#: src/cavedb.c:631 msgid "Compatibility" msgstr "Kompatibilitás" -#: src/cavedb.c:625 +#: src/cavedb.c:633 +msgid "Skeletons worth diamonds" +msgstr "Csontvázak ennyi gyémántot érnek" + +#: src/cavedb.c:633 +msgid "" +"The number of diamonds each skeleton is worth. Normally skeletons are used " +"for letting the player use the pot! They are not intended to be used as a " +"second kind of diamond." +msgstr "" +"Ennyi gyémántot ér egy csontváz. Alapvetően a csontvázak arra valók, hogy " +"engedjék a játékosnak használni az üstöt! Nem arra, hogy egy másik fajta " +"gyémántként használják őket." + +#: src/cavedb.c:634 +msgid "Borders" +msgstr "Keret" + +#: src/cavedb.c:635 msgid "Line shifting border" msgstr "Sor eltoló keret" -#: src/cavedb.c:625 +#: src/cavedb.c:635 msgid "" "If this is set to true, the player exiting on either side will appear one " "row lower or upper on the other side." @@ -2282,11 +2458,11 @@ msgstr "" "Ha ez az opció be van kapcsolva, a pálya egyik szélén kisétáló játékos egy " "sorral lejjebb vagy feljebb fog megjelenni a másik oldalon." -#: src/cavedb.c:626 +#: src/cavedb.c:636 msgid "Objects wrap around" msgstr "Objektumok átfordulnak" -#: src/cavedb.c:626 +#: src/cavedb.c:636 msgid "" "If true, objects will wrap around the cave borders as well, ie. if you drag " "a line to the left, part of it will appear on the right hand side of the " @@ -2302,50 +2478,60 @@ msgstr "" "a rajzolás az előző vagy a következő sorra ugrik; a felső vagy alsó keret " "átlépése esetén pedig nem történik semmi." -#: src/cavedb.c:627 +#: src/cavedb.c:637 msgid "Scan first and last row" msgstr "Felső és alsó sor mozgatása" -#: src/cavedb.c:627 -msgid "Elements move on first and last row, too." -msgstr "Az elemek a legfelső és a legalsó sorban is mozognak." +#: src/cavedb.c:637 +msgid "" +"Elements move on first and last row, too. Usually those rows are the border. " +"The games created by the original editor were not allowed to put anything " +"but steel wall there, so it was not apparent that the borders were not " +"processed by the engine. Some old caves need this for compatibility; it is " +"not recommended to change this setting for newly designed caves, though." +msgstr "" +"Az elemek a felső és alsó sorban is mozognak. Általában ezek a sorok a pálya " +"keretét adják. Az eredeti pályaszerkesztő nem engedte, hogy bármilyen elemet " +"rakj ide, hanem csak törhetetlen fal lehetett ott. Emiatt nem látszott, hogy " +"a motor nem is dolgozta fel azokat a sorokat. Némelyik régi pálya igényli " +"ezt a működést a kompatibilitáshoz; azonban nem ajánlott megáltoztatni az " +"újonnan tervezettekhez." -#: src/cavedb.c:628 +#: src/cavedb.c:638 +msgid "Other" +msgstr "Egyéb" + +#: src/cavedb.c:639 msgid "Short explosions" msgstr "Rövid robbanások" -#: src/cavedb.c:628 +#: src/cavedb.c:639 msgid "" -"In 1stB, explosions were longer, took five cave frames to complete, as " -"opposed to four in the original." +"In 1stB and newer engines, explosions were longer, they took five cave " +"frames to complete, as opposed to four frames in the original." msgstr "" -"A 1stB-ben a robbanások öt képkockán keresztül tartottak, a régebbi " -"játékokban pedig csak négyen keresztül." - -#: src/cavedb.c:629 -msgid "Skeletons worth diamonds" -msgstr "Csontvázak ennyi gyémántot érnek" +"A 1stB-ben és újabb motorokban a robbanások öt képkockán keresztül " +"tartottak, a régebbi játékokban pedig csak négyen keresztül." -#: src/cavedb.c:629 -msgid "The number of diamonds each skeleton is worth." -msgstr "A gyémántok száma, amennyit egy csontváz ér." - -#: src/cavedb.c:630 +#: src/cavedb.c:640 msgid "Gravity change affects everything" msgstr "Gravitáció változása mindenre hat" -#: src/cavedb.c:630 +#: src/cavedb.c:640 msgid "" "If this is enabled, changing the gravity will also affect bladders (moving " "and pushing), bladder spenders, falling walls and waiting stones. Otherwise, " -"those elements behave as gravity was always pointing downwards." +"those elements behave as gravity was always pointing downwards. This is a " +"compatibility setting which is not recommended to change. It is intended for " +"imported caves." msgstr "" "Ha ez engedélyezve van, a gravitáció irányának megváltozása hatni fog a " "buborékokra (mozgás és arrébb tolás), buborék csapdákra, zuhanó falakra és " "mutáns kövekre is. Egyébként ezek az elemek úgy viselkednek, mintha a " -"gravitáció mindig lefelé mutatna." +"gravitáció mindig lefelé mutatna. Ez egy kompatibilitási beállítás, amelyet " +"nem ajánlatos megváltoztatni. Az importált pályákhoz használatos." -#: src/cavedb.c:647 +#: src/cavedb.c:654 msgid "Replay" msgstr "Visszajátszás" @@ -2360,11 +2546,11 @@ msgstr "Visszajátszás" #. Set the translated string to "lowercase-element-names-yes", if your language #. allows writing nouns with lowercase initials. Set it to "lowercase-element-names-no", #. if not: for example, german. Do not translate the string, but set the behavior! -#: src/cavedb.c:902 +#: src/cavedb.c:920 msgid "lowercase-element-names-yes" msgstr "lowercase-element-names-yes" -#: src/caveobject.c:29 src/help.c:165 +#: src/caveobject.c:29 src/help.c:174 msgid "Point" msgstr "Pont" @@ -2382,7 +2568,7 @@ msgstr "Elem" msgid "Draw" msgstr "Rajz" -#: src/caveobject.c:30 src/help.c:167 +#: src/caveobject.c:30 src/help.c:176 msgid "Line" msgstr "Vonal" @@ -2399,11 +2585,11 @@ msgstr "Kezdőpont" msgid "Ending coordinates" msgstr "Végpont" -#: src/caveobject.c:31 src/help.c:168 +#: src/caveobject.c:31 src/help.c:177 msgid "Outline" msgstr "Keret" -#: src/caveobject.c:32 src/help.c:169 +#: src/caveobject.c:32 src/help.c:178 msgid "Rectangle" msgstr "Téglalap" @@ -2419,7 +2605,7 @@ msgstr "Kitöltő elem" msgid "Fill" msgstr "Kitöltés" -#: src/caveobject.c:33 src/help.c:170 +#: src/caveobject.c:33 src/help.c:179 msgid "Raster" msgstr "Raszter" @@ -2427,7 +2613,7 @@ msgstr "Raszter" msgid "Distance" msgstr "Távolság" -#: src/caveobject.c:34 src/help.c:171 +#: src/caveobject.c:34 src/help.c:180 msgid "Join" msgstr "Kötés" @@ -2451,7 +2637,7 @@ msgstr "Kitöltés cserével" msgid "Replace" msgstr "Csere" -#: src/caveobject.c:36 src/help.c:172 +#: src/caveobject.c:36 src/help.c:181 msgid "Fill to border" msgstr "Kitöltés keretig" @@ -2459,7 +2645,7 @@ msgstr "Kitöltés keretig" msgid "Border" msgstr "Keret" -#: src/caveobject.c:37 src/help.c:176 +#: src/caveobject.c:37 src/help.c:185 msgid "Maze" msgstr "Labirintus" @@ -2494,11 +2680,11 @@ msgstr "Járat" msgid "Horizontal (%%)" msgstr "Vízszintes (%%)" -#: src/caveobject.c:38 src/help.c:177 +#: src/caveobject.c:38 src/help.c:186 msgid "Unicursal maze" msgstr "Kígyózó labirintus" -#: src/caveobject.c:39 src/help.c:178 +#: src/caveobject.c:39 src/help.c:187 msgid "Braid maze" msgstr "Körös labirintus" @@ -2522,7 +2708,7 @@ msgstr "Kezdeti" msgid "C64 random numbers" msgstr "C64 véletlen számok" -#: src/caveobject.c:41 src/help.c:180 +#: src/caveobject.c:41 src/help.c:189 msgid "Copy and paste" msgstr "Másolás és beillesztés" @@ -2654,7 +2840,7 @@ msgstr "A játék hosszú leírása." msgid "Remark (informative)." msgstr "Megjegyzés (informatív)." -#: src/caveset.c:70 src/help.c:221 +#: src/caveset.c:70 src/help.c:230 msgid "Title screen" msgstr "Címkép" @@ -2899,6 +3085,15 @@ msgstr "%s, %d pálya" msgid "Level shown" msgstr "Szint" +#: src/editor.c:1447 +msgid "" +"Random seed value controls the predictable random number generator, which " +"fills the cave initially. If set to -1, cave is totally random every time it " +"is played." +msgstr "" +"A véletlenszám kezdeti értéke a pálya kezdeti kitöltését szabályozza. Ha -1-" +"re állítod, a pálya minden egyes játszás alkalmával teljesen máshogy néz ki." + #: src/editor.c:1462 msgid "Initial border" msgstr "Kezdő keret" @@ -2916,7 +3111,7 @@ msgstr "%d. véletlen kitöltés" msgid "Object Properties" msgstr "Objektum tulajdonságai" -#: src/editor.c:1621 src/editorexport.c:573 +#: src/editor.c:1621 src/editorexport.c:631 msgid "Type" msgstr "Típus" @@ -2945,44 +3140,44 @@ msgstr "Az objektumnak legalább egy nehézségi szinten látszania kell." msgid "Enabled this object on all levels." msgstr "Az összes szinten engedélyeztem az objektumot." -#: src/editor.c:2634 +#: src/editor.c:2638 msgid "Cave Name" msgstr "Pálya neve" -#: src/editor.c:2726 +#: src/editor.c:2730 #, c-format msgid "%d caves selected" msgstr "%d pálya kiválasztva" -#: src/editor.c:2950 +#: src/editor.c:2954 msgid "Cave Initial Random Fill" msgstr "Pálya kezdő kitöltése" -#: src/editor.c:2987 +#: src/editor.c:2991 msgid "Save Cave as PNG Image" msgstr "Pálya mentése PNG képként" -#: src/editor.c:2994 +#: src/editor.c:2998 msgid "PNG files" msgstr "PNG képek" -#: src/editor.c:3070 +#: src/editor.c:3074 msgid "Cave Overview" msgstr "Áttekintés" -#: src/editor.c:3071 +#: src/editor.c:3075 msgid "Save as _PNG" msgstr "Mentése _PNG-ként" -#: src/editor.c:3229 +#: src/editor.c:3233 msgid "Cave Colors" msgstr "Pálya színei" -#: src/editor.c:3262 +#: src/editor.c:3266 msgid "Set random..." msgstr "Véletlenszerű..." -#: src/editor.c:3269 +#: src/editor.c:3273 msgid "" "Hint: As the palette can be changed for C64 and Atari colors, it is not " "recommended to use different types together (for example, RGB color for " @@ -2992,46 +3187,46 @@ msgstr "" "felhasználó, nem ajánlott különböző típusú színeket együtt használni (pl. " "RGB szín a háttérhez, Atari szín az iszaphoz.)" -#: src/editor.c:3314 +#: src/editor.c:3318 msgid "Do you really want to delete cave(s)?" msgstr "Biztos ki akarod törölni a pályá(ka)t?" -#: src/editor.c:3314 +#: src/editor.c:3318 msgid "This operation cannot be undone." msgstr "Ezt a műveletet nem lehet visszavonni." -#: src/editor.c:3487 +#: src/editor.c:3491 msgid "" "At least one object would have been totally hidden (not visible on any of " "the levels)." msgstr "" "Legalább egy objektum teljesen eltűnt volna (nem látszana egyik szinten sem)." -#: src/editor.c:3487 +#: src/editor.c:3491 msgid "Enabled those objects on the current level." msgstr "Azok az objektumok engedélyezve lettek az aktuális szinten." -#: src/editor.c:3677 +#: src/editor.c:3681 msgid "Do you really want to clear cave objects?" msgstr "Biztos ki akarod törölni a pálya rajzelemeit?" -#: src/editor.c:3698 +#: src/editor.c:3702 msgid "Do you really want to remove cave map?" msgstr "Biztos törölni szeretnéd a pálya térképét?" -#: src/editor.c:3698 +#: src/editor.c:3702 msgid "This operation destroys all cave objects." msgstr "Ez a művelet a pálya minden elemét törli." -#: src/editor.c:3719 +#: src/editor.c:3723 msgid "This cave has no objects." msgstr "Nincsenek ezen a pĂĄlyĂĄn rajzelemek." -#: src/editor.c:3723 +#: src/editor.c:3727 msgid "Do you really want to flatten cave?" msgstr "Biztos össze szeretnéd vonni a pályát egyetlen térképpé?" -#: src/editor.c:3723 +#: src/editor.c:3727 msgid "" "This operation merges all cave objects currently seen in a single map. " "Further objects may later be added, but the ones already seen will behave " @@ -3041,43 +3236,43 @@ msgstr "" "objektumok később is hozzáadhatóak, de az eddigiek a kezdeti véletlen " "kitöltéshez hasonlóan fognak viselkedni, és nem maradnak szerkeszthetőek." -#: src/editor.c:3856 +#: src/editor.c:3860 msgid "Save Cave Set in HTML" msgstr "HTML galéria mentése" -#: src/editor.c:3864 +#: src/editor.c:3868 msgid "HTML files" msgstr "HTML fájlok" -#: src/editor.c:3900 +#: src/editor.c:3904 msgid "Export Cave as CrLi Cave File" msgstr "CrLi pálya fájl exportálása" -#: src/editor.c:3939 +#: src/editor.c:3943 msgid "Export Cave as CrLi Cave Pack" msgstr "CrLi pálya gyűjtemény exportálása" -#: src/editor.c:4050 +#: src/editor.c:4054 msgid "Create New Cave" msgstr "Új pálya létrehozása" -#: src/editor.c:4061 src/gtkmain.c:1439 +#: src/editor.c:4065 src/gtkmain.c:1442 msgid "Name:" msgstr "Név:" -#: src/editor.c:4067 +#: src/editor.c:4071 msgid "New cave" msgstr "Új pálya" -#: src/editor.c:4071 +#: src/editor.c:4075 msgid "Description:" msgstr "Leírás:" -#: src/editor.c:4080 +#: src/editor.c:4084 msgid "Intermission:" msgstr "Jutalom pálya:" -#: src/editor.c:4082 +#: src/editor.c:4086 msgid "" "Intermission caves are usually small and fast caves, which are not required " "to be solved. The player will not lose a life if he is not successful. The " @@ -3091,11 +3286,11 @@ msgstr "" "pálya mérete is 20x12-re lesz állítva, mivel a jutalom pályáknak az a " "szokásos mérete." -#: src/editor.c:4210 +#: src/editor.c:4214 msgid "Do you really want to remove unknown cave tags?" msgstr "Biztos törölni szeretnéd az összes ismeretlen mezőt?" -#: src/editor.c:4210 +#: src/editor.c:4214 msgid "" "This operation removes all unknown tags associated with all caves. Unknown " "tags might come from another BDCFF-compatible game or an older version of " @@ -3107,34 +3302,34 @@ msgstr "" "vagy a GDashegy korábbi verziójából. Azokat a mezőket a GDash nem tudja " "értelmezni,ezért ha ebben a programban használod a pályákat, haszontalanok." -#: src/editor.c:4327 src/editor.c:4338 +#: src/editor.c:4331 src/editor.c:4342 #, c-format msgid "%s Element" msgstr "%s elem" -#: src/editor.c:4331 src/editor.c:4348 +#: src/editor.c:4335 src/editor.c:4352 msgid "Draw Element" msgstr "Elem rajzolása" -#: src/editor.c:4342 src/editor.c:4352 +#: src/editor.c:4346 src/editor.c:4356 msgid "Fill Element" msgstr "Kitöltő elem" -#: src/editor.c:4430 +#: src/editor.c:4434 #, c-format msgid "%s: removed %d replay(s)\n" msgstr "%s: %d visszajátszás törölve\n" -#: src/editor.c:4436 +#: src/editor.c:4440 msgid "Some replays were removed." msgstr "Néhány visszajátszás törölve." -#: src/editor.c:4466 +#: src/editor.c:4470 #, c-format msgid "%s: marked %d replay(s) as working ones\n" msgstr "%s: %d visszajátszás működőként megjelölve\n" -#: src/editor.c:4472 +#: src/editor.c:4476 msgid "" "Some replay checksums were recalculated. This does not mean that those " "replays actually play correctly!" @@ -3142,44 +3337,44 @@ msgstr "" "Néhány visszajátszás ellenőrző összegét újraszámoltam. Ez nem jelenti azt, " "hogy azok tényleg működnek is!" -#: src/editor.c:4528 src/editor.c:4545 +#: src/editor.c:4532 src/editor.c:4549 msgid "Error loading image file." msgstr "Nem lehetett betölteni a kép fájlt." -#: src/editor.c:4528 +#: src/editor.c:4532 msgid "Cannot recognize file format." msgstr "A kép formátuma nem felismerhető." -#: src/editor.c:4535 +#: src/editor.c:4539 #, c-format msgid "Maximum sizes: %dx%d pixels" msgstr "Maximum méret: %dx%d képpont" -#: src/editor.c:4536 +#: src/editor.c:4540 msgid "The image selected is too big!" msgstr "A kiválasztott kép túl nagy!" -#: src/editor.c:4570 +#: src/editor.c:4574 msgid "Select Image File for Title Screen" msgstr "Válassz fájlt a címképhez" -#: src/editor.c:4577 +#: src/editor.c:4581 msgid "Select Image File for Background Tile" msgstr "Válassz fájlt a címkép hátteréhez" -#: src/editor.c:4591 +#: src/editor.c:4595 msgid "Set Title Image" msgstr "Címkép beállítása" -#: src/editor.c:4607 +#: src/editor.c:4611 msgid "Load _image" msgstr "_Kép betöltése" -#: src/editor.c:4608 +#: src/editor.c:4612 msgid "Load _tile" msgstr "_Minta betöltése" -#: src/editor.c:4614 +#: src/editor.c:4618 #, c-format msgid "" "Recommended image sizes are 320x176 pixels for title image and 8x8 pixels " @@ -3188,438 +3383,438 @@ msgstr "" "Az ajánlott képméretek 320x176 képpont a címképhez és 8x8 képpont a gördülő " "mintához. A maximum méretek %dx%d és %dx%d képpont." -#: src/editor.c:4645 src/gtkmain.c:1922 +#: src/editor.c:4649 src/gtkmain.c:1926 msgid "_File" msgstr "_Fájl" -#: src/editor.c:4646 +#: src/editor.c:4650 msgid "_Cave" msgstr "_Pálya" -#: src/editor.c:4647 +#: src/editor.c:4651 msgid "_Edit" msgstr "S_zerkesztés" -#: src/editor.c:4648 +#: src/editor.c:4652 msgid "_View" msgstr "_Nézet" -#: src/editor.c:4649 +#: src/editor.c:4653 msgid "_Tools" msgstr "_Eszközök" -#: src/editor.c:4650 src/gtkmain.c:1924 +#: src/editor.c:4654 src/gtkmain.c:1928 msgid "_Help" msgstr "_Súgó" -#: src/editor.c:4651 +#: src/editor.c:4655 msgid "Close cave editor" msgstr "Pályaszerkesztő bezárása" -#: src/editor.c:4652 +#: src/editor.c:4656 msgid "New _cave" msgstr "Új _pálya" -#: src/editor.c:4652 +#: src/editor.c:4656 msgid "Create new cave" msgstr "Új pálya létrehozása" -#: src/editor.c:4654 +#: src/editor.c:4658 msgid "Save cave set to file" msgstr "Játék pályáinak mentése új néven" -#: src/editor.c:4655 +#: src/editor.c:4659 msgid "Save cave set as new file" msgstr "Játék pályáinak mentése új néven" -#: src/editor.c:4656 +#: src/editor.c:4660 msgid "Load cave set from file" msgstr "Játék betöltése fájlból" -#: src/editor.c:4657 src/gtkmain.c:1940 +#: src/editor.c:4661 src/gtkmain.c:1944 msgid "O_pen shipped" msgstr "_Telepített játék megnyitása" -#: src/editor.c:4657 +#: src/editor.c:4661 msgid "Load shipped cave set from file" msgstr "Telepített játék betöltése fájlból" -#: src/editor.c:4658 src/gtkmain.c:1943 +#: src/editor.c:4662 src/gtkmain.c:1947 msgid "Hi_ghscores" msgstr "P_ontok" -#: src/editor.c:4659 +#: src/editor.c:4663 msgid "Select all items" msgstr "Összes elem kiválasztása" -#: src/editor.c:4660 +#: src/editor.c:4664 msgid "Cave set _properties" msgstr "Játék _tulajdonságai" -#: src/editor.c:4660 +#: src/editor.c:4664 msgid "Set properties of cave set" msgstr "Játék tulajdonságainak beállítása" -#: src/editor.c:4661 +#: src/editor.c:4665 msgid "Cave set _title image" msgstr "Játék _címkép" -#: src/editor.c:4661 +#: src/editor.c:4665 msgid "Set caveset title image" msgstr "Játék címképernyő beállítása" -#: src/editor.c:4666 +#: src/editor.c:4670 msgid "_Edit cave" msgstr "Pálya s_zerkesztése" -#: src/editor.c:4666 +#: src/editor.c:4670 msgid "Edit selected cave" msgstr "Kiválasztott pálya szerkesztése" -#: src/editor.c:4667 +#: src/editor.c:4671 msgid "_Rename cave" msgstr "_Pálya átnevezése" -#: src/editor.c:4667 +#: src/editor.c:4671 msgid "Rename selected cave" msgstr "Kiválasztott pálya átnevezése" -#: src/editor.c:4668 +#: src/editor.c:4672 msgid "Make cave _selectable" msgstr "Pálya _kiválasztható" -#: src/editor.c:4668 +#: src/editor.c:4672 msgid "Make the cave selectable as game start" msgstr "Az adott pálya legyen kiválasztható a játék elején" -#: src/editor.c:4669 +#: src/editor.c:4673 msgid "Make cave _unselectable" msgstr "Pálya _nem kiválasztható" -#: src/editor.c:4669 +#: src/editor.c:4673 msgid "Make the cave unselectable as game start" msgstr "Az adott pálya ne legyen kiválasztható a játék elején" -#: src/editor.c:4674 +#: src/editor.c:4678 msgid "_New cave set" msgstr "Ú_j játék" -#: src/editor.c:4674 +#: src/editor.c:4678 msgid "Create new cave set with no caves" msgstr "Új, üres játék létrehozása" -#: src/editor.c:4675 +#: src/editor.c:4679 msgid "Save _HTML gallery" msgstr "_HTML galéria mentése" -#: src/editor.c:4675 +#: src/editor.c:4679 msgid "Save game in a HTML gallery" msgstr "Játék mentése egy HTML galériaába" -#: src/editor.c:4676 +#: src/editor.c:4680 msgid "Export _CrLi cave pack" msgstr "_CrLi játék exportálása" -#: src/editor.c:4677 +#: src/editor.c:4681 msgid "_Make caves selectable" msgstr "Összes _pálya kiválasztható" -#: src/editor.c:4678 +#: src/editor.c:4682 msgid "All _caves" msgstr "Összes _pálya" -#: src/editor.c:4678 +#: src/editor.c:4682 msgid "Make all caves selectable as game start" msgstr "Legyen az összes pálya kiválasztható a játék elején" -#: src/editor.c:4679 +#: src/editor.c:4683 msgid "All _but intermissions" msgstr "Jutalom pályákon _kívül mind" -#: src/editor.c:4679 +#: src/editor.c:4683 msgid "Make all caves but intermissions selectable as game start" msgstr "" "A jutalom pályákon kívül az összes legyen kiválasztható játék kezdetnek" -#: src/editor.c:4680 +#: src/editor.c:4684 msgid "All _after intermissions" msgstr "Jutalom pályák _utániak" -#: src/editor.c:4680 +#: src/editor.c:4684 msgid "Make all caves after intermissions selectable as game start" msgstr "Az összes jutalom pálya utáni legyen kiválasztható játék kezdetnek" -#: src/editor.c:4681 +#: src/editor.c:4685 msgid "Remove all unknown tags" msgstr "Összes ismeretlen mező törlése" -#: src/editor.c:4681 +#: src/editor.c:4685 msgid "Removes all unknown tags found in the BDCFF file" msgstr "Az összes ismeretlen mezőt törli, amit a BDCFF fájlban talált" -#: src/editor.c:4682 +#: src/editor.c:4686 msgid "Remove bad replays" msgstr "Rossz visszajátszások törlése" -#: src/editor.c:4682 +#: src/editor.c:4686 msgid "Removes replays which won't play as they have their caves modified." msgstr "" "Törli azokat a visszajátszásokat, amelyeknek nem működnek, mert megváltozott " "a pálya." -#: src/editor.c:4683 +#: src/editor.c:4687 msgid "Fix replay checksums" msgstr "Visszajátszás ellenőrzők javítása" -#: src/editor.c:4683 +#: src/editor.c:4687 msgid "Treats all replays with wrong checksums as working ones." msgstr "Az összes rossznak bejelölt visszajátszást működőnek tekinti." -#: src/editor.c:4688 +#: src/editor.c:4692 msgid "_Export as CrLi cave file" msgstr "CrLi pálya _exportálása" -#: src/editor.c:4689 +#: src/editor.c:4693 msgid "Open cave selector" msgstr "Pályaválasztó megnyitása" -#: src/editor.c:4690 +#: src/editor.c:4694 msgid "_Next cave" msgstr "_Következő pálya" -#: src/editor.c:4690 +#: src/editor.c:4694 msgid "Next cave" msgstr "Következő pálya" -#: src/editor.c:4691 +#: src/editor.c:4695 msgid "_Previous cave" msgstr "_Előző pálya" -#: src/editor.c:4691 +#: src/editor.c:4695 msgid "Previous cave" msgstr "Előző pálya" -#: src/editor.c:4692 +#: src/editor.c:4696 msgid "_Test" msgstr "T_esztelés" -#: src/editor.c:4692 src/help.c:230 +#: src/editor.c:4696 src/help.c:239 msgid "Test cave" msgstr "Pálya tesztelése" -#: src/editor.c:4693 +#: src/editor.c:4697 msgid "Ca_ve properties" msgstr "Pá_lya tulajdonságai" -#: src/editor.c:4693 +#: src/editor.c:4697 msgid "Cave settings" msgstr "Pálya beállításai" -#: src/editor.c:4694 +#: src/editor.c:4698 msgid "Set engine defaults" msgstr "Adott motor alapértékei" -#: src/editor.c:4695 +#: src/editor.c:4699 msgid "Cave co_lors" msgstr "Pálya _színei" -#: src/editor.c:4695 +#: src/editor.c:4699 msgid "Select cave colors" msgstr "Pálya színeinek kiválasztása" -#: src/editor.c:4696 +#: src/editor.c:4700 msgid "Remove objects" msgstr "Rajzelemek törlése" -#: src/editor.c:4696 +#: src/editor.c:4700 msgid "Clear cave objects" msgstr "Pálya rajzelemeinek törlése" -#: src/editor.c:4697 +#: src/editor.c:4701 msgid "Convert to map" msgstr "Térképpé alakítás" -#: src/editor.c:4697 +#: src/editor.c:4701 msgid "Flatten cave to a single cave map without objects" msgstr "A pálya lapítása egyetlen térképpé" -#: src/editor.c:4698 +#: src/editor.c:4702 msgid "O_verview" msgstr "Át_tekintés" -#: src/editor.c:4698 +#: src/editor.c:4702 msgid "Full screen overview of cave" msgstr "A teljes pálya áttekintése" -#: src/editor.c:4699 +#: src/editor.c:4703 msgid "O_verview (simple)" msgstr "Át_tekintés (egyszerű)" -#: src/editor.c:4699 +#: src/editor.c:4703 msgid "Full screen overview of cave almost as in game" msgstr "A teljes pálya áttekintése (majdnem, ahogyan a játékban)" -#: src/editor.c:4700 +#: src/editor.c:4704 msgid "_Auto shrink" msgstr "_Automatikus zsugorítás" -#: src/editor.c:4700 +#: src/editor.c:4704 msgid "Automatically set the visible region of the cave" msgstr "A pálya látható részének automatikus beállítása" -#: src/editor.c:4705 +#: src/editor.c:4709 msgid "To _bottom" msgstr "_Alulra" -#: src/editor.c:4705 +#: src/editor.c:4709 msgid "Push object to bottom" msgstr "Rajzelem alulra küldése" -#: src/editor.c:4706 +#: src/editor.c:4710 msgid "To t_op" msgstr "_Felülre" -#: src/editor.c:4706 +#: src/editor.c:4710 msgid "Bring object to top" msgstr "Rajzelem felülre hozása" -#: src/editor.c:4707 +#: src/editor.c:4711 msgid "Show on this level" msgstr "Látsszon ezen a szinten" -#: src/editor.c:4707 +#: src/editor.c:4711 msgid "Enable object on currently visible level" msgstr "Az objektum látszódjon a jelenlegi szinten" -#: src/editor.c:4708 +#: src/editor.c:4712 msgid "Hide on this level" msgstr "Eltűntetés erről a szintről" -#: src/editor.c:4708 +#: src/editor.c:4712 msgid "Disable object on currently visible level" msgstr "Az objektum tiltása a jelenlegi szinten" -#: src/editor.c:4709 +#: src/editor.c:4713 msgid "Only on this level" msgstr "Csak ezen a szinten" -#: src/editor.c:4709 +#: src/editor.c:4713 msgid "Enable object only on the currently visible level" msgstr "Az objektum csak a jelenlegi szinten látszódjon" -#: src/editor.c:4710 +#: src/editor.c:4714 msgid "Show on all levels" msgstr "Összes szinten látszik" -#: src/editor.c:4710 +#: src/editor.c:4714 msgid "Enable object on all levels" msgstr "Objektum engedélyezése az összes szinten" -#: src/editor.c:4714 +#: src/editor.c:4718 msgid "Ob_ject properties" msgstr "Rajz_elem tulajdonságai" -#: src/editor.c:4714 +#: src/editor.c:4718 msgid "Set object properties" msgstr "Elem tulajdonságainak szerkesztése" -#: src/editor.c:4719 +#: src/editor.c:4723 msgid "Map" msgstr "Térkép" -#: src/editor.c:4720 +#: src/editor.c:4724 msgid "Shift _left" msgstr "Léptetés _balra" -#: src/editor.c:4721 +#: src/editor.c:4725 msgid "Shift _right" msgstr "Léptretés _jobbra" -#: src/editor.c:4722 +#: src/editor.c:4726 msgid "Shift _up" msgstr "Léptetés _fel" -#: src/editor.c:4723 +#: src/editor.c:4727 msgid "Shift _down" msgstr "Léptetés _le" -#: src/editor.c:4724 +#: src/editor.c:4728 msgid "Remove m_ap" msgstr "Térkép tö_rlése" -#: src/editor.c:4724 +#: src/editor.c:4728 msgid "Remove cave map, if it has one" msgstr "A pálya térkép törlése" -#: src/editor.c:4729 +#: src/editor.c:4733 msgid "Setup cave _random fill" msgstr "Véletlenszerű _elemek beállítása" -#: src/editor.c:4729 +#: src/editor.c:4733 msgid "Setup initial fill random elements for the cave" msgstr "A véletlenszerű kezdeti kitöltés beállítása a pályához" -#: src/editor.c:4734 +#: src/editor.c:4738 msgid "Cut to clipboard" msgstr "Kivágás a vágólapra" -#: src/editor.c:4735 +#: src/editor.c:4739 msgid "Copy to clipboard" msgstr "Másolás a vágólapra" -#: src/editor.c:4736 +#: src/editor.c:4740 msgid "Delete" msgstr "Törlés" -#: src/editor.c:4741 +#: src/editor.c:4745 msgid "Paste object from clipboard" msgstr "Rajzelem beillesztése a vágólapról" -#: src/editor.c:4746 +#: src/editor.c:4750 msgid "Undo last action" msgstr "Előző művelet visszavonása" -#: src/editor.c:4751 +#: src/editor.c:4755 msgid "Redo last action" msgstr "Visszavont művelet ismétlése" -#: src/editor.c:4759 +#: src/editor.c:4763 msgid "_Animated view" msgstr "_Animált nézet" -#: src/editor.c:4759 +#: src/editor.c:4763 msgid "Animated view" msgstr "Animált nézet" -#: src/editor.c:4760 +#: src/editor.c:4764 msgid "_Colored objects" msgstr "_Színes rajzelemek" -#: src/editor.c:4760 +#: src/editor.c:4764 msgid "Cave objects are colored" msgstr "A rajzelemek kiemelése színnel" -#: src/editor.c:4761 +#: src/editor.c:4765 msgid "_Object list" msgstr "Ra_jzelem lista" -#: src/editor.c:4761 +#: src/editor.c:4765 msgid "Object list sidebar" msgstr "Objektumok oldalsáv" -#: src/editor.c:4762 +#: src/editor.c:4766 msgid "_Show variables in test" msgstr "_Belső változók mutatása tesztnél" -#: src/editor.c:4762 +#: src/editor.c:4766 msgid "Show a label during tests with some cave parameters" msgstr "A pálya teszt közben néhány belső változó értékét mutatja" -#: src/editor.c:5096 +#: src/editor.c:5100 msgid "Level shown:" msgstr "Szint:" -#: src/editor.c:5100 +#: src/editor.c:5104 msgid "" "Element used to draw points, lines, and rectangles. You can use middle-click " "to pick one from the cave." @@ -3627,7 +3822,7 @@ msgstr "" "A pontok, vonalak és téglalapok rajzolásához használt elem. A pályára a " "középső egérgombbal kattintva is kiválasztható." -#: src/editor.c:5105 +#: src/editor.c:5109 msgid "" "Element used to fill rectangles, and second element of joins. You can use " "Ctrl + middle-click to pick one from the cave." @@ -3636,61 +3831,35 @@ msgstr "" "billentyű megnyomásával és a középső gombbal kattintva a pályára is " "beállítható." -#: src/editor.c:5142 +#: src/editor.c:5146 msgid "_Objects" msgstr "_Objektumok" -#: src/editorexport.c:462 +#: src/editorexport.c:472 msgid "Saving HTML gallery" msgstr "HTML galéria mentése" -#: src/editorexport.c:484 -#, c-format -msgid "Caves: %d
\n" -msgstr "Pályák: %d
\n" - -#: src/editorexport.c:486 -#, c-format -msgid "Author: %s
\n" -msgstr "Szerző: %s
\n" - -#: src/editorexport.c:488 -#, c-format -msgid "Description: %s
\n" -msgstr "Leírás: %s
\n" - -#: src/editorexport.c:490 -#, c-format -msgid "WWW: %s
\n" -msgstr "WWW: %s
\n" - -#: src/editorexport.c:492 -#, c-format -msgid "Remark: %s
\n" -msgstr "Megjegyzés: %s
\n" - -#: src/editorexport.c:494 -#, c-format -msgid "Story:
%s
\n" -msgstr "Történet:
%s
\n" +#: src/editorexport.c:524 src/help.c:41 +msgid "Caves" +msgstr "A pályák" -#: src/editorexport.c:573 src/gtkmain.c:1801 +#: src/editorexport.c:631 src/gtkmain.c:1805 msgid "Normal cave" msgstr "Normál pálya" -#: src/editorexport.c:576 +#: src/editorexport.c:634 msgid "Diamond value" msgstr "Gyémánt értéke" -#: src/editorexport.c:577 +#: src/editorexport.c:635 msgid "Extra diamond value" msgstr "Plusz gyémánt értéke" -#: src/editorexport.c:580 +#: src/editorexport.c:638 msgid "Amoeba threshold and time (s)" msgstr "Amőba határ és idő (mp)" -#: src/editorexport.c:582 +#: src/editorexport.c:640 msgid "Magic wall milling time (s)" msgstr "Idő (mp)" @@ -3735,12 +3904,12 @@ msgid "Elements" msgstr "Elemek" #. TRANSLATORS: cave name, level x -#: src/gtkmain.c:511 +#: src/gtkmain.c:512 #, c-format msgid "%s, level %d" msgstr "%s, %d. szint" -#: src/gtkmain.c:549 +#: src/gtkmain.c:551 #, c-format msgid "" "%s\n" @@ -3755,133 +3924,133 @@ msgstr "" "\n" "Folytatás: tűzgomb" -#: src/gtkmain.c:589 +#: src/gtkmain.c:592 #, c-format msgid "You have %d points, and achieved a highscore." msgstr "%d pontod van, és felkerültél a dicsőség listára." -#: src/gtkmain.c:590 src/gtkmain.c:606 +#: src/gtkmain.c:593 src/gtkmain.c:609 msgid "Game over!" msgstr "Játék vége!" -#: src/gtkmain.c:605 +#: src/gtkmain.c:608 #, c-format msgid "You have %d points." msgstr "%d pontod van." -#: src/gtkmain.c:627 +#: src/gtkmain.c:630 #, c-format msgid "Lives: %d" msgstr "Élet: %d" -#: src/gtkmain.c:629 +#: src/gtkmain.c:632 msgid "Bonus life" msgstr "Jutalom élet" -#: src/gtkmain.c:634 +#: src/gtkmain.c:637 msgid "Continuing from snapshot" msgstr "Folytatás pillanatfelvételtől" -#: src/gtkmain.c:637 +#: src/gtkmain.c:640 msgid "Testing cave" msgstr "Pálya tesztelése" -#: src/gtkmain.c:640 +#: src/gtkmain.c:643 msgid "Playing replay" msgstr "Felvétel visszajátszása" -#: src/gtkmain.c:643 +#: src/gtkmain.c:646 msgid "Continuing replay" msgstr "Felvétel folytatása" -#: src/gtkmain.c:654 +#: src/gtkmain.c:657 #, c-format msgid "Diamonds: %03d Value: %02d" msgstr "Gyémántok: %03d Érték: %02d" -#: src/gtkmain.c:656 +#: src/gtkmain.c:659 #, c-format msgid "Diamonds: ??? Value: %02d" msgstr "Gyémántok: ??? Érték: %02d" -#: src/gtkmain.c:666 +#: src/gtkmain.c:669 #, c-format msgid "Keys: %d, %d, %d" msgstr "Kulcsok: %d, %d, %d" -#: src/gtkmain.c:667 +#: src/gtkmain.c:670 #, c-format msgid "Skeletons: %d Gravity change: %d" msgstr "Csontváz: %d Gravitáció: %d" -#: src/gtkmain.c:672 -#, c-format +#: src/gtkmain.c:675 +#, fuzzy, c-format msgid "" "Speed: %dms, Amoeba timer: %ds %d, %ds %d, Magic wall timer: %ds\n" "Expanding wall: %s, Creatures: %ds, %s, Gravity: %s\n" -"Kill player: %s, Sweet eaten: %s, Diamond key: %s" +"Kill player: %s, Sweet eaten: %s, Diamond key: %s, Diamonds: %d" msgstr "" "Sebesség: %d ms, amőba: %d s %d, %d s %d, varázsfal: %d s\n" "Növekedő fal: %s, szörnyek: %d s, %s, gravitáció: %s\n" "Játékos meghal: %s, cukorka: %s, gyémánt kulcs: %s" -#: src/gtkmain.c:682 +#: src/gtkmain.c:685 msgid "vertical" msgstr "függőleges" -#: src/gtkmain.c:682 +#: src/gtkmain.c:685 msgid "horizontal" msgstr "vízszintes" -#: src/gtkmain.c:684 +#: src/gtkmain.c:687 msgid "backwards" msgstr "hátra" -#: src/gtkmain.c:684 +#: src/gtkmain.c:687 msgid "forwards" msgstr "előre" -#: src/gtkmain.c:686 src/gtkmain.c:687 src/gtkmain.c:688 +#: src/gtkmain.c:689 src/gtkmain.c:690 src/gtkmain.c:691 msgid "yes" msgstr "igen" -#: src/gtkmain.c:686 src/gtkmain.c:687 src/gtkmain.c:688 +#: src/gtkmain.c:689 src/gtkmain.c:690 src/gtkmain.c:691 msgid "no" msgstr "nem" -#: src/gtkmain.c:1291 +#: src/gtkmain.c:1294 msgid "GDash cannot load file from a network link." msgstr "A GDash nem tudja a hálózatról letölteni a fájlokat." -#: src/gtkmain.c:1310 +#: src/gtkmain.c:1313 msgid "Loaded caveset from file:" msgstr "Játék betöltve a fájlból:" -#: src/gtkmain.c:1424 +#: src/gtkmain.c:1427 msgid "There are no caves in this cave set!" msgstr "Nincs még pálya ebben a játékban!" -#: src/gtkmain.c:1428 +#: src/gtkmain.c:1431 msgid "Select cave to play" msgstr "Pálya kiválasztása" -#: src/gtkmain.c:1450 +#: src/gtkmain.c:1453 msgid "Cave:" msgstr "Pálya:" -#: src/gtkmain.c:1471 +#: src/gtkmain.c:1474 msgid "Level:" msgstr "Szint:" -#: src/gtkmain.c:1482 +#: src/gtkmain.c:1486 msgid "Preview" msgstr "Előnézet" -#: src/gtkmain.c:1641 src/help.c:126 +#: src/gtkmain.c:1645 src/help.c:135 msgid "Replays" msgstr "Visszajátszások" -#: src/gtkmain.c:1646 +#: src/gtkmain.c:1650 msgid "" "Hint: When watching a replay, you can use the usual movement keys (left, " "right...) to stop the replay and immediately continue the playing of the " @@ -3892,256 +4061,269 @@ msgstr "" "pályát." #. TRANSLATORS: "Lvl" here stands for Level. Some shorthand should be used. -#: src/gtkmain.c:1699 +#: src/gtkmain.c:1703 msgid "Lvl" msgstr "Sz." -#: src/gtkmain.c:1710 src/gtkui.c:1001 +#: src/gtkmain.c:1714 src/gtkui.c:1003 msgid "Score" msgstr "Pont" -#: src/gtkmain.c:1715 +#: src/gtkmain.c:1719 msgid "Comment" msgstr "Megjegyzés" -#: src/gtkmain.c:1722 +#: src/gtkmain.c:1726 msgid "Saved" msgstr "Mentett" -#: src/gtkmain.c:1763 src/gtkmain.c:1806 +#: src/gtkmain.c:1767 src/gtkmain.c:1810 msgid "Description: " msgstr "Leírás:" -#: src/gtkmain.c:1768 src/gtkmain.c:1811 +#: src/gtkmain.c:1772 src/gtkmain.c:1815 msgid "Author: " msgstr "Szerző:" -#: src/gtkmain.c:1773 src/gtkmain.c:1816 +#: src/gtkmain.c:1777 src/gtkmain.c:1820 msgid "Date: " msgstr "Dátum:" -#: src/gtkmain.c:1778 +#: src/gtkmain.c:1782 msgid "Diffuculty: " msgstr "Nehézség:" -#: src/gtkmain.c:1783 src/gtkmain.c:1827 +#: src/gtkmain.c:1787 src/gtkmain.c:1831 msgid "Story:\n" msgstr "Történet:\n" -#: src/gtkmain.c:1788 src/gtkmain.c:1832 +#: src/gtkmain.c:1792 src/gtkmain.c:1836 msgid "Remark:\n" msgstr "Megjegyzés:\n" -#: src/gtkmain.c:1800 +#: src/gtkmain.c:1804 msgid "Type: " msgstr "Típus:" -#: src/gtkmain.c:1821 +#: src/gtkmain.c:1825 msgid "Difficulty: " msgstr "Nehézség:" -#: src/gtkmain.c:1852 +#: src/gtkmain.c:1856 msgid "Caveset information" msgstr "Játék információ" -#: src/gtkmain.c:1921 +#: src/gtkmain.c:1925 msgid "_Play" msgstr "_Játék" -#: src/gtkmain.c:1923 +#: src/gtkmain.c:1927 msgid "_Settings" msgstr "_Beállítások" -#: src/gtkmain.c:1927 +#: src/gtkmain.c:1931 msgid "_Error console" msgstr "_Hibakonzol" -#: src/gtkmain.c:1929 +#: src/gtkmain.c:1933 msgid "Caveset _information" msgstr "Játék _információ" -#: src/gtkmain.c:1929 +#: src/gtkmain.c:1933 msgid "Show information about the game and its caves" msgstr "Információ a játékról és a pályákról" -#: src/gtkmain.c:1934 +#: src/gtkmain.c:1938 msgid "_Control keys" msgstr "_Irányító gombok" -#: src/gtkmain.c:1935 +#: src/gtkmain.c:1939 msgid "_New game" msgstr "Új _játék" -#: src/gtkmain.c:1935 +#: src/gtkmain.c:1939 msgid "Start new game" msgstr "Új játék indítása" -#: src/gtkmain.c:1936 +#: src/gtkmain.c:1940 msgid "Cave _editor" msgstr "Pálya_szerkesztő" -#: src/gtkmain.c:1938 +#: src/gtkmain.c:1942 msgid "Load _internal game" msgstr "Beé_pített játék betöltése" -#: src/gtkmain.c:1939 +#: src/gtkmain.c:1943 msgid "Open _recent" msgstr "_Legutóbbi megnyitása" -#: src/gtkmain.c:1944 +#: src/gtkmain.c:1951 msgid "Show _replays" msgstr "Visszajá_tszások" -#: src/gtkmain.c:1948 +#: src/gtkmain.c:1951 +msgid "List replays which are recorded for caves in this caveset" +msgstr "A játékhoz tartozó visszajátszások listázása" + +#: src/gtkmain.c:1955 msgid "_Take snapshot" msgstr "_Pillanatfelvétel" -#: src/gtkmain.c:1949 +#: src/gtkmain.c:1956 msgid "Re_start level" msgstr "Pálya új_rakezdése" -#: src/gtkmain.c:1949 +#: src/gtkmain.c:1956 msgid "Restart current level" msgstr "Pálya újrakezdése" -#: src/gtkmain.c:1950 +#: src/gtkmain.c:1957 msgid "_End game" msgstr "Játék vég_e" -#: src/gtkmain.c:1950 +#: src/gtkmain.c:1957 msgid "End current game" msgstr "Aktuális játék befejezése" -#: src/gtkmain.c:1954 +#: src/gtkmain.c:1961 msgid "_Revert to snapshot" msgstr "_Pillanatfelvétel visszatöltése" -#: src/gtkmain.c:1958 +#: src/gtkmain.c:1965 msgid "Pause game" msgstr "Játék szünet" -#: src/gtkmain.c:1959 +#: src/gtkmain.c:1966 msgid "Fullscreen mode during play" msgstr "Teljes képernyős mód a játék közben" -#: src/gtkmain.c:1960 +#: src/gtkmain.c:1967 msgid "Fast for_ward" msgstr "Gyor_sított játék" -#: src/gtkmain.c:1960 +#: src/gtkmain.c:1967 msgid "Fast forward" msgstr "Gyorsított játék" -#: src/gtkmain.c:2168 +#: src/gtkmain.c:2180 msgid "Start editor" msgstr "Pályaszerkesztő elindítása" -#: src/gtkmain.c:2169 +#: src/gtkmain.c:2181 msgid "Save caveset in a HTML gallery" msgstr "Játék pályáinak mentése egy HTML galériában" -#: src/gtkmain.c:2170 +#: src/gtkmain.c:2182 +msgid "Link stylesheet from file to a HTML gallery, eg. \"../style.css\"" +msgstr "" +"A megadott nevű stíluslap linkelése a HTML galériához, pl. \"../style.css\"" + +#: src/gtkmain.c:2183 +msgid "Link shortcut icon to a HTML gallery, eg. \"../favicon.ico\"" +msgstr "" +"A megadott nevű ikon linkelése a HTML galériához, pl. \"../favicon.ico\"" + +#: src/gtkmain.c:2184 msgid "" "Save cave C, level L in a PNG image. If no cave selected, uses a random one" msgstr "" "C. pálya, L. szint mentése PNG képben. Ha nincs pálya kijelölve, " "véletlenszerűen választ" -#: src/gtkmain.c:2171 +#: src/gtkmain.c:2185 msgid "Set PNG image size. Default is 128x96, set to 0x0 for unscaled" msgstr "PNG kép méretének állítása. Alap 128x96, az eredeti mérethez 0x0" -#: src/gtkmain.c:2172 +#: src/gtkmain.c:2186 msgid "Save caveset in a BDCFF file" msgstr "Játék pályáinak mentése egy BDCFF fájlban" -#: src/gtkmain.c:2173 +#: src/gtkmain.c:2187 msgid "Batch mode: quit after specified tasks" msgstr "Kötegelt üzemmód: a megadott műveletek után kilépés" -#: src/gtkmain.c:2228 src/sdlmain.c:1228 +#: src/gtkmain.c:2242 src/sdlmain.c:731 #, c-format msgid "Errors during loading caveset from file '%s'" msgstr "Hiba a pályák betöltése közben '%s' fájlból" -#: src/gtkmain.c:2233 src/sdlmain.c:1235 +#: src/gtkmain.c:2247 src/sdlmain.c:738 #, c-format msgid "%d: no such internal caveset" msgstr "%d: nincs ilyen számú beépített játék!" -#: src/gtkmain.c:2262 -#, fuzzy +#: src/gtkmain.c:2276 msgid "Invalid cave or level number!" -msgstr "Hibás számú pálya vagy szint!\n" +msgstr "Hibás számú pálya vagy szint!" -#: src/gtkmain.c:2275 +#: src/gtkmain.c:2289 #, c-format msgid "Invalid image size: %s" msgstr "%s: hibás képméret" -#: src/gtkui.c:350 +#: src/gtkui.c:351 msgid "Default" msgstr "Eredeti" -#: src/gtkui.c:439 +#: src/gtkui.c:440 msgid "All image files" msgstr "Összes képfájl" -#: src/gtkui.c:509 +#: src/gtkui.c:510 msgid "Add Theme from Image File" msgstr "Téma hozzáadása képfájlból" -#: src/gtkui.c:544 +#: src/gtkui.c:545 msgid "The selected image cannot be used as a GDash theme." msgstr "A kiválasztott kép nem használható GDash témaként." -#: src/gtkui.c:569 +#: src/gtkui.c:570 #, c-format msgid "Do you really want to remove theme '%s'?" msgstr "Biztos törölni szeretnéd a(z) '%s' témát?" -#: src/gtkui.c:570 +#: src/gtkui.c:571 #, c-format msgid "The image file of the theme is '%s'." msgstr "A téma kép fájlja '%s'." -#: src/gtkui.c:582 +#: src/gtkui.c:583 msgid "Cannot delete the image file." msgstr "Nem lehet törölni a kép fájlt." -#: src/gtkui.c:630 +#: src/gtkui.c:631 msgid "Language (requires restart)" msgstr "Nyelv (újraindítást igényel)" -#: src/gtkui.c:631 +#: src/gtkui.c:632 msgid "The language of the application. Requires restart!" msgstr "Az alkalmazás nyelve. Újraindítás szükséges!" -#: src/gtkui.c:632 +#: src/gtkui.c:633 msgid "Cave options" msgstr "Pálya hatások" -#: src/gtkui.c:633 +#: src/gtkui.c:634 msgid "Mouse play (experimental!)" msgstr "Játék egérrel (kísérleti!)" -#: src/gtkui.c:633 +#: src/gtkui.c:634 msgid "Use the mouse to play. The player will follow the cursor!" msgstr "Játék az egérrel. A játékos követni fogja a mutatót!" -#: src/gtkui.c:634 +#: src/gtkui.c:635 msgid "All caves selectable" msgstr "Összes pálya kiválasztható" -#: src/gtkui.c:634 +#: src/gtkui.c:635 msgid "All caves and intermissions can be selected at game start." msgstr "Összes pálya és jutalom pálya kiválasztható kezdőpályának." -#: src/gtkui.c:635 +#: src/gtkui.c:636 msgid "Import as all caves selectable" msgstr "Összes pálya importálása kiválaszthatóként" -#: src/gtkui.c:635 +#: src/gtkui.c:636 msgid "" "Original, C64 games are imported not with A, E, I, M caves selectable, but " "all caves (ABCD, EFGH... excluding intermissions). This does not affect " @@ -4151,11 +4333,11 @@ msgstr "" "kiválaszthatóak, hanem az összes nem jutalom pálya (ABCD, EFGH...). Ez nincs " "hatással a BDCFF fájlokra." -#: src/gtkui.c:636 +#: src/gtkui.c:637 msgid "Use BDCFF highscore" msgstr "BDCFF dicsőséglista használata" -#: src/gtkui.c:636 +#: src/gtkui.c:637 msgid "" "Use BDCFF highscores. GDash saves highscores in its own configuration " "directory and also in the *.bd files. However, it prefers loading them from " @@ -4170,55 +4352,71 @@ msgstr "" "engedélyezésével a *.bd fájlból olvashatod be a dicsőséglistát. A beállítás " "egy adott fájl esetén egyedileg is engedélyezhető a fájl megnyitás ablakban." -#: src/gtkui.c:637 +#: src/gtkui.c:638 msgid "Show story" msgstr "Történet mutatása" -#: src/gtkui.c:637 +#: src/gtkui.c:638 msgid "" "If the cave has a story, it will be shown when the cave is first started." msgstr "" "Ha a pályához tartozik történet, azt mutatni fogja a program a játékosnak, " "amikor először játszik rajta." -#: src/gtkui.c:639 +#: src/gtkui.c:640 msgid "Time as min:sec" msgstr "Idő óra:perc formában" -#: src/gtkui.c:639 +#: src/gtkui.c:640 msgid "Show times in minutes and seconds, instead of seconds only." msgstr "Az idő mutatása perc:másodperc alakban, csupán másodpercek helyett." -#: src/gtkui.c:640 +#: src/gtkui.c:641 msgid "No invisible outbox" msgstr "Nincs láthatatlan kijárat" -#: src/gtkui.c:640 +#: src/gtkui.c:641 msgid "Show invisible outboxes as visible (blinking) ones." msgstr "Láthatatlan kijáratok mutatása látható (villogó) kijáratokként." -#: src/gtkui.c:641 +#: src/gtkui.c:642 msgid "Sound options (require restart)" msgstr "Hangok (újraindítást igényelnek)" -#: src/gtkui.c:642 +#: src/gtkui.c:643 msgid "Play sounds. Enabling this setting requires a restart!" msgstr "" "Hangok lejátszása. Ennek engedélyezése után újra kell indítani a programot!" -#: src/gtkui.c:643 +#: src/gtkui.c:644 +msgid "Music volume" +msgstr "Zene hangerő" + +#: src/gtkui.c:644 +msgid "Volume of title screen music." +msgstr "A kezdőképernyő zene hangereje." + +#: src/gtkui.c:645 +msgid "Cave volume" +msgstr "Jéték hangerő" + +#: src/gtkui.c:645 +msgid "Volume of sounds played in a cave." +msgstr "A pálya hangjainak hangereje." + +#: src/gtkui.c:646 msgid "Classic sounds only" msgstr "Csak klasszikus hangok" -#: src/gtkui.c:643 +#: src/gtkui.c:646 msgid "Play only classic sounds taken from the original game." msgstr "Csak klasszikus hangok lejátszása, az eredeti játékból." -#: src/gtkui.c:644 +#: src/gtkui.c:647 msgid "16-bit mixing" msgstr "16 bites keverés" -#: src/gtkui.c:644 +#: src/gtkui.c:647 msgid "" "Use 16-bit mixing of sounds. Try changing this setting if sound is clicky. " "Changing this setting requires a restart!" @@ -4226,11 +4424,11 @@ msgstr "" "A hangok 16 bites keverése. Ha furcsa a hang, próbáld meg átállítani. A " "megváltoztatása újraindítást igényel!" -#: src/gtkui.c:645 +#: src/gtkui.c:648 msgid "44kHz mixing" msgstr "44 kHz-es keverés" -#: src/gtkui.c:645 +#: src/gtkui.c:648 msgid "" "Use 44kHz mixing of sounds. Try changing this setting if sound is clicky. " "Changing this setting requires a restart!" @@ -4238,92 +4436,92 @@ msgstr "" "A hangok 44 kHz-es keverése. Próbáld meg átállítani, ha a hang furcsa. A " "megváltoztatása a program újraindítását igényli!" -#: src/gtkui.c:649 +#: src/gtkui.c:652 msgid "Display options" msgstr "Megjelenítés" -#: src/gtkui.c:650 +#: src/gtkui.c:653 msgid "Random colors" msgstr "Véletlen színek" -#: src/gtkui.c:650 +#: src/gtkui.c:653 msgid "Use randomly selected colors for caves." msgstr "Véletlenszerűen kiválasztott színek használata a pályákhoz." -#: src/gtkui.c:655 +#: src/gtkui.c:654 msgid "PAL emulation for game" msgstr "PAL emuláció a játékhoz" -#: src/gtkui.c:655 src/gtkui.c:656 +#: src/gtkui.c:654 src/gtkui.c:655 msgid "Use PAL emulated graphics, ie. lines are striped." msgstr "PAL emulált grafika, vagyis a rajzok csíkosak." -#: src/gtkui.c:656 +#: src/gtkui.c:655 msgid "PAL emulation for editor" msgstr "PAL emuláció a szerkesztőhöz" -#: src/gtkui.c:658 +#: src/gtkui.c:657 msgid "Fine scroll" msgstr "Finom görgetés" -#: src/gtkui.c:658 +#: src/gtkui.c:657 msgid "Fine scroll - 50 frames per second." msgstr "Finom görgetés - 50 képkocka másodpercenként." -#: src/gtkui.c:659 +#: src/gtkui.c:658 #, c-format msgid "PAL scanline shade (%%)" msgstr "PAL pászta árnyalás (%%)" -#: src/gtkui.c:659 +#: src/gtkui.c:658 msgid "Darker rows for PAL emulation." msgstr "Sötétebb sorok a PAL emulációhoz." -#: src/gtkui.c:660 +#: src/gtkui.c:659 msgid "C64 palette" msgstr "C64 paletta" -#: src/gtkui.c:661 +#: src/gtkui.c:660 msgid "The color palette for games imported from C64 files." msgstr "A színpaletta az importált C64 játékokhoz." -#: src/gtkui.c:662 +#: src/gtkui.c:661 msgid "C64 DTV palette" msgstr "C64 DTV paletta" -#: src/gtkui.c:663 +#: src/gtkui.c:662 msgid "The color palette for imported C64 DTV games." msgstr "A színpaletta az importált C64 DTV játékokhoz." -#: src/gtkui.c:664 +#: src/gtkui.c:663 msgid "Atari palette" msgstr "Atari paletta" -#: src/gtkui.c:665 +#: src/gtkui.c:664 msgid "The color palette for imported Atari games." msgstr "A színpaletta az importált Atari játékokhoz." -#: src/gtkui.c:666 +#: src/gtkui.c:665 msgid "Preferred palette" msgstr "Kedvenc paletta" -#: src/gtkui.c:667 +#: src/gtkui.c:666 msgid "New caves and random colored caves use this palette." msgstr "Az új és a véletlenszerűen színezett pályák ezt a palettát használják." -#: src/gtkui.c:679 +#: src/gtkui.c:678 msgid "GDash Preferences" msgstr "A GDash beállításai" -#: src/gtkui.c:684 +#: src/gtkui.c:683 msgid "_Remove theme" msgstr "Téma _törlése" -#: src/gtkui.c:689 +#: src/gtkui.c:688 msgid "_Add theme" msgstr "_Téma hozzáadása" -#: src/gtkui.c:766 +#: src/gtkui.c:765 msgid "" "This is the list of available themes. Use the Add Theme button to install a " "new one." @@ -4331,39 +4529,39 @@ msgstr "" "A rendelkezésre álló témák listája. A téma hozzáadása gombbal lehet újat " "telepíteni." -#: src/gtkui.c:787 +#: src/gtkui.c:786 msgid "Theme" msgstr "Téma" -#: src/gtkui.c:879 +#: src/gtkui.c:881 msgid "GDash Control Keys" msgstr "GDash billentyűk" -#: src/gtkui.c:888 +#: src/gtkui.c:890 msgid "Movements" msgstr "Mozgások" -#: src/gtkui.c:893 +#: src/gtkui.c:895 msgid "Fire" msgstr "Tűz" -#: src/gtkui.c:894 +#: src/gtkui.c:896 msgid "Fire" msgstr "Tűz" -#: src/gtkui.c:895 +#: src/gtkui.c:897 msgid "Fire (alternative)" msgstr "Tűz (alternatív)" -#: src/gtkui.c:896 +#: src/gtkui.c:898 msgid "Suicide" msgstr "Öngyilkosság" -#: src/gtkui.c:897 +#: src/gtkui.c:899 msgid "Suicide" msgstr "Öngyilkosság" -#: src/gtkui.c:899 +#: src/gtkui.c:901 msgid "" "Click on a button to change a key. You can set two keys for fire (snapping) " "for convenience. Those behave exactly the same way in the game." @@ -4372,83 +4570,85 @@ msgstr "" "billentyűt is megadhatsz, kényelmi okokból. Azok teljesen egyformán működnek " "a játékban." -#: src/gtkui.c:986 src/help.c:225 +#: src/gtkui.c:988 src/help.c:234 msgid "Highscores" msgstr "Pontok" -#: src/gtkui.c:992 +#: src/gtkui.c:994 msgid "Rank" msgstr "Rang" -#: src/gtkui.c:1138 +#: src/gtkui.c:1140 #, c-format -msgid "Cave set \"%s\" is edited. Discard changes?" -msgstr "A(z) \"%s\" játék megváltozott. Dobjam el a változtatásokat?" +msgid "Caveset \"%s\" is edited or new replays are added. Discard changes?" +msgstr "" +"A(z) \"%s\" játék megváltozott vagy új visszajátszások vannak. Dobjam el a " +"változtatásokat?" -#: src/gtkui.c:1139 +#: src/gtkui.c:1141 msgid "If you discard the caveset, all changes and new replays will be lost." msgstr "" "Ha eldobod a játékot, az összes változtatás és az új visszajátszások " "elvesznek." -#: src/gtkui.c:1143 +#: src/gtkui.c:1145 msgid "_Discard" msgstr "El_dob" -#: src/gtkui.c:1162 +#: src/gtkui.c:1164 #, c-format msgid "The file (%s) already exists, and will be overwritten." msgstr "A fájl (%s) már létezik, és felül lesz írva." -#: src/gtkui.c:1163 +#: src/gtkui.c:1165 msgid "The file already exists. Do you want to overwrite it?" msgstr "A fájl már létezik. Felülírjam?" -#: src/gtkui.c:1231 +#: src/gtkui.c:1233 msgid "Save File As" msgstr "Játék mentése másként" -#: src/gtkui.c:1235 +#: src/gtkui.c:1237 msgid "BDCFF cave sets (*.bd)" msgstr "BDCFF pályák (*.bd)" -#: src/gtkui.c:1240 +#: src/gtkui.c:1242 msgid "All files (*)" msgstr "Összes fájl (*)" -#: src/gtkui.c:1332 +#: src/gtkui.c:1334 msgid "Open File" msgstr "Fájl megnyitása" -#: src/gtkui.c:1334 +#: src/gtkui.c:1336 msgid "Load _highscores from BDCFF file" msgstr "_Dicsőséglista betöltése a BDCFF fájlból" -#: src/gtkui.c:1341 +#: src/gtkui.c:1343 msgid "GDash cave sets" msgstr "GDash pályák" -#: src/gtkui.c:1391 +#: src/gtkui.c:1393 msgid "Loaded game:" msgstr "Betöltött játék:" -#: src/gtkui.c:1467 +#: src/gtkui.c:1469 msgid "GDash Errors" msgstr "GDash hibák" -#: src/gtkui.c:1537 +#: src/gtkui.c:1539 msgid "_Show all" msgstr "Ö_sszes mutatása" -#: src/gtkui.c:1587 +#: src/gtkui.c:1589 msgid "Select Key" msgstr "Billentyű kiválasztása" -#: src/gtkui.c:1595 +#: src/gtkui.c:1597 msgid "Press key for action:" msgstr "Nyomd meg a billentyűt a következőhöz:" -#: src/gtkui.c:1623 +#: src/gtkui.c:1625 #, c-format msgid "Click here to set the key for action: %s" msgstr "Kattints ide a billentyű kiválasztásához ehhez: %s" @@ -4463,17 +4663,13 @@ msgstr "" "megadott idő alatt, és megkeresd a kijáratot. A játékos figurát te irányítod " "az adott feladvány megoldásához." -#: src/help.c:41 -msgid "Caves" -msgstr "A pályák" - #: src/help.c:42 msgid "" "The game comes with many built-in and pre-installed cave sets, and you can " "also make up your own levels. Just use the options in the File menu. You can " "load caves stored in the BDCFF format, and import from other older file " "formats, like the No One's Final Boulder, the Construction Kit file format, " -"No One's Delight Boulder, an Atari game format, and many more." +"No One's Delight Boulder, an Atari game format and many more." msgstr "" "A játék sok beépített és telepített pályagyűjteménnyel rendelkezik, és te is " "tervezhetsz pályákat. Használd a Fájl menű opcióit. A játék képes betölteni " @@ -4487,26 +4683,22 @@ msgstr "A játék" #: src/help.c:49 msgid "" -"To play the game, press the New Game button. You can select which level you " -"start playing at. During the game, you can control your player with the " -"cursor keys. The Ctrl key has a special meaning: you can snap items, ie. " -"pick up things without moving. If you get stuck, press Escape to restart the " -"level. If there are too many players in the cave and you cannot move, " -"pressing F2 causes the active one to explode. With F11, you can switch to " -"full screen mode. To view the alternative status bar which show keys and " -"skeletons collected, hold down the left shift button.\n" -"These are the game elements:" -msgstr "" -"A játék indításához kattints az Új játék gombra. A felugró ablakban " -"kiválaszthatod, melyik pályán kezded a játékot. A figurát a kurzor " -"billentyűkkel irányíthatod. A Ctrl billentyű segítségével el tudsz lopni " -"elemeket, vagyis fölveheted őket anélkül, hogy mozognál. Ha beragadtál, az " -"Escape billentyűvel kezdheted újra a pályát. Az F11 billentyűvel pedig " -"teljes képernyős módba válthatsz. A második státusz sorhoz a bal oldali " -"Shift gombot kell nyomva tartani.\n" -"A játék elemei a következőek:" +"The main idea of this game is very simple. You have to guide your player " +"through the mazes of dirt and stones, to collect diamonds within a given " +"time limit. Make sure not to let stones fall on your head or enemies touch " +"you! After you collect the correct amount of diamonds, the screen will flash " +"quickly and a secret door is revealed for you to advance to the next level. " +"As the game progresses, levels usually become more intricate and difficult." +msgstr "" +"A játék alapötlete elég egyszerű. A figurát föld és kövek labirintusán " +"keresztül kell vezetned, a megfelelő számú gyémántot összegyűjtve egy adott " +"idő alatt. Vigyázz, hogy ne essenek kövek a fejedre, és ne érj hozzá " +"semmilyen ellenséghez! Ha megvan a kellő számú gyémánt, a képernyő villanni " +"fog, és egy titkos ajtó jelenik meg, amelyen keresztül a következő pályára " +"juthatsz. Ahogy haladsz a játékban, a pályák általában egyre összetettebbek " +"és nehezebbek lesznek." -#: src/help.c:51 +#: src/help.c:54 msgid "" "This is the player. He can move through space and dirt. He can pick up " "diamonds and push stones, but he should avoid flies." @@ -4514,36 +4706,42 @@ msgstr "" "Ez a játékos. Üres helyen, és földön keresztül tud mozogni. Gyémántokat tud " "gyűjteni, és köveket tolni; de más lényektől távol kell tartsa magát." -#: src/help.c:52 +#: src/help.c:55 msgid "Stones and diamonds fall down in space, creatures can freely move here." msgstr "" "A kövek és a gyémántok leesnek az üres helyen, és különböző lények is tudnak " "itt mozogni." -#: src/help.c:53 +#: src/help.c:56 msgid "You can move through dirt leaving empty space behind. Amoeba eats it." msgstr "" "A földön keresztül mozoghatsz, üres helyet hagyva magad után. Az amőba is " "áthatol rajta." -#: src/help.c:54 +#: src/help.c:57 msgid "" "This is also dirt, but has a different color. In any other sense, it is " "identical to the above one." msgstr "Ez is föld, de más színű. Minden szempontból megegyezik az előzővel." -#: src/help.c:55 +#: src/help.c:58 +msgid "Dirt ball and loose dirt" +msgstr "Föld labda és laza föld" + +#: src/help.c:58 msgid "" -"A rolling ball of dirt. You cannot push it, but you can dig it away. " -"Sometimes it helps you to solve puzzles." +"A rolling ball and a falling piece of dirt. You cannot push them, but you " +"can dig them away. Sometimes they help you to solve puzzles." msgstr "" +"Egy guruló és egy lefelé zuhanó földdarab. Nem lehet tolni őket, de ugyanúgy " +"keresztüláshatóak, mint a rendes föld. Néha segítenek megoldani a fejtörőket." -#: src/help.c:56 +#: src/help.c:59 msgid "The main object of the game is to collect required number of diamonds." msgstr "" "A játék lényege, hogy egy megadott számú gyémántot össze kell gyűjteni." -#: src/help.c:57 +#: src/help.c:60 msgid "" "Stones can be pushed by the player, and he can drop them on flies to make an " "explosion." @@ -4551,13 +4749,29 @@ msgstr "" "A köveket el tudja tolni a játékos, és a legyek fejére tudja dobni, hogy egy " "robbanás keletkezzen." -#: src/help.c:58 +#: src/help.c:61 +msgid "" +"Exactly like a diamond, but instead of falling down, it flies upwards, as " +"high as it can." +msgstr "" +"Mint egy gyémánt, de a lefelé esés helyett felfelé repül, amilyen magasra " +"csak tud." + +#: src/help.c:62 +msgid "" +"The flying variant of a stone. Note that this one can also crush enemies as " +"well as the player!" +msgstr "" +"A kő repülő változata. Ez ugyanúgy fel tudja robbantani a szörnyeket, és a " +"játékost is!" + +#: src/help.c:63 msgid "" "Like ordinary stones, but these are so heavy, that you cannot push them." msgstr "" "Mint a rendes kövek, de ezek olyan nehezek, hogy nem lehet eltolni őket." -#: src/help.c:59 +#: src/help.c:64 msgid "" "The wall can't be moved but an explosion destroys it. You can't pass through " "the wall - instead try to blow it up." @@ -4565,15 +4779,15 @@ msgstr "" "Ez a fal nem mozdítható, de egy robbanás lerombolja. Nem tudsz " "keresztülmenni rajta." -#: src/help.c:60 +#: src/help.c:65 msgid "This is rock stable wall. It's impossible to move or blow it up." msgstr "Ez a fal törhetetlen. Lehetetlen megmozdítani vagy felrobbantani." -#: src/help.c:61 +#: src/help.c:66 msgid "Sloped steel wall" msgstr "Ferde törhetetlen fal" -#: src/help.c:61 +#: src/help.c:66 msgid "" "Acts like an ordinary steel wall, but it is sloped: stones and diamonds will " "roll down on it in some direction. Brick walls and dirt also have sloped " @@ -4582,7 +4796,7 @@ msgstr "" "Mint a rendes fal, de ferde: a kövek é a gyémántok le fognak gurulni róla " "valamilyen irányban. A kőfalaknak és a földnek is van ferde változata." -#: src/help.c:62 +#: src/help.c:67 msgid "" "After collecting the required number of diamonds, look for a flashing out " "box to exit the cave. Closed out box looks like steel wall, but beware of " @@ -4594,23 +4808,24 @@ msgstr "" "de vigyázz a robbantgatással: ha véletlenül felrobbanthatod ezt is, nem " "tudod befejezni a pályát." -#: src/help.c:65 +#: src/help.c:70 msgid "" "This is also an exit, but it remains non-flashing and thus is difficult to " "find." msgstr "" "Ez is egy kijárat, de nem villog, ha nyitva van, és így nehéz megtalálni." -#: src/help.c:66 -msgid "Guard" -msgstr "Szörny" +#: src/help.c:71 +msgid "Firefly" +msgstr "Légy" -#: src/help.c:66 +#: src/help.c:71 msgid "" -"Guards move through the space. They can fly in the entire cave. Guards blow " -"up when hit by falling stone or diamond. Amoeba is also deadly for them. " -"They explode into space, producing 3x3 square of empty space. Guards are " -"left spinning - they prefer turning left, usually counter clockwise." +"Fireflies move through the space. They can fly in the entire cave. Fireflies " +"blow up when hit by falling stone or diamond. Amoeba is also deadly for " +"them. They explode into space, producing 3x3 square of empty space. " +"Fireflies are left spinning - they prefer turning left, usually counter " +"clockwise." msgstr "" "A legyek az üres járatokon keresztül mozognak, mindenfelé az egész pályán. " "Ha egy kővel vagy gyémánttal fejbe vágod őket, felrobbannak. Az amőba " @@ -4618,32 +4833,36 @@ msgstr "" "utánuk. Balra pörögnek, vagyis általában az óramutató járásával ellentétes " "irányba szeretnek fordulni." -#: src/help.c:67 -msgid "Alternative guard" -msgstr "Alternatív szörny" +#: src/help.c:72 +msgid "Alternative firefly" +msgstr "Alternatív·szörny" -#: src/help.c:67 -msgid "Just like a normal guard, but it is right spinning." +#: src/help.c:72 +msgid "Just like a normal firefly, but it is right spinning." msgstr "Mint egy rendes szörny, csak jobbra fordul." -#: src/help.c:68 -#, fuzzy +#: src/help.c:73 msgid "Dragonfly" -msgstr "Szabad rajz" +msgstr "Szitakötő" -#: src/help.c:68 +#: src/help.c:73 msgid "" "These creatures also guard the diamonds you would like to collect. But they " "move very differently. They like to run straight ahead, and only change " "direction if they bump into something. Like normal guards, you must not " "touch them. But you can easily crush them with stones." msgstr "" +"Ezek a lények is a gyémántokra vigyáznak, amiket gyűjtenél. De az előzőekhez " +"képest nagyon eltérően mozognak. Előre mennek, ameddig csak tudnak, éscsak " +"akkor áltanak irányt, ha beleütköznek valamibe. Mint a többi lényhez, " +"ezekhez sem szabad hozzáérned. Viszont könnyedén felrobbanthatod őket " +"kövekkel." -#: src/help.c:69 +#: src/help.c:74 msgid "Butterfly" msgstr "Pillangó" -#: src/help.c:69 +#: src/help.c:74 msgid "" "Butterflies are similar to guards. In contrast to guards they explode into " "diamonds, producing 3x3 square of diamonds. Butterflies are right spinning, " @@ -4653,19 +4872,19 @@ msgstr "" "lesznek. A pillangók jobbra szeretnek fordulni, az óramutató járásával " "egyező irányba pörögnek." -#: src/help.c:70 +#: src/help.c:75 msgid "Alternative butterfly" msgstr "Alternatív·pillangó" -#: src/help.c:70 +#: src/help.c:75 msgid "Just like a normal butterfly, but it is left spinning." msgstr "Mint egy rendes pillangó, csak balra fordul." -#: src/help.c:71 +#: src/help.c:76 msgid "Stonefly" msgstr "Molylepke" -#: src/help.c:71 +#: src/help.c:76 msgid "" "This flying moth behaves just like a butterfly, except that it explodes into " "stones instead of diamonds." @@ -4673,11 +4892,11 @@ msgstr "" "Ez a repkedő moly pontosan úgy viselkedik, mint egy lepke, csak robbanáskor " "kövek keletkeznek gyémánt helyett." -#: src/help.c:72 +#: src/help.c:77 msgid "Cow" msgstr "Tehén" -#: src/help.c:72 +#: src/help.c:77 msgid "" "This creature wanders around the cave like a guard, but you can touch it. If " "it is enclosed, it turns into a skeleton." @@ -4685,7 +4904,7 @@ msgstr "" "Ez a lény a pályán egy szörnyhöz hasonlóan kering, viszont meg szabad " "érinteni. Ha be van zárva, csontvázzá változik." -#: src/help.c:73 +#: src/help.c:78 msgid "" "This is ghost which wanders aimlessly. If it touches you, it will explode in " "an x-shape to many different elements." @@ -4693,7 +4912,7 @@ msgstr "" "Ez egy céltalanul bolyongó szellem. Ha hozzád ér, egy x-alakú robbanás " "kíséretében különböző elemekké alakul." -#: src/help.c:74 +#: src/help.c:79 msgid "" "Biters will eat all the dirt they can reach. They move in a predictable way. " "They also can eat diamonds, so better don't let them be taken away. They " @@ -4705,7 +4924,7 @@ msgstr "" "köveket maguk mögé dobva is képesek tovább haladni, ha nincs helyük a " "forduláshoz. Így néha meg tudsz szabadulni az utadat elálló kövektől." -#: src/help.c:75 +#: src/help.c:80 msgid "" "A chasing stone looks like an ordinary stone, it can even pass slime. It is " "lightweight, you can push it at once, as long as it is sleeping. Once it " @@ -4717,7 +4936,7 @@ msgstr "" "zuhanni kezd, felébred, és üldözni kezd téged. A felébredt köveket is " "eltolhatod, ha ettél cukorkát." -#: src/help.c:76 +#: src/help.c:81 msgid "" "Amoeba grows randomly through space and dirt. When it is closed, stops " "growing and transforms into diamonds. When it is grown too big, it suddenly " @@ -4729,7 +4948,7 @@ msgstr "" "nő, akkor hirtelen kvek lesznek belőle. A pálya elején általában lassan kezd " "nőni, de egy idő után hirtelen felgyorsul." -#: src/help.c:77 +#: src/help.c:82 msgid "" "Another amoeba, which behaves exactly like the above one. But it lives its " "own life. Sometimes, when they collide, they produce an explosion." @@ -4737,7 +4956,7 @@ msgstr "" "Másik amőba, amelyik teljesen ugyanúgy viselkedik, mint az előző, de a saját " "életét éli. Néha, ha egymáshoz érnek, felrobbannak." -#: src/help.c:78 +#: src/help.c:83 msgid "" "Slime is permeable. It means that stones and diamonds laying on the slime " "can randomly pass on." @@ -4745,7 +4964,7 @@ msgstr "" "Az iszap áthatolható: a kövek és a gyémántok véletlenszerűen az " "átkerülhetnek az aljára." -#: src/help.c:79 +#: src/help.c:84 msgid "" "Acid eats dirt. Sometimes it spreads in all four directions, leaving a small " "explosion behind. If there is no dirt to swallow, it just disappears." @@ -4753,19 +4972,25 @@ msgstr "" "A sav a földön keresztül halad. Néha mind a négy irányban terjed, egy kis " "robbanást hagyva maga után. Ha nincs széna körülötte, simán csak eltűnik." -#: src/help.c:80 +#: src/help.c:85 msgid "Water, which floods all empty space slowly." msgstr "Víz, amely szép lassan az összes üres részt elárasztja." -#: src/help.c:81 +#: src/help.c:86 msgid "" "This very special wall converts stones into diamonds and vice versa. Note " -"that a magic wall can only be activated for some limited time." +"that a magic wall can only be activated for some limited time. It can also " +"turn mega stones into nitro packs, nitro packs into mega stones. Even flying " +"diamonds and stones pass them to be converted to each other - but these two " +"do that from bottom to up, of course." msgstr "" -"Ez a speciális fal a köveket gyémánttá változtatja, és fordítva. Fontos, " -"hogy a varázsfal csak egyszer indítható el, akkor is csak egy rövid ideig." +"Ez a különleges fal köveket gyémántokká változtat és fordítva. Figyelj arra, " +"hogy a varázsfal csak egy rövid ideig működik. A nehéz köveket is át tudja " +"változtatni nitró töltetekké, illetve nitrókat nehéz kövekké. A repülő kövek " +"és gyémántok is áthaladnak rajta és megcseréldőnek - de természetesen ezek " +"alulról fölfelé mennek." -#: src/help.c:82 +#: src/help.c:87 msgid "" "Expanding wall expands in horizontal or vertical (or both) direction, if " "there is an empty space to fill up. You should be very careful not to be " @@ -4774,11 +4999,11 @@ msgstr "" "Az épülő fal vízszintes vagy függőleges (vagy mindkét) irányba terjeszkedik, " "ha üres hely van mellette. Vigyáznod kell, hogy be ne szorítson valahova." -#: src/help.c:83 +#: src/help.c:88 msgid "Expanding wall, but made of steel. You cannot even blow it up!" -msgstr "" +msgstr "Növekvő fal, de törhetetlen. Még felrobbantani sem lehet!" -#: src/help.c:84 +#: src/help.c:89 msgid "" "Whenever there is a falling wall above the player merely separated by empty " "space, it starts falling. It does so at any distance. If it hits the player, " @@ -4788,7 +5013,7 @@ msgstr "" "elkezd lefelé esni; bármilyen távolságból. Ha fejen találja a játékost, az " "felrobban. Ha bármi mással ütközik, simán csak megáll." -#: src/help.c:85 +#: src/help.c:90 msgid "" "You can pick up this bomb like a diamond. To use it, press control and a " "direction... and then quickly run away! You can hold only one bomb at a time." @@ -4797,7 +5022,7 @@ msgstr "" "billentyűt és egy irányt... aztán gyorsan fuss el! Egyszerre csak egy bomba " "lehet nálad." -#: src/help.c:86 +#: src/help.c:91 msgid "" "Eat this sweet and you will become strong. You will be able to push stones " "at once. You will also be able to push chasing stones." @@ -4805,21 +5030,21 @@ msgstr "" "Edd meg ezt a cukorkát, és erős leszel. Egyből el tudod majd tolni a " "köveket, még a felébredt üldözőket is." -#: src/help.c:88 +#: src/help.c:93 msgid "This is an indestructible door with a diamond." msgstr "Ez egy felrobbanthatatlan ajtó, amely egy gyémánt rejt." -#: src/help.c:89 +#: src/help.c:94 msgid "" "If you get this key, all doors will convert into diamonds you can collect." msgstr "" "Ha megszerzed a kulcsot, az összes ajtó kinyílik, és gyémánt lesz a helyükön." -#: src/help.c:90 +#: src/help.c:95 msgid "Keys" msgstr "Kulcsok" -#: src/help.c:90 +#: src/help.c:95 msgid "" "There are three types of keys, which open three different colored doors. You " "can collect more from these; and for every door, always one key is used." @@ -4827,15 +5052,15 @@ msgstr "" "Három fajta kulcs van, amelyek három különböző színű ajtót nyitnak. Többet " "is össze lehet gyűjteni, és minden ajtóhoz egy kulcs lesz felhasználva." -#: src/help.c:91 +#: src/help.c:96 msgid "Doors" msgstr "Ajtók" -#: src/help.c:91 +#: src/help.c:96 msgid "This is a door which can only be opened by the key of the same color." msgstr "Ez egy ajtó, amelyet csak az ugyanilyen színű kulcs tud kinyitni." -#: src/help.c:92 +#: src/help.c:97 msgid "" "Sometimes you have to block a passage, for example to protect a voodoo. This " "is when a box like this comes handy. You can push it in every direction " @@ -4845,7 +5070,7 @@ msgstr "" "jó egy ilyen doboz, ugyanis bármilyen irányba tolhatod a Ctrl billentyű " "segítségével." -#: src/help.c:93 +#: src/help.c:98 msgid "" "Sometimes diamonds or keys are buried in brick walls. You can use a " "pneumatic hammer to break these walls, or simple brick walls which contain " @@ -4857,31 +5082,44 @@ msgstr "" "rejt semmit. Áll rá valamire, nyomd meg a tűzgombot és a balra vagy a jobbra " "gombot a légkalapács használatához, hogy feltörd a melletted lévő falat." -#: src/help.c:94 +#: src/help.c:99 msgid "" "This machine replicates the element which is on the top of it. At regular " "intervals, a new element drops out underneath; if there is space to do this. " "The rate of materializing the new elements can be different in every cave." msgstr "" +"Ez a gép folyamatosan másolja azt a karaktert, amelyik a tetején van. " +"Megadott időközönként, egy új karakter esik ki az alján, ha van ehhez üres " +"hely. Az új karakterek megjelenése között eltelt idő pályánként különböző " +"lehet." -#: src/help.c:95 +#: src/help.c:100 msgid "" "The indestructible and immobile conveyor belt carries free-moving elements. " "Its direction can be changed or its power can be turned completely off with " -"a switch." +"a switch. It only carries the elements which are resting on it (ie. it will " +"not move a piece of dirt or a firefly.) Flying stones and diamonds under it " +"will also be carried." msgstr "" +"A megsemmisíthetetlen és mozdíthatatlan futószalag a mozdítható elemeket " +"szállítja. A irányát meg lehet változtatni, vagy teljesen ki is lehet " +"kapcsolni azt. Csak azokat az elemeket továbbítja, amelyek ténylegesen rajta " +"vannak (vagyis egy darab földet vagy egy legyet nem). Az alatta lévő repülő " +"köveket és gyémántokat is arrébb fogja vinni." -#: src/help.c:96 +#: src/help.c:101 msgid "" -"Heavy elemenets sink into the lava, and disappear without any trace left. " +"Heavy elemenets sink into the lava and disappear without any trace left. " "Creatures can also step into the lava." msgstr "" +"A nehéz objektumok elsüllyednek a lávában, és eltűnnek minden nyom nélkül. A " +"lények is eltűnhetnek benne.ííííí" -#: src/help.c:97 +#: src/help.c:102 msgid "Collect this to get extra time." msgstr "Gyűjtsd ezt össze, hogy plusz időhöz juss." -#: src/help.c:98 +#: src/help.c:103 msgid "" "Bladders can be pushed around easily. They slowly climb up; if they touch a " "voodoo, they convert into clocks. They can also pass slime." @@ -4890,11 +5128,11 @@ msgstr "" "voodoo figurához társadhoz érnek, órává alakulnak. Az iszapon is át tudnak " "menni." -#: src/help.c:99 +#: src/help.c:104 msgid "If there is space above it, the bladder spender turns to a bladder." msgstr "Ha üres hely van fölötte, a buborék csapda buborékká változik." -#: src/help.c:100 +#: src/help.c:105 msgid "" "This is your player's look-alike. You must protect him against flies. If a " "voodoo dies by one of them, your player dies immediately too. This doll can " @@ -4909,7 +5147,7 @@ msgstr "" "is meg kell védeni, mert fejbe vágva felrobban és egy sírkővé változik, " "fallal körülvéve. Esetleg egy szomszédos robbanástól is sírkővé változhat." -#: src/help.c:101 +#: src/help.c:106 msgid "" "The teleporter will move you from one place to another, if you step into it. " "The destination teleporter depends on which direction you step the current " @@ -4918,7 +5156,7 @@ msgstr "" "A teleport egyik helyről a másikra mozgat, ha belelépsz. A cél teleport " "attól függ, hogy milyen irányból léptél bele." -#: src/help.c:102 +#: src/help.c:107 msgid "" "Stir the pot, and then you will be able to use the gravitation switch. While " "you are stirring the pot, there is no gravitation at all. Press fire after " @@ -4928,7 +5166,7 @@ msgstr "" "üstöt kevered, egyáltalán nincs gravitáció. A keverés után nyomd meg a " "tűzgombot." -#: src/help.c:103 +#: src/help.c:108 msgid "" "Sometimes you have to collect skeletons before you can use the pot. In some " "other caves, they must be collected like diamonds to open the exit." @@ -4936,7 +5174,7 @@ msgstr "" "Néha csontvázakat kell gyűjteni, mielőtt használni tudod az üstöt. Más " "pályákon, a gyémántokhoz hasonlóan a kijáratot nyitják." -#: src/help.c:104 +#: src/help.c:109 msgid "" "When this switch is active, you can use it to change the gravitation. The " "direction from which you use it will determine the direction the gravitation " @@ -4945,11 +5183,11 @@ msgstr "" "Amikor a kapcsoló aktív, a gravitáció irányát lehet megváltoztatni vele. " "Amelyik oldalról meglököd, az választja ki a gravitáció következő irányát." -#: src/help.c:105 +#: src/help.c:110 msgid "With this switch you can controll the direction of the expanding wall." msgstr "Ezzel a kapcsolóval az épülő falak iránya változtatható." -#: src/help.c:106 +#: src/help.c:111 msgid "" "With this you can change the direction of creatures, like guards and " "butterflies. Sometimes it works automatically." @@ -4957,28 +5195,30 @@ msgstr "" "Ezzel a kapcsolóval a legyek, a pillangók, és más lények iránya " "változtatható. Néha automatikusan működik." -#: src/help.c:107 +#: src/help.c:112 msgid "This switch controls the speed of biters." msgstr "Ez a kapcsoló a zabálók sebességét állítja." -#: src/help.c:108 +#: src/help.c:113 msgid "This turns the replicator on or off." -msgstr "" +msgstr "A klónozót lehet vele kikapcsolni és vissza." -#: src/help.c:109 +#: src/help.c:114 msgid "This switch can be used to reverse the direction of conveyor belts." -msgstr "" +msgstr "Ezzel a kapcsolóval a futószalagok irányát lehet megváltoztatni." -#: src/help.c:110 +#: src/help.c:115 msgid "" "The conveyor belts also have a switch which can completely stop their action." msgstr "" +"A futószalagoknak is van kapcsolója, amellyel teljesen meg lehet állítani a " +"mozgásukat." -#: src/help.c:111 +#: src/help.c:116 msgid "Strange elements" msgstr "Furcsa elemek" -#: src/help.c:111 +#: src/help.c:116 msgid "" "Some caves contain strange elements, for example, diamonds which cannot be " "collected, a player that cannot move... Don't be surprised!" @@ -4986,34 +5226,45 @@ msgstr "" "Némelyik pálya furcsa elemeket tartalmaz, például összegyűjthetetlen " "gyémántokat, mozdulatlan játékosokat... Ne lepődj meg!" -#: src/help.c:113 +#: src/help.c:118 msgid "Playing hints" msgstr "Játék ötletek" -#: src/help.c:113 +#: src/help.c:118 msgid "" "Obviously, holding fire and pushing a direction causes you to 'touch' an " "adjacent square without moving into it, collecting diamonds or removing " -"dirt, but a move which is very useful is to push a boulder in this way. It's " -"a good way of making sure you don't 'overpush' the boulder and later on you " -"will have to use this." +"dirt, but a move which is very useful is to push a stone in this way. It's a " +"good way of making sure you don't 'overpush' the stone and later on you will " +"have to use this." msgstr "" +"A tűzgombot nyomva tartva, és valamelyik irányba 'mozdulva' úgy érinthetsz " +"egy mezőt, hogy ténylegesen arrafelé mennél. Így gyémántokat lehet gyűjteni, " +"földet lehet ásni, de egy követ is arrébb lehet tolni. Ez egy jó módja " +"annak, hogy nehogy véletlenül tovább told a követ, mint ahogy tervezted, és " +"néha mindenképp használnod kell." -#: src/help.c:114 +#: src/help.c:119 msgid "" -"Boulders do not roll off of the side of magic walls. In some caves it is " -"shown where these walls are by placing a boulder to show you that it's magic." +"Stones do not roll off of the side of magic walls. In some caves it is shown " +"where these walls are by placing a stone to show you that it's magic." msgstr "" +"A kövek nem gurulnak le a varázsfal széléről. Némelyik pályán ebből látszik, " +"hogy varázsfalról van szó és nem simáról, ha egy kő van a szélén." -#: src/help.c:115 +#: src/help.c:120 msgid "" "Expanding walls are always horizontally expanding on both sides. In some " "caves it is shown which parts of the wall are expanding by forcing you to " "pass it on the other side. You will see the passage close in behind you and " "this eliminates some guessword in the next puzzle." msgstr "" +"A növekvő falak mindkét oldaluk irányába tudnak terjeszkedni. Néhány pályán " +"látszik, hogy melyik falak növekednek, mert muszáj átmenned mellettük. Látni " +"fogod, ahogy bezáródik a járat mögötted, és ez néhány ötletet adhat a " +"következő fejtörőnél." -#: src/help.c:116 +#: src/help.c:121 msgid "" "The screen starts scrolling at the edge of the screen. This means it's a bad " "idea to run in places where enemies are likely to be, since you won't have " @@ -5023,8 +5274,15 @@ msgid "" "travel) or through undug mud. Never rush unless you're sure you can or you " "need to." msgstr "" +"A képernyő akkor kezd el gördülni, ha a szélére érsz. Vaigy általában rossz " +"ötlet olyan helyre futni, ahol szörnyek lehetnek, mert nem lesz időd " +"észrevenni őket. Vagy lassan mozogj egy ilyen szituációban, próbálva " +"kitalálni, hogy a szörnyek épp nagyjából a pálya melyik részén lehetnek; " +"vagy válassz másik, veszélytelenebb útvonalat - például üres helyet (ahol " +"épp nem lehetnek az ellenségek) vagy kiásatlan földet. Soha ne siess, csak " +"ha biztos vagy benne, hogy megteheted, vagy ha már muszáj." -#: src/help.c:117 +#: src/help.c:122 msgid "" "Enemies like to have dirt to move around on. Clearing lots of dirt can " "create safe patches for you. This technique can be used on levels where you " @@ -5033,48 +5291,94 @@ msgid "" "through empty space (when two enemies are circling each other in a certain " "way)." msgstr "" +"A szörnyeknek föld kell, hogy tudjanak mozogni. Ha sok földet kiásol, " +"biztonságos területeket hozhatsz vele létre. Ezt a technikát olyan pályákon " +"lehet használni, ahol sok legyet engedsz szabadon, és nehéz felrobbantani " +"őket. Vigyázz - néha a szörnyek föld nélkül is tudnak lassan előrefelé " +"mozogni (egymás körül körözve egy minta szerint)." -#: src/help.c:118 +#: src/help.c:123 msgid "" "Magic walls often have a fairly strict time limit, some more than others. " -"Collect up as many boulders as you can just above the magic wall, leaving " -"one strip of mud, and then finally remove this strip and watch the goods get " +"Collect up as many stones as you can just above the magic wall, leaving one " +"strip of mud, and then finally remove this strip and watch the goods get " "delivered. Just make sure you've cleared an appropriate amount of space " "under the wall ;)" msgstr "" +"A varázsfalaknak gyakran elég szűk az idő keretük, némelyeké még a " +"szokásosnál is szigorúbb. Gyűjts össze a fal felett, amennyi követ csak " +"tudsz, egy sáv földet hagyva, végén pedig tüntesd el a sávot, és nézd, ahogy " +"a gyémántok megjelennek. Vigyázz, hogy a fal alatt is legyen elég nagy hely " +"nekik :)" -#: src/help.c:119 +#: src/help.c:124 msgid "" "Voodoo dolls need to be protected from enemies at all costs, but dropping a " -"boulder on one is usually harmless!" +"stone on one is usually harmless!" msgstr "" +"A voodoo babákat minden áron meg kell védeni az ellenségektől, de követ " +"dobni a fejükre általában nem gond!" -#: src/help.c:120 +#: src/help.c:125 msgid "" "You can't collect diamonds which are falling, but you can collect them when " "they momentarily bounce off of something or down the side of a pile." msgstr "" +"Nem tudsz épp zuhanó gyémántokat összegyűjteni, de amikor épp leesnek " +"valamiről, vagy egy kupac aljára érnek, akkor igen." -#: src/help.c:121 +#: src/help.c:126 msgid "" "Some levels have hidden exits. These always look like titanium wall, but " "don't flash. You can always tell where they are by visual clues and " "deduction." msgstr "" +"Néhány pályán rejtve van a kijárat. A rejtett változat ugyanúgy néz ki, mint " +"a törhetetlen fal, de nem villog. Viszont mindig meg lehet sejteni a helyét " +"nyomravezető jelek és ötletek alapján." -#: src/help.c:122 +#: src/help.c:127 msgid "" "Don't blindly take all diamonds. Some of them are red herrings, some may be " "unobtainable or part of a trap, and believe it or not, sometimes a diamond " "is more useful to you on the screen than it is collected, due to some " "sadistic puzzles :)" msgstr "" +"Ne gyűjtsd össze gondolkodás nélkül az összes gyémántot. Némelyikük csak " +"elterelés, másokat nem lehet megszerezni vagy egy csapda részei. Akár " +"hiszed, akár nem, néha egy gyémánt jobb, ha a helyén van, mint összegyűjtve, " +"néhány szadista fejtörőben :)" -#: src/help.c:125 +#: src/help.c:130 +msgid "Keys to control the player" +msgstr "A játékos irányítása" + +#: src/help.c:131 +msgid "" +"To play the game, press the New Game button. You can select which level you " +"start playing at. During the game, you can control your player with the " +"cursor keys. The Ctrl key has a special meaning: you can snap items, ie. " +"pick up things without moving. If you get stuck, press Escape to restart the " +"level. If there are too many players in the cave and you cannot move, " +"pressing F2 causes the active one to explode. With F11, you can switch to " +"full screen mode. To view the alternative status bar which show keys and " +"skeletons collected, hold down the left shift button.\n" +"These are the game elements:" +msgstr "" +"A játék indításához kattints az Új játék gombra. A felugró ablakban " +"kiválaszthatod, melyik pályán kezded a játékot. A figurát a kurzor " +"billentyűkkel irányíthatod. A Ctrl billentyű segítségével el tudsz lopni " +"elemeket, vagyis fölveheted őket anélkül, hogy mozognál. Ha beragadtál, az " +"Escape billentyűvel kezdheted újra a pályát. Az F11 billentyűvel pedig " +"teljes képernyős módba válthatsz. A második státusz sorhoz a bal oldali " +"Shift gombot kell nyomva tartani.\n" +"A játék elemei a következőek:" + +#: src/help.c:134 msgid "Snapshots" msgstr "Pillanatfelvételek" -#: src/help.c:125 +#: src/help.c:134 msgid "" "You can experiment with levels by saving and reloading snapshots. However, " "if you are playing a reloaded cave, you will not get score or extra lives." @@ -5083,7 +5387,7 @@ msgstr "" "visszatöltesz egy ilyet, akkor már nem kapsz pontokat, és nem szerezhetsz " "további életeket." -#: src/help.c:126 +#: src/help.c:135 msgid "" "Every time you play a game, GDash records all your movements. These " "recordings can be viewed later, and can be saved with the caveset. To check " @@ -5094,7 +5398,7 @@ msgstr "" "fájlba menthetőek. Ha meg szeretnéd nézni őket, válaszd a Visszajátszások " "menüpontot a Játék menüből." -#: src/help.c:127 +#: src/help.c:136 msgid "" "If you were very lucky in a cave, or something interesting happened, you do " "not have to be worry, as all played caves are recorded. In the Replays " @@ -5110,7 +5414,7 @@ msgstr "" "menti a program, függetlenül attól, hogy sikeres voltál-e egy pályán vagy " "nem; vagyis a sikertelen játékaidat is elküldheted másoknak megvitatni." -#: src/help.c:128 +#: src/help.c:137 msgid "" "During the replay of the cave, you can gain control of the replay if you use " "the usual cursor keys (left, up, etc.) to move. From that point, you can " @@ -5124,12 +5428,11 @@ msgstr "" "ha...\" kérdéseidet. Vagy próbáld ki, hogy neked megy-e jobban, mint az " "eredeti játékosnak!" -#: src/help.c:131 +#: src/help.c:140 msgid "Themes" msgstr "Témák" -#: src/help.c:131 -#, fuzzy +#: src/help.c:140 msgid "" "The game also supports themes. You can use the installed png file as a " "template. Cells can have any arbitrary size, not necessarily 16x16 pixels. " @@ -5156,13 +5459,14 @@ msgstr "" "Ez a játék a témákat is támogatja. A telepítő által bemásolt png fájlt " "használhatod sablonként. A cellák tetszőleges méretűek lehetnek, nem " "feltétlenül 16x16 képpontosak. A lényeg viszont, hogy négyzet alakúak " -"legyenek, a kép pedig rendelkezzel alfa csatornával. Ha a kép csak néhány " -"színt tartalmaz (teljesen telített pirosat az első előtér színhez, teljesen " -"telített zöldet az amőbához...), akkor a GDash eredeti C64 színeket fog " -"használni, minden pályához különbözőt. Hogy a png fájlt egy valós színű " -"témaként vagy C64 témaként értelmezi a program, a benne lévő színektől függ, " -"és automatikusan érzékelt. Egy olyan kép, amely csak #000000, #00FF00 és " -"hasonló színeket használ, C64 témaként kerül a programba.\n" +"legyenek, a kép pedig rendelkezzel alfa csatornával (vagy átlátszó réteggel," +"némely rajzoló programokban). Ha a kép csak néhány színt tartalmaz (teljesen " +"telített pirosat az első előtér színhez, teljesen telített zöldet az " +"amőbához...), akkor a GDash eredeti C64 színeket fog használni, minden " +"pályához különbözőt. Hogy a png fájlt egy valós színű témaként vagy C64 " +"témaként értelmezi a program, a benne lévő színektől függ, és automatikusan " +"érzékelt. Egy olyan kép, amely csak #000000, #00FF00 és hasonló színeket " +"használ, C64 témaként kerül a programba.\n" "A C64 témáknál az egyes színek jelentése a következő:\n" "- Átlátszó: ezt kell használni mindenhol, ahol nincs rajz.\n" "- Fekete 0x000000: háttérszín.\n" @@ -5175,11 +5479,11 @@ msgstr "" "nyilak körül.\n" "- Fehér 0xffffff: a szerkesztőhöz; a nyilak színe.\n" -#: src/help.c:146 +#: src/help.c:155 msgid "Some words of warning" msgstr "Néhány megjegyzés" -#: src/help.c:147 +#: src/help.c:156 msgid "" "- Importing may not be complete and correct for all games and engines. There " "may be some unplayable caves, as older games had no precise timing.\n" @@ -5200,7 +5504,7 @@ msgstr "" "régebbi verziójával lett elmentve. Használd az 'Ismeretlen mezők törlése' " "menüpontot a szerkesztőben, hogy a régebbi mezőnevektől megszabadulj.\n" -#: src/help.c:160 +#: src/help.c:169 msgid "" "This editor lets you create your own levels and cave sets. It can operate in " "two modes, a game editor mode, and a cave edit mode.\n" @@ -5209,11 +5513,11 @@ msgstr "" "játékaidat. Két különböző üzemmódban működik, ezek a játékszerkesztő és a " "pályaszerkesztő. \n" -#: src/help.c:161 +#: src/help.c:170 msgid "Game editor" msgstr "Játékszerkesztő" -#: src/help.c:161 +#: src/help.c:170 msgid "" "In this one, you are presented with an overview of your game. You can click " "on any cave to select it. Then you can select File|Edit Cave to view or " @@ -5229,19 +5533,19 @@ msgstr "" "között. A pályák átrendezéséhez a megszokott fogd-és-vidd módszert használd! " "Új pálya létrehozásához kattints a Fájl|Új pálya menüpontra." -#: src/help.c:162 +#: src/help.c:171 msgid "Cave editor" msgstr "Pályaszerkesztő" -#: src/help.c:162 +#: src/help.c:171 msgid "In this mode, you can edit a cave." msgstr "Ebben a módban a pályákat szerkesztheted." -#: src/help.c:163 +#: src/help.c:172 msgid "How a cave is generated" msgstr "Hogyan jön létre egy pálya?" -#: src/help.c:163 +#: src/help.c:172 msgid "" "A cave is built up of different objects. First, it is filled with random " "elements, of which there can be five. The probabilities of each can be set. " @@ -5254,7 +5558,7 @@ msgstr "" "egy térkép helyettesíti. Erre régebbi játékok és fájl formátumok importálása " "miatt van szükség.)" -#: src/help.c:164 +#: src/help.c:173 msgid "" "After this step, series of cave objects are rendered over the random data, " "which can be of various types: points, lines, rectangles and so. These are " @@ -5264,16 +5568,16 @@ msgstr "" "fölé. Ezek többfélék lehetnek: pontok, vonalak, téglalapok stb. Az elérhető " "objektumok a következőek:" -#: src/help.c:165 +#: src/help.c:174 msgid "This is a single element. Click anywhere on the cave map to create one." msgstr "" "Egyetlen elem, egy pont. A térképre bárhova kattintva lehet lérehozni egyet." -#: src/help.c:166 +#: src/help.c:175 msgid "Freehand" msgstr "Szabadkézi" -#: src/help.c:166 +#: src/help.c:175 msgid "" "This is a freehand editing tool, which places many points as you click and " "drag the mouse. Use it wisely; lines and other drawing elements are more " @@ -5284,7 +5588,7 @@ msgstr "" "rajzelemek sokkal egyszerűbbek, és az azokkal készített pályákat könnyebb " "szerkeszteni." -#: src/help.c:167 +#: src/help.c:176 msgid "" "Click on the map to select the start point, then drag the mouse and finally " "release the button, to set the end point." @@ -5292,7 +5596,7 @@ msgstr "" "Vonal létrehozásához kattints a térképre, és az egérgombot nyomva tartva, " "húzással jelöld ki az vonal végpontját." -#: src/help.c:168 +#: src/help.c:177 msgid "" "Click on the map and then drag the mouse, to define the two corners of the " "rectangle." @@ -5300,13 +5604,13 @@ msgstr "" "Téglalap létrehozásához kattints a térképre, és az egérgombot nyomva tartva, " "húzással jelöld ki a két sarkát." -#: src/help.c:169 +#: src/help.c:178 msgid "Similar to the above, but this is filled with a second element." msgstr "" "Ez az előzőhöz hasonló, csak ennek a belseje is ki van töltve valamilyen " "elemmel." -#: src/help.c:170 +#: src/help.c:179 msgid "" "This one is like a filled rectangle, but the horizontal and vertical " "distance of the elements can be changed. Use the object properties dialog to " @@ -5316,7 +5620,7 @@ msgstr "" "vízszintes, mind függőleges irányban, beállítható. Az objektum tulajdonságai " "ablakban állíthatóak be a távolságok a létrehozás után." -#: src/help.c:171 +#: src/help.c:180 msgid "" "This one is tricky. A join object scans the map, from top to bottom, " "searching for a specific element. If it finds one, it draws the second " @@ -5343,7 +5647,7 @@ msgstr "" "régebbi pályáknál gyakran alkalmazták, hogy azonos pályarészleteket hozzanak " "létre." -#: src/help.c:172 +#: src/help.c:181 msgid "" "This tool places a flood fill object. The object will fill an area of any " "shape in the cave with a specific element. The border of the area is set by " @@ -5360,11 +5664,11 @@ msgstr "" "véletlen kitöltés; ellenkező esetben némely véletlenszám kiindulásnál a " "kitöltés az egész pályát átrajzolhatja." -#: src/help.c:173 +#: src/help.c:182 msgid "Fill by replacement" msgstr "Kitöltés cserével" -#: src/help.c:173 +#: src/help.c:182 msgid "" "This tool places another kind of fill object. This one will replace an " "element with another one; the area in which this replacement takes place " @@ -5380,7 +5684,7 @@ msgstr "" "másik, amelyet keresni fogja a program, automatikusan jelölődik ki, amikor a " "térképre kattintasz." -#: src/help.c:176 +#: src/help.c:185 msgid "" "You can use random generated mazes in cave designs. The walls and paths of " "the maze can be made from any freely chosen element. Also you can select 'No " @@ -5397,19 +5701,19 @@ msgstr "" "értékekre mindig ugyanaz a labirintus keletkezik; a -1-es érték eseténminden " "alkalommal más." -#: src/help.c:177 +#: src/help.c:186 msgid "The unicursal maze is a long and curvy path." msgstr "A kígyózó labirintus egy hosszú, kanyargós útvonal." -#: src/help.c:178 +#: src/help.c:187 msgid "The maze like that in PacMan: there are no dead ends." msgstr "A labirintus, mint amilyen a PacMan-ben van: nincsenek zsákutcák." -#: src/help.c:179 +#: src/help.c:188 msgid "Random Fill" msgstr "Véletlen kitöltés" -#: src/help.c:179 +#: src/help.c:188 msgid "" "This tool can be used to fill a part of a cave with random elements. It is " "similar to the random cave setup. At most five elements can be specified. " @@ -5432,7 +5736,7 @@ msgstr "" "nehézségi szinthez külön állítható. A -1-es érték esetén a pálya " "mindenalkalommal máshogy fog kinézni." -#: src/help.c:180 +#: src/help.c:189 msgid "" "This tool is simple: copies a rectangular part of the cave, and pastes it " "into a new location. The source and destination area may overlap. To select " @@ -5450,7 +5754,7 @@ msgstr "" "helyén. A téglalap tartalma vízszintesen és függőlegesen is tükrözhető; " "nyisd meg az objektum tulajdonságai ablakot ennek beállításához." -#: src/help.c:181 +#: src/help.c:190 msgid "" "To select an element, you can middle-click any time on the cave map to pick " "one you already use. Use Ctrl together with middle-click to pick a fill " @@ -5462,15 +5766,15 @@ msgstr "" "választasz. A Shift gomb nyomva tartásával pedig egy rajzelem típust " "választhatsz ki." -#: src/help.c:182 +#: src/help.c:191 msgid "Managing cave objects" msgstr "Pálya rajzelemeinek kezelése" -#: src/help.c:182 +#: src/help.c:191 msgid "Use this tool to modify already existing cave objects." msgstr "Ezzel az eszközzel már meglévő pálya objektumokat lehet módosítani." -#: src/help.c:183 +#: src/help.c:192 msgid "" "By looking at the cave, you can see that every object is drawn with a slight " "yellowish color to distinguish them from random data. Click on any object to " @@ -5480,7 +5784,7 @@ msgstr "" "színnel van kirajzolva, hogy meg lehessen őket az alap véletlen kitöltéstől " "különböztetni. Kattints bármelyik objektumra a kiválasztáshoz." -#: src/help.c:185 +#: src/help.c:194 msgid "" "A selected object can be repositioned with the mouse by clicking and " "dragging. You can resize lines and rectangles by moving them by their end " @@ -5495,7 +5799,7 @@ msgstr "" "húzásakor a kötött elemek távolsága változik. A kitöltő rajzelemek " "kiindulási pontját egy X mutatja, ha az adott kitöltés épp ki van választva." -#: src/help.c:188 +#: src/help.c:197 msgid "" "By double-clicking on an object, or selecting object properties from the " "menu, a dialog pops up, which shows its parameters that you can modify." @@ -5504,7 +5808,7 @@ msgstr "" "a menüből, egy párbeszédablak jelenik meg, amelyben az összes tulajdonsága " "beállítható." -#: src/help.c:189 +#: src/help.c:198 msgid "" "The order these objects are drawn also affects the cave. To reorder them, " "you can click on the To top and To bottom menu items. The object list on the " @@ -5516,11 +5820,11 @@ msgstr "" "rajzelem lista is használható az objektumok átrendezéséhez. Az objektumok ki " "is törölhetőek, illetve a megszokott vágólap műveletek is használhatóak." -#: src/help.c:190 +#: src/help.c:199 msgid "Cave properties" msgstr "Pálya tulajdonságai" -#: src/help.c:190 +#: src/help.c:199 msgid "" "To view cave properties, select Edit|Cave properties from the menu. A dialog " "will pop up with many different options. Those are not explained here; most " @@ -5533,7 +5837,7 @@ msgstr "" "magyarázattal is rendelkezik, amely megjelenik, ha az egérmutatót felette " "tartod." -#: src/help.c:191 +#: src/help.c:200 msgid "" "If you want to restart editing, all cave objects can be deleted at once. A " "cave map can also be deleted by selecting Remove map from the menu." @@ -5541,7 +5845,7 @@ msgstr "" "Ha újrakezded a szerkesztést, az összes objektum kitörölhető egyszerre. A " "pálya térképe is kitörölhető, ha van." -#: src/help.c:193 +#: src/help.c:202 msgid "" "Cave objects can be merged into a single map. If you designed a new cave, " "this has no particular use; but for editing an imported, map-based cave, it " @@ -5555,11 +5859,11 @@ msgstr "" "menüpontot. (Akkor lehet hasznos, ha a pályákat egy másik programba " "szeretnéd betölteni, amelyik nem támogatja a BDCFF objektumokat.)" -#: src/help.c:194 +#: src/help.c:203 msgid "More on random cave data" msgstr "A véletlen pályák előállítása" -#: src/help.c:195 +#: src/help.c:204 msgid "" "The elements which fill the cave initially are not really random. They are " "generated using a predictable random number generator, which can come up " @@ -5582,7 +5886,7 @@ msgstr "" "határozzák meg. A szerkesztés közben beállítható, hogy hányadik szintet " "látod; csak mozgasd a csúszkát a térkép jobb felső sarkában." -#: src/help.c:203 +#: src/help.c:212 msgid "" "A cave can be made totally random, by entering -1 in the random seed entry. " "Remember that you cannot test every cave that is generated this way, and " @@ -5597,7 +5901,7 @@ msgstr "" "után a program megszámolja a gyémántokat, és a megadott értéket kivonva " "állítja be a gyűjtendő gyémántok számát." -#: src/help.c:207 +#: src/help.c:216 msgid "" "The Edit menu contains a random elements setup tool, which can be used to " "setup the random number generator for the cave. It is able to edit all five " @@ -5608,11 +5912,11 @@ msgstr "" "nehézségi szintet tudja szerkeszteni, és minden változáskor frissíti a pálya " "képét." -#: src/help.c:209 +#: src/help.c:218 msgid "Visible region of a cave" msgstr "A pálya látható része" -#: src/help.c:210 +#: src/help.c:219 msgid "" "Every cave can have a rectangular area, which may be smaller than the cave " "itself, and will be visible during the game. Cave elements outside this " @@ -5626,11 +5930,11 @@ msgstr "" "automatikus zsugorítás menüpont használható ennek automatikus beállítására, " "a törhetetlen falak és kijárat/bejárat figyelembe vételével." -#: src/help.c:214 +#: src/help.c:223 msgid "Shift cave map" msgstr "Pálya térkép léptetése" -#: src/help.c:215 +#: src/help.c:224 msgid "" "If the cave is map-based, you can use the shift tools to move the map. This " "might be useful if you want to enlarge it and otherwise there would be no " @@ -5644,11 +5948,11 @@ msgstr "" "irányú léptetés után! Objektum alapú pályák esetén az összes objektum " "egyszerre kiválasztható és mozgatható." -#: src/help.c:218 +#: src/help.c:227 msgid "Cave stories" msgstr "Pálya történetek" -#: src/help.c:219 +#: src/help.c:228 msgid "" "Every cave can have a story associated to it, which will be shown when the " "cave is played. This story can connect the caves to each other." @@ -5656,7 +5960,7 @@ msgstr "" "Minden pályához tartozhat egy történet, amelyet a program mutatni fog, " "amikor a játékos elér oda. A történetek így összekapcsolhatják a pályákat." -#: src/help.c:222 +#: src/help.c:231 msgid "" "A caveset can have its own title screen. To add one, click Cave set title " "image in the File menu. If your image is transparent (has a transparent " @@ -5670,7 +5974,7 @@ msgstr "" "kisebb háttérképet is hozzá lehet adni, amelyből mintát készít a program, és " "görgeti a nagyobbik mögött." -#: src/help.c:225 +#: src/help.c:234 msgid "" "The editor can also be used to delete highscore files of a game or any of " "the caves." @@ -5678,7 +5982,7 @@ msgstr "" "A pályaszerkesztőben a játékhoz, illetve az egyes pályákhoz tartozó " "dicsőséglisták is törölhetőek." -#: src/help.c:226 +#: src/help.c:235 msgid "" "GDash uses two mechanisms to store highscores: it can save them in a " "separate file (this is done automatically), and it can also save them in the " @@ -5693,15 +5997,15 @@ msgstr "" "dicsőséglista, vagy az automatikusan a konfigurációs könyvtárba mentett " "fájlból." -#: src/help.c:230 +#: src/help.c:239 msgid "If you are finished with drawing, use this button to test the cave." msgstr "Ha készen vagy a tervezéssel, ezzel a gombbal próbálhatod ki a pályát." -#: src/help.c:231 +#: src/help.c:240 msgid "Loading and saving" msgstr "Betöltés és mentés" -#: src/help.c:231 +#: src/help.c:240 msgid "" "To save your work, use the File|Save button from the main window. You can " "save games in a BDCFF file, which is a text format used widely on the " @@ -5710,11 +6014,11 @@ msgstr "" "A munkád mentéséhez a fő ablak Fájl|Mentés opcióját használd. A pályákat " "BDCFF formátumban lehet menteni, amely elterjedten használd az Interneten." -#: src/help.c:232 +#: src/help.c:241 msgid "HTML Galleries" msgstr "HTML galériák" -#: src/help.c:232 +#: src/help.c:241 msgid "" "This program is able to save cave sets in a HTML gallery, which you can put " "on a web server, so other ones can preview them online. To do this, select " @@ -5727,11 +6031,11 @@ msgstr "" "a HTML fájlnak. A .PNG képek hasonló néven lesznek elmentve, ugyanabba a " "könyvtárba." -#: src/help.c:235 +#: src/help.c:244 msgid "Converting to a cavepack" msgstr "Pálya gyűjteménnyé konvertálás" -#: src/help.c:235 +#: src/help.c:244 msgid "" "You can convert your individual caves or the complete caveset to a cavepack, " "which is a file format readable by the Crazy Light Construction Kit, written " @@ -5758,11 +6062,11 @@ msgstr "" "Crazy Light Construction Kitből. További információ a fenti alkalmazások " "dokumentációjában!" -#: src/help.c:281 +#: src/help.c:290 msgid "GDash Help" msgstr "GDash Súgó" -#: src/sdlmain.c:1245 +#: src/sdlmain.c:748 msgid "Invalid cave or level number!\n" msgstr "Hibás számú pálya vagy szint!\n" @@ -5798,26 +6102,146 @@ msgstr "4x bilineáris" msgid "System default" msgstr "Rendszer alapértelmezése" -#: src/settings.c:612 +#: src/settings.c:627 msgid "Select cave number C" msgstr "C. pálya kiválasztása" -#: src/settings.c:613 +#: src/settings.c:628 msgid "Select level number L" msgstr "A játék indítása az L. szinten" -#: src/settings.c:614 +#: src/settings.c:629 msgid "Load internal caveset number I" msgstr "I. beépített játék betöltése" -#: src/settings.c:615 +#: src/settings.c:630 msgid "Show license and quit" msgstr "Licenc mutatása és kilépés" -#: src/settings.c:616 +#: src/settings.c:631 msgid "Cave names" msgstr "Pálya nevek" -#: src/settings.c:621 +#: src/settings.c:636 msgid "[FILE NAME]" msgstr "[fájlnév]" + +#~ msgid "Converts diamond to" +#~ msgstr "A gyémántokat ezzé változtatja" + +#~ msgid "Converts stone to" +#~ msgstr "A köveket ezzé változtatja" + +#, fuzzy +#~ msgid "Converts mega stone to" +#~ msgstr "A köveket ezzé változtatja" + +#, fuzzy +#~ msgid "Converts nitro pack to" +#~ msgstr "A köveket ezzé változtatja" + +#, fuzzy +#~ msgid "Converts flying stone to" +#~ msgstr "A köveket ezzé változtatja" + +#, fuzzy +#~ msgid "Converts flying diamonds to" +#~ msgstr "A gyémántokat ezzé változtatja" + +#, fuzzy +#~ msgid "Dragonfly explosion (1)" +#~ msgstr "Bomba robbanás (1)" + +#, fuzzy +#~ msgid "Dragonfly explosion (2)" +#~ msgstr "Bomba robbanás (2)" + +#, fuzzy +#~ msgid "Dragonfly explosion (3)" +#~ msgstr "Bomba robbanás (3)" + +#, fuzzy +#~ msgid "Dragonfly explosion (4)" +#~ msgstr "Bomba robbanás (4)" + +#, fuzzy +#~ msgid "Dragonfly explosion (5)" +#~ msgstr "Bomba robbanás (1)" + +#~ msgid " Explodes to" +#~ msgstr " Robbanásokból" + +#, fuzzy +#~ msgid "Stone births convert to" +#~ msgstr "A gyémánt születésekből ez lesz" + +#~ msgid "Nitro packs explode to" +#~ msgstr "Nitró töltetek felrobbanva" + +#~ msgid "The number of diamonds each skeleton is worth." +#~ msgstr "A gyémántok száma, amennyit egy csontváz ér." + +#~ msgid "Guard" +#~ msgstr "Szörny" + +#~ msgid "Alternative guard" +#~ msgstr "Alternatív szörny" + +#~ msgid "Random seed value" +#~ msgstr "Véletlenszám kezdet" + +#~ msgid "" +#~ "This determines if the amoeba timer starts before the player appearing. " +#~ "Amoeba can always be activated before that; but if this is set to true, " +#~ "the timer will not start." +#~ msgstr "" +#~ "Ez azt állítja, hogy az amőba időzítő elindul-e, mielőtt a játékos " +#~ "megjelenik. Az amőba bármikor aktiválható az előtt is; de ha ez az érték " +#~ "igaz, a számláló nem indul el." + +#~ msgid "Active elements" +#~ msgstr "Aktív elemek" + +#~ msgid "More elements" +#~ msgstr "További elemek" + +#~ msgid "" +#~ "If this option is enabled, the direction of growing for the horizontal " +#~ "and vertical expanding wall is switched." +#~ msgstr "" +#~ "Ha ez a beállítás engedélyezve van, a vízszintes és függőleges növekvő " +#~ "falak növekedési irányt cserélnek." + +#~ msgid "Cave effects" +#~ msgstr "Pálya hatások" + +#~ msgid "Gravitation effects" +#~ msgstr "Gravitáció hatások" + +#~ msgid "Elements move on first and last row, too." +#~ msgstr "Az elemek a legfelső és a legalsó sorban is mozognak." + +#~ msgid "" +#~ "This very special wall converts stones into diamonds and vice versa. Note " +#~ "that a magic wall can only be activated for some limited time." +#~ msgstr "" +#~ "Ez a speciális fal a köveket gyémánttá változtatja, és fordítva. Fontos, " +#~ "hogy a varázsfal csak egyszer indítható el, akkor is csak egy rövid ideig." + +#~ msgid "Caves: %d
\n" +#~ msgstr "Pályák: %d
\n" + +#~ msgid "Author: %s
\n" +#~ msgstr "Szerző: %s
\n" + +#~ msgid "Description: %s
\n" +#~ msgstr "Leírás: %s
\n" + +#~ msgid "WWW: %s
\n" +#~ msgstr "WWW: %s
\n" + +#~ msgid "Remark: %s
\n" +#~ msgstr "Megjegyzés: %s
\n" + +#~ msgid "Story:
%s
\n" +#~ msgstr "Történet:
%s
\n" diff --git a/caves/various/Boulder_Dash_1.bd b/replays_example.bd similarity index 73% copy from caves/various/Boulder_Dash_1.bd copy to replays_example.bd index 5c18665..35e884a 100644 --- a/caves/various/Boulder_Dash_1.bd +++ b/replays_example.bd @@ -2,11 +2,13 @@ Version=0.5 [game] Name=Boulder Dash 1 -TitleScreen=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 -TitleScreenScroll=iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABHNCSVQICAgIfAhkiAAAAFlJREFUGNNjTInc+Z8BCRw6eJSBgYGB4ebTRgYGBgYGFgYcIDVqF3YFt541QRgH67ArSIncicJnQbcTZjRcAbqd6ICRgYHhPwMDA4OaFMROO3trVBPQ7UQHAGZWGOt2UtKnAAAAAElFTkSuQmCC +Description=... with example replays. Levels=5 [cave] +[highscore] +338 Czirkos Zoltan +[/highscore] Name=Cave A Intermission=false IntermissionProperties.instantlife=true @@ -18,8 +20,8 @@ DiamondValue=10 15 CaveTime=150 110 70 40 30 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=10 11 12 13 14 RandomFill=SPACE 60 BOULDER 50 DIAMOND 9 SPACE 0 ActiveGuyIsFirst=false @@ -37,9 +39,22 @@ Line=9 14 38 14 WALL Point=3 2 INBOX Point=38 16 OUTBOX [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=669174884 +Score=338 +Success=true +Checksum=1474288053 +Movements=.22 u r7 d r10 u2 l2 r4 d r2 u ur r7 d10 r3 d2 l3 ul u4 l3 u2 l5 d4 dl l2 u3 l9 u ul l3 d dl l5 d4 r d2 r4 d5 dl l3 u2 r ur u3 r16 d r4 d r4 d2 r6 d dr r u4 r2 +[/replay] [/cave] [cave] +[highscore] +370 Czirkos Zoltan +[/highscore] Name=Cave B Intermission=false IntermissionProperties.instantlife=true @@ -51,8 +66,8 @@ DiamondValue=20 50 CaveTime=150 110 70 70 70 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=3 0 1 87 88 RandomFill=SPACE 60 BOULDER 50 DIAMOND 9 FIREFLYl 2 ActiveGuyIsFirst=false @@ -78,9 +93,22 @@ Line=20 1 20 20 SPACE Point=18 19 INBOX Point=18 20 OUTBOX [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=973311529 +Score=370 +Success=true +Checksum=-717233392 +Movements=.22 ur u3 l4 d2 l5 u2 .3 l5 d3 l4 u3 r26 u2 r dr d5 l4 u3 l5 u7 ur r4 d r6 u2 l4 d dl l6 u6 r7 u r3 d2 dr r l2 d dl l2 u3 l2 d dl l2 dl d dl l2 d r2 ur u .2 l5 r u l5 u2 l2 dl d dl l3 d dl l7 d2 r4 u2 r4 u2 r6 d2 r5 d12 l2 d2 dl d4 r +[/replay] [/cave] [cave] +[highscore] +464 Czirkos Zoltan +[/highscore] Name=Cave C Intermission=false IntermissionProperties.instantlife=true @@ -92,8 +120,8 @@ DiamondValue=15 0 CaveTime=150 100 90 80 70 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=0 50 54 52 55 RandomFill=WALL 100 BOULDER 50 DIAMOND 9 SPACE 0 ActiveGuyIsFirst=false @@ -109,9 +137,23 @@ BorderProperties.objectwraparound=true Point=3 2 INBOX Point=39 18 OUTBOX [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=26219668 +Score=464 +Success=true +Checksum=-382012208 +Movements=.21 d l2 d r u2 r2 dr r d r2 d5 r3 d3 r2 d2 r2 d2 dr r d3 r2 . u r2 d4 r2 u2 l2 u2 l3 u2 l3 d3 r2 dr d3 l4 u ul2 u3 l3 r5 u3 ul u3 r3 u ul2 u2 r u2 r u2 l2 u2 r .2 l2 .5 d3 r5 dr d l2 r u3 l2 u2 l2 r2 .5 u .4 l5 u2 r2 dr d dr r3 d2 r dr d6 r3 d2 dr r d3 l r .2 r . d2 r2 dr d2 r4 d3 r3 l3 u3 ul l4 u2 ul u3 ur u2 .2 u3 l2 u3 l2 u2 r2 u2 . d5 r3 d3 r3 u2 l u2 ur u3 r u3 r4 d3 r u2 ur r u3 r l2 d6 r dr d3 l dl d2 dl .3 d3 dl l . d3 r3 d3 l2 u r3 ur u4 r d3 l d2 r .2 r +[/replay] [/cave] [cave] +[highscore] +267 Czirkos Zoltan +262 Czirkos Zoltan +[/highscore] Name=Cave D Intermission=false IntermissionProperties.instantlife=true @@ -123,8 +165,8 @@ DiamondValue=5 20 CaveTime=120 100 80 60 50 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=0 110 112 115 119 RandomFill=BOULDER 20 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -148,6 +190,16 @@ Point=26 9 BUTTERFLYd FillRect=32 8 35 11 DIRT SPACE Point=34 9 BUTTERFLYd [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=106709948 +Score=267 +Success=true +Checksum=1577631445 +Movements=.21 d2 r6 dr d r d2 r2 dr dl l .2 r2 d l3 r .3 d .7 l3 .4 r2 .2 d3 r2 .4 l4 r7 u5 r3 d r .2 r .2 u r3 l7 L3 l d .2 d .6 l4 . r2 .3 d3 r3 .3 l4 r7 u6 ur r d2 . r .2 u5 r4 l4 L9 l L4 d6 .2 l4 .4 r .2 d3 r3 .3 l4 r6 u4 r5 .2 d .8 l3 .5 d3 r4 .3 l4 r4 d4 r4 d5 +[/replay] [/cave] [cave] @@ -163,8 +215,8 @@ DiamondValue=30 0 CaveTime=10 10 10 10 10 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=10 11 12 13 14 RandomFill=SPACE 255 DIAMOND 9 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -185,9 +237,22 @@ Point=10 3 DIRT Point=3 3 INBOX Point=18 10 OUTBOX [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=1001905126 +Score=186 +Success=true +Checksum=53675390 +Movements=.25 r8 .3 r .12 l .6 d8 dr r3 l3 r8 +[/replay] [/cave] [cave] +[highscore] +671 Czirkos Zoltan +[/highscore] Name=Cave E Intermission=false IntermissionProperties.instantlife=true @@ -199,8 +264,8 @@ DiamondValue=50 90 CaveTime=150 120 90 60 30 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=0 0 0 0 0 RandomFill=SPACE 0 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -240,6 +305,16 @@ Point=26 14 FIREFLYl Point=33 16 DIAMOND Point=34 14 FIREFLYl [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=461428931 +Score=671 +Success=true +Checksum=89566740 +Movements=.22 d12 r2 . r5 .8 r .2 u .15 dr r2 d dl l2 r8 .2 u .12 l4 .7 u3 r5 dr d4 . l .2 L . r6 .6 r .9 u .12 l3 . d .2 r11 .7 u .6 l3 . d .2 r6 d6 l3 .2 u .7 l3 d . r3 l8 .2 u .13 l3 d .2 r3 l8 .2 u .12 l3 d .2 r3 l8 .2 u .12 l3 d . r5 dr d2 r27 +[/replay] [/cave] [cave] @@ -254,8 +329,8 @@ DiamondValue=40 60 CaveTime=150 120 100 90 80 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=0 20 21 22 23 RandomFill=BOULDER 50 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -297,9 +372,22 @@ Point=35 12 FIREFLYl Point=3 18 INBOX Point=38 18 OUTBOX [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=411626192 +Score=234 +Success=true +Checksum=1238557687 +Movements=.18 r6 d r4 u4 l u r .7 u2 . d2 . r2 .2 u2 .15 l9 r7 .6 u3 . d2 r2 . u3 .13 l8 dl d r7 .5 u3 . d dr r .2 u2 .15 l9 d r7 .5 u3 . d3 r3 .4 u . r .2 u2 .3 u .9 l10 dl d r10 d4 r5 dr d5 r3 dr d4 dr r2 d2 r5 ur u2 r6 dr d2 +[/replay] [/cave] [cave] +[highscore] +517 Czirkos Zoltan +[/highscore] Name=Cave G Intermission=false IntermissionProperties.instantlife=true @@ -311,8 +399,8 @@ DiamondValue=10 20 CaveTime=120 120 120 120 120 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=2 7 8 10 9 RandomFill=SPACE 100 BOULDER 40 FIREFLYl 2 SPACE 0 ActiveGuyIsFirst=false @@ -340,6 +428,9 @@ Point=39 5 OUTBOX [/cave] [cave] +[highscore] +345 Czirkos Zoltan +[/highscore] Name=Cave H Intermission=false IntermissionProperties.instantlife=true @@ -351,8 +442,8 @@ DiamondValue=10 20 CaveTime=120 110 100 90 80 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=1 3 4 5 6 RandomFill=SPACE 90 BOULDER 50 FIREFLYl 2 SPACE 0 ActiveGuyIsFirst=false @@ -380,6 +471,16 @@ Point=14 16 SPACE Point=19 16 DIAMOND Line=14 13 21 13 DIRT [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=498431887 +Score=345 +Success=true +Checksum=1595529734 +Movements=. d14 .5 d9 D L8 l5 . r . d3 dr r2 dr d r d4 l3 u ul l4 d l d3 l2 ul u r2 ur ul l2 u r5 d2 . u ur r ur u r2 d2 r5 u ul l2 u r2 l2 ul u l3 r4 l9 u4 r3 u2 r dr d r d2 r3 u r2 . D2 . l4 d2 l ul2 l ul l . u2 .2 u .2 R .2 u .4 R l2 . d .2 r u3 r u2 . r2 dr d6 l u5 r2 d . u3 ul2 l3 d2 . u3 r u r dr d r4 . r2 .2 d2 dl l u ur r dr d l7 L3 d7 .2 r3 d3 dl l2 d3 l5 u l5 d2 . u r3 u r4 d2 r2 u2 ur r ur u r2 u ur r4 u r3 . d3 u3 ul l6 u3 ul u2 .2 l ul u2 r2 u2 r3 dr d3 r4 u2 ul l2 u4 l4 ul u3 r3 d r5 u ul l10 d3 l9 u3 ul l6 d3 l u2 . l d2 dl d l3 u ul +[/replay] [/cave] [cave] @@ -395,8 +496,8 @@ DiamondValue=10 0 CaveTime=15 15 15 15 15 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=10 11 12 13 14 RandomFill=SPACE 0 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -424,6 +525,9 @@ Point=18 2 OUTBOX [/cave] [cave] +[highscore] +616 Czirkos Zoltan +[/highscore] Name=Cave I Intermission=false IntermissionProperties.instantlife=true @@ -435,8 +539,8 @@ DiamondValue=5 10 CaveTime=150 150 130 130 120 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=100 137 140 251 51 RandomFill=BOULDER 240 DIAMOND 120 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -458,6 +562,16 @@ Line=17 17 25 17 SPACE Point=7 10 INBOX Point=8 10 OUTBOX [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=107900927 +Score=616 +Success=true +Checksum=-1760962682 +Movements=.21 u r2 dr d7 r3 d2 r2 u r3 d r ur u r d2 r d . L3 l2 d . u ur r u r2 d3 l2 .2 r u3 r8 u9 d8 dl l2 d dl l6 r l9 u3 ul u7 .2 L4 R . d4 dr r2 dr d5 dl l . d .3 d l . L4 r2 . u2 .4 l d .3 L .2 l . L r4 l2 .3 d . L u r2 l r12 u r u r5 d2 r d2 r u4 ul l4 u4 r u ul u3 r5 R .4 u l2 .5 r l3 u ul l2 u l2 D .7 u3 l2 d2 l2 u2 ul l3 r .3 d5 l2 . D . u2 ul l d . u l2 d2 R l3 d l2 u UL L r2 u6 ul l9 d2 R u3 r3 D r2 d2 .5 D . r5 l2 u ul l3 d2 .2 D . u2 r9 u r4 d3 R u2 r2 d2 r2 l u2 r2 .3 r2 dr .2 d2 l d2 . D . u2 r3 u r2 d3 l L r4 u2 r4 d dl u ul l d2 D l3 d7 dl l d3 . d2 l2 d l11 u l3 u L . u2 l2 d2 l d l2 d2 l u7 R +[/replay] [/cave] [cave] @@ -472,8 +586,8 @@ DiamondValue=25 60 CaveTime=150 130 120 110 100 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=0 0 0 0 0 RandomFill=SPACE 0 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -506,6 +620,9 @@ Line=4 14 4 17 DIAMOND [/cave] [cave] +[highscore] +341 Czirkos Zoltan +[/highscore] Name=Cave K Intermission=false IntermissionProperties.instantlife=true @@ -517,8 +634,8 @@ DiamondValue=50 0 CaveTime=120 120 150 150 240 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=0 4 102 151 100 RandomFill=SPACE 100 BOULDER 80 FIREFLYl 2 SPACE 0 ActiveGuyIsFirst=false @@ -549,22 +666,36 @@ Point=35 19 DIAMOND Point=20 18 INBOX Point=38 15 OUTBOX [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2009-01-19 +RecordedWith=GDash 20090117 +RandomSeed=160849407 +Score=341 +Success=true +Checksum=-1276313710 +Movements=.16 d5 dr u ul l d dl l u . u2 l2 .10 dl l2 r . u r2 .2 d .2 D u2 ul l u2 r2 . d4 l2 d2 . u2 l2 d2 l u r ur u2 l r2 u ul u2 r u ul u2 ul u ul l d5 dl l d4 l3 u ul u7 . d2 r u2 ul .2 d2 l u2 r u2 ul u ur r2 u8 . d8 r10 u3 . l . r u2 . r .4 l2 u4 r l dl d3 r d2 r d4 r d2 r u2 l r3 d3 r3 u l u2 r3 d2 r2 u ul l3 . r4 ur u r2 d2 .3 u2 l4 .10 l .2 r7 . l3 L2 . r2 u9 . d10 l6 r2 l9 d5 dr r4 d5 . u2 r2 d u2 r5 d2 dr ur u d l d D L u3 r3 u3 .2 r2 . R2 l2 . d2 .2 l3 . u r6 . u2 .3 r .3 d r u ul l u r2 . r3 u l2 .2 r2 .4 r2 . u . r2 . r3 .4 u3 l u3 l u2 r l d5 r . d r d3 l d l23 d5 r8 d r4 dr d2 dr r .6 dr r .5 d .9 .5 R17 . u r ur u2 r5 . d3 .2 u2 r2 u2 r +[/replay] [/cave] [cave] +[highscore] +473 Czirkos Zoltan +[/highscore] Name=Cave L Intermission=false IntermissionProperties.instantlife=true IntermissionProperties.rewardlife=false Size=40 22 0 0 39 21 -Colors=Black Black Orange LightRed White White White +Colors=Black Black Gray2 LightRed White White White DiamondsRequired=19 19 14 16 21 DiamondValue=20 0 CaveTime=180 170 160 160 160 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=0 60 2 59 102 RandomFill=SPACE 60 BOULDER 50 DIAMOND 9 SPACE 0 ActiveGuyIsFirst=false @@ -594,6 +725,17 @@ Point=32 13 FIREFLYl Point=3 18 INBOX Point=39 20 OUTBOX [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2009-01-19 +RecordedWith=GDash 20090117 +RandomSeed=526353176 +Score=473 +Success=true +Checksum=1054402500 +Movements=.18 l5 d l r u2 l u8 .4 dr r2 d r2 . l3 . u4 . d3 r .5 l2 d6 . u13 r5 u2 . d3 r u3 ul u2 r3 d2 . u2 r4 d r2 u r3 d r dr d3 l ul u2 ul u2 ul ur2 u ul l u ul l d8 l ul u3 r2 u5 ur r7 d4 r d3 r .5 d3 . u2 l .2 d dl .2 d2 u ul l2 . D2 r2 d2 . L6 . u2 r4 d5 r . d .2 r .2 r . . .5 r2 d3 r ur u5 l .2 .3 l d2 l2 d2 dl d2 dl l3 u l2 d l u7 .25 r .8 l . d7 .3 l4 .2 u ur r2 .5 r2 .2 r6 u2 r3 .2 u6 r u .3 u .3 .2 l d7 dl l dl d2 dl l4 d l7 u6 .38 r2 .3 d5 dr r . l2 r7 ur u4 r9 u2 l4 ul u4 .2 u3 .6 u . .5 U d14 u ul l4 d2 l4 u2 r2 l3 d2 l2 u2 l3 d2 l d2 l2 u7 .28 r .7 d3 l3 u2 l r d3 dr r7 d r4 u2 r5 u3 ur r4 ur u2 l2 u4 r2 u7 r2 l d10 l dl d6 l2 .3 u ur r3 d4 dr r +[/replay] [/cave] [cave] @@ -609,8 +751,8 @@ DiamondValue=10 0 CaveTime=20 20 20 20 20 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=10 11 12 13 14 RandomFill=SPACE 0 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -633,6 +775,9 @@ Point=18 5 OUTBOX [/cave] [cave] +[highscore] +543 Czirkos Zoltan +[/highscore] Name=Cave M Intermission=false IntermissionProperties.instantlife=true @@ -644,8 +789,8 @@ DiamondValue=5 8 CaveTime=160 155 150 145 140 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandomFill=BOULDER 40 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false AmoebaTime=140 140 140 140 140 @@ -665,6 +810,16 @@ Line=5 17 34 17 BUTTERFLYd Line=5 18 34 18 BOULDER Rectangle=5 19 34 20 DIRT [/objects] + +[replay] +Player=Czirkos Zoltan +Date=2008-12-13 +RandomSeed=379777564 +Score=543 +Success=true +Checksum=568386068 +Movements=.15 r .2 d12 dl l d3 l3 u r3 u4 l d4 l3 .5 l2 d l3 u r6 u ul l6 d l d l2 u2 ur u2 r6 l9 dl d5 r d2 dl l D . r2 d r4 u l5 ul u8 r11 d r u3 r4 u3 r u2 . u .3 u .2 u l d l .2 l .31 u r2 d3 r2 . d4 dl l d3 r2 .60 L16 .30 L27 .31 L17 .61 L9 .4 u l5 .4 l5 . d3 r5 .19 l7 .2 r6 u r3 .2 L17 .5 u2 r3 u4 r . u r l2 d l3 d dl l . dl l d l3 u2 .3 l2 .23 u5 l +[/replay] [/cave] [cave] @@ -679,8 +834,8 @@ DiamondValue=10 20 CaveTime=150 145 140 135 130 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=0 0 0 0 0 RandomFill=BOULDER 0 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -720,8 +875,8 @@ DiamondValue=10 20 CaveTime=120 120 120 120 140 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=1 29 30 31 32 RandomFill=SPACE 100 BOULDER 80 FIREFLYl 2 SPACE 0 ActiveGuyIsFirst=false @@ -755,8 +910,8 @@ DiamondValue=10 20 CaveTime=150 150 150 150 150 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=1 120 129 126 123 RandomFill=BOULDER 50 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false @@ -799,8 +954,8 @@ DiamondValue=30 0 CaveTime=20 20 20 20 20 CaveScheduling=bd1 PALTiming=true -CaveDelay=12 6 3 1 0 FrameTime=200 200 200 200 200 +CaveDelay=12 6 3 1 0 RandSeed=0 0 0 0 0 RandomFill=SPACE 0 SPACE 0 SPACE 0 SPACE 0 ActiveGuyIsFirst=false diff --git a/sound/Makefile.in b/sound/Makefile.in index 1f8fcd0..cbae370 100644 --- a/sound/Makefile.in +++ b/sound/Makefile.in @@ -98,6 +98,8 @@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ diff --git a/src/IMG_savepng.c b/src/IMG_savepng.c new file mode 100644 index 0000000..c05d25b --- /dev/null +++ b/src/IMG_savepng.c @@ -0,0 +1,281 @@ +/* + Based on zlib license - see http://www.gzip.org/zlib/zlib_license.html + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + "Philip D. Bober" +*/ + +/** + * 4/17/04 - IMG_SavePNG & IMG_SavePNG_RW - Philip D. Bober + * 11/08/2004 - Compr fix, levels -1,1-7 now work - Tyler Montbriand + */ +#include +#include +#include +#include +#include "IMG_savepng.h" + +int IMG_SavePNG(const char *file, SDL_Surface *surf,int compression){ + SDL_RWops *fp; + int ret; + + fp=SDL_RWFromFile(file,"wb"); + + if( fp == NULL ) { + return (-1); + } + + ret=IMG_SavePNG_RW(fp,surf,compression); + SDL_RWclose(fp); + return ret; +} + +static void png_write_data(png_structp png_ptr,png_bytep data, png_size_t length){ + SDL_RWops *rp = (SDL_RWops*) png_get_io_ptr(png_ptr); + SDL_RWwrite(rp,data,1,length); +} + +int IMG_SavePNG_RW(SDL_RWops *src, SDL_Surface *surf,int compression){ + png_structp png_ptr; + png_infop info_ptr; + SDL_PixelFormat *fmt=NULL; + SDL_Surface *tempsurf=NULL; + int ret,funky_format,used_alpha; + unsigned int i,temp_alpha; + png_colorp palette; + Uint8 *palette_alpha=NULL; + png_byte **row_pointers=NULL; + png_ptr=NULL;info_ptr=NULL;palette=NULL;ret=-1; + funky_format=0; + + if( !src || !surf) { + goto savedone; /* Nothing to do. */ + } + + row_pointers=(png_byte **)malloc(surf->h * sizeof(png_byte*)); + if (!row_pointers) { + SDL_SetError("Couldn't allocate memory for rowpointers"); + goto savedone; + } + + png_ptr=png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,NULL,NULL); + if (!png_ptr){ + SDL_SetError("Couldn't allocate memory for PNG file"); + goto savedone; + } + info_ptr= png_create_info_struct(png_ptr); + if (!info_ptr){ + SDL_SetError("Couldn't allocate image information for PNG file"); + goto savedone; + } + /* setup custom writer functions */ + png_set_write_fn(png_ptr,(voidp)src,png_write_data,NULL); + + if (setjmp(png_jmpbuf(png_ptr))){ + SDL_SetError("Unknown error writing PNG"); + goto savedone; + } + + if(compression>Z_BEST_COMPRESSION) + compression=Z_BEST_COMPRESSION; + + if(compression == Z_NO_COMPRESSION) // No compression + { + png_set_filter(png_ptr,0,PNG_FILTER_NONE); + png_set_compression_level(png_ptr,Z_NO_COMPRESSION); + } + else if(compression<0) // Default compression + png_set_compression_level(png_ptr,Z_DEFAULT_COMPRESSION); + else + png_set_compression_level(png_ptr,compression); + + fmt=surf->format; + if(fmt->BitsPerPixel==8){ /* Paletted */ + png_set_IHDR(png_ptr,info_ptr, + surf->w,surf->h,8,PNG_COLOR_TYPE_PALETTE, + PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT, + PNG_FILTER_TYPE_DEFAULT); + palette=(png_colorp) malloc(fmt->palette->ncolors * sizeof(png_color)); + if (!palette) { + SDL_SetError("Couldn't create memory for palette"); + goto savedone; + } + for (i=0;ipalette->ncolors;i++) { + palette[i].red=fmt->palette->colors[i].r; + palette[i].green=fmt->palette->colors[i].g; + palette[i].blue=fmt->palette->colors[i].b; + } + png_set_PLTE(png_ptr,info_ptr,palette,fmt->palette->ncolors); + if (surf->flags&SDL_SRCCOLORKEY) { + palette_alpha=(Uint8 *)malloc((fmt->colorkey+1)*sizeof(Uint8)); + if (!palette_alpha) { + SDL_SetError("Couldn't create memory for palette transparency"); + goto savedone; + } + /* FIXME: memset? */ + for (i=0;i<(fmt->colorkey+1);i++) { + palette_alpha[i]=255; + } + palette_alpha[fmt->colorkey]=0; + png_set_tRNS(png_ptr,info_ptr,palette_alpha,fmt->colorkey+1,NULL); + } + }else{ /* Truecolor */ + if (fmt->Amask) { + png_set_IHDR(png_ptr,info_ptr, + surf->w,surf->h,8,PNG_COLOR_TYPE_RGB_ALPHA, + PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT, + PNG_FILTER_TYPE_DEFAULT); + } else { + png_set_IHDR(png_ptr,info_ptr, + surf->w,surf->h,8,PNG_COLOR_TYPE_RGB, + PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT, + PNG_FILTER_TYPE_DEFAULT); + } + } + png_write_info(png_ptr, info_ptr); + + if (fmt->BitsPerPixel==8) { /* Paletted */ + for(i=0;ih;i++){ + row_pointers[i]= ((png_byte*)surf->pixels) + i*surf->pitch; + } + if(SDL_MUSTLOCK(surf)){ + SDL_LockSurface(surf); + } + png_write_image(png_ptr, row_pointers); + if(SDL_MUSTLOCK(surf)){ + SDL_UnlockSurface(surf); + } + }else{ /* Truecolor */ + if(fmt->BytesPerPixel==3){ + if(fmt->Amask){ /* check for 24 bit with alpha */ + funky_format=1; + }else{ + /* Check for RGB/BGR/GBR/RBG/etc surfaces.*/ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + if(fmt->Rmask!=0xFF0000 + || fmt->Gmask!=0x00FF00 + || fmt->Bmask!=0x0000FF){ +#else + if(fmt->Rmask!=0x0000FF + || fmt->Gmask!=0x00FF00 + || fmt->Bmask!=0xFF0000){ +#endif + funky_format=1; + } + } + }else if (fmt->BytesPerPixel==4){ + if (!fmt->Amask) { /* check for 32bit but no alpha */ + funky_format=1; + }else{ + /* Check for ARGB/ABGR/GBAR/RABG/etc surfaces.*/ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + if(fmt->Rmask!=0xFF000000 + || fmt->Gmask!=0x00FF0000 + || fmt->Bmask!=0x0000FF00 + || fmt->Amask!=0x000000FF){ +#else + if(fmt->Rmask!=0x000000FF + || fmt->Gmask!=0x0000FF00 + || fmt->Bmask!=0x00FF0000 + || fmt->Amask!=0xFF000000){ +#endif + funky_format=1; + } + } + }else{ /* 555 or 565 16 bit color */ + funky_format=1; + } + if (funky_format) { + /* Allocate non-funky format, and copy pixeldata in*/ + if(fmt->Amask){ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + tempsurf = SDL_CreateRGBSurface(SDL_SWSURFACE, surf->w, surf->h, 24, + 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff); +#else + tempsurf = SDL_CreateRGBSurface(SDL_SWSURFACE, surf->w, surf->h, 24, + 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000); +#endif + }else{ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + tempsurf = SDL_CreateRGBSurface(SDL_SWSURFACE, surf->w, surf->h, 24, + 0xff0000, 0x00ff00, 0x0000ff, 0x00000000); +#else + tempsurf = SDL_CreateRGBSurface(SDL_SWSURFACE, surf->w, surf->h, 24, + 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000); +#endif + } + if(!tempsurf){ + SDL_SetError("Couldn't allocate temp surface"); + goto savedone; + } + if(surf->flags&SDL_SRCALPHA){ + temp_alpha=fmt->alpha; + used_alpha=1; + SDL_SetAlpha(surf,0,255); /* Set for an opaque blit */ + }else{ + used_alpha=0; + } + if(SDL_BlitSurface(surf,NULL,tempsurf,NULL)!=0){ + SDL_SetError("Couldn't blit surface to temp surface"); + SDL_FreeSurface(tempsurf); + goto savedone; + } + if (used_alpha) { + SDL_SetAlpha(surf,SDL_SRCALPHA,(Uint8)temp_alpha); /* Restore alpha settings*/ + } + for(i=0;ih;i++){ + row_pointers[i]= ((png_byte*)tempsurf->pixels) + i*tempsurf->pitch; + } + if(SDL_MUSTLOCK(tempsurf)){ + SDL_LockSurface(tempsurf); + } + png_write_image(png_ptr, row_pointers); + if(SDL_MUSTLOCK(tempsurf)){ + SDL_UnlockSurface(tempsurf); + } + SDL_FreeSurface(tempsurf); + } else { + for(i=0;ih;i++){ + row_pointers[i]= ((png_byte*)surf->pixels) + i*surf->pitch; + } + if(SDL_MUSTLOCK(surf)){ + SDL_LockSurface(surf); + } + png_write_image(png_ptr, row_pointers); + if(SDL_MUSTLOCK(surf)){ + SDL_UnlockSurface(surf); + } + } + } + + png_write_end(png_ptr, NULL); + ret=0; /* got here, so nothing went wrong. YAY! */ + +savedone: /* clean up and return */ + png_destroy_write_struct(&png_ptr,&info_ptr); + if (palette) { + free(palette); + } + if (palette_alpha) { + free(palette_alpha); + } + if (row_pointers) { + free(row_pointers); + } + return ret; +} diff --git a/src/IMG_savepng.h b/src/IMG_savepng.h new file mode 100644 index 0000000..36fcfd5 --- /dev/null +++ b/src/IMG_savepng.h @@ -0,0 +1,53 @@ +/* + Based on zlib license - see http://www.gzip.org/zlib/zlib_license.html + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + "Philip D. Bober" + */ +#ifndef __IMG_SAVETOPNG_H__ +#define __IMG_SAVETOPNG_H__ + +/* #include */ + +#ifdef __cplusplus +extern "C" { +#endif + +#define IMG_COMPRESS_OFF 0 +#define IMG_COMPRESS_MAX 9 +#define IMG_COMPRESS_DEFAULT -1 + +/** + * Takes a filename, a surface to save, and a compression level. The + * compression level can be 0(min) through 9(max), or -1(default). + */ +DECLSPEC int SDLCALL IMG_SavePNG(const char *file, + SDL_Surface *surf, + int compression); +/** + * Takes a SDL_RWops pointer, a surface to save, and a compression level. + * compression can be 0(min) through 9(max), or -1(default). + */ +DECLSPEC int SDLCALL IMG_SavePNG_RW(SDL_RWops *src, + SDL_Surface *surf, + int compression); +#ifdef __cplusplus +} +#endif + +#endif/*__IMG_SAVETOPNG_H__*/ diff --git a/src/Makefile.am b/src/Makefile.am index 1c4f9b4..5a57cb7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -16,7 +16,7 @@ endif # if sdl is enabled, build sdash. if SDL - SDASH=sdash + SDASH=sdash sreplay else SDASH= endif @@ -90,24 +90,46 @@ gtkheaders = \ editorexport.h\ help.h + + + # sdl sources and headers: # the gdash sdl ui with sounds. -sdlsources = \ +sdlbasesources = \ sdlgfx.c \ - sdlmain.c \ sdlui.c -sdlheaders = \ +sdlbaseheaders = \ sdlgfx.h \ sdlui.h +# sdl sources and headers: +# the gdash sdl ui with sounds. +sdashsources = \ + sdlmain.c + +sdashheaders = + + +# sdl sources and headers: +# the gdash sdl ui with sounds. +sreplaysources = \ + sdlreplay.c \ + IMG_savepng.c + +sreplayheaders = \ + IMG_savepng.h + noinst_HEADERS = \ $(base_headers) \ $(gtkheaders) \ - $(sdlheaders) \ - $(sound_headers) + $(sdlbaseheaders) \ + $(sound_headers) \ + $(sdashheaders) \ + $(sreplayheaders) + @@ -140,5 +162,21 @@ endif sdash_LDADD = @GLIB_LIBS@ @SDL_LIBS@ $(SDASH_LIBADD) sdash_SOURCES = \ $(base_sources) \ - $(sdlsources) \ + $(sdlbasesources) \ + $(sdashsources) \ + $(sound_sources) + +# gtk cflags also for the sdl version - for settings.c +# sdl is needed for gfx and sound. +sreplay_CFLAGS = -g -Wall @GTK_CFLAGS@ @GLIB_CFLAGS@ @SDL_CFLAGS@ @LIBPNG_CFLAGS@ +sreplay_LDFLAGS = -g -Wall +if SDL + SREPLAY_LIBADD=-lSDL_mixer -lSDL_image +endif +sreplay_LDADD = @GLIB_LIBS@ @SDL_LIBS@ @LIBPNG_LIBS@ $(SREPLAY_LIBADD) +sreplay_SOURCES = \ + $(base_sources) \ + $(sdlbasesources) \ + $(sreplaysources) \ $(sound_sources) + diff --git a/src/Makefile.in b/src/Makefile.in index 31a2465..c2261fe 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -49,7 +49,7 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @GTK_TRUE@am__EXEEXT_1 = gdash$(EXEEXT) -@SDL_TRUE@am__EXEEXT_2 = sdash$(EXEEXT) +@SDL_TRUE@am__EXEEXT_2 = sdash$(EXEEXT) sreplay$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) @@ -78,14 +78,32 @@ am__objects_4 = sdash-colors.$(OBJEXT) sdash-cave.$(OBJEXT) \ sdash-c64import.$(OBJEXT) sdash-gameplay.$(OBJEXT) \ sdash-settings.$(OBJEXT) sdash-util.$(OBJEXT) \ sdash-about.$(OBJEXT) sdash-gfxutil.$(OBJEXT) -am__objects_5 = sdash-sdlgfx.$(OBJEXT) sdash-sdlmain.$(OBJEXT) \ - sdash-sdlui.$(OBJEXT) -am__objects_6 = sdash-sound.$(OBJEXT) -am_sdash_OBJECTS = $(am__objects_4) $(am__objects_5) $(am__objects_6) +am__objects_5 = sdash-sdlgfx.$(OBJEXT) sdash-sdlui.$(OBJEXT) +am__objects_6 = sdash-sdlmain.$(OBJEXT) +am__objects_7 = sdash-sound.$(OBJEXT) +am_sdash_OBJECTS = $(am__objects_4) $(am__objects_5) $(am__objects_6) \ + $(am__objects_7) sdash_OBJECTS = $(am_sdash_OBJECTS) sdash_DEPENDENCIES = $(am__DEPENDENCIES_1) sdash_LINK = $(CCLD) $(sdash_CFLAGS) $(CFLAGS) $(sdash_LDFLAGS) \ $(LDFLAGS) -o $@ +am__objects_8 = sreplay-colors.$(OBJEXT) sreplay-cave.$(OBJEXT) \ + sreplay-cavedb.$(OBJEXT) sreplay-caveengine.$(OBJEXT) \ + sreplay-caveobject.$(OBJEXT) sreplay-cavesound.$(OBJEXT) \ + sreplay-bdcff.$(OBJEXT) sreplay-caveset.$(OBJEXT) \ + sreplay-c64import.$(OBJEXT) sreplay-gameplay.$(OBJEXT) \ + sreplay-settings.$(OBJEXT) sreplay-util.$(OBJEXT) \ + sreplay-about.$(OBJEXT) sreplay-gfxutil.$(OBJEXT) +am__objects_9 = sreplay-sdlgfx.$(OBJEXT) sreplay-sdlui.$(OBJEXT) +am__objects_10 = sreplay-sdlreplay.$(OBJEXT) \ + sreplay-IMG_savepng.$(OBJEXT) +am__objects_11 = sreplay-sound.$(OBJEXT) +am_sreplay_OBJECTS = $(am__objects_8) $(am__objects_9) \ + $(am__objects_10) $(am__objects_11) +sreplay_OBJECTS = $(am_sreplay_OBJECTS) +sreplay_DEPENDENCIES = $(am__DEPENDENCIES_1) +sreplay_LINK = $(CCLD) $(sreplay_CFLAGS) $(CFLAGS) $(sreplay_LDFLAGS) \ + $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @@ -93,8 +111,8 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(gdash_SOURCES) $(sdash_SOURCES) -DIST_SOURCES = $(gdash_SOURCES) $(sdash_SOURCES) +SOURCES = $(gdash_SOURCES) $(sdash_SOURCES) $(sreplay_SOURCES) +DIST_SOURCES = $(gdash_SOURCES) $(sdash_SOURCES) $(sreplay_SOURCES) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags @@ -140,6 +158,8 @@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ @@ -229,7 +249,7 @@ INCLUDES = \ @SDL_FALSE@SDASH = # if sdl is enabled, build sdash. -@SDL_TRUE@SDASH = sdash +@SDL_TRUE@SDASH = sdash sreplay # base sources and headers: # the gdash engine. @@ -298,20 +318,38 @@ gtkheaders = \ # sdl sources and headers: # the gdash sdl ui with sounds. -sdlsources = \ +sdlbasesources = \ sdlgfx.c \ - sdlmain.c \ sdlui.c -sdlheaders = \ +sdlbaseheaders = \ sdlgfx.h \ sdlui.h + +# sdl sources and headers: +# the gdash sdl ui with sounds. +sdashsources = \ + sdlmain.c + +sdashheaders = + +# sdl sources and headers: +# the gdash sdl ui with sounds. +sreplaysources = \ + sdlreplay.c \ + IMG_savepng.c + +sreplayheaders = \ + IMG_savepng.h + noinst_HEADERS = \ $(base_headers) \ $(gtkheaders) \ - $(sdlheaders) \ - $(sound_headers) + $(sdlbaseheaders) \ + $(sound_headers) \ + $(sdashheaders) \ + $(sreplayheaders) # gtk cflags also for the sdl version - for settings.c @@ -334,7 +372,21 @@ sdash_LDFLAGS = -g -Wall sdash_LDADD = @GLIB_LIBS@ @SDL_LIBS@ $(SDASH_LIBADD) sdash_SOURCES = \ $(base_sources) \ - $(sdlsources) \ + $(sdlbasesources) \ + $(sdashsources) \ + $(sound_sources) + + +# gtk cflags also for the sdl version - for settings.c +# sdl is needed for gfx and sound. +sreplay_CFLAGS = -g -Wall @GTK_CFLAGS@ @GLIB_CFLAGS@ @SDL_CFLAGS@ @LIBPNG_CFLAGS@ +sreplay_LDFLAGS = -g -Wall +@SDL_TRUE@SREPLAY_LIBADD = -lSDL_mixer -lSDL_image +sreplay_LDADD = @GLIB_LIBS@ @SDL_LIBS@ @LIBPNG_LIBS@ $(SREPLAY_LIBADD) +sreplay_SOURCES = \ + $(base_sources) \ + $(sdlbasesources) \ + $(sreplaysources) \ $(sound_sources) all: all-am @@ -399,6 +451,9 @@ gdash$(EXEEXT): $(gdash_OBJECTS) $(gdash_DEPENDENCIES) sdash$(EXEEXT): $(sdash_OBJECTS) $(sdash_DEPENDENCIES) @rm -f sdash$(EXEEXT) $(sdash_LINK) $(sdash_OBJECTS) $(sdash_LDADD) $(LIBS) +sreplay$(EXEEXT): $(sreplay_OBJECTS) $(sreplay_DEPENDENCIES) + @rm -f sreplay$(EXEEXT) + $(sreplay_LINK) $(sreplay_OBJECTS) $(sreplay_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -446,6 +501,25 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdash-settings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdash-sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdash-util.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-IMG_savepng.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-about.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-bdcff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-c64import.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-cave.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-cavedb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-caveengine.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-caveobject.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-caveset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-cavesound.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-colors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-gameplay.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-gfxutil.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-sdlgfx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-sdlreplay.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-sdlui.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-settings.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-sound.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreplay-util.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -979,20 +1053,6 @@ sdash-sdlgfx.obj: sdlgfx.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -c -o sdash-sdlgfx.obj `if test -f 'sdlgfx.c'; then $(CYGPATH_W) 'sdlgfx.c'; else $(CYGPATH_W) '$(srcdir)/sdlgfx.c'; fi` -sdash-sdlmain.o: sdlmain.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -MT sdash-sdlmain.o -MD -MP -MF $(DEPDIR)/sdash-sdlmain.Tpo -c -o sdash-sdlmain.o `test -f 'sdlmain.c' || echo '$(srcdir)/'`sdlmain.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sdash-sdlmain.Tpo $(DEPDIR)/sdash-sdlmain.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlmain.c' object='sdash-sdlmain.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -c -o sdash-sdlmain.o `test -f 'sdlmain.c' || echo '$(srcdir)/'`sdlmain.c - -sdash-sdlmain.obj: sdlmain.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -MT sdash-sdlmain.obj -MD -MP -MF $(DEPDIR)/sdash-sdlmain.Tpo -c -o sdash-sdlmain.obj `if test -f 'sdlmain.c'; then $(CYGPATH_W) 'sdlmain.c'; else $(CYGPATH_W) '$(srcdir)/sdlmain.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sdash-sdlmain.Tpo $(DEPDIR)/sdash-sdlmain.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlmain.c' object='sdash-sdlmain.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -c -o sdash-sdlmain.obj `if test -f 'sdlmain.c'; then $(CYGPATH_W) 'sdlmain.c'; else $(CYGPATH_W) '$(srcdir)/sdlmain.c'; fi` - sdash-sdlui.o: sdlui.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -MT sdash-sdlui.o -MD -MP -MF $(DEPDIR)/sdash-sdlui.Tpo -c -o sdash-sdlui.o `test -f 'sdlui.c' || echo '$(srcdir)/'`sdlui.c @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sdash-sdlui.Tpo $(DEPDIR)/sdash-sdlui.Po @@ -1007,6 +1067,20 @@ sdash-sdlui.obj: sdlui.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -c -o sdash-sdlui.obj `if test -f 'sdlui.c'; then $(CYGPATH_W) 'sdlui.c'; else $(CYGPATH_W) '$(srcdir)/sdlui.c'; fi` +sdash-sdlmain.o: sdlmain.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -MT sdash-sdlmain.o -MD -MP -MF $(DEPDIR)/sdash-sdlmain.Tpo -c -o sdash-sdlmain.o `test -f 'sdlmain.c' || echo '$(srcdir)/'`sdlmain.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sdash-sdlmain.Tpo $(DEPDIR)/sdash-sdlmain.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlmain.c' object='sdash-sdlmain.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -c -o sdash-sdlmain.o `test -f 'sdlmain.c' || echo '$(srcdir)/'`sdlmain.c + +sdash-sdlmain.obj: sdlmain.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -MT sdash-sdlmain.obj -MD -MP -MF $(DEPDIR)/sdash-sdlmain.Tpo -c -o sdash-sdlmain.obj `if test -f 'sdlmain.c'; then $(CYGPATH_W) 'sdlmain.c'; else $(CYGPATH_W) '$(srcdir)/sdlmain.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sdash-sdlmain.Tpo $(DEPDIR)/sdash-sdlmain.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlmain.c' object='sdash-sdlmain.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -c -o sdash-sdlmain.obj `if test -f 'sdlmain.c'; then $(CYGPATH_W) 'sdlmain.c'; else $(CYGPATH_W) '$(srcdir)/sdlmain.c'; fi` + sdash-sound.o: sound.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -MT sdash-sound.o -MD -MP -MF $(DEPDIR)/sdash-sound.Tpo -c -o sdash-sound.o `test -f 'sound.c' || echo '$(srcdir)/'`sound.c @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sdash-sound.Tpo $(DEPDIR)/sdash-sound.Po @@ -1021,6 +1095,272 @@ sdash-sound.obj: sound.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sdash_CFLAGS) $(CFLAGS) -c -o sdash-sound.obj `if test -f 'sound.c'; then $(CYGPATH_W) 'sound.c'; else $(CYGPATH_W) '$(srcdir)/sound.c'; fi` +sreplay-colors.o: colors.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-colors.o -MD -MP -MF $(DEPDIR)/sreplay-colors.Tpo -c -o sreplay-colors.o `test -f 'colors.c' || echo '$(srcdir)/'`colors.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-colors.Tpo $(DEPDIR)/sreplay-colors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='colors.c' object='sreplay-colors.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-colors.o `test -f 'colors.c' || echo '$(srcdir)/'`colors.c + +sreplay-colors.obj: colors.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-colors.obj -MD -MP -MF $(DEPDIR)/sreplay-colors.Tpo -c -o sreplay-colors.obj `if test -f 'colors.c'; then $(CYGPATH_W) 'colors.c'; else $(CYGPATH_W) '$(srcdir)/colors.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-colors.Tpo $(DEPDIR)/sreplay-colors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='colors.c' object='sreplay-colors.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-colors.obj `if test -f 'colors.c'; then $(CYGPATH_W) 'colors.c'; else $(CYGPATH_W) '$(srcdir)/colors.c'; fi` + +sreplay-cave.o: cave.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-cave.o -MD -MP -MF $(DEPDIR)/sreplay-cave.Tpo -c -o sreplay-cave.o `test -f 'cave.c' || echo '$(srcdir)/'`cave.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-cave.Tpo $(DEPDIR)/sreplay-cave.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cave.c' object='sreplay-cave.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-cave.o `test -f 'cave.c' || echo '$(srcdir)/'`cave.c + +sreplay-cave.obj: cave.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-cave.obj -MD -MP -MF $(DEPDIR)/sreplay-cave.Tpo -c -o sreplay-cave.obj `if test -f 'cave.c'; then $(CYGPATH_W) 'cave.c'; else $(CYGPATH_W) '$(srcdir)/cave.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-cave.Tpo $(DEPDIR)/sreplay-cave.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cave.c' object='sreplay-cave.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-cave.obj `if test -f 'cave.c'; then $(CYGPATH_W) 'cave.c'; else $(CYGPATH_W) '$(srcdir)/cave.c'; fi` + +sreplay-cavedb.o: cavedb.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-cavedb.o -MD -MP -MF $(DEPDIR)/sreplay-cavedb.Tpo -c -o sreplay-cavedb.o `test -f 'cavedb.c' || echo '$(srcdir)/'`cavedb.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-cavedb.Tpo $(DEPDIR)/sreplay-cavedb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cavedb.c' object='sreplay-cavedb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-cavedb.o `test -f 'cavedb.c' || echo '$(srcdir)/'`cavedb.c + +sreplay-cavedb.obj: cavedb.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-cavedb.obj -MD -MP -MF $(DEPDIR)/sreplay-cavedb.Tpo -c -o sreplay-cavedb.obj `if test -f 'cavedb.c'; then $(CYGPATH_W) 'cavedb.c'; else $(CYGPATH_W) '$(srcdir)/cavedb.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-cavedb.Tpo $(DEPDIR)/sreplay-cavedb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cavedb.c' object='sreplay-cavedb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-cavedb.obj `if test -f 'cavedb.c'; then $(CYGPATH_W) 'cavedb.c'; else $(CYGPATH_W) '$(srcdir)/cavedb.c'; fi` + +sreplay-caveengine.o: caveengine.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-caveengine.o -MD -MP -MF $(DEPDIR)/sreplay-caveengine.Tpo -c -o sreplay-caveengine.o `test -f 'caveengine.c' || echo '$(srcdir)/'`caveengine.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-caveengine.Tpo $(DEPDIR)/sreplay-caveengine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='caveengine.c' object='sreplay-caveengine.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-caveengine.o `test -f 'caveengine.c' || echo '$(srcdir)/'`caveengine.c + +sreplay-caveengine.obj: caveengine.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-caveengine.obj -MD -MP -MF $(DEPDIR)/sreplay-caveengine.Tpo -c -o sreplay-caveengine.obj `if test -f 'caveengine.c'; then $(CYGPATH_W) 'caveengine.c'; else $(CYGPATH_W) '$(srcdir)/caveengine.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-caveengine.Tpo $(DEPDIR)/sreplay-caveengine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='caveengine.c' object='sreplay-caveengine.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-caveengine.obj `if test -f 'caveengine.c'; then $(CYGPATH_W) 'caveengine.c'; else $(CYGPATH_W) '$(srcdir)/caveengine.c'; fi` + +sreplay-caveobject.o: caveobject.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-caveobject.o -MD -MP -MF $(DEPDIR)/sreplay-caveobject.Tpo -c -o sreplay-caveobject.o `test -f 'caveobject.c' || echo '$(srcdir)/'`caveobject.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-caveobject.Tpo $(DEPDIR)/sreplay-caveobject.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='caveobject.c' object='sreplay-caveobject.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-caveobject.o `test -f 'caveobject.c' || echo '$(srcdir)/'`caveobject.c + +sreplay-caveobject.obj: caveobject.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-caveobject.obj -MD -MP -MF $(DEPDIR)/sreplay-caveobject.Tpo -c -o sreplay-caveobject.obj `if test -f 'caveobject.c'; then $(CYGPATH_W) 'caveobject.c'; else $(CYGPATH_W) '$(srcdir)/caveobject.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-caveobject.Tpo $(DEPDIR)/sreplay-caveobject.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='caveobject.c' object='sreplay-caveobject.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-caveobject.obj `if test -f 'caveobject.c'; then $(CYGPATH_W) 'caveobject.c'; else $(CYGPATH_W) '$(srcdir)/caveobject.c'; fi` + +sreplay-cavesound.o: cavesound.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-cavesound.o -MD -MP -MF $(DEPDIR)/sreplay-cavesound.Tpo -c -o sreplay-cavesound.o `test -f 'cavesound.c' || echo '$(srcdir)/'`cavesound.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-cavesound.Tpo $(DEPDIR)/sreplay-cavesound.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cavesound.c' object='sreplay-cavesound.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-cavesound.o `test -f 'cavesound.c' || echo '$(srcdir)/'`cavesound.c + +sreplay-cavesound.obj: cavesound.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-cavesound.obj -MD -MP -MF $(DEPDIR)/sreplay-cavesound.Tpo -c -o sreplay-cavesound.obj `if test -f 'cavesound.c'; then $(CYGPATH_W) 'cavesound.c'; else $(CYGPATH_W) '$(srcdir)/cavesound.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-cavesound.Tpo $(DEPDIR)/sreplay-cavesound.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cavesound.c' object='sreplay-cavesound.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-cavesound.obj `if test -f 'cavesound.c'; then $(CYGPATH_W) 'cavesound.c'; else $(CYGPATH_W) '$(srcdir)/cavesound.c'; fi` + +sreplay-bdcff.o: bdcff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-bdcff.o -MD -MP -MF $(DEPDIR)/sreplay-bdcff.Tpo -c -o sreplay-bdcff.o `test -f 'bdcff.c' || echo '$(srcdir)/'`bdcff.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-bdcff.Tpo $(DEPDIR)/sreplay-bdcff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bdcff.c' object='sreplay-bdcff.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-bdcff.o `test -f 'bdcff.c' || echo '$(srcdir)/'`bdcff.c + +sreplay-bdcff.obj: bdcff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-bdcff.obj -MD -MP -MF $(DEPDIR)/sreplay-bdcff.Tpo -c -o sreplay-bdcff.obj `if test -f 'bdcff.c'; then $(CYGPATH_W) 'bdcff.c'; else $(CYGPATH_W) '$(srcdir)/bdcff.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-bdcff.Tpo $(DEPDIR)/sreplay-bdcff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bdcff.c' object='sreplay-bdcff.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-bdcff.obj `if test -f 'bdcff.c'; then $(CYGPATH_W) 'bdcff.c'; else $(CYGPATH_W) '$(srcdir)/bdcff.c'; fi` + +sreplay-caveset.o: caveset.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-caveset.o -MD -MP -MF $(DEPDIR)/sreplay-caveset.Tpo -c -o sreplay-caveset.o `test -f 'caveset.c' || echo '$(srcdir)/'`caveset.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-caveset.Tpo $(DEPDIR)/sreplay-caveset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='caveset.c' object='sreplay-caveset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-caveset.o `test -f 'caveset.c' || echo '$(srcdir)/'`caveset.c + +sreplay-caveset.obj: caveset.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-caveset.obj -MD -MP -MF $(DEPDIR)/sreplay-caveset.Tpo -c -o sreplay-caveset.obj `if test -f 'caveset.c'; then $(CYGPATH_W) 'caveset.c'; else $(CYGPATH_W) '$(srcdir)/caveset.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-caveset.Tpo $(DEPDIR)/sreplay-caveset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='caveset.c' object='sreplay-caveset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-caveset.obj `if test -f 'caveset.c'; then $(CYGPATH_W) 'caveset.c'; else $(CYGPATH_W) '$(srcdir)/caveset.c'; fi` + +sreplay-c64import.o: c64import.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-c64import.o -MD -MP -MF $(DEPDIR)/sreplay-c64import.Tpo -c -o sreplay-c64import.o `test -f 'c64import.c' || echo '$(srcdir)/'`c64import.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-c64import.Tpo $(DEPDIR)/sreplay-c64import.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='c64import.c' object='sreplay-c64import.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-c64import.o `test -f 'c64import.c' || echo '$(srcdir)/'`c64import.c + +sreplay-c64import.obj: c64import.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-c64import.obj -MD -MP -MF $(DEPDIR)/sreplay-c64import.Tpo -c -o sreplay-c64import.obj `if test -f 'c64import.c'; then $(CYGPATH_W) 'c64import.c'; else $(CYGPATH_W) '$(srcdir)/c64import.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-c64import.Tpo $(DEPDIR)/sreplay-c64import.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='c64import.c' object='sreplay-c64import.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-c64import.obj `if test -f 'c64import.c'; then $(CYGPATH_W) 'c64import.c'; else $(CYGPATH_W) '$(srcdir)/c64import.c'; fi` + +sreplay-gameplay.o: gameplay.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-gameplay.o -MD -MP -MF $(DEPDIR)/sreplay-gameplay.Tpo -c -o sreplay-gameplay.o `test -f 'gameplay.c' || echo '$(srcdir)/'`gameplay.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-gameplay.Tpo $(DEPDIR)/sreplay-gameplay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gameplay.c' object='sreplay-gameplay.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-gameplay.o `test -f 'gameplay.c' || echo '$(srcdir)/'`gameplay.c + +sreplay-gameplay.obj: gameplay.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-gameplay.obj -MD -MP -MF $(DEPDIR)/sreplay-gameplay.Tpo -c -o sreplay-gameplay.obj `if test -f 'gameplay.c'; then $(CYGPATH_W) 'gameplay.c'; else $(CYGPATH_W) '$(srcdir)/gameplay.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-gameplay.Tpo $(DEPDIR)/sreplay-gameplay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gameplay.c' object='sreplay-gameplay.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-gameplay.obj `if test -f 'gameplay.c'; then $(CYGPATH_W) 'gameplay.c'; else $(CYGPATH_W) '$(srcdir)/gameplay.c'; fi` + +sreplay-settings.o: settings.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-settings.o -MD -MP -MF $(DEPDIR)/sreplay-settings.Tpo -c -o sreplay-settings.o `test -f 'settings.c' || echo '$(srcdir)/'`settings.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-settings.Tpo $(DEPDIR)/sreplay-settings.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='settings.c' object='sreplay-settings.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-settings.o `test -f 'settings.c' || echo '$(srcdir)/'`settings.c + +sreplay-settings.obj: settings.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-settings.obj -MD -MP -MF $(DEPDIR)/sreplay-settings.Tpo -c -o sreplay-settings.obj `if test -f 'settings.c'; then $(CYGPATH_W) 'settings.c'; else $(CYGPATH_W) '$(srcdir)/settings.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-settings.Tpo $(DEPDIR)/sreplay-settings.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='settings.c' object='sreplay-settings.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-settings.obj `if test -f 'settings.c'; then $(CYGPATH_W) 'settings.c'; else $(CYGPATH_W) '$(srcdir)/settings.c'; fi` + +sreplay-util.o: util.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-util.o -MD -MP -MF $(DEPDIR)/sreplay-util.Tpo -c -o sreplay-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-util.Tpo $(DEPDIR)/sreplay-util.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='sreplay-util.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c + +sreplay-util.obj: util.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-util.obj -MD -MP -MF $(DEPDIR)/sreplay-util.Tpo -c -o sreplay-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-util.Tpo $(DEPDIR)/sreplay-util.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='sreplay-util.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` + +sreplay-about.o: about.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-about.o -MD -MP -MF $(DEPDIR)/sreplay-about.Tpo -c -o sreplay-about.o `test -f 'about.c' || echo '$(srcdir)/'`about.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-about.Tpo $(DEPDIR)/sreplay-about.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='about.c' object='sreplay-about.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-about.o `test -f 'about.c' || echo '$(srcdir)/'`about.c + +sreplay-about.obj: about.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-about.obj -MD -MP -MF $(DEPDIR)/sreplay-about.Tpo -c -o sreplay-about.obj `if test -f 'about.c'; then $(CYGPATH_W) 'about.c'; else $(CYGPATH_W) '$(srcdir)/about.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-about.Tpo $(DEPDIR)/sreplay-about.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='about.c' object='sreplay-about.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-about.obj `if test -f 'about.c'; then $(CYGPATH_W) 'about.c'; else $(CYGPATH_W) '$(srcdir)/about.c'; fi` + +sreplay-gfxutil.o: gfxutil.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-gfxutil.o -MD -MP -MF $(DEPDIR)/sreplay-gfxutil.Tpo -c -o sreplay-gfxutil.o `test -f 'gfxutil.c' || echo '$(srcdir)/'`gfxutil.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-gfxutil.Tpo $(DEPDIR)/sreplay-gfxutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfxutil.c' object='sreplay-gfxutil.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-gfxutil.o `test -f 'gfxutil.c' || echo '$(srcdir)/'`gfxutil.c + +sreplay-gfxutil.obj: gfxutil.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-gfxutil.obj -MD -MP -MF $(DEPDIR)/sreplay-gfxutil.Tpo -c -o sreplay-gfxutil.obj `if test -f 'gfxutil.c'; then $(CYGPATH_W) 'gfxutil.c'; else $(CYGPATH_W) '$(srcdir)/gfxutil.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-gfxutil.Tpo $(DEPDIR)/sreplay-gfxutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gfxutil.c' object='sreplay-gfxutil.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-gfxutil.obj `if test -f 'gfxutil.c'; then $(CYGPATH_W) 'gfxutil.c'; else $(CYGPATH_W) '$(srcdir)/gfxutil.c'; fi` + +sreplay-sdlgfx.o: sdlgfx.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-sdlgfx.o -MD -MP -MF $(DEPDIR)/sreplay-sdlgfx.Tpo -c -o sreplay-sdlgfx.o `test -f 'sdlgfx.c' || echo '$(srcdir)/'`sdlgfx.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-sdlgfx.Tpo $(DEPDIR)/sreplay-sdlgfx.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlgfx.c' object='sreplay-sdlgfx.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-sdlgfx.o `test -f 'sdlgfx.c' || echo '$(srcdir)/'`sdlgfx.c + +sreplay-sdlgfx.obj: sdlgfx.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-sdlgfx.obj -MD -MP -MF $(DEPDIR)/sreplay-sdlgfx.Tpo -c -o sreplay-sdlgfx.obj `if test -f 'sdlgfx.c'; then $(CYGPATH_W) 'sdlgfx.c'; else $(CYGPATH_W) '$(srcdir)/sdlgfx.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-sdlgfx.Tpo $(DEPDIR)/sreplay-sdlgfx.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlgfx.c' object='sreplay-sdlgfx.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-sdlgfx.obj `if test -f 'sdlgfx.c'; then $(CYGPATH_W) 'sdlgfx.c'; else $(CYGPATH_W) '$(srcdir)/sdlgfx.c'; fi` + +sreplay-sdlui.o: sdlui.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-sdlui.o -MD -MP -MF $(DEPDIR)/sreplay-sdlui.Tpo -c -o sreplay-sdlui.o `test -f 'sdlui.c' || echo '$(srcdir)/'`sdlui.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-sdlui.Tpo $(DEPDIR)/sreplay-sdlui.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlui.c' object='sreplay-sdlui.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-sdlui.o `test -f 'sdlui.c' || echo '$(srcdir)/'`sdlui.c + +sreplay-sdlui.obj: sdlui.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-sdlui.obj -MD -MP -MF $(DEPDIR)/sreplay-sdlui.Tpo -c -o sreplay-sdlui.obj `if test -f 'sdlui.c'; then $(CYGPATH_W) 'sdlui.c'; else $(CYGPATH_W) '$(srcdir)/sdlui.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-sdlui.Tpo $(DEPDIR)/sreplay-sdlui.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlui.c' object='sreplay-sdlui.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-sdlui.obj `if test -f 'sdlui.c'; then $(CYGPATH_W) 'sdlui.c'; else $(CYGPATH_W) '$(srcdir)/sdlui.c'; fi` + +sreplay-sdlreplay.o: sdlreplay.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-sdlreplay.o -MD -MP -MF $(DEPDIR)/sreplay-sdlreplay.Tpo -c -o sreplay-sdlreplay.o `test -f 'sdlreplay.c' || echo '$(srcdir)/'`sdlreplay.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-sdlreplay.Tpo $(DEPDIR)/sreplay-sdlreplay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlreplay.c' object='sreplay-sdlreplay.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-sdlreplay.o `test -f 'sdlreplay.c' || echo '$(srcdir)/'`sdlreplay.c + +sreplay-sdlreplay.obj: sdlreplay.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-sdlreplay.obj -MD -MP -MF $(DEPDIR)/sreplay-sdlreplay.Tpo -c -o sreplay-sdlreplay.obj `if test -f 'sdlreplay.c'; then $(CYGPATH_W) 'sdlreplay.c'; else $(CYGPATH_W) '$(srcdir)/sdlreplay.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-sdlreplay.Tpo $(DEPDIR)/sreplay-sdlreplay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sdlreplay.c' object='sreplay-sdlreplay.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-sdlreplay.obj `if test -f 'sdlreplay.c'; then $(CYGPATH_W) 'sdlreplay.c'; else $(CYGPATH_W) '$(srcdir)/sdlreplay.c'; fi` + +sreplay-IMG_savepng.o: IMG_savepng.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-IMG_savepng.o -MD -MP -MF $(DEPDIR)/sreplay-IMG_savepng.Tpo -c -o sreplay-IMG_savepng.o `test -f 'IMG_savepng.c' || echo '$(srcdir)/'`IMG_savepng.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-IMG_savepng.Tpo $(DEPDIR)/sreplay-IMG_savepng.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='IMG_savepng.c' object='sreplay-IMG_savepng.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-IMG_savepng.o `test -f 'IMG_savepng.c' || echo '$(srcdir)/'`IMG_savepng.c + +sreplay-IMG_savepng.obj: IMG_savepng.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-IMG_savepng.obj -MD -MP -MF $(DEPDIR)/sreplay-IMG_savepng.Tpo -c -o sreplay-IMG_savepng.obj `if test -f 'IMG_savepng.c'; then $(CYGPATH_W) 'IMG_savepng.c'; else $(CYGPATH_W) '$(srcdir)/IMG_savepng.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-IMG_savepng.Tpo $(DEPDIR)/sreplay-IMG_savepng.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='IMG_savepng.c' object='sreplay-IMG_savepng.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-IMG_savepng.obj `if test -f 'IMG_savepng.c'; then $(CYGPATH_W) 'IMG_savepng.c'; else $(CYGPATH_W) '$(srcdir)/IMG_savepng.c'; fi` + +sreplay-sound.o: sound.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-sound.o -MD -MP -MF $(DEPDIR)/sreplay-sound.Tpo -c -o sreplay-sound.o `test -f 'sound.c' || echo '$(srcdir)/'`sound.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-sound.Tpo $(DEPDIR)/sreplay-sound.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sound.c' object='sreplay-sound.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-sound.o `test -f 'sound.c' || echo '$(srcdir)/'`sound.c + +sreplay-sound.obj: sound.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -MT sreplay-sound.obj -MD -MP -MF $(DEPDIR)/sreplay-sound.Tpo -c -o sreplay-sound.obj `if test -f 'sound.c'; then $(CYGPATH_W) 'sound.c'; else $(CYGPATH_W) '$(srcdir)/sound.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/sreplay-sound.Tpo $(DEPDIR)/sreplay-sound.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sound.c' object='sreplay-sound.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sreplay_CFLAGS) $(CFLAGS) -c -o sreplay-sound.obj `if test -f 'sound.c'; then $(CYGPATH_W) 'sound.c'; else $(CYGPATH_W) '$(srcdir)/sound.c'; fi` + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ diff --git a/src/about.c b/src/about.c index 143d19b..e228936 100644 --- a/src/about.c +++ b/src/about.c @@ -40,9 +40,10 @@ const char *gd_about_authors[]={ "Czirkos Zoltan ", #ifdef USE_SDL "SDL: Sam Lantinga ", "SDL_gfx rotozoom: A. Schiffler", + "SDL png saver: Philip D. Bober ", #endif NULL }; -const char *gd_about_documenters[]={ "Original engine: LogicDeLuxe", "Playing hints: Sendy", NULL }; +const char *gd_about_documenters[]={ "About original engine: LogicDeLuxe", "Playing hints: Sendy", NULL }; const char *gd_about_comments=N_("Classic game similar to Emerald Mines.\nCollect diamonds and find exit!"); const char *gd_about_translator_credits=N_("translator-credits"); const char *gd_about_website="http://jutas.eet.bme.hu/~cirix/gdash"; diff --git a/src/bdcff.c b/src/bdcff.c index fa586a0..35ef264 100644 --- a/src/bdcff.c +++ b/src/bdcff.c @@ -402,8 +402,8 @@ cave_process_tags_func(const char *attrib, const char *param, GdCave *cave) identifier_found=TRUE; elem1=gd_get_element_from_string(params[0]); elem2=gd_get_element_from_string(params[1]); - cave->too_big_amoeba_to=elem1; - cave->enclosed_amoeba_to=elem2; + cave->amoeba_too_big_effect=elem1; + cave->amoeba_enclosed_effect=elem2; } else @@ -938,12 +938,12 @@ gd_caveset_load_from_bdcff(const char *contents) if (gd_cave_properties[i].identifier==NULL) { /* for compatibility with tim stridmann's memorydump->bdcff converter... .... ... */ if (g_ascii_strcasecmp(params[0], "BOUNCING_BOULDER")==0) - cave->bouncing_stone_to=gd_get_element_from_string (params[1]); + cave->stone_bouncing_effect=gd_get_element_from_string (params[1]); else if (g_ascii_strcasecmp(params[0], "EXPLOSION3S")==0) - cave->explosion_to=gd_get_element_from_string (params[1]); + cave->explosion_effect=gd_get_element_from_string(params[1]); /* falling with one l... */ else if (g_ascii_strcasecmp(params[0], "STARTING_FALING_DIAMOND")==0) - cave->falling_diamond_to=gd_get_element_from_string (params[1]); + cave->diamond_falling_effect=gd_get_element_from_string (params[1]); /* dirt lookslike */ else if (g_ascii_strcasecmp(params[0], "DIRT")==0) cave->dirt_looks_like=gd_get_element_from_string (params[1]); diff --git a/src/c64import.c b/src/c64import.c index b39ea42..e0f1348 100644 --- a/src/c64import.c +++ b/src/c64import.c @@ -28,8 +28,8 @@ static const GdElement bd1_import_table[]={ /* 0 */ O_SPACE, O_DIRT, O_BRICK, O_MAGIC_WALL, /* 4 */ O_PRE_OUTBOX, O_OUTBOX, O_STEEL_EXPLODABLE, O_STEEL, - /* 8 */ O_GUARD_1, O_GUARD_2, O_GUARD_3, O_GUARD_4, - /* c */ O_GUARD_1, O_GUARD_2, O_GUARD_3, O_GUARD_4, + /* 8 */ O_FIREFLY_1, O_FIREFLY_2, O_FIREFLY_3, O_FIREFLY_4, + /* c */ O_FIREFLY_1, O_FIREFLY_2, O_FIREFLY_3, O_FIREFLY_4, /* 10 */ O_STONE, O_STONE, O_STONE_F, O_STONE_F, /* 14 */ O_DIAMOND, O_DIAMOND, O_DIAMOND_F, O_DIAMOND_F, /* 18 */ O_ACID, O_ACID, O_EXPLODE_1, O_EXPLODE_2, /* ACID: marek roth extension in crazy dream 3 */ @@ -48,7 +48,7 @@ static const GdElement bd1_import_table[]={ static const GdElement plck_import_nybble[]={ /* 0 */ O_STONE, O_DIAMOND, O_MAGIC_WALL, O_BRICK, /* 4 */ O_STEEL, O_H_EXPANDING_WALL, O_VOODOO, O_DIRT, - /* 8 */ O_GUARD_1, O_BUTTER_4, O_AMOEBA, O_SLIME, + /* 8 */ O_FIREFLY_1, O_BUTTER_4, O_AMOEBA, O_SLIME, /* 12 */ O_PRE_INVIS_OUTBOX, O_PRE_OUTBOX, O_INBOX, O_SPACE }; @@ -56,8 +56,8 @@ static const GdElement plck_import_nybble[]={ static const GdElement firstboulder_import_table[]={ /* 0 */ O_SPACE, O_DIRT, O_BRICK, O_MAGIC_WALL, /* 4 */ O_PRE_OUTBOX, O_OUTBOX, O_PRE_INVIS_OUTBOX, O_INVIS_OUTBOX, - /* 8 */ O_GUARD_1, O_GUARD_2, O_GUARD_3, O_GUARD_4, - /* c */ O_GUARD_1, O_GUARD_2, O_GUARD_3, O_GUARD_4, + /* 8 */ O_FIREFLY_1, O_FIREFLY_2, O_FIREFLY_3, O_FIREFLY_4, + /* c */ O_FIREFLY_1, O_FIREFLY_2, O_FIREFLY_3, O_FIREFLY_4, /* 10 */ O_STONE, O_STONE, O_STONE_F, O_STONE_F, /* 14 */ O_DIAMOND, O_DIAMOND, O_DIAMOND_F, O_DIAMOND_F, /* 18 */ O_PRE_CLOCK_1, O_PRE_CLOCK_2, O_PRE_CLOCK_3, O_PRE_CLOCK_4, @@ -92,8 +92,8 @@ static const GdElement firstboulder_import_table[]={ static const GdElement crazydream_import_table[]={ /* 0 */ O_SPACE, O_DIRT, O_BRICK, O_MAGIC_WALL, /* 4 */ O_PRE_OUTBOX, O_OUTBOX, O_PRE_INVIS_OUTBOX, O_INVIS_OUTBOX, - /* 8 */ O_GUARD_1, O_GUARD_2, O_GUARD_3, O_GUARD_4, - /* c */ O_GUARD_1, O_GUARD_2, O_GUARD_3, O_GUARD_4, + /* 8 */ O_FIREFLY_1, O_FIREFLY_2, O_FIREFLY_3, O_FIREFLY_4, + /* c */ O_FIREFLY_1, O_FIREFLY_2, O_FIREFLY_3, O_FIREFLY_4, /* 10 */ O_STONE, O_STONE, O_STONE_F, O_STONE_F, /* 14 */ O_DIAMOND, O_DIAMOND, O_DIAMOND_F, O_DIAMOND_F, /* 18 */ O_PRE_CLOCK_1, O_PRE_CLOCK_2, O_PRE_CLOCK_3, O_PRE_CLOCK_4, @@ -149,8 +149,8 @@ static const GdElement crazydream_import_table[]={ /* d4 */ O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, /* d8 */ O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, /* dc */ O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, - /* e0 */ O_ALT_GUARD_1, O_ALT_GUARD_2, O_ALT_GUARD_3, O_ALT_GUARD_4, - /* e4 */ O_ALT_GUARD_1, O_ALT_GUARD_2, O_ALT_GUARD_3, O_ALT_GUARD_4, + /* e0 */ O_ALT_FIREFLY_1, O_ALT_FIREFLY_2, O_ALT_FIREFLY_3, O_ALT_FIREFLY_4, + /* e4 */ O_ALT_FIREFLY_1, O_ALT_FIREFLY_2, O_ALT_FIREFLY_3, O_ALT_FIREFLY_4, /* e8 */ O_ALT_BUTTER_3, O_ALT_BUTTER_4, O_ALT_BUTTER_1, O_ALT_BUTTER_2, /* ec */ O_ALT_BUTTER_3, O_ALT_BUTTER_4, O_ALT_BUTTER_1, O_ALT_BUTTER_2, /* f0 */ O_WATER, O_WATER, O_WATER, O_WATER, @@ -163,8 +163,8 @@ static const GdElement crazydream_import_table[]={ const GdElement gd_crazylight_import_table[]={ /* 0 */ O_SPACE, O_DIRT, O_BRICK, O_MAGIC_WALL, /* 4 */ O_PRE_OUTBOX, O_OUTBOX, O_PRE_INVIS_OUTBOX, O_INVIS_OUTBOX, - /* 8 */ O_GUARD_1, O_GUARD_2, O_GUARD_3, O_GUARD_4, - /* c */ O_GUARD_1|SCANNED, O_GUARD_2|SCANNED, O_GUARD_3|SCANNED, O_GUARD_4|SCANNED, + /* 8 */ O_FIREFLY_1, O_FIREFLY_2, O_FIREFLY_3, O_FIREFLY_4, + /* c */ O_FIREFLY_1|SCANNED, O_FIREFLY_2|SCANNED, O_FIREFLY_3|SCANNED, O_FIREFLY_4|SCANNED, /* 10 */ O_STONE, O_STONE|SCANNED, O_STONE_F, O_STONE_F|SCANNED, /* 14 */ O_DIAMOND, O_DIAMOND|SCANNED, O_DIAMOND_F, O_DIAMOND_F|SCANNED, /* 18 */ O_PRE_CLOCK_1, O_PRE_CLOCK_2, O_PRE_CLOCK_3, O_PRE_CLOCK_4, @@ -338,7 +338,7 @@ GdPropertyDefault gd_defaults_1stb[] = { {CAVE_OFFSET(pal_timing), TRUE}, {CAVE_OFFSET(scheduling), GD_SCHEDULING_PLCK}, - {CAVE_OFFSET(enclosed_amoeba_to), O_PRE_DIA_1}, /* not immediately to diamond, but with animation */ + {CAVE_OFFSET(amoeba_enclosed_effect), O_PRE_DIA_1}, /* not immediately to diamond, but with animation */ {CAVE_OFFSET(dirt_looks_like), O_DIRT2}, {-1}, }; @@ -368,7 +368,7 @@ GdPropertyDefault gd_defaults_crdr_7[] = { {CAVE_OFFSET(pal_timing), TRUE}, {CAVE_OFFSET(scheduling), GD_SCHEDULING_CRDR}, - {CAVE_OFFSET(enclosed_amoeba_to), O_PRE_DIA_1}, /* not immediately to diamond, but with animation */ + {CAVE_OFFSET(amoeba_enclosed_effect), O_PRE_DIA_1}, /* not immediately to diamond, but with animation */ {CAVE_OFFSET(water_does_not_flow_down), TRUE}, {CAVE_OFFSET(skeletons_worth_diamonds), 1}, /* in crdr, skeletons can also be used to open the gate */ {CAVE_OFFSET(gravity_affects_all), FALSE}, /* the intermission "survive" needs this flag */ @@ -399,7 +399,7 @@ GdPropertyDefault gd_defaults_crli[] = { {CAVE_OFFSET(pal_timing), TRUE}, {CAVE_OFFSET(scheduling), GD_SCHEDULING_PLCK}, - {CAVE_OFFSET(enclosed_amoeba_to), O_PRE_DIA_1}, /* not immediately to diamond, but with animation */ + {CAVE_OFFSET(amoeba_enclosed_effect), O_PRE_DIA_1}, /* not immediately to diamond, but with animation */ {-1}, }; @@ -1067,7 +1067,7 @@ cave_copy_from_plck(GdCave *cave, const guint8 *data, int remaining_bytes, GdCav /* 3000 */ O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, /* 3100 */ O_BUTTER_1, O_MAGIC_WALL, O_PRE_DIA_1, O_PRE_DIA_2, O_PRE_DIA_3, O_PRE_DIA_4, O_PRE_DIA_5, O_OUTBOX_CLOSED, /* 3200 */ O_AMOEBA, O_VOODOO, O_STONE, O_DIRT, O_DIAMOND, O_STEEL, O_PLAYER, O_BRICK, - /* 3300 */ O_SPACE, O_OUTBOX_OPEN, O_GUARD_1, O_EXPLODE_1, O_EXPLODE_2, O_EXPLODE_3, O_MAGIC_WALL, O_MAGIC_WALL, + /* 3300 */ O_SPACE, O_OUTBOX_OPEN, O_FIREFLY_1, O_EXPLODE_1, O_EXPLODE_2, O_EXPLODE_3, O_MAGIC_WALL, O_MAGIC_WALL, /* 3400 */ O_PLAYER_TAP_BLINK, O_PLAYER_TAP_BLINK, O_PLAYER_TAP_BLINK, O_PLAYER_TAP_BLINK, O_PLAYER_TAP_BLINK, O_PLAYER_TAP_BLINK, O_PLAYER_TAP_BLINK, O_PLAYER_TAP_BLINK, /* 3500 */ O_PLAYER_LEFT, O_PLAYER_LEFT, O_PLAYER_LEFT, O_PLAYER_LEFT, O_PLAYER_LEFT, O_PLAYER_LEFT, O_PLAYER_LEFT, O_PLAYER_LEFT, /* 3600 */ O_PLAYER_RIGHT, O_PLAYER_RIGHT, O_PLAYER_RIGHT, O_PLAYER_RIGHT, O_PLAYER_RIGHT, O_PLAYER_RIGHT, O_PLAYER_RIGHT, O_PLAYER_RIGHT, @@ -1187,12 +1187,12 @@ cave_copy_from_plck(GdCave *cave, const guint8 *data, int remaining_bytes, GdCav /* c64 magic values (byte sequences) 0x20 0x90 0x46, also 0xa9 0x1c 0x85 */ if ((data[0x1e5]==0x20 && data[0x1e6]==0x90 && data[0x1e7]==0x46) || (data[0x1e5]==0xa9 && data[0x1e6]==0x1c && data[0x1e7]==0x85)) { /* diego effects enabled. */ - cave->bouncing_stone_to=bd1_import(data[0x1ea], 0x1ea); - cave->falling_diamond_to=bd1_import(data[0x1eb], 0x1eb); + cave->stone_bouncing_effect=bd1_import(data[0x1ea], 0x1ea); + cave->diamond_falling_effect=bd1_import(data[0x1eb], 0x1eb); /* explosions: 0x1e was explosion 5, if this is set to default, we also do not read it, as in our engine this would cause an O_EXPLODE_5 to stay there. */ if (data[0x1ec]!=0x1e) - cave->explosion_to=bd1_import(data[0x1ec], 0x1ec); + cave->explosion_effect=bd1_import(data[0x1ec], 0x1ec); /* pointer to element graphic. two bytes/column (one element), that is data[xxx]%16/2. also there are 16bytes/row. @@ -1424,14 +1424,14 @@ cave_copy_from_1stb(GdCave *cave, const guint8 *data, int remaining_bytes) cave->biter_delay_frame=data[0x394]; cave->magic_wall_stops_amoeba=data[0x395]==0; /* negated!! */ - cave->bomb_explode_to=firstboulder_import(data[0x396], 0x396); - cave->explosion_to=firstboulder_import(data[0x397], 0x397); - cave->bouncing_stone_to=firstboulder_import(data[0x398], 0x398); - cave->diamond_birth_to=firstboulder_import(data[0x399], 0x399); + cave->bomb_explosion_effect=firstboulder_import(data[0x396], 0x396); + cave->explosion_effect=firstboulder_import(data[0x397], 0x397); + cave->stone_bouncing_effect=firstboulder_import(data[0x398], 0x398); + cave->diamond_birth_effect=firstboulder_import(data[0x399], 0x399); cave->magic_diamond_to=firstboulder_import(data[0x39a], 0x39a); cave->bladder_converts_by=firstboulder_import(data[0x39b], 0x39b); - cave->falling_diamond_to=firstboulder_import(data[0x39c], 0x39c); + cave->diamond_falling_effect=firstboulder_import(data[0x39c], 0x39c); cave->biter_eat=firstboulder_import(data[0x39d], 0x39d); cave->slime_eats_1=firstboulder_import(data[0x39e], 0x39e); cave->slime_converts_1=firstboulder_import(data[0x39e]+3, 0x39e); @@ -1543,14 +1543,14 @@ cave_copy_from_crdr_7 (GdCave *cave, const guint8 *data, int remaining_bytes) cave->creatures_backwards=data[0x1f]==0x2d; cave->biter_delay_frame=data[0x24]; cave->magic_wall_stops_amoeba=data[0x25]==0; /* negated!! */ - cave->bomb_explode_to=crazydream_import_table[data[0x26]]; - cave->explosion_to=crazydream_import_table[data[0x27]]; - cave->bouncing_stone_to=crazydream_import_table[data[0x28]]; - cave->diamond_birth_to=crazydream_import_table[data[0x29]]; + cave->bomb_explosion_effect=crazydream_import_table[data[0x26]]; + cave->explosion_effect=crazydream_import_table[data[0x27]]; + cave->stone_bouncing_effect=crazydream_import_table[data[0x28]]; + cave->diamond_birth_effect=crazydream_import_table[data[0x29]]; cave->magic_diamond_to=crazydream_import_table[data[0x2a]]; cave->bladder_converts_by=crazydream_import_table[data[0x2b]]; - cave->falling_diamond_to=crazydream_import_table[data[0x2c]]; + cave->diamond_falling_effect=crazydream_import_table[data[0x2c]]; cave->biter_eat=crazydream_import_table[data[0x2d]]; cave->slime_eats_1=crazydream_import_table[data[0x2e]]; cave->slime_converts_1=crazydream_import_table[data[0x2e]+3]; @@ -2045,14 +2045,14 @@ cave_copy_from_crli (GdCave *cave, const guint8 *data, int remaining_bytes) } cave->biter_delay_frame=uncompressed[0x394]; cave->magic_wall_stops_amoeba=uncompressed[0x395]==0; /* negated!! */ - cave->bomb_explode_to=import(uncompressed[0x396], 0x396); - cave->explosion_to=import(uncompressed[0x397], 0x397); - cave->bouncing_stone_to=import(uncompressed[0x398], 0x398); - cave->diamond_birth_to=import(uncompressed[0x399], 0x399); + cave->bomb_explosion_effect=import(uncompressed[0x396], 0x396); + cave->explosion_effect=import(uncompressed[0x397], 0x397); + cave->stone_bouncing_effect=import(uncompressed[0x398], 0x398); + cave->diamond_birth_effect=import(uncompressed[0x399], 0x399); cave->magic_diamond_to=import(uncompressed[0x39a], 0x39a); cave->bladder_converts_by=import(uncompressed[0x39b], 0x39b); - cave->falling_diamond_to=import(uncompressed[0x39c], 0x39c); + cave->diamond_falling_effect=import(uncompressed[0x39c], 0x39c); cave->biter_eat=import(uncompressed[0x39d], 0x39d); cave->slime_eats_1=import(uncompressed[0x39e], 0x39e); cave->slime_converts_1=import(uncompressed[0x39e]+3, 0x39e); @@ -2062,8 +2062,8 @@ cave_copy_from_crli (GdCave *cave, const guint8 *data, int remaining_bytes) /* v3.0 has some new properties. */ if (version>=V3_0) { cave->diagonal_movements=uncompressed[0x3a4]!=0; - cave->too_big_amoeba_to=import(uncompressed[0x3a6], 0x3a6); - cave->enclosed_amoeba_to=import(uncompressed[0x3a7], 0x3a7); + cave->amoeba_too_big_effect=import(uncompressed[0x3a6], 0x3a6); + cave->amoeba_enclosed_effect=import(uncompressed[0x3a7], 0x3a7); /* acid in crazy dream 8: jsr $2500 ; true random diff --git a/src/cave.c b/src/cave.c index c9872c3..fe232e2 100644 --- a/src/cave.c +++ b/src/cave.c @@ -211,7 +211,7 @@ gd_get_element_from_string (const char *string) char *upper=g_ascii_strup(string, -1); gpointer value; gboolean found; - + if (!string) { g_warning("Invalid string representing element: (null)"); return O_UNKNOWN; @@ -261,7 +261,7 @@ gd_struct_set_defaults_from_array(gpointer str, const GdStructDescriptor *proper /* remember so we will be fast later*/ defaults[i].property_index=n; } - + /* some properties are arrays. this loop fills all with the same values */ for (j=0; jobjects; iter!=NULL; iter=iter->next) /* do a deep copy */ dest->objects=g_list_append(dest->objects, g_memdup (iter->data, sizeof (GdObject))); } - + /* copy replays */ if (src->replays) { GList *iter; - + dest->replays=NULL; for (iter=src->replays; iter!=NULL; iter=iter->next) /* do a deep copy */ dest->replays=g_list_append(dest->replays, gd_replay_new_from_replay(iter->data)); @@ -755,7 +755,7 @@ gd_cave_store_rc(GdCave *cave, int x, int y, const GdElement element, const void y-=cave->h; } } - + /* if the above wraparound code fixed the coordinates, this will always be true. */ /* but see the above comment for lineshifting y coordinate */ if (x>=0 && xw && y>=0 && yh) { @@ -768,7 +768,7 @@ GdElement gd_cave_get_rc(const GdCave *cave, int x, int y) { /* always fix coordinates as if cave was wraparound. */ - + /* fix x coordinate */ if (cave->lineshift) { /* fit x coordinate within range, with correcting y at the same time */ @@ -907,13 +907,13 @@ cave_set_random_indexed_colors(GdCave *cave, GdColor (*color_indexer_func) (int, int bri1=8, bri2=8-bri_spread, bri3=8+bri_spread; /* there are 15 valid choices for hue, so we do a %15 */ int col1=hue, col2=(hue+hue_spread+15)%15, col3=(hue-hue_spread+15)%15; - + /* this makes up a random color, and selects a color triad by hue+5 and hue+10. */ /* also creates a random saturation. */ /* color of brick is 8+sat, so it is always a bright color. */ /* another two are 8-sat and 8. */ /* order of colors is also changed randomly. */ - + if (g_random_boolean()) swap(&bri1, &bri2); /* we do not touch bri3 (8+sat), as it should be a bright color */ @@ -923,7 +923,7 @@ cave_set_random_indexed_colors(GdCave *cave, GdColor (*color_indexer_func) (int, swap(&col2, &col3); if (g_random_boolean()) swap(&col1, &col3); - + cave->colorb=color_indexer_func(0, 0); cave->color0=color_indexer_func(0, 0); cave->color1=color_indexer_func(col1+1, bri1); @@ -963,7 +963,7 @@ gd_cave_set_random_rgb_colors(GdCave *cave) double h1=hue, h2=hue+hue_spread, h3=hue+2*hue_spread; double v1, v2, v3; double s1, s2, s3; - + if (g_random_boolean()) { /* when hue spread is low, brightness(saturation) spread is high */ /* this formula gives a number (x) between 0.1 and 0.4, which will be 0.5-x and 0.5+x, so the range is 0.1->0.9 */ @@ -974,7 +974,7 @@ gd_cave_set_random_rgb_colors(GdCave *cave) s1=0.5; /* saturation is different */ s2=0.5-spread; s3=0.5+spread; - } else { + } else { /* when hue spread is low, brightness(saturation) spread is high */ /* this formula gives a number (x) between 0.1 and 0.25, which will be 0.5+x and 0.5+2x, so the range is 0.5->0.9 */ double spread=0.1+0.15*(1-hue_spread/hue_max); @@ -994,11 +994,11 @@ gd_cave_set_random_rgb_colors(GdCave *cave) if (g_random_boolean()) swapd(&s1, &s2); if (g_random_boolean()) swapd(&s2, &s3); if (g_random_boolean()) swapd(&s1, &s3); - + h1=h1*360.0; h2=h2*360.0; h3=h3*360.0; - + cave->colorb=gd_color_get_from_hsv(0,0,0); cave->color0=gd_color_get_from_hsv(0,0,0); /* black for background */ cave->color1=gd_color_get_from_hsv(h1,s1,v1); /* dirt */ @@ -1024,8 +1024,8 @@ gd_cave_set_random_colors(GdCave *cave, GdColorType type) break; case GD_COLOR_TYPE_ATARI: gd_cave_set_random_atari_colors(cave); - break; - + break; + default: g_assert_not_reached(); } @@ -1213,10 +1213,10 @@ cave_set_ckdelay_extra_for_animation(GdCave *cave) for (y=0; yh; y++) for (x=0; xw; x++) { switch (cave->map[y][x]&~SCANNED) { - case O_GUARD_1: - case O_GUARD_2: - case O_GUARD_3: - case O_GUARD_4: + case O_FIREFLY_1: + case O_FIREFLY_2: + case O_FIREFLY_3: + case O_FIREFLY_4: has_firefly=TRUE; break; case O_BUTTER_1: @@ -1317,7 +1317,7 @@ gd_cave_count_diamonds(GdCave *cave) for the paused state (which is used in gdash but not in sdash) - yellowish color. also one can select the animation frame (0..7) to draw the cave on. so the caller manages increasing that. - + if a cell is changed, it is flagged with GD_REDRAW; the flag can be cleared by the caller. */ void @@ -1361,11 +1361,11 @@ gd_drawcave_game(const GdCave *cave, int **gfx_buffer, gboolean bonus_life_flash if (cave->conveyor_belts_direction_changed) { /* if direction is changed, animation is changed. */ int temp; - + temp=elemdrawing[O_CONVEYOR_LEFT]; elemdrawing[O_CONVEYOR_LEFT]=elemdrawing[O_CONVEYOR_RIGHT]; elemdrawing[O_CONVEYOR_RIGHT]=temp; - + elemdrawing[O_CONVEYOR_DIR_SWITCH]=gd_elements[O_CONVEYOR_DIR_CHANGED].image_game; } else @@ -1469,7 +1469,7 @@ GdReplay * gd_replay_new() { GdReplay *rep; - + rep=g_new0(GdReplay, 1); rep->movements=g_byte_array_new(); return rep; @@ -1479,7 +1479,7 @@ GdReplay * gd_replay_new_from_replay(GdReplay *orig) { GdReplay *rep; - + rep=g_memdup(orig, sizeof(GdReplay)); rep->movements=g_byte_array_new(); g_byte_array_append(rep->movements, orig->movements->data, orig->movements->len); @@ -1505,10 +1505,10 @@ void gd_replay_store_movement(GdReplay *replay, GdDirection player_move, gboolean player_fire, gboolean suicide) { guint8 data[1]; - + g_assert(player_move==(player_move & REPLAY_MOVE_MASK)); data[0]=(player_move)|(player_fire?REPLAY_FIRE_MASK:0)|(suicide?REPLAY_SUICIDE_MASK:0); - + g_byte_array_append(replay->movements, data, 1); } @@ -1518,11 +1518,11 @@ gboolean gd_replay_get_next_movement(GdReplay *replay, GdDirection *player_move, gboolean *player_fire, gboolean *suicide) { guint8 data; - + /* if no more available movements */ if (replay->current_playing_pos>=replay->movements->len) return FALSE; - + data=replay->movements->data[replay->current_playing_pos++]; *suicide=(data&REPLAY_SUICIDE_MASK)!=0; *player_fire=(data&REPLAY_FIRE_MASK)!=0; @@ -1577,15 +1577,15 @@ static char * direction_fire_to_bdcff(GdDirection dir, gboolean fire) { static char mov[10]; - + strcpy(mov, direction_to_bdcff(dir)); if (fire) { int i; - + for (i=0; mov[i]!=0; i++) mov[i]=g_ascii_toupper(mov[i]); } - + return mov; } @@ -1594,17 +1594,17 @@ gd_replay_movements_to_bdcff(GdReplay *replay) { int pos; GString *str; - + str=g_string_new(NULL); - + for (pos=0; posmovements->len; pos++) { int num=1; guint8 data; - /* if this is not the first movement, append a space. */ + /* if this is not the first movement, append a space. */ if (str->len!=0) g_string_append_c(str, ' '); - + /* if same byte appears, count number of occurrences - something like an rle compression. */ /* be sure not to cross the array boundaries */ while (posmovements->len-1 && replay->movements->data[pos]==replay->movements->data[pos+1]) { @@ -1618,7 +1618,7 @@ gd_replay_movements_to_bdcff(GdReplay *replay) if (num!=1) g_string_append_printf(str, "%d", num); } - + return g_string_free(str, FALSE); } @@ -1647,7 +1647,7 @@ gd_cave_adler_checksum(GdCave *cave) { guint32 a=1; guint32 b=0; - + gd_cave_adler_checksum_more(cave, &a, &b); return (b<<16)+a; } diff --git a/src/cave.h b/src/cave.h index 9b731d2..9434c62 100644 --- a/src/cave.h +++ b/src/cave.h @@ -32,7 +32,7 @@ typedef enum _gd_type { /* not real types, only used by editor to build ui */ GD_TAB, GD_LABEL, - + /* gd types */ GD_TYPE_STRING, /* static string, fixed array of characters */ GD_TYPE_LONGSTRING, /* long string which has its own notebook page in the editor */ @@ -52,6 +52,7 @@ enum _gd_property_flags { GD_DONT_SAVE=1<<1, GD_DONT_SHOW_IN_EDITOR=1<<2, GD_SHOW_LEVEL_LABEL=1<<3, + GD_COMPATIBILITY_SETTING=1<<4, }; typedef struct _gd_struct_descriptor { @@ -68,7 +69,7 @@ typedef struct _gd_struct_descriptor { typedef struct _gd_property_default { int offset; /* data offset (bytes) in a cave structure */ int defval; /* default value, converted to int. if type is a float, *1000000 */ - + int property_index; /* index in gd_cave_properties; created at runtime */ } GdPropertyDefault; @@ -79,7 +80,7 @@ typedef struct _gd_property_default { #define NUM_OF_CELLS_Y 45 /* +74: placeholder for cells which are rendered by the game; for example diamond+arrow = falling diamond */ -#define NUM_OF_CELLS (NUM_OF_CELLS_X*NUM_OF_CELLS_Y+76) +#define NUM_OF_CELLS (NUM_OF_CELLS_X*NUM_OF_CELLS_Y+78) @@ -130,10 +131,14 @@ typedef enum _element { O_BRICK_EATABLE, O_STONE, O_STONE_F, + O_FLYING_STONE, + O_FLYING_STONE_F, O_MEGA_STONE, O_MEGA_STONE_F, O_DIAMOND, O_DIAMOND_F, + O_FLYING_DIAMOND, + O_FLYING_DIAMOND_F, O_BLADDER_SPENDER, O_INBOX, O_H_EXPANDING_WALL, @@ -166,7 +171,7 @@ typedef enum _element { O_DOOR_1, O_DOOR_2, O_DOOR_3, - + O_POT, O_GRAVITY_SWITCH, O_PNEUMATIC_HAMMER, @@ -227,14 +232,14 @@ typedef enum _element { O_WAITING_STONE, O_CHASING_STONE, O_GHOST, - O_GUARD_1, - O_GUARD_2, - O_GUARD_3, - O_GUARD_4, - O_ALT_GUARD_1, - O_ALT_GUARD_2, - O_ALT_GUARD_3, - O_ALT_GUARD_4, + O_FIREFLY_1, + O_FIREFLY_2, + O_FIREFLY_3, + O_FIREFLY_4, + O_ALT_FIREFLY_1, + O_ALT_FIREFLY_2, + O_ALT_FIREFLY_3, + O_ALT_FIREFLY_4, O_BUTTER_1, O_BUTTER_2, O_BUTTER_3, @@ -263,7 +268,7 @@ typedef enum _element { O_PLAYER_BOMB, O_PLAYER_GLUED, O_PLAYER_STIRRING, - + O_BOMB, O_BOMB_TICK_1, O_BOMB_TICK_2, @@ -272,11 +277,11 @@ typedef enum _element { O_BOMB_TICK_5, O_BOMB_TICK_6, O_BOMB_TICK_7, - + O_NITRO_PACK, O_NITRO_PACK_F, O_NITRO_PACK_EXPLODE, - + O_PRE_CLOCK_1, O_PRE_CLOCK_2, O_PRE_CLOCK_3, @@ -315,11 +320,6 @@ typedef enum _element { O_AMOEBA_2_EXPL_2, O_AMOEBA_2_EXPL_3, O_AMOEBA_2_EXPL_4, - O_DRAGONFLY_EXPLODE_1, - O_DRAGONFLY_EXPLODE_2, - O_DRAGONFLY_EXPLODE_3, - O_DRAGONFLY_EXPLODE_4, - O_DRAGONFLY_EXPLODE_5, /* these are used internally for the pneumatic hammer, and should not be used in the editor! */ /* (not even as an effect destination or something like that) */ @@ -327,7 +327,7 @@ typedef enum _element { O_PLAYER_PNEUMATIC_RIGHT, O_PNEUMATIC_ACTIVE_LEFT, O_PNEUMATIC_ACTIVE_RIGHT, - + O_UNKNOWN, /* unknown element imported or read from bdcff */ O_NONE, /* do not draw this element when creating cave; can be used, for example, to skip drawing a maze's path */ @@ -378,16 +378,11 @@ enum _element_property { E_P_SLOPED_UP, E_P_SLOPED_DOWN, E_P_BLADDER_SLOPED, /* element act sloped also for the bladder */ - + E_P_AMOEBA_CONSUMES, /* amoeba can eat this */ E_P_DIRT, /* it is dirt, or something similar (dirt2 or sloped dirt) */ E_P_BLOWS_UP_FLIES, /* flies blow up, if they touch this */ - - E_P_EXPLODES_TO_SPACE, /* explodes if hit by a rock */ - E_P_EXPLODES_AS_DRAGONFLY, /* explodes as a dragonfly does */ - E_P_EXPLODES_TO_DIAMONDS, /* explodes to diamonds if hit by a rock */ - E_P_EXPLODES_TO_STONES, /* explodes to rocks if hit by a rock */ - E_P_EXPLODES_AS_NITRO, /* explodes as nitro pack */ + E_P_EXPLODES_BY_HIT, /* explodes if hit by a stone */ E_P_EXPLOSION_FIRST_STAGE, /* set for first stage of every explosion. helps slower/faster explosions changing */ @@ -396,7 +391,8 @@ enum _element_property { E_P_CAN_BE_HAMMERED, /* can be broken by pneumatic hammer */ E_P_VISUAL_EFFECT, /* if the element can use a visual effect. used to check consistency of the code */ E_P_PLAYER, /* easier to find out if it is a player element */ - E_P_MOVED_BY_CONVEYOR, /* can be moved by conveyor belt */ + E_P_MOVED_BY_CONVEYOR_TOP, /* can be moved by conveyor belt */ + E_P_MOVED_BY_CONVEYOR_BOTTOM, /* can be moved UNDER the conveyor belt */ }; /* properties */ @@ -407,18 +403,12 @@ enum _element_property { /* flag to say "any direction" */ #define P_SLOPED (P_SLOPED_LEFT|P_SLOPED_RIGHT|P_SLOPED_UP|P_SLOPED_DOWN) #define P_BLADDER_SLOPED (1<NUM_OF_CELLS_X*NUM_OF_CELLS_Y) g_critical("game pixbuf for element %x (%s) bigger than png size", i, gd_elements[i].name); - + if (gd_elements[i].image<0) g_critical("editor pixbuf for element %x (%s) should not be animated", i, gd_elements[i].name); - + if (gd_elements[i].properties&P_CAN_BE_HAMMERED && gd_element_get_hammered((GdElement) i)==O_NONE) g_critical("element %x (%s) can be hammered, but get_hammered_element does not define another one", i, gd_elements[i].name); - + m=gd_elements[i].image<0?8:1; for (j=0; jcharacter characters. */ /* gd_create_char_to_element_table(); @@ -959,12 +977,12 @@ gd_cave_db_init() g_print("%c", i); g_print("\n"); */ - + /* check the cave property database for faults. */ pointers=g_hash_table_new(g_direct_hash, g_direct_equal); for (i=0; gd_cave_properties[i].identifier!=NULL; i++) { GdType type=gd_cave_properties[i].type; - + switch (type) { case GD_LABEL: case GD_TAB: @@ -974,7 +992,7 @@ gd_cave_db_init() g_assert_not_reached(); } break; - + case GD_TYPE_STRING: /* check if any of the properties are designated as string arrays. they are not supported in * file read/write and operations, also they do not even make any sense! */ @@ -989,8 +1007,8 @@ gd_cave_db_init() g_critical ("longstring arrays have no sense cave properties: %s", gd_cave_properties[i].identifier); g_assert_not_reached(); } - break; - + break; + case GD_TYPE_EFFECT: /* the same applies for effects. */ if (gd_cave_properties[i].count!=1) { @@ -1015,10 +1033,10 @@ gd_cave_db_init() g_critical ("show_level_label only for labels: line %d", i); g_assert_not_reached(); } - + if (type!=GD_LABEL && type!=GD_TAB) { const char *another_prop; - + /* other types */ /* check if its pointer is not the same as another one's */ /* +1 is added so it is never zero */ diff --git a/src/caveengine.c b/src/caveengine.c index b31a876..23e4d84 100644 --- a/src/caveengine.c +++ b/src/caveengine.c @@ -29,8 +29,11 @@ * functions. is_space_dir returns true for the lava, too. The store * function ignores any store requests into the lava. * The player_get function will also behave for lava as it does for space. - */ -#include + */ + + + +#include #include "cave.h" #include "cavedb.h" #include "cavesound.h" @@ -65,8 +68,6 @@ gd_cave_set_seconds_sound(GdCave *cave) case 1: gd_sound_play(cave, GD_S_TIMEOUT_8); break; case 0: gd_sound_play(cave, GD_S_TIMEOUT_9); break; } - - return; } /* play diamond or stone sound of given element. */ @@ -79,12 +80,12 @@ play_sound_of_element(GdCave *cave, GdElement element) if (cave->water_sound) gd_sound_play(cave, GD_S_WATER); break; - + case O_MAGIC_WALL: if (cave->magic_wall_sound) gd_sound_play(cave, GD_S_MAGIC_WALL); break; - + case O_AMOEBA: if (cave->amoeba_sound) gd_sound_play(cave, GD_S_AMOEBA); @@ -94,9 +95,11 @@ play_sound_of_element(GdCave *cave, GdElement element) if (cave->pneumatic_hammer_sound) gd_sound_play(cave, GD_S_PNEUMATIC_HAMMER); break; - + case O_STONE: case O_STONE_F: + case O_FLYING_STONE: + case O_FLYING_STONE_F: case O_MEGA_STONE: case O_MEGA_STONE_F: case O_WAITING_STONE: @@ -104,7 +107,7 @@ play_sound_of_element(GdCave *cave, GdElement element) if (cave->stone_sound) gd_sound_play(cave, GD_S_STONE); break; - + case O_NITRO_PACK: case O_NITRO_PACK_F: if (cave->nitro_sound) @@ -126,28 +129,30 @@ play_sound_of_element(GdCave *cave, GdElement element) if (cave->expanding_wall_sound) gd_sound_play(cave, GD_S_EXPANDING_WALL); break; - + case O_DIAMOND: case O_DIAMOND_F: + case O_FLYING_DIAMOND: + case O_FLYING_DIAMOND_F: if (cave->diamond_sound) gd_sound_play(cave, GD_S_DIAMOND_RANDOM); break; - + case O_BLADDER_SPENDER: if (cave->bladder_spender_sound) gd_sound_play(cave, GD_S_BLADDER_SPENDER); break; - + case O_PRE_CLOCK_1: if (cave->bladder_convert_sound) gd_sound_play(cave, GD_S_BLADDER_CONVERT); break; - + case O_SLIME: if (cave->slime_sound) gd_sound_play(cave, GD_S_SLIME); break; - + case O_LAVA: if (cave->lava_sound) gd_sound_play(cave, GD_S_LAVA); @@ -162,7 +167,7 @@ play_sound_of_element(GdCave *cave, GdElement element) if (cave->bladder_sound) gd_sound_play(cave, GD_S_BLADDER_MOVE); break; - + case O_BITER_1: case O_BITER_2: case O_BITER_3: @@ -170,7 +175,7 @@ play_sound_of_element(GdCave *cave, GdElement element) if (cave->biter_sound) gd_sound_play(cave, GD_S_BITER_EAT); break; - + case O_DIRT_BALL: case O_DIRT_BALL_F: case O_DIRT_LOOSE: @@ -243,45 +248,10 @@ get_dir(const GdCave *cave, const int x, const int y, const GdDirection dir) -/* returns true if the element is explodable and explodes as the nitro pack does */ -static inline gboolean -explodes_as_nitro(const GdCave *cave, const int x, const int y) -{ - return (gd_elements[get(cave, x,y)&O_MASK].properties&P_EXPLODES_AS_NITRO)!=0; -} - -/* returns true if the element is explodable and explodes "to" the element the dragonfly does */ -static inline gboolean -explodes_as_dragonfly(const GdCave *cave, const int x, const int y) -{ - return (gd_elements[get(cave, x,y)&O_MASK].properties&P_EXPLODES_AS_DRAGONFLY)!=0; -} - -/* returns true if the element is explodable and explodes to space, for example the player */ -static inline gboolean -explodes_to_space(const GdCave *cave, const int x, const int y) -{ - return (gd_elements[get(cave, x,y)&O_MASK].properties&P_EXPLODES_TO_SPACE)!=0; -} - -/* returns true if the element is explodable and explodes to diamond, for example a butterfly */ -static inline gboolean -explodes_to_diamonds(const GdCave *cave, const int x, const int y) -{ - return (gd_elements[get(cave, x,y)&O_MASK].properties&P_EXPLODES_TO_DIAMONDS)!=0; -} - -/* returns true if the element is explodable and explodes to stones, for example the stonefly */ -static inline gboolean -explodes_to_stones(const GdCave *cave, const int x, const int y) -{ - return (gd_elements[get(cave, x,y)&O_MASK].properties&P_EXPLODES_TO_STONES)!=0; -} - static inline gboolean explodes_by_hit_dir(const GdCave *cave, const int x, const int y, GdDirection dir) { - return (gd_elements[get_dir(cave, x, y, dir)&O_MASK].properties&P_EXPLODES)!=0; + return (gd_elements[get_dir(cave, x, y, dir)&O_MASK].properties&P_EXPLODES_BY_HIT)!=0; } /* returns true if the element is not explodable, for example the steel wall */ @@ -314,7 +284,7 @@ sloped_dir(const GdCave *cave, const int x, const int y, const GdDirection dir, default: break; } - + return FALSE; } @@ -368,9 +338,16 @@ is_first_stage_of_explosion(const GdCave *cave, const int x, const int y) /* returns true if the element is moved by the conveyor belt */ static inline gboolean -moved_by_conveyor_dir(const GdCave *cave, const int x, const int y, const GdDirection dir) +moved_by_conveyor_top_dir(const GdCave *cave, const int x, const int y, const GdDirection dir) +{ + return (gd_elements[get_dir(cave, x, y, dir)&O_MASK].properties&P_MOVED_BY_CONVEYOR_TOP)!=0; +} + +/* returns true if the element is moved by the conveyor belt */ +static inline gboolean +moved_by_conveyor_bottom_dir(const GdCave *cave, const int x, const int y, const GdDirection dir) { - return (gd_elements[get_dir(cave, x, y, dir)&O_MASK].properties&P_MOVED_BY_CONVEYOR)!=0; + return (gd_elements[get_dir(cave, x, y, dir)&O_MASK].properties&P_MOVED_BY_CONVEYOR_BOTTOM)!=0; } static inline gboolean @@ -391,7 +368,7 @@ static inline gboolean is_element_dir(const GdCave *cave, const int x, const int y, const GdDirection dir, GdElement e) { GdElement examined=get_dir(cave, x, y, dir); - + /* if it is a dirt-like, change to dirt, so equality will evaluate to true */ if (gd_elements[examined & O_MASK].properties & P_DIRT) examined=O_DIRT; @@ -408,7 +385,7 @@ static inline gboolean is_space_dir(const GdCave *cave, const int x, const int y, const GdDirection dir) { GdElement e=get_dir(cave, x, y, dir)&O_MASK; - + return e==O_SPACE || e==O_LAVA; } @@ -420,7 +397,7 @@ static inline void store(GdCave *cave, const int x, const int y, const GdElement element) { GdElement *e=getp(cave, x, y); - + if (*e==O_LAVA) { play_sound_of_element(cave, O_LAVA); return; @@ -459,7 +436,7 @@ move(GdCave *cave, const int x, const int y, const GdDirection dir, const GdElem /* increment a cave element; can be used for elements which are one after the other, for example bladder1, bladder2, bladder3... */ static inline void -next (GdCave *cave, const int x, const int y) +next(GdCave *cave, const int x, const int y) { (*getp(cave, x, y))++; } @@ -484,13 +461,14 @@ cell_explode(GdCave *cave, int x, int y, GdElement explode_to) { if (non_explodable (cave, x, y)) return; + if (get(cave, x, y)==O_VOODOO && !cave->voodoo_can_be_destroyed) /* voodoo turns into a time penalty */ store_sc(cave, x, y, O_TIME_PENALTY); - else if (get(cave, x, y)==O_NITRO_PACK || get(cave, x, y)==O_NITRO_PACK_F) { + else if (get(cave, x, y)==O_NITRO_PACK || get(cave, x, y)==O_NITRO_PACK_F) /* nitro pack inside an explosion - it is now triggered */ store_sc(cave, x, y, O_NITRO_PACK_EXPLODE); - } else + else /* for everything else */ store_sc(cave, x, y, explode_to); } @@ -500,8 +478,8 @@ static void creature_explode(GdCave *cave, int x, int y, GdElement explode_to) { int xx, yy; - - /* the processing of an explosion took pretty much time: processing 3x3=9 elements */ + + /* the processing of an explosion took pretty much time: processing 3x3=9 elements */ cave->ckdelay+=1200; gd_sound_play(cave, GD_S_EXPLOSION); @@ -514,15 +492,15 @@ static void nitro_explode(GdCave *cave, int x, int y) { int xx, yy; - - /* the processing of an explosion took pretty much time: processing 3x3=9 elements */ + + /* the processing of an explosion took pretty much time: processing 3x3=9 elements */ cave->ckdelay+=1200; gd_sound_play(cave, GD_S_NITRO_EXPLOSION); for (yy=y-1; yy<=y+1; yy++) for (xx=x-1; xx<=x+1; xx++) cell_explode(cave, xx, yy, O_NITRO_EXPL_1); - /* the current cell is explicitly changed into a nitro expl */ + /* the current cell is explicitly changed into a nitro expl, as cell_explode changes it to a triggered nitro pack */ store_sc(cave, x, y, O_NITRO_EXPL_1); } @@ -534,7 +512,7 @@ voodoo_explode(GdCave *cave, int x, int y) gd_sound_play(cave, GD_S_VOODOO_EXPLOSION); - /* the processing of an explosion took pretty much time: processing 3x3=9 elements */ + /* the processing of an explosion took pretty much time: processing 3x3=9 elements */ cave->ckdelay+=1000; /* voodoo explodes to 3x3 steel */ @@ -565,7 +543,7 @@ ghost_explode(GdCave *cave, const int x, const int y) { gd_sound_play(cave, GD_S_GHOST_EXPLOSION); - /* the processing of an explosion took pretty much time: processing 5 elements */ + /* the processing of an explosion took pretty much time: processing 5 elements */ cave->ckdelay+=650; explode_try_skip_voodoo(cave, x, y, O_GHOST_EXPL_1); @@ -580,8 +558,8 @@ static void bomb_explode(GdCave *cave, const int x, const int y) { gd_sound_play(cave, GD_S_BOMB_EXPLOSION); - - /* the processing of an explosion took pretty much time: processing 5 elements */ + + /* the processing of an explosion took pretty much time: processing 5 elements */ cave->ckdelay+=650; explode_try_skip_voodoo(cave, x, y, O_BOMB_EXPL_1); @@ -597,29 +575,90 @@ bomb_explode(GdCave *cave, const int x, const int y) static void explode(GdCave *cave, int x, int y) { - if (get(cave, x, y)==O_GHOST) - ghost_explode(cave, x, y); - else if (get(cave, x, y)==O_AMOEBA_2) - creature_explode(cave, x, y, O_AMOEBA_2_EXPL_1); - else if (get(cave, x, y)==O_BOMB_TICK_7) - bomb_explode(cave, x, y); - else if (get(cave, x, y)==O_VOODOO) - voodoo_explode(cave, x, y); - else if (explodes_to_space(cave, x, y)) - creature_explode(cave, x, y, O_EXPLODE_1); - else if (explodes_to_diamonds(cave, x, y)) - creature_explode(cave, x, y, O_PRE_DIA_1); - else if (explodes_to_stones(cave, x, y)) - creature_explode(cave, x, y, O_PRE_STONE_1); - else if (explodes_as_dragonfly(cave, x, y)) - creature_explode(cave, x, y, O_DRAGONFLY_EXPLODE_1); - else if (get(cave, x, y)==O_FALLING_WALL_F) - creature_explode(cave, x, y, O_EXPLODE_1); - else if (explodes_as_nitro(cave, x, y)) - nitro_explode(cave, x, y); - else - /* assert, as caller must have called this for some reason */ - g_assert_not_reached (); + GdElement e=get(cave, x, y); + + switch (e) { + case O_GHOST: + ghost_explode(cave, x, y); + break; + + case O_BOMB_TICK_7: + bomb_explode(cave, x, y); + break; + + case O_VOODOO: + voodoo_explode(cave, x, y); + break; + + case O_NITRO_PACK: + case O_NITRO_PACK_F: + case O_NITRO_PACK_EXPLODE: + nitro_explode(cave, x, y); + break; + + case O_AMOEBA_2: + creature_explode(cave, x, y, O_AMOEBA_2_EXPL_1); + break; + + case O_FALLING_WALL_F: + creature_explode(cave, x, y, O_EXPLODE_1); + break; + + case O_BUTTER_1: + case O_BUTTER_2: + case O_BUTTER_3: + case O_BUTTER_4: + creature_explode(cave, x, y, cave->butterfly_explode_to); + break; + + case O_ALT_BUTTER_1: + case O_ALT_BUTTER_2: + case O_ALT_BUTTER_3: + case O_ALT_BUTTER_4: + creature_explode(cave, x, y, cave->alt_butterfly_explode_to); + break; + + case O_FIREFLY_1: + case O_FIREFLY_2: + case O_FIREFLY_3: + case O_FIREFLY_4: + creature_explode(cave, x, y, cave->firefly_explode_to); + break; + + case O_ALT_FIREFLY_1: + case O_ALT_FIREFLY_2: + case O_ALT_FIREFLY_3: + case O_ALT_FIREFLY_4: + creature_explode(cave, x, y, cave->alt_firefly_explode_to); + break; + + case O_PLAYER: + case O_PLAYER_BOMB: + case O_PLAYER_GLUED: + case O_PLAYER_STIRRING: + case O_PLAYER_PNEUMATIC_LEFT: + case O_PLAYER_PNEUMATIC_RIGHT: + creature_explode(cave, x, y, O_EXPLODE_1); + break; + + case O_STONEFLY_1: + case O_STONEFLY_2: + case O_STONEFLY_3: + case O_STONEFLY_4: + creature_explode(cave, x, y, cave->stonefly_explode_to); + break; + + case O_DRAGONFLY_1: + case O_DRAGONFLY_2: + case O_DRAGONFLY_3: + case O_DRAGONFLY_4: + creature_explode(cave, x, y, cave->dragonfly_explode_to); + break; + + default: + g_assert_not_reached(); + break; + } } static void inline @@ -719,7 +758,7 @@ player_get_element (GdCave* cave, const GdElement object) case O_DIRT_LOOSE: gd_sound_play(cave, GD_S_WALK_EARTH); return O_SPACE; - + case O_SWEET: gd_sound_play(cave, GD_S_SWEET_COLLECT); cave->sweet_eaten=TRUE; @@ -739,6 +778,7 @@ player_get_element (GdCave* cave, const GdElement object) /* no space, rather a dirt remains there... */ return O_DIRT; case O_DIAMOND: + case O_FLYING_DIAMOND: gd_sound_play(cave, GD_S_DIAMOND_COLLECT); cave->score+=cave->diamond_value; cave->diamonds_collected++; @@ -819,21 +859,22 @@ do_push(GdCave *cave, int x, int y, GdDirection player_move, gboolean player_fir gboolean result; GdElement what=get_dir(cave, x, y, player_move); GdDirection grav_compat=cave->gravity_affects_all?cave->gravity:MV_DOWN; /* gravity for falling wall, bladder, ... */ - + result=FALSE; - + switch(what) { case O_WAITING_STONE: case O_STONE: case O_NITRO_PACK: case O_CHASING_STONE: case O_MEGA_STONE: + case O_FLYING_STONE: /* pushing some kind of stone */ /* directions possible: 90degrees cw or ccw to current gravity. */ /* only push if player dir is orthogonal to gravity, ie. gravity down, pushing left&right possible */ if (player_move==ccw_fourth[cave->gravity] || player_move==cw_fourth[cave->gravity]) { int prob; - + prob=0; /* different probabilities for different elements. */ switch(what) { @@ -849,6 +890,7 @@ do_push(GdCave *cave, int x, int y, GdDirection player_move, gboolean player_fir prob=1000000; break; case O_STONE: + case O_FLYING_STONE: case O_NITRO_PACK: if (cave->sweet_eaten) prob=cave->pushing_stone_prob_sweet*1000000; /* probability with sweet */ @@ -858,7 +900,7 @@ do_push(GdCave *cave, int x, int y, GdDirection player_move, gboolean player_fir default: break; } - + if (is_space_dir(cave, x, y, MV_TWICE+player_move) && g_rand_int_range(cave->random, 0, 1000000)inbox_flash_toggle=!cave->inbox_flash_toggle; inbox_toggle=cave->inbox_flash_toggle; - + if (cave->gate_open_flash>0) cave->gate_open_flash--; /* score collected this frame */ cave->score=0; - + /* suicide only kills the active player */ /* player_x, player_y was set by the previous iterate routine, or the cave setup. */ /* we must check if there is a player or not - he may have exploded or something like that */ @@ -1156,7 +1198,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo /* if we are 'eating' a teleporter, and the function returns true (teleporting worked), break here */ if (what==O_TELEPORTER && do_teleporter(cave, x, y, player_move)) break; - + /* try to push element; if successful, break */ push=do_push(cave, x, y, player_move, player_fire); if (push) @@ -1248,7 +1290,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo /* if we are 'eating' a teleporter, and the function returns true (teleporting worked), break here */ if (what==O_TELEPORTER && do_teleporter(cave, x, y, player_move)) break; - + if (do_push(cave, x, y, player_move, FALSE)) /* player fire is false... */ remains=O_SPACE; else { @@ -1325,11 +1367,11 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo /* O_NONE might be returned, for example if the element being hammered explodes during hammering (by a nearby explosion) */ if (new_elem!=O_NONE) { store_dir(cave, x, y, MV_DOWN, new_elem); - + /* and if walls reappear, remember it in array */ if (cave->hammered_walls_reappear) { int wall_y; - + wall_y=(y+1)%cave->h; cave->hammered_reappear[wall_y][x]=cave->hammered_wall_reappear_frame; } @@ -1347,21 +1389,21 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo if (!cave->gravity_disabled) { /* if gravity is enabled, the stone might fall. */ GdElement falling; - + switch (get(cave, x, y)) { case O_STONE: - falling=cave->falling_stone_to; + falling=cave->stone_falling_effect; break; case O_MEGA_STONE: falling=O_MEGA_STONE_F; break; case O_DIAMOND: - falling=cave->falling_diamond_to; + falling=cave->diamond_falling_effect; break; default: g_assert_not_reached(); } - + if (is_space_dir(cave, x, y, cave->gravity)) { /* beginning to fall */ play_sound_of_element(cave, get(cave, x, y)); move(cave, x, y, cave->gravity, falling); @@ -1393,16 +1435,16 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo case O_DIAMOND_F: /* falling diamond */ if (!cave->gravity_disabled) { GdElement bouncing; - + switch (get(cave, x, y)) { case O_STONE_F: - bouncing=cave->bouncing_stone_to; + bouncing=cave->stone_bouncing_effect; break; case O_MEGA_STONE_F: bouncing=O_MEGA_STONE; break; case O_DIAMOND_F: - bouncing=cave->bouncing_diamond_to; + bouncing=cave->diamond_bouncing_effect; break; default: g_assert_not_reached(); @@ -1441,7 +1483,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo default: g_assert_not_reached(); } - + store_dir(cave, x, y, MV_TWICE+cave->gravity, magic); } store(cave, x, y, O_SPACE); /* active or non-active or anything, element falling in will always disappear */ @@ -1477,13 +1519,13 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo if (!cave->gravity_disabled) { /* if gravity is enabled, the stone might fall. */ GdElement falling; - + switch (get(cave, x, y)) { case O_DIRT_BALL: falling=O_DIRT_BALL_F; break; case O_DIRT_LOOSE: falling=O_DIRT_LOOSE_F; break; default: g_assert_not_reached(); } - + if (is_space_dir(cave, x, y, cave->gravity)) { /* beginning to fall */ play_sound_of_element(cave, get(cave, x, y)); move(cave, x, y, cave->gravity, falling); @@ -1514,7 +1556,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo case O_DIRT_LOOSE_F: /* falling mega stone */ if (!cave->gravity_disabled) { GdElement bouncing; - + switch (get(cave, x, y)) { case O_DIRT_BALL_F: bouncing=O_DIRT_BALL; break; case O_DIRT_LOOSE_F: bouncing=O_DIRT_LOOSE; break; @@ -1545,17 +1587,126 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo } } break; - /* - * N I T R O P A C K + * F L Y I N G S T O N E S, D I A M O N D S + */ + case O_FLYING_STONE: /* standing stone */ + case O_FLYING_DIAMOND: /* standing diamond */ + if (!cave->gravity_disabled) { + GdDirection fall_dir=opposite[cave->gravity]; /* these elements fall "up" */ + GdElement falling; /* if gravity is enabled, the stone might fall. */ + + switch (get(cave, x, y)) { + case O_FLYING_STONE: falling=O_FLYING_STONE_F; break; + case O_FLYING_DIAMOND: falling=O_FLYING_DIAMOND_F; break; + default: g_assert_not_reached(); + } + + if (is_space_dir(cave, x, y, fall_dir)) { /* beginning to fall */ + play_sound_of_element(cave, get(cave, x, y)); + move(cave, x, y, fall_dir, falling); + } + /* check if it is on a sloped element, and it can roll. */ + /* for example, sloped wall looks like: */ + /* /| */ + /* /_| */ + /* this is tagged as sloped up&left. */ + /* first check if the stone or diamond is coming from "up" (ie. opposite of gravity) */ + /* then check the direction to roll (left or right) */ + /* this way, gravity can also be pointing right, and the above slope will work as one would expect */ + else if (sloped_dir(cave, x, y, fall_dir, opposite[fall_dir])) { /* rolling down, if sitting on a sloped object */ + if (sloped_dir(cave, x, y, fall_dir, cw_fourth[fall_dir]) && is_space_dir(cave, x, y, cw_fourth[fall_dir]) && is_space_dir(cave, x, y, cw_eighth[fall_dir])) { + /* rolling left? - keep in mind that ccw_fourth rotates gravity ccw, so here we use cw_fourth */ + play_sound_of_element(cave, get(cave, x, y)); + move(cave, x, y, cw_fourth[fall_dir], falling); + } + else if (sloped_dir(cave, x, y, fall_dir, ccw_fourth[fall_dir]) && is_space_dir(cave, x, y, ccw_fourth[fall_dir]) && is_space_dir(cave, x, y, ccw_eighth[fall_dir])) { + /* rolling right? */ + play_sound_of_element(cave, get(cave, x, y)); + move(cave, x, y, ccw_fourth[fall_dir], falling); + } + } + } + break; + case O_FLYING_STONE_F: /* falling stone */ + case O_FLYING_DIAMOND_F: /* falling diamond */ + if (!cave->gravity_disabled) { + GdElement bouncing; + GdDirection fall_dir=opposite[cave->gravity]; /* these elements fall "up" */ + + switch (get(cave, x, y)) { + case O_FLYING_STONE_F: bouncing=O_FLYING_STONE; break; + case O_FLYING_DIAMOND_F: bouncing=O_FLYING_DIAMOND; break; + default: g_assert_not_reached(); + } + + if (is_space_dir(cave, x, y, fall_dir)) /* falling further */ + move(cave, x, y, fall_dir, get(cave, x, y)); + else if (get(cave, x, y)==O_FLYING_DIAMOND_F && get_dir(cave, x, y, fall_dir)==O_VOODOO && cave->voodoo_collects_diamonds) { + /* this is a 1stB-style voodoo. explodes by stone, collects diamonds */ + player_get_element(cave, O_FLYING_DIAMOND); /* as if player got diamond */ + store(cave, x, y, O_SPACE); /* diamond disappears */ + } + else if (get(cave, x, y)==O_FLYING_STONE_F && get_dir(cave, x, y, fall_dir)==O_VOODOO && cave->voodoo_dies_by_stone) { + /* this is a 1stB-style vodo. explodes by stone, collects diamonds */ + explode_dir (cave, x, y, fall_dir); + } + else if (get_dir(cave, x, y, fall_dir)==O_MAGIC_WALL) { + play_sound_of_element(cave, O_DIAMOND); /* always play diamond sound */ + if (cave->magic_wall_state==GD_MW_DORMANT) + cave->magic_wall_state=GD_MW_ACTIVE; + if (cave->magic_wall_state==GD_MW_ACTIVE && is_space_dir(cave, x, y, MV_TWICE+fall_dir)) { + /* if magic wall active and place underneath, */ + /* it turns boulder into diamond and vice versa. or anything the effect says to do. */ + GdElement magic; + + switch (get(cave, x, y)) { + case O_FLYING_STONE_F: magic=cave->magic_flying_stone_to; break; + case O_FLYING_DIAMOND_F: magic=cave->magic_flying_diamond_to; break; + default: g_assert_not_reached(); + } + + store_dir(cave, x, y, MV_TWICE+fall_dir, magic); + } + store(cave, x, y, O_SPACE); /* active or non-active or anything, element falling in will always disappear */ + } + else if (explodes_by_hit_dir(cave, x, y, fall_dir)) + explode_dir(cave, x, y, fall_dir); + else if (sloped_dir(cave, x, y, fall_dir, opposite[fall_dir])) { /* sloped element, falling to left or right */ + if (sloped_dir(cave, x, y, fall_dir, cw_fourth[fall_dir]) && is_space_dir(cave, x, y, cw_eighth[fall_dir]) && is_space_dir(cave, x, y, cw_fourth[fall_dir])) { + play_sound_of_element(cave, get(cave, x, y)); + move(cave, x, y, cw_fourth[fall_dir], get(cave, x, y)); /* try to roll left first - see O_STONE to understand why cw_fourth */ + } + else if (sloped_dir(cave, x, y, fall_dir, ccw_fourth[fall_dir]) && is_space_dir(cave, x, y, ccw_eighth[fall_dir]) && is_space_dir(cave, x, y, ccw_fourth[fall_dir])) { + play_sound_of_element(cave, get(cave, x, y)); + move(cave, x, y, ccw_fourth[fall_dir], get(cave, x, y)); /* if not, try to roll right */ + } + else { + /* cannot roll in any direction, so it stops */ + play_sound_of_element(cave, get(cave, x, y)); + store(cave, x, y, bouncing); + } + } + else { + /* any other element, stops */ + play_sound_of_element(cave, get(cave, x, y)); + store(cave, x, y, bouncing); + } + } + break; + + + + /* + * N I T R O P A C K */ case O_NITRO_PACK: /* standing nitro pack */ if (!cave->gravity_disabled) { /* if gravity is enabled, the stone might fall. */ GdElement falling; - + falling=O_NITRO_PACK_F; if (is_space_dir(cave, x, y, cave->gravity)) { /* beginning to fall */ play_sound_of_element(cave, get(cave, x, y)); @@ -1586,7 +1737,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo case O_NITRO_PACK_F: /* falling nitro pack */ if (!cave->gravity_disabled) { GdElement bouncing; - + bouncing=O_NITRO_PACK; if (is_space_dir(cave, x, y, cave->gravity)) /* if space, falling further */ @@ -1679,14 +1830,14 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo store(cave, x, y, O_SKELETON); break; - case O_GUARD_1: - case O_GUARD_2: - case O_GUARD_3: - case O_GUARD_4: - case O_ALT_GUARD_1: - case O_ALT_GUARD_2: - case O_ALT_GUARD_3: - case O_ALT_GUARD_4: + case O_FIREFLY_1: + case O_FIREFLY_2: + case O_FIREFLY_3: + case O_FIREFLY_4: + case O_ALT_FIREFLY_1: + case O_ALT_FIREFLY_2: + case O_ALT_FIREFLY_3: + case O_ALT_FIREFLY_4: case O_BUTTER_1: case O_BUTTER_2: case O_BUTTER_3: @@ -1713,14 +1864,14 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo GdElement base; /* base element number (which is like O_***_1) */ int dir, dirn, dirp; /* direction */ - if (get(cave, x, y)>=O_GUARD_1 && get(cave, x, y)<=O_GUARD_4) - base=O_GUARD_1; + if (get(cave, x, y)>=O_FIREFLY_1 && get(cave, x, y)<=O_FIREFLY_4) + base=O_FIREFLY_1; else if (get(cave, x, y)>=O_BUTTER_1 && get(cave, x, y)<=O_BUTTER_4) base=O_BUTTER_1; else if (get(cave, x, y)>=O_STONEFLY_1 && get(cave, x, y)<=O_STONEFLY_4) base=O_STONEFLY_1; - else if (get(cave, x, y)>=O_ALT_GUARD_1 && get(cave, x, y)<=O_ALT_GUARD_4) - base=O_ALT_GUARD_1; + else if (get(cave, x, y)>=O_ALT_FIREFLY_1 && get(cave, x, y)<=O_ALT_FIREFLY_4) + base=O_ALT_FIREFLY_1; else if (get(cave, x, y)>=O_ALT_BUTTER_1 && get(cave, x, y)<=O_ALT_BUTTER_4) base=O_ALT_BUTTER_1; else @@ -1869,7 +2020,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo } } break; - + case O_REPLICATOR: if (cave->replicators_wait_frame==0 && cave->replicators_active && !cave->gravity_disabled) { /* only replicate, if space is under it. */ @@ -1926,7 +2077,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo store(cave, x, y, O_STONE); made_sound_of=O_STONE; } - + /* if biter did move, we had sound. play it. */ if (made_sound_of!=O_NONE) play_sound_of_element(cave, made_sound_of); @@ -1976,7 +2127,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo case O_BLADDER: store(cave, x, y, O_BLADDER_1); break; - + case O_BLADDER_1: case O_BLADDER_2: case O_BLADDER_3: @@ -2070,10 +2221,10 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo amoeba_count++; switch (cave->amoeba_state) { case GD_AM_TOO_BIG: - store(cave, x, y, cave->too_big_amoeba_to); + store(cave, x, y, cave->amoeba_too_big_effect); break; case GD_AM_ENCLOSED: - store(cave, x, y, cave->enclosed_amoeba_to); + store(cave, x, y, cave->amoeba_enclosed_effect); break; case GD_AM_SLEEPING: case GD_AM_AWAKE: @@ -2086,7 +2237,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo cave->amoeba_state=GD_AM_AWAKE; } - /* if alive, check in which dir to grow (or not) */ + /* if alive, check in which dir to grow (or not) */ if (cave->amoeba_state==GD_AM_AWAKE) { if (g_rand_int_range(cave->random, 0, 1000000)amoeba_growth_prob*1000000) { switch (g_rand_int_range(cave->random, 0, 4)) { /* decided to grow, choose a random direction. */ @@ -2123,10 +2274,10 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo else switch (cave->amoeba_2_state) { case GD_AM_TOO_BIG: - store(cave, x, y, cave->too_big_amoeba_2_to); + store(cave, x, y, cave->amoeba_2_too_big_effect); break; case GD_AM_ENCLOSED: - store(cave, x, y, cave->enclosed_amoeba_2_to); + store(cave, x, y, cave->amoeba_2_enclosed_effect); break; case GD_AM_SLEEPING: case GD_AM_AWAKE: @@ -2258,12 +2409,13 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo * unpredictable: g_rand_int * predictable: c64 predictable random generator. * for predictable, a random number is generated, whether or not it is even possible that the stone - * will be able to pass. + * will be able to pass. */ if (cave->slime_predictable? ((gd_cave_c64_random (cave)&cave->slime_permeability_c64)==0) : g_rand_int_range(cave->random, 0, 1000000)slime_permeability*1000000) { GdDirection grav=cave->gravity; GdDirection oppos=opposite[cave->gravity]; - + + /* space under the slime? elements may pass from top to bottom then. */ if (is_space_dir(cave, x, y, grav)) { if (get_dir(cave, x, y, oppos)==cave->slime_eats_1) { store_dir(cave, x, y, grav, cave->slime_converts_1); /* output a falling xy under */ @@ -2286,14 +2438,27 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo play_sound_of_element(cave, O_SLIME); } } else - if (is_space_dir(cave, x, y, oppos) && get_dir(cave, x, y, grav)==O_BLADDER) { /* bladders move UP the slime */ - store_dir(cave, x, y, grav, O_SPACE); - store_dir(cave, x, y, oppos, O_BLADDER_1); - play_sound_of_element(cave, O_SLIME); + /* or space over the slime? elements may pass from bottom to up then. */ + if (is_space_dir(cave, x, y, oppos)) { + if (get_dir(cave, x, y, grav)==O_BLADDER) { /* bladders move UP the slime */ + store_dir(cave, x, y, grav, O_SPACE); + store_dir(cave, x, y, oppos, O_BLADDER_1); + play_sound_of_element(cave, O_SLIME); + } else + if (get_dir(cave, x, y, grav)==O_FLYING_STONE) { + store_dir(cave, x, y, grav, O_SPACE); + store_dir(cave, x, y, oppos, O_FLYING_STONE_F); + play_sound_of_element(cave, O_SLIME); + } else + if (get_dir(cave, x, y, grav)==O_FLYING_DIAMOND) { + store_dir(cave, x, y, grav, O_SPACE); + store_dir(cave, x, y, oppos, O_FLYING_DIAMOND_F); + play_sound_of_element(cave, O_SLIME); + } } } break; - + case O_FALLING_WALL: if (is_space_dir(cave, x, y, grav_compat)) { /* try falling if space under. */ @@ -2330,37 +2495,46 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo break; } break; - - + + /* * C O N V E Y O R B E L T S */ case O_CONVEYOR_RIGHT: case O_CONVEYOR_LEFT: - if (cave->gravity==MV_DOWN && !cave->gravity_disabled && cave->conveyor_belts_active) { + /* only works if gravity is up or down!!! */ + /* first, check for gravity and running belts. */ + if (!cave->gravity_disabled && cave->conveyor_belts_active) { const GdDirection *dir; gboolean left; - /* decide direction */ - if (get(cave, x, y)==O_CONVEYOR_RIGHT) - left=FALSE; - else - left=TRUE; + /* decide direction */ + left=get(cave, x, y)!=O_CONVEYOR_RIGHT; if (cave->conveyor_belts_direction_changed) left=!left; - if (left) - dir=ccw_eighth; - else - dir=cw_eighth; - - if (moved_by_conveyor_dir(cave, x, y, opposite[cave->gravity]) - && !is_scanned_dir(cave, x, y, opposite[cave->gravity]) - && is_space_dir(cave, x, y, dir[opposite[cave->gravity]])) - { - store_dir(cave, x, y, dir[opposite[cave->gravity]], get_dir(cave, x, y, opposite[cave->gravity])); - store_dir(cave, x, y, opposite[cave->gravity], O_SPACE); + dir=left?ccw_eighth:cw_eighth; + + /* CHECK IF IT CONVEYS THE ELEMENT ABOVE IT */ + /* if gravity is normal, and the conveyor belt has something ABOVE which can be moved + OR + the gravity is up, so anything that should float now goes DOWN and touches the conveyor */ + if ((cave->gravity==MV_DOWN && moved_by_conveyor_top_dir(cave, x, y, MV_UP)) + || (cave->gravity==MV_UP && moved_by_conveyor_bottom_dir(cave, x, y, MV_UP))) { + if (!is_scanned_dir(cave, x, y, MV_UP) && is_space_dir(cave, x, y, dir[MV_UP])) + { + store_dir(cave, x, y, dir[MV_UP], get_dir(cave, x, y, MV_UP)); /* move */ + store_dir(cave, x, y, MV_UP, O_SPACE); /* and place a space. */ + } + } + /* CHECK IF IT CONVEYS THE ELEMENT BELOW IT */ + if ((cave->gravity==MV_UP && moved_by_conveyor_top_dir(cave, x, y, MV_DOWN)) + || (cave->gravity==MV_DOWN && moved_by_conveyor_bottom_dir(cave, x, y, MV_DOWN))) { + if (!is_scanned_dir(cave, x, y, MV_DOWN) && is_space_dir(cave, x, y, dir[MV_DOWN])) + { + store_dir(cave, x, y, dir[MV_DOWN], get_dir(cave, x, y, MV_DOWN)); /* move */ + store_dir(cave, x, y, MV_DOWN, O_SPACE); /* and clear. */ + } } - break; } break; @@ -2368,14 +2542,25 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo * S I M P L E C H A N G I N G; E X P L O S I O N S */ case O_EXPLODE_5: - store(cave, x, y, cave->explosion_to); + store(cave, x, y, cave->explosion_effect); break; case O_PRE_DIA_5: - store(cave, x, y, cave->diamond_birth_to); + store(cave, x, y, cave->diamond_birth_effect); break; case O_PRE_STONE_4: store(cave, x, y, O_STONE); break; + + case O_NITRO_EXPL_4: + store(cave, x, y, cave->nitro_explosion_effect); + break; + case O_BOMB_EXPL_4: + store(cave, x, y, cave->bomb_explosion_effect); + break; + case O_AMOEBA_2_EXPL_4: + store(cave, x, y, cave->amoeba_2_explosion_effect); + break; + case O_GHOST_EXPL_4: { static GdElement ghost_explode[]={ @@ -2384,12 +2569,9 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo O_WAITING_STONE, O_BITER_1 }; - store(cave, x, y, ghost_explode[g_rand_int_range(cave->random, 0, G_N_ELEMENTS (ghost_explode))]); + store(cave, x, y, ghost_explode[g_rand_int_range(cave->random, 0, G_N_ELEMENTS(ghost_explode))]); } break; - case O_BOMB_EXPL_4: - store(cave, x, y, cave->bomb_explode_to); - break; case O_PRE_STEEL_4: store(cave, x, y, O_STEEL); break; @@ -2397,10 +2579,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo store(cave, x, y, O_CLOCK); break; case O_BOMB_TICK_7: - explode (cave, x, y); - break; - case O_AMOEBA_2_EXPL_4: - store(cave, x, y, cave->amoeba_2_explodes_to); + explode(cave, x, y); break; case O_TRAPPED_DIAMOND: @@ -2424,12 +2603,6 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo case O_PRE_PL_3: store(cave, x, y, O_PLAYER); break; - case O_NITRO_EXPL_4: - store(cave, x, y, cave->nitro_explode_to); - break; - case O_DRAGONFLY_EXPLODE_5: - store(cave, x, y, cave->dragonfly_explosion_to); - break; case O_PRE_DIA_1: case O_PRE_DIA_2: @@ -2468,12 +2641,8 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo case O_AMOEBA_2_EXPL_1: case O_AMOEBA_2_EXPL_2: case O_AMOEBA_2_EXPL_3: - case O_DRAGONFLY_EXPLODE_1: - case O_DRAGONFLY_EXPLODE_2: - case O_DRAGONFLY_EXPLODE_3: - case O_DRAGONFLY_EXPLODE_4: /* simply the next identifier */ - next (cave, x, y); + next(cave, x, y); break; case O_WATER_1: case O_WATER_2: @@ -2492,7 +2661,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo case O_WATER_15: found_water=TRUE; /* for sound */ /* simply the next identifier */ - next (cave, x, y); + next(cave, x, y); break; case O_BLADDER_SPENDER: @@ -2515,7 +2684,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo /* another scan-like routine: */ /* short explosions (for example, in bd1) started with explode_2. */ - /* internally we use explode_1; and change it to explode_2 if needed. */ + /* internally we use explode_1; and change it to explode_2 if needed. */ if (cave->short_explosions) for (y=0; yh; y++) for (x=0; xw; x++) @@ -2573,14 +2742,14 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo cave->py[G_N_ELEMENTS(cave->py)-1]=cave->player_y; /* SCHEDULING */ - + /* update timing calculated by iterating and counting elements which were slow to process on c64 */ switch (cave->scheduling) { case GD_SCHEDULING_MILLISECONDS: /* cave->speed already contains the milliseconds value, do not touch it */ break; - + case GD_SCHEDULING_BD1: if (!cave->intermission) /* non-intermissions */ @@ -2597,7 +2766,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo else cave->speed=(65+2.88*cave->c64_timing+(cave->ckdelay)/1000); /* for intermissions */ break; - + case GD_SCHEDULING_BD2: /* 60 is a guess. */ cave->speed=MAX(60+(cave->ckdelay+cave->ckdelay_extra_for_animation)/1000, cave->c64_timing*20); @@ -2613,19 +2782,19 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo /* 40 ms was measured in the construction kit, with delay=0 */ cave->speed=MAX(40+cave->ckdelay/1000, cave->c64_timing*20); break; - + case GD_SCHEDULING_CRDR: if (cave->hammered_walls_reappear) cave->ckdelay+=60000; cave->speed=MAX(130+cave->ckdelay/1000, cave->c64_timing*20); break; - + case GD_SCHEDULING_MAX: /* to avoid compiler warning */ g_assert_not_reached(); break; } - + /* cave 3 sounds. precedence is controlled by the sound_play function. */ if (found_water) play_sound_of_element(cave, O_WATER); @@ -2638,7 +2807,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo /* pneumatic hammer sound - overrides everything. */ if (cave->pneumatic_hammer_active_delay>0) play_sound_of_element(cave, O_PNEUMATIC_HAMMER); - + /* CAVE VARIABLES */ /* PLAYER */ @@ -2647,7 +2816,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo if (voodoo_touched) /* check if any voodoo exploded, and kill players the next scan if that happended. */ cave->kill_player=TRUE; - /* AMOEBA */ + /* AMOEBA */ if (cave->amoeba_state==GD_AM_AWAKE) { /* check flags after evaluating. */ if (amoeba_count>=cave->amoeba_max_count) @@ -2680,7 +2849,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo /* only decrement time when player is already born. */ if (cave->hatched) { int secondsbefore, secondsafter; - + secondsbefore=cave->time/cave->timing_factor; cave->time-=cave->speed; if (cave->time<=0) @@ -2712,6 +2881,8 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo cave->creatures_direction_will_change=0; if (cave->creatures_direction_will_change==0) { + if (cave->creature_direction_auto_change_sound) + gd_sound_play(cave, GD_S_SWITCH_CREATURES); cave->creatures_backwards=!cave->creatures_backwards; cave->creatures_direction_will_change=cave->creatures_direction_auto_change_time*cave->timing_factor; } @@ -2766,7 +2937,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo /* if decremented hatching, and it became zero: */ if (start_signal) { /* THIS IS THE CAVE START SIGNAL */ cave->hatched=TRUE; /* record that now the cave is in its normal state */ - + gd_cave_count_diamonds(cave); /* if diamonds needed is below zero, we count the available diamonds now. */ /* setup direction auto change */ @@ -2776,7 +2947,7 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo if (cave->creatures_direction_auto_change_on_start) cave->creatures_backwards=!cave->creatures_backwards; } - + gd_sound_play(cave, GD_S_CRACK); } @@ -2790,11 +2961,11 @@ gd_cave_iterate(GdCave *cave, GdDirection player_move, gboolean player_fire, gbo cave->replicators_wait_frame=cave->replicator_delay_frame; else cave->replicators_wait_frame--; - + /* LAST THOUGTS */ - /* check if cave failed by timeout */ + /* check if cave failed by timeout */ if (cave->player_state==GD_PL_LIVING && cave->time==0) { gd_cave_clear_sounds(cave); cave->player_state=GD_PL_TIMEOUT; diff --git a/src/caveset.c b/src/caveset.c index 68185ac..262bf90 100644 --- a/src/caveset.c +++ b/src/caveset.c @@ -63,13 +63,13 @@ gd_caveset_properties[] = { {"Lives", GD_TYPE_INT, 0, N_("Initial lives"), CAVESET_OFFSET(initial_lives), 1, N_("Number of lives you get at game start."), 3, 9}, {"Lives", GD_TYPE_INT, 0, N_("Maximum lives"), CAVESET_OFFSET(maximum_lives), 1, N_("Maximum number of lives you can have by collecting bonus points."), 3, 99}, {"BonusLife", GD_TYPE_INT, 0, N_("Bonus life score"), CAVESET_OFFSET(bonus_life_score), 1, N_("Number of points to collect for a bonus life."), 100, 5000}, - + {"Story", GD_TYPE_LONGSTRING, 0, N_("Story"), CAVESET_OFFSET(story), 1, N_("Long description of the game.")}, {"Remark", GD_TYPE_LONGSTRING, 0, N_("Remark"), CAVESET_OFFSET(remark), 1, N_("Remark (informative).")}, - + {"TitleScreen", GD_TYPE_LONGSTRING, GD_DONT_SHOW_IN_EDITOR, N_("Title screen"), CAVESET_OFFSET(title_screen), 1, N_("Title screen image")}, {"TitleScreenScroll", GD_TYPE_LONGSTRING, GD_DONT_SHOW_IN_EDITOR, N_("Title screen, scrolling"), CAVESET_OFFSET(title_screen_scroll), 1, N_("Scrolling background for title screen image")}, - + {NULL}, }; @@ -106,7 +106,7 @@ void gd_caveset_data_free(GdCavesetData *data) { int i; - + /* free strings */ for (i=0; gd_caveset_properties[i].identifier!=NULL; i++) if (gd_caveset_properties[i].type==GD_TYPE_LONGSTRING) @@ -123,7 +123,7 @@ gd_caveset_data_free(GdCavesetData *data) * highscores saving in config dir * */ - + /* calculates an adler checksum, for which it uses all elements of all cave-rendereds. */ static guint32 @@ -134,7 +134,7 @@ caveset_checksum() for (iter=gd_caveset; iter!=NULL; iter=iter->next) { GdCave *rendered; - + rendered=gd_cave_new_rendered(iter->data, 0, 0); /* level=1, seed=0 */ gd_cave_adler_checksum_more(rendered, &a, &b); gd_cave_free(rendered); @@ -417,7 +417,7 @@ static GdElement brc_import_table[]= { /* 0 */ O_SPACE, O_DIRT, O_BRICK, O_MAGIC_WALL, O_PRE_OUTBOX, O_OUTBOX, O_UNKNOWN, O_STEEL, - O_H_EXPANDING_WALL, O_H_EXPANDING_WALL /* scanned */, O_GUARD_1 /* scanned */, O_GUARD_1 /* scanned */, O_GUARD_1, O_GUARD_2, O_GUARD_3, O_GUARD_4, + O_H_EXPANDING_WALL, O_H_EXPANDING_WALL /* scanned */, O_FIREFLY_1 /* scanned */, O_FIREFLY_1 /* scanned */, O_FIREFLY_1, O_FIREFLY_2, O_FIREFLY_3, O_FIREFLY_4, /* 1 */ O_BUTTER_1 /* scanned */, O_BUTTER_1 /* scanned */, O_BUTTER_1, O_BUTTER_2, O_BUTTER_3, O_BUTTER_4, O_PLAYER, O_PLAYER /* scanned */, O_STONE, O_STONE /* scanned */, O_STONE_F, O_STONE_F /* scanned */, O_DIAMOND, O_DIAMOND /* scanned */, O_DIAMOND_F, O_DIAMOND_F /* scanned */, @@ -434,7 +434,7 @@ static GdElement brc_import_table[]= O_NONE /* bomb explosion utolso */, O_UNKNOWN, O_NONE /* solid bomb glued */, O_UNKNOWN, O_STONE_GLUED, O_UNKNOWN, O_DIAMOND_GLUED, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, O_NONE, O_NONE, O_NONE, O_NONE, O_NONE, O_NONE, /* 6 */ - O_ALT_GUARD_1 /* scanned */, O_ALT_GUARD_1 /* scanned */, O_ALT_GUARD_1, O_ALT_GUARD_2, O_ALT_GUARD_3, O_ALT_GUARD_4, O_PLAYER_BOMB, O_PLAYER_BOMB /* scanned */, + O_ALT_FIREFLY_1 /* scanned */, O_ALT_FIREFLY_1 /* scanned */, O_ALT_FIREFLY_1, O_ALT_FIREFLY_2, O_ALT_FIREFLY_3, O_ALT_FIREFLY_4, O_PLAYER_BOMB, O_PLAYER_BOMB /* scanned */, O_BOMB, O_BOMB_TICK_1, O_BOMB_TICK_2, O_BOMB_TICK_3, O_BOMB_TICK_4, O_BOMB_TICK_5, O_BOMB_TICK_6, O_BOMB_TICK_7, /* 7 */ O_BOMB_TICK_7, O_BOMB_EXPL_1, O_BOMB_EXPL_2, O_BOMB_EXPL_3, O_BOMB_EXPL_4, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, @@ -444,10 +444,10 @@ static GdElement brc_import_table[]= static GdElement brc_effect_table[]= { O_STEEL, O_DIRT, O_SPACE, O_STONE, O_STONE_F, O_STONE_GLUED, O_DIAMOND, O_DIAMOND_F, O_DIAMOND_GLUED, O_PRE_DIA_1, - O_PLAYER, O_PRE_PL_1, O_PLAYER_BOMB, O_PRE_OUTBOX, O_OUTBOX, O_GUARD_1, O_GUARD_2, O_GUARD_3, O_GUARD_4, + O_PLAYER, O_PRE_PL_1, O_PLAYER_BOMB, O_PRE_OUTBOX, O_OUTBOX, O_FIREFLY_1, O_FIREFLY_2, O_FIREFLY_3, O_FIREFLY_4, O_BUTTER_1, O_BUTTER_2, O_BUTTER_3, O_BUTTER_4, O_BRICK, O_MAGIC_WALL, O_H_EXPANDING_WALL, O_V_EXPANDING_WALL, O_EXPANDING_WALL, O_FALLING_WALL, O_FALLING_WALL_F, O_AMOEBA, O_SLIME, O_ACID, O_VOODOO, O_CLOCK, O_BOMB, O_UNKNOWN, O_UNKNOWN, O_UNKNOWN, - O_ALT_GUARD_1, O_ALT_GUARD_2, O_ALT_GUARD_3, O_ALT_GUARD_4, O_ALT_BUTTER_1, O_ALT_BUTTER_2, O_ALT_BUTTER_3, O_ALT_BUTTER_4, + O_ALT_FIREFLY_1, O_ALT_FIREFLY_2, O_ALT_FIREFLY_3, O_ALT_FIREFLY_4, O_ALT_BUTTER_1, O_ALT_BUTTER_2, O_ALT_BUTTER_3, O_ALT_BUTTER_4, O_EXPLODE_1, O_BOMB_EXPL_1, O_UNKNOWN, }; @@ -470,7 +470,7 @@ brc_effect(guint8 byt) g_warning("invalid element identifier for brc effect: %02x", byt); return O_UNKNOWN; } - + return brc_effect_table[byt]; } @@ -483,7 +483,7 @@ brc_import(guint8 *data) /* we import 100 caves, and the put them in the correct order. */ GdCave *imported[100]; gboolean import_effect; - + g_assert(G_N_ELEMENTS(brc_color_table)==G_N_ELEMENTS(brc_color_table_comp)); gd_caveset_clear(); @@ -506,7 +506,7 @@ brc_import(guint8 *data) for (level=0; level<5; level++) { int cavenum; int i; - + for (cavenum=0; cavenum<20; cavenum++) { GdCave *cave; @@ -520,7 +520,7 @@ brc_import(guint8 *data) g_snprintf(cave->name, sizeof(GdString), "Cave %c/%d", 'A'+cavenum, level+1); else g_snprintf(cave->name, sizeof(GdString), "Intermission %d/%d", cavenum-15, level+1); - + /* fixed intermission caves; are smaller. */ if (cavenum>=16) { cave->w=20; @@ -550,14 +550,26 @@ brc_import(guint8 *data) /* bonus time: 100 was added, so it could also be negative */ cave->level_bonus_time[i]=(int)data[11*c+datapos+1]-100; cave->level_hatching_delay_frame[i]=data[10*c+datapos]; - + /* this was not set in boulder remake. */ cave->level_speed[i]=150; } cave->diamond_value=data[2*c+datapos]; cave->extra_diamond_value=data[3*c+datapos]; - /* brc amoeba: random(256)>=size specified in brc. */ - /* prob: 1-(data/256) */ + /* BRC PROBABILITIES */ + /* a typical code example: + 46:if (random(slime*4)<4) and (tab[x,y+2]=0) then + Begin tab[x,y]:=0;col[x,y+2]:=col[x,y];tab[x,y+2]:=27;mat[x,y+2]:=9;Voice4:=2;end; + where slime is the byte loaded from the file as it is. + pascal random function generates a random number between 0..limit-1, inclusive, for random(limit). + + so a random number between 0..limit*4-1 is generated. + for limit=1, 0..3, which is always < 4, so P=1. + for limit=2, 0..7, 0..7 is < 4 in P=50%. + for limit=3, 0..11, is < 4 in P=33%. + So the probability is exactly 100%/limit. + just make sure we do not divide by zero for some broken input. + */ if (data[7*c+datapos]==0) g_warning("amoeba growth cannot be zero, error at byte %d", data[7*c+datapos]); else @@ -567,9 +579,9 @@ brc_import(guint8 *data) else cave->amoeba_fast_growth_prob=1.0/data[8*c+datapos]; cave->slime_predictable=FALSE; - cave->slime_permeability=1-data[9*c+datapos]/256.0; - cave->acid_spread_ratio=1-data[10*c+datapos]/256.0; - cave->pushing_stone_prob=1.0/data[11*c+datapos]; + cave->slime_permeability=1.0/data[9*c+datapos]; + cave->acid_spread_ratio=1.0/data[10*c+datapos]; + cave->pushing_stone_prob=1.0/data[11*c+datapos]; /* br only allowed values 1..8 in here, but works the same way. */ cave->magic_wall_stops_amoeba=data[12*c+datapos+1]!=0; cave->intermission=cavenum>=16 || data[14*c+datapos+1]!=0; @@ -584,18 +596,18 @@ brc_import(guint8 *data) cave->color5=0x8af713; /* fixed for slime */ if (import_effect) { - cave->enclosed_amoeba_to=brc_effect(data[14*c+datapos+1]); - cave->too_big_amoeba_to=brc_effect(data[15*c+datapos+1]); - cave->explosion_to=brc_effect(data[16*c+datapos+1]); - cave->bomb_explode_to=brc_effect(data[17*c+datapos+1]); + cave->amoeba_enclosed_effect=brc_effect(data[14*c+datapos+1]); + cave->amoeba_too_big_effect=brc_effect(data[15*c+datapos+1]); + cave->explosion_effect=brc_effect(data[16*c+datapos+1]); + cave->bomb_explosion_effect=brc_effect(data[17*c+datapos+1]); /* 18 solid bomb explode to */ - cave->diamond_birth_to=brc_effect(data[19*c+datapos+1]); - cave->bouncing_stone_to=brc_effect(data[20*c+datapos+1]); - cave->bouncing_diamond_to=brc_effect(data[21*c+datapos+1]); + cave->diamond_birth_effect=brc_effect(data[19*c+datapos+1]); + cave->stone_bouncing_effect=brc_effect(data[20*c+datapos+1]); + cave->diamond_bouncing_effect=brc_effect(data[21*c+datapos+1]); cave->magic_diamond_to=brc_effect(data[22*c+datapos+1]); cave->acid_eats_this=brc_effect(data[23*c+datapos+1]); /* slime eats: (diamond,boulder,bomb), (diamond,boulder), (diamond,bomb), (boulder,bomb) */ - cave->enclosed_amoeba_to=brc_effect(data[14*c+datapos+1]); + cave->amoeba_enclosed_effect=brc_effect(data[14*c+datapos+1]); } } } @@ -609,7 +621,7 @@ brc_import(guint8 *data) GdCave *cave=imported[level*20+reorder[cavenum]]; gboolean only_dirt; int x, y; - + /* check if cave contains only dirt. that is an empty cave, and do not import. */ only_dirt=TRUE; for (y=1; yh-1 && only_dirt; y++) @@ -624,9 +636,9 @@ brc_import(guint8 *data) gd_cave_free(cave); } } - + #if 0 - /* debug TINGZ */ + /* debug TINGZ */ g_print(" [CAVEA] [CAVEB] [CAVEC]\n"); for (i=0; i<40; i++) { int datapos=22; @@ -648,7 +660,7 @@ caveset_name_set_from_filename(const char *filename) { char *name; char *c; - + /* make up a caveset name from the filename. */ name=g_path_get_basename(filename); gd_strcpy(gd_caveset_data->name, name); @@ -659,7 +671,7 @@ caveset_name_set_from_filename(const char *filename) /* remove extension */ if ((c=strrchr (gd_caveset_data->name, '.'))!=NULL) *c=0; -} +} /* Load caveset from file. @@ -709,7 +721,7 @@ gd_caveset_load_from_file (const char *filename, const char *configdir) } gd_error_set_context(NULL); - + if (g_str_has_suffix(filename, ".brc") || g_str_has_suffix(filename, "*.BRC")) { brc_import((guint8 *) buf); gd_caveset_edited=FALSE; /* newly loaded cave is not edited */ @@ -840,7 +852,7 @@ gd_cave_check_replays(GdCave *cave, gboolean report, gboolean remove, gboolean r { GList *riter; int wrong=0; - + riter=cave->replays; while (riter!=NULL) { GdReplay *replay=(GdReplay *)riter->data; @@ -848,15 +860,15 @@ gd_cave_check_replays(GdCave *cave, gboolean report, gboolean remove, gboolean r GdCave *rendered; GList *next=riter->next; - rendered=gd_cave_new_rendered(cave, replay->level, replay->seed); + rendered=gd_cave_new_rendered(cave, replay->level, replay->seed); checksum=gd_cave_adler_checksum(rendered); gd_cave_free(rendered); - + replay->wrong_checksum=FALSE; /* count wrong ones... the checksum might be changed later to "repair" */ if (replay->checksum!=0 && checksum!=replay->checksum) wrong++; - + if (replay->checksum==0 || repair) { /* if no checksum found, add one. or if repair requested, overwrite old one. */ replay->checksum=checksum; @@ -864,7 +876,7 @@ gd_cave_check_replays(GdCave *cave, gboolean report, gboolean remove, gboolean r /* if has a checksum, compare with this one. */ if (replay->checksum!=checksum) { replay->wrong_checksum=TRUE; - + if (report) g_warning("%s: replay played by %s at %s is invalid", cave->name, replay->player_name, replay->date); @@ -875,14 +887,29 @@ gd_cave_check_replays(GdCave *cave, gboolean report, gboolean remove, gboolean r } } } - + /* advance to next list item which we remembered. the current one might have been deleted */ riter=next; } - + return wrong; } +gboolean gd_caveset_has_replays() +{ + GList *citer; + + /* for all caves */ + for (citer=gd_caveset; citer!=NULL; citer=citer->next) { + GdCave *cave=(GdCave *)citer->data; + + if (cave->replays) + return TRUE; + } + + /* if neither of the caves had a replay, */ + return FALSE; +} diff --git a/src/caveset.h b/src/caveset.h index 30c9ba5..8ebac2c 100644 --- a/src/caveset.h +++ b/src/caveset.h @@ -80,6 +80,8 @@ void gd_caveset_data_free(GdCavesetData *data); /* check replays and optionally remove */ int gd_cave_check_replays(GdCave *cave, gboolean report, gboolean remove, gboolean repair); +gboolean gd_caveset_has_replays(); + #endif /* _CAVESET_H */ diff --git a/src/editor.c b/src/editor.c index 220db89..0f7b784 100644 --- a/src/editor.c +++ b/src/editor.c @@ -2500,11 +2500,15 @@ static gboolean editor_window_destroy_event(GtkWidget *widget, GdkEvent *event, gpointer data) { /* remove drawing interrupt. */ - g_source_remove_by_user_data (drawing_area_draw_timeout); + g_source_remove_by_user_data(drawing_area_draw_timeout); /* if cave is drawn, free. */ - gd_cave_free (rendered_cave); + gd_cave_free(rendered_cave); rendered_cave=NULL; + /* we destroy the icon view explicitly. so the caveset gets recreated... gd_main_stop_game will need that, as it checks all caves for replay. */ + if (iconview_cavelist) + gtk_widget_destroy(iconview_cavelist); + g_hash_table_destroy(cave_pixbufs); /* stop test is running. this also restores main window action sensitized states */ gd_main_stop_game(); @@ -2558,7 +2562,7 @@ icon_view_update_pixbufs_timeout(gpointer data) pixbuf_in_icon_view=NULL; /* to force update below */ rendered=gd_cave_new_rendered (cave, 0, 0); /* render at level 1, seed=0 */ - pixbuf=gd_drawcave_to_pixbuf (rendered, 128, 128, TRUE); /* draw 128x128 icons at max */ + pixbuf=gd_drawcave_to_pixbuf(rendered, 128, 128, TRUE, TRUE); /* draw 128x128 icons at max */ if (!cave->selectable) { GdkPixbuf *colored; @@ -3033,10 +3037,10 @@ save_cave_png (GdkPixbuf *pixbuf) this creates a pixbuf of the cave, and scales it down to fit the screen if needed. it is then presented to the user, with the option to save it in png */ static void -cave_overview (gboolean simple_view) +cave_overview(gboolean simple_view) { /* view the RENDERED one, and the entire cave */ - GdkPixbuf *pixbuf=gd_drawcave_to_pixbuf (rendered_cave, 0, 0, simple_view), *scaled; + GdkPixbuf *pixbuf=gd_drawcave_to_pixbuf(rendered_cave, 0, 0, simple_view, TRUE), *scaled; GtkWidget *dialog, *button; int sx, sy; double fx, fy; diff --git a/src/editorexport.c b/src/editorexport.c index 0ada7fd..639b152 100644 --- a/src/editorexport.c +++ b/src/editorexport.c @@ -71,7 +71,7 @@ static int element_to_crli(GdElement e, GHashTable *unknown) } static int -crli_export (GdCave *to_convert, const int level, guint8 *compressed) +crli_export(GdCave *to_convert, const int level, guint8 *compressed) { guint8 output[0x3b0]; int x, y, i; @@ -219,18 +219,18 @@ crli_export (GdCave *to_convert, const int level, guint8 *compressed) output[0x394]=cave->biter_delay_frame; output[0x395]=cave->magic_wall_stops_amoeba?0:1; /* inverted! */ - output[0x396]=element_to_crli(cave->bomb_explode_to|SCANNED, unknown); - output[0x397]=element_to_crli(cave->explosion_to|SCANNED, unknown); - if (cave->falling_stone_to!=O_STONE_F) + output[0x396]=element_to_crli(cave->bomb_explosion_effect|SCANNED, unknown); + output[0x397]=element_to_crli(cave->explosion_effect|SCANNED, unknown); + if (cave->stone_falling_effect!=O_STONE_F) g_warning("crli does not support 'falling stone to' effect"); - output[0x398]=element_to_crli(cave->bouncing_stone_to|SCANNED, unknown); - output[0x399]=element_to_crli(cave->diamond_birth_to|SCANNED, unknown); + output[0x398]=element_to_crli(cave->stone_bouncing_effect|SCANNED, unknown); + output[0x399]=element_to_crli(cave->diamond_birth_effect|SCANNED, unknown); output[0x39a]=element_to_crli(cave->magic_diamond_to|SCANNED, unknown); - if (cave->bouncing_diamond_to!=O_DIAMOND) + if (cave->diamond_bouncing_effect!=O_DIAMOND) g_warning("crli does not support 'bouncing diamond turns to' effect"); output[0x39b]=element_to_crli(cave->bladder_converts_by, unknown); - output[0x39c]=element_to_crli(cave->falling_diamond_to|SCANNED, unknown); - if (cave->bouncing_diamond_to!=O_DIAMOND) + output[0x39c]=element_to_crli(cave->diamond_falling_effect|SCANNED, unknown); + if (cave->diamond_bouncing_effect!=O_DIAMOND) g_warning("crli does not support 'bouncing diamond turns to' effect"); output[0x39d]=element_to_crli(cave->biter_eat, unknown); output[0x39e]=element_to_crli(cave->slime_eats_1, unknown); @@ -246,8 +246,8 @@ crli_export (GdCave *to_convert, const int level, guint8 *compressed) output[0x3a3]='0'; output[0x3a4]=cave->diagonal_movements?1:0; - output[0x3a6]=element_to_crli(cave->too_big_amoeba_to|SCANNED, unknown); - output[0x3a7]=element_to_crli(cave->enclosed_amoeba_to|SCANNED, unknown); + output[0x3a6]=element_to_crli(cave->amoeba_too_big_effect|SCANNED, unknown); + output[0x3a7]=element_to_crli(cave->amoeba_enclosed_effect|SCANNED, unknown); output[0x3a8]=cave->acid_spread_ratio*255.0; output[0x3a9]=element_to_crli(cave->acid_eats_this, unknown); output[0x3ab]=element_to_crli(cave->expanding_wall_looks_like, unknown); @@ -436,8 +436,18 @@ gd_export_cave_list_to_crli_cavepack(GList *caveset, int level, const char *file } - - +static void +string_printf_markup(GString *string, const char *format, ...) +{ + char *text; + va_list ap; + + va_start(ap, format); + text=g_markup_vprintf_escaped(format, ap); + va_end(ap); + g_string_append(string, text); + g_free(text); +} /* save caveset as html gallery. htmlname: filename @@ -476,26 +486,65 @@ gd_save_html(char *htmlname, GtkWidget *window) } pngbasename=g_path_get_basename(pngoutbasename); - g_string_append_printf (contents, "\n"); - g_string_append_printf (contents, "%s", gd_caveset_data->name); - g_string_append_printf (contents, "\n"); + g_string_append(contents, "\n"); + g_string_append(contents, "\n"); + string_printf_markup(contents, "%s\n", gd_caveset_data->name); + g_string_append(contents, "\n"); + if (gd_html_stylesheet_filename) + g_string_append_printf(contents, "\n", gd_html_stylesheet_filename); + if (gd_html_favicon_filename) + g_string_append_printf(contents, "\n", gd_html_favicon_filename); + g_string_append(contents, "\n\n"); + + g_string_append(contents, "\n"); + + string_printf_markup(contents, "

%s

\n", gd_caveset_data->name); + /* if the game has its own title screen */ + if (gd_caveset_data->title_screen->len!=0) { + GdkPixbuf *title_image; + char *pngname; + + /* create the title image and save it */ + title_image=gd_create_title_image(); + pngname=g_strdup_printf("%s_%03d.png", pngoutbasename, 0); /* it is the "zeroth" image */ + gdk_pixbuf_save(title_image, pngname, "png", &error, "compression", "9", NULL); + if (error) { + g_warning("%s", error->message); + g_error_free(error); + error=NULL; + } + g_free (pngname); - g_string_append_printf (contents, "

%s

", gd_caveset_data->name); - g_string_append_printf (contents, _("Caves: %d
\n"), gd_caveset_count ()); + g_string_append_printf(contents, "\n", pngbasename, 0, gdk_pixbuf_get_width(title_image), gdk_pixbuf_get_height (title_image)); + g_string_append_printf(contents, "
\n"); + + g_object_unref(title_image); + } + g_string_append(contents, "\n"); + string_printf_markup(contents, "
%s%d\n", _("Caves"), gd_caveset_count()); if (!g_str_equal(gd_caveset_data->author, "")) - g_string_append_printf (contents, _("Author: %s
\n"), gd_caveset_data->author); + string_printf_markup(contents, "
%s%s\n", _("Author"), gd_caveset_data->author); if (!g_str_equal(gd_caveset_data->description, "")) - g_string_append_printf (contents, _("Description: %s
\n"), gd_caveset_data->description); + string_printf_markup(contents, "
%s%s\n", _("Description"), gd_caveset_data->description); if (!g_str_equal(gd_caveset_data->www, "")) - g_string_append_printf (contents, _("WWW: %s
\n"), gd_caveset_data->www); + string_printf_markup(contents, "
%s%s\n", _("WWW"), gd_caveset_data->www); if (!g_str_equal(gd_caveset_data->remark->str, "")) - g_string_append_printf (contents, _("Remark: %s
\n"), gd_caveset_data->remark->str); + string_printf_markup(contents, "
%s%s\n", _("Remark"), gd_caveset_data->remark->str); if (!g_str_equal(gd_caveset_data->story->str, "")) - g_string_append_printf (contents, _("Story:
%s
\n"), gd_caveset_data->story->str); + string_printf_markup(contents, "
%s%s\n", _("Story"), gd_caveset_data->story->str); + g_string_append(contents, "
\n"); - g_string_append_printf (contents, "
\n"); + /* cave names, descriptions, hrefs */ + g_string_append(contents, "
\n\n"); - for (i=0; i < gd_caveset_count (); i++) { + for (i=0; ih; y++) @@ -529,66 +578,75 @@ gd_save_html(char *htmlname, GtkWidget *window) has_magic=TRUE; break; } - - pngname=g_strdup_printf ("%s_%03d.png", pngoutbasename, i + 1); - gdk_pixbuf_save (pixbuf, pngname, "png", &error, "compression", "9", NULL); + /* save image */ + pngname=g_strdup_printf("%s_%03d.png", pngoutbasename, i + 1); + gdk_pixbuf_save(pixbuf, pngname, "png", &error, "compression", "9", NULL); if (error) { g_warning("%s", error->message); g_error_free(error); + error=NULL; } g_free (pngname); - g_string_append_printf (contents, "

\n"); - g_string_append_printf (contents, "

%s

\n", cave->name); - g_string_append_printf (contents, "\n", pngbasename, i+1, gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf)); - g_string_append_printf (contents, "
\n"); - g_string_append_printf (contents, "\n"); + /* cave header */ + string_printf_markup(contents, "\n

%s

\n", i+1, cave->name); + g_string_append_printf(contents, "\n", pngbasename, i+1, gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf)); + g_string_append(contents, "
\n"); + g_string_append(contents, "
\n"); if (!g_str_equal(cave->author, "")) - g_string_append_printf (contents, "\n", _("Author"), cave->author); + string_printf_markup(contents, "\n", _("Description"), cave->description); + string_printf_markup(contents, "\n", _("Remark"), join); + g_string_append_printf(contents, "\n", _("Story"), join); + g_string_append_printf(contents, "\n", _("Type"), cave->intermission ? _("Intermission") : _("Normal cave")); - g_string_append_printf (contents, "\n", _("Selectable as start"), cave->selectable ? _("Yes") : _("No")); - g_string_append_printf (contents, "\n", _("Diamonds needed"), cave->diamonds_needed); - g_string_append_printf (contents, "\n", _("Diamond value"), cave->diamond_value); - g_string_append_printf (contents, "\n", _("Extra diamond value"), cave->extra_diamond_value); - g_string_append_printf (contents, "\n", _("Time (s)"), cave->time); + string_printf_markup(contents, "\n", _("Amoeba threshold and time (s)"), cave->amoeba_max_count, cave->amoeba_time); + string_printf_markup(contents, "\n", _("Magic wall milling time (s)"), cave->magic_wall_time); - g_string_append_printf (contents, "
%s%s
%s%s\n", _("Author"), cave->author); if (!g_str_equal(cave->description, "")) - g_string_append_printf (contents, "
%s%s
%s%s\n", _("Description"), cave->description); if (!g_str_equal(cave->remark->str, "")) { /* we must split the story into lines, and join them with html
*/ char **spl; char *join; + char *escaped; - spl=g_strsplit_set(cave->remark->str, "\n", -1); - join=g_strjoinv("
\n", spl); + escaped=g_markup_escape_text(cave->remark->str, -1); + spl=g_strsplit_set(escaped, "\n", -1); + g_free(escaped); + /* maintain line breaks */ + join=g_strjoinv("
\n", spl); g_strfreev(spl); - g_string_append_printf (contents, "
%s%s
%s%s\n", _("Remark"), join); /* string already escaped! */ g_free(join); } if (!g_str_equal(cave->story->str, "")) { /* we must split the story into lines, and join them with html
*/ char **spl; char *join; + char *escaped; - spl=g_strsplit_set(cave->story->str, "\n", -1); - join=g_strjoinv("
\n", spl); + escaped=g_markup_escape_text(cave->story->str, -1); + spl=g_strsplit_set(escaped, "\n", -1); + g_free(escaped); + /* maintain line breaks */ + join=g_strjoinv("
\n", spl); g_strfreev(spl); - g_string_append_printf (contents, "
%s%s
%s%s\n", _("Story"), join); /* string already escaped! */ g_free(join); } - g_string_append_printf (contents, "
%s%s
%s%s
%s%d
%s%d
%s%d
%s%d
%s%s\n", _("Type"), cave->intermission ? _("Intermission") : _("Normal cave")); + string_printf_markup(contents, "
%s%s\n", _("Selectable as start"), cave->selectable ? _("Yes") : _("No")); + string_printf_markup(contents, "
%s%d\n", _("Diamonds needed"), cave->diamonds_needed); + string_printf_markup(contents, "
%s%d\n", _("Diamond value"), cave->diamond_value); + string_printf_markup(contents, "
%s%d\n", _("Extra diamond value"), cave->extra_diamond_value); + string_printf_markup(contents, "
%s%d\n", _("Time (s)"), cave->time); if (has_amoeba) - g_string_append_printf (contents, "
%s%d, %d
%s%d, %d\n", _("Amoeba threshold and time (s)"), cave->amoeba_max_count, cave->amoeba_time); if (has_magic) - g_string_append_printf (contents, "
%s%d
\n"); + string_printf_markup(contents, "%s%d\n", _("Magic wall milling time (s)"), cave->magic_wall_time); + g_string_append(contents, "\n"); - g_string_append_printf (contents, "

\n"); + g_string_append(contents, "\n"); gd_cave_free (cave); g_object_unref (pixbuf); } - g_string_append_printf (contents, "\n"); - g_string_append_printf (contents, "\n"); + g_string_append(contents, "\n"); + g_string_append(contents, "\n"); g_free (pngoutbasename); g_free (pngbasename); diff --git a/src/editorexport.h b/src/editorexport.h index a65d216..318159b 100644 --- a/src/editorexport.h +++ b/src/editorexport.h @@ -23,7 +23,7 @@ void gd_export_cave_to_crli_cavefile(GdCave *cave, int level, const char *filename); void gd_export_cave_list_to_crli_cavepack(GList *caveset, int level, const char *filename); -void gd_save_html (char *htmlname, GtkWidget *window); +void gd_save_html(char *htmlname, GtkWidget *window); #endif diff --git a/src/editorwidgets.c b/src/editorwidgets.c index fd29d0f..0e29acf 100644 --- a/src/editorwidgets.c +++ b/src/editorwidgets.c @@ -470,7 +470,7 @@ element_button_clicked_func(GtkWidget *button, gboolean stay_open) { static const GdElement elements[]= { /* normal */ - O_SPACE, O_DIRT, O_DIAMOND, O_STONE, O_MEGA_STONE, O_DIRT_GLUED, O_DIAMOND_GLUED, O_STONE_GLUED, + O_SPACE, O_DIRT, O_DIAMOND, O_STONE, O_MEGA_STONE, O_FLYING_DIAMOND, O_FLYING_STONE, O_SKELETON, O_BRICK, O_FALLING_WALL, O_BRICK_EATABLE, O_BRICK_NON_SLOPED, O_SPACE, O_STEEL, O_STEEL_EATABLE, O_STEEL_EXPLODABLE, O_INBOX, O_PRE_OUTBOX, O_PRE_INVIS_OUTBOX, O_PLAYER_GLUED, O_VOODOO, O_SPACE, O_SPACE, O_SPACE, @@ -479,21 +479,21 @@ element_button_clicked_func(GtkWidget *button, gboolean stay_open) O_AMOEBA, O_AMOEBA_2, O_SLIME, O_ACID, O_MAGIC_WALL, O_WATER, O_LAVA, O_REPLICATOR, O_KEY_1, O_KEY_2, O_KEY_3, O_DIAMOND_KEY, O_BRICK_SLOPED_DOWN_RIGHT, O_BRICK_SLOPED_DOWN_LEFT, O_BRICK_SLOPED_UP_LEFT, O_BRICK_SLOPED_UP_RIGHT, - O_BOMB, O_CLOCK, O_TELEPORTER, O_POT, O_SKELETON, O_BOX, O_SWEET, O_PNEUMATIC_HAMMER, + O_BOMB, O_CLOCK, O_POT, O_BOX, O_SWEET, O_PNEUMATIC_HAMMER, O_NITRO_PACK, O_TELEPORTER, O_DOOR_1, O_DOOR_2, O_DOOR_3, O_TRAPPED_DIAMOND, O_DIRT_SLOPED_UP_RIGHT, O_DIRT_SLOPED_UP_LEFT, O_DIRT_SLOPED_DOWN_LEFT, O_DIRT_SLOPED_DOWN_RIGHT, - O_GRAVITY_SWITCH, O_CREATURE_SWITCH, O_BITER_SWITCH, O_EXPANDING_WALL_SWITCH, O_REPLICATOR_SWITCH, O_NITRO_PACK, O_CONVEYOR_SWITCH, O_CONVEYOR_DIR_SWITCH, + O_GRAVITY_SWITCH, O_CREATURE_SWITCH, O_BITER_SWITCH, O_EXPANDING_WALL_SWITCH, O_REPLICATOR_SWITCH, O_SPACE, O_CONVEYOR_SWITCH, O_CONVEYOR_DIR_SWITCH, O_H_EXPANDING_WALL, O_V_EXPANDING_WALL, O_EXPANDING_WALL, O_SPACE, O_DIRT_BALL, O_DIRT_LOOSE, O_SPACE, O_NONE, - O_CONVEYOR_LEFT, O_CONVEYOR_RIGHT, O_SPACE, O_SPACE, O_SPACE, O_SPACE, O_SPACE, O_SPACE, + O_CONVEYOR_LEFT, O_CONVEYOR_RIGHT, O_SPACE, O_SPACE, O_SPACE, O_DIRT_GLUED, O_DIAMOND_GLUED, O_STONE_GLUED, O_H_EXPANDING_STEEL_WALL, O_V_EXPANDING_STEEL_WALL, O_EXPANDING_STEEL_WALL, O_BLADDER_SPENDER, O_BLADDER, O_GHOST, O_WAITING_STONE, O_CHASING_STONE, - O_SPACE, O_GUARD_2, O_ALT_GUARD_2, O_SPACE, O_SPACE, O_BUTTER_2, O_ALT_BUTTER_2, O_SPACE, O_SPACE, O_STONEFLY_2, O_SPACE, O_COW_2, O_BITER_1, O_SPACE, O_SPACE, O_DRAGONFLY_2, - O_GUARD_1, O_GUARD_3, O_ALT_GUARD_1, O_ALT_GUARD_3, O_BUTTER_1, O_BUTTER_3, O_ALT_BUTTER_1, O_ALT_BUTTER_3, O_STONEFLY_1, O_STONEFLY_3, O_COW_1, O_COW_3, O_BITER_4, O_BITER_2, O_DRAGONFLY_1, O_DRAGONFLY_3, - O_SPACE, O_GUARD_4, O_ALT_GUARD_4, O_SPACE, O_SPACE, O_BUTTER_4, O_ALT_BUTTER_4, O_SPACE, O_SPACE, O_STONEFLY_4, O_SPACE, O_COW_4, O_BITER_3, O_SPACE, O_SPACE, O_DRAGONFLY_4, + O_SPACE, O_FIREFLY_2, O_ALT_FIREFLY_2, O_SPACE, O_SPACE, O_BUTTER_2, O_ALT_BUTTER_2, O_SPACE, O_SPACE, O_STONEFLY_2, O_SPACE, O_COW_2, O_BITER_1, O_SPACE, O_SPACE, O_DRAGONFLY_2, + O_FIREFLY_1, O_FIREFLY_3, O_ALT_FIREFLY_1, O_ALT_FIREFLY_3, O_BUTTER_1, O_BUTTER_3, O_ALT_BUTTER_1, O_ALT_BUTTER_3, O_STONEFLY_1, O_STONEFLY_3, O_COW_1, O_COW_3, O_BITER_4, O_BITER_2, O_DRAGONFLY_1, O_DRAGONFLY_3, + O_SPACE, O_FIREFLY_4, O_ALT_FIREFLY_4, O_SPACE, O_SPACE, O_BUTTER_4, O_ALT_BUTTER_4, O_SPACE, O_SPACE, O_STONEFLY_4, O_SPACE, O_COW_4, O_BITER_3, O_SPACE, O_SPACE, O_DRAGONFLY_4, /* for effects */ - O_DIAMOND_F, O_STONE_F, O_MEGA_STONE_F, O_FALLING_WALL_F, O_NITRO_PACK_F, O_SPACE, O_PRE_PL_1, O_PRE_PL_2, O_PRE_PL_3, O_PLAYER, O_PLAYER_BOMB, O_PLAYER_STIRRING, O_OUTBOX, O_INVIS_OUTBOX, O_TIME_PENALTY, O_GRAVESTONE, + O_DIAMOND_F, O_STONE_F, O_MEGA_STONE_F, O_FLYING_DIAMOND_F, O_FLYING_STONE_F, O_FALLING_WALL_F, O_NITRO_PACK_F, O_PRE_PL_1, O_PRE_PL_2, O_PRE_PL_3, O_PLAYER, O_PLAYER_BOMB, O_PLAYER_STIRRING, O_OUTBOX, O_INVIS_OUTBOX, O_TIME_PENALTY, O_BLADDER_1, O_BLADDER_2, O_BLADDER_3, O_BLADDER_4, O_BLADDER_5, O_BLADDER_6, O_BLADDER_7, O_BLADDER_8, O_DIRT2, O_COW_ENCLOSED_1, O_COW_ENCLOSED_2, O_COW_ENCLOSED_3, O_COW_ENCLOSED_4, O_COW_ENCLOSED_5, O_COW_ENCLOSED_6, O_COW_ENCLOSED_7, @@ -502,7 +502,7 @@ element_button_clicked_func(GtkWidget *button, gboolean stay_open) O_WATER_9, O_WATER_10, O_WATER_11, O_WATER_12, O_WATER_13, O_WATER_14, O_WATER_15, O_WATER_16, O_BOMB_TICK_1, O_BOMB_TICK_2, O_BOMB_TICK_3, O_BOMB_TICK_4, O_BOMB_TICK_5, O_BOMB_TICK_6, O_BOMB_TICK_7, - O_BOMB_EXPL_1, O_BOMB_EXPL_2, O_BOMB_EXPL_3, O_BOMB_EXPL_4, O_AMOEBA_2_EXPL_1, O_AMOEBA_2_EXPL_2, O_AMOEBA_2_EXPL_3, O_AMOEBA_2_EXPL_4, O_UNKNOWN, + O_BOMB_EXPL_1, O_BOMB_EXPL_2, O_BOMB_EXPL_3, O_BOMB_EXPL_4, O_SPACE, O_SPACE, O_SPACE, O_SPACE, O_UNKNOWN, O_EXPLODE_1, O_EXPLODE_2, O_EXPLODE_3, O_EXPLODE_4, O_EXPLODE_5, O_SPACE, O_PRE_DIA_1, O_PRE_DIA_2, O_PRE_DIA_3, O_PRE_DIA_4, O_PRE_DIA_5, O_NITRO_PACK_EXPLODE, O_NITRO_EXPL_1, O_NITRO_EXPL_2, O_NITRO_EXPL_3, O_NITRO_EXPL_4, diff --git a/src/gameplay.c b/src/gameplay.c index 79b8deb..468d1d1 100644 --- a/src/gameplay.c +++ b/src/gameplay.c @@ -24,6 +24,7 @@ #include "gameplay.h" #include "util.h" #include "sound.h" +#include "config.h" #define GAME_INT_INVALID -100 /* prepare cave, gfx buffer */ @@ -74,21 +75,21 @@ gd_game_free(GdGame *game) game->player_lives=0; if (game->cave) gd_cave_free(game->cave); - + /* if we recorded some replays during this run, we check them. we remove those which are too short */ if (game->replays_recorded) { GList *citer; - + /* check all caves */ for (citer=gd_caveset; citer!=NULL; citer=citer->next) { GdCave *cave=(GdCave *)citer->data; GList *riter; - + /* check replays of all caves */ for (riter=cave->replays; riter!=NULL; ) { GdReplay *replay=(GdReplay *)riter->data; GList *nextrep=riter->next; /* remember next iter, as we may delete the current */ - + /* if we recorded this replay now, and it is too short, we delete it */ /* but do not delete successful ones! */ if (g_list_find(game->replays_recorded, replay) && (replay->movements->len<16) && (!replay->success)) { @@ -98,26 +99,32 @@ gd_game_free(GdGame *game) riter=nextrep; } } - + /* free the list of newly recorded replays, as we checked them */ g_list_free(game->replays_recorded); game->replays_recorded=NULL; } - + g_free(game); } /* add bonus life. if sound enabled, play sound, too. */ static void -add_bonus_life(GdGame *game, gboolean sound) +add_bonus_life(GdGame *game, gboolean inform_user) { - if (sound) - gd_sound_play_bonus_life(); + /* only inform about bonus life when playing a game */ + /* or when testing the cave (so the user can see that a bonus life can be earned in that cave */ + if (game->type==GD_GAMETYPE_NORMAL || game->type==GD_GAMETYPE_TEST) + if (inform_user) { + gd_sound_play_bonus_life(); + game->bonus_life_flash=100; + } + + /* really increment number of lifes? only in a real game, nowhere else. */ if (game->player_lives && game->player_livesmaximum_lives) /* only add a life, if lives is >0. lives==0 is a test run or a snapshot, no bonus life then. */ /* also, obey max number of bonus lives. */ game->player_lives++; - game->bonus_life_flash=100; } /* increment score of player. @@ -171,6 +178,7 @@ load_cave(GdGame *game) game->replay_record->level=game->cave->rendered-1; /* rendered=0 means not rendered here. 1=level 1 */ game->replay_record->seed=game->cave->render_seed; game->replay_record->checksum=gd_cave_adler_checksum(game->cave); /* calculate a checksum for this cave */ + gd_strcpy(game->replay_record->recorded_with, PACKAGE_STRING); gd_strcpy(game->replay_record->player_name, game->player_name); gd_strcpy(game->replay_record->date, gd_get_current_date()); game->original_cave->replays=g_list_append(game->original_cave->replays, game->replay_record); @@ -197,15 +205,15 @@ load_cave(GdGame *game) case GD_GAMETYPE_REPLAY: g_assert(game->replay_from!=NULL); g_assert(game->cave==NULL); - - game->replay_record=NULL; + + game->replay_record=NULL; gd_replay_rewind(game->replay_from); game->replay_no_more_movements=0; game->cave=gd_cave_new_rendered(game->original_cave, game->replay_from->level, game->replay_from->seed); gd_cave_setup_for_game(game->cave); break; - + case GD_GAMETYPE_CONTINUE_REPLAY: g_assert_not_reached(); break; @@ -232,9 +240,9 @@ GdGame * gd_game_new(const char *player_name, const int cave, const int level) { GdGame *game; - + game=g_new0(GdGame, 1); - + gd_strcpy(game->player_name, player_name); game->cave_num=cave; game->level_num=level; @@ -244,9 +252,9 @@ gd_game_new(const char *player_name, const int cave, const int level) game->type=GD_GAMETYPE_NORMAL; game->state_counter=GAME_INT_LOAD_CAVE; - + game->show_story=TRUE; - + return game; } @@ -255,19 +263,19 @@ GdGame * gd_game_new_snapshot(GdCave *snapshot) { GdGame *game; - + game=g_new0(GdGame, 1); - + gd_strcpy(game->player_name, ""); game->player_lives=0; game->player_score=0; g_assert(snapshot->rendered!=0); /* we accept only rendered caves, trivially */ game->cave=gd_cave_new_from_cave(snapshot); - + game->type=GD_GAMETYPE_SNAPSHOT; game->state_counter=GAME_INT_LOAD_CAVE; - + return game; } @@ -276,9 +284,9 @@ GdGame * gd_game_new_test(GdCave *cave, int level) { GdGame *game; - + game=g_new0(GdGame, 1); - + gd_strcpy(game->player_name, ""); game->player_lives=0; game->player_score=0; @@ -288,7 +296,7 @@ gd_game_new_test(GdCave *cave, int level) game->type=GD_GAMETYPE_TEST; game->state_counter=GAME_INT_LOAD_CAVE; - + return game; } @@ -297,7 +305,7 @@ GdGame * gd_game_new_replay(GdCave *cave, GdReplay *replay) { GdGame *game; - + game=g_new0(GdGame, 1); gd_strcpy(game->player_name, ""); game->player_lives=0; @@ -308,7 +316,7 @@ gd_game_new_replay(GdCave *cave, GdReplay *replay) game->type=GD_GAMETYPE_REPLAY; game->state_counter=GAME_INT_LOAD_CAVE; - + return game; } @@ -330,7 +338,7 @@ next_level(GdGame *game) /* if level 5 finished, back to first cave, same difficulty (original game behaviour) */ game->level_num=4; } - + /* show story. */ /* if the user fails to solve the cave, the story will not be shown again */ game->show_story=TRUE; @@ -356,13 +364,13 @@ iterate_cave(GdGame *game, GdDirection player_move, gboolean fire, gboolean suic /* IF PLAYING FROM REPLAY, OVERWRITE KEYPRESS VARIABLES FROM REPLAY */ if (game->type==GD_GAMETYPE_REPLAY) { gboolean result; - + /* if the user does touch the keyboard, we immediately exit replay, and he can continue playing */ result=gd_replay_get_next_movement(game->replay_from, &player_move, &fire, &suicide); /* if could not get move from snapshot, continue from keyboard input. */ if (!result) game->replay_no_more_movements++; - /* if no more available movements, and the user does not do anything, we cover cave and stop game. */ + /* if no more available movements, and the user does not do anything, we cover cave and stop game. */ if (game->replay_no_more_movements>15) game->state_counter=GAME_INT_COVER_START; } @@ -503,7 +511,7 @@ gd_game_main_int(GdGame *game, int millisecs_elapsed, GdDirection player_move, g counter_next=game->state_counter; if (frame) { int j; - + /* original game uncovered one cell per line each frame. * we have different cave sizes, so uncover width*height/40 random cells each frame. (original was width=40). * this way the uncovering is the same speed also for intermissions. */ @@ -544,7 +552,7 @@ gd_game_main_int(GdGame *game, int millisecs_elapsed, GdDirection player_move, g game->milliseconds_game+=millisecs_elapsed; if (game->milliseconds_game>=cavespeed) { GdPlayerState pl; - + game->milliseconds_game-=cavespeed; pl=game->cave->player_state; iterate_cave(game, player_move, fire, suicide, restart); @@ -631,7 +639,7 @@ gd_game_main_int(GdGame *game, int millisecs_elapsed, GdDirection player_move, g for (j=0; j < game->cave->w*game->cave->h*8/40; j++) game->cave->map[g_random_int_range (0, game->cave->h)][g_random_int_range (0, game->cave->w)] |= COVERED; } - + return_state=GD_GAME_NOTHING; } else diff --git a/src/gameplay.h b/src/gameplay.h index 88a3dd1..6a498b3 100644 --- a/src/gameplay.h +++ b/src/gameplay.h @@ -31,17 +31,17 @@ typedef struct _gd_game { GdString player_name; /* Name of player */ int player_score; /* Score of player */ int player_lives; /* Remaining lives of player */ - + GdGameType type; GdCave *cave; /* Copy of the cave. This is the iterated, changed (ruined...) one */ GdCave *original_cave; /* original cave from caveset. used to record highscore */ - + GdReplay *replay_record; GdReplay *replay_from; - + GList *replays_recorded; - + gboolean out_of_window; /* will be set to true, if player is not visible in the window, and we have to wait for scrolling */ @@ -49,13 +49,13 @@ typedef struct _gd_game { int cave_score; /* score collected in this cave */ int level_num; /* actual playing level */ int bonus_life_flash; /* different kind of flashing, for bonus life */ - + int state_counter; /* counter used to control the game flow, rendering of caves */ int **gfx_buffer; /* contains the indexes to the cells; created by *start_level, deleted by *stop_game */ int animcycle; int milliseconds_game; int milliseconds_anim; - + int replay_no_more_movements; gboolean show_story; /* variable to remember that the story for a particular cave was already shown. */ } GdGame; diff --git a/src/gtkgfx.c b/src/gtkgfx.c index a7db3b5..de8ba9a 100644 --- a/src/gtkgfx.c +++ b/src/gtkgfx.c @@ -404,15 +404,15 @@ loadcells_from_pixbuf(GdkPixbuf *cells_pixbuf) create_composite_cell_pixbuf(O_WALLED_KEY_3, O_KEY_3, O_BRICK); create_composite_cell_pixbuf(O_WALLED_DIAMOND, O_DIAMOND, O_BRICK); - add_arrow_to_cell(O_GUARD_1, O_GUARD_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_CLOCKWISE); - add_arrow_to_cell(O_GUARD_2, O_GUARD_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_UPSIDEDOWN); - add_arrow_to_cell(O_GUARD_3, O_GUARD_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE); - add_arrow_to_cell(O_GUARD_4, O_GUARD_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_NONE); + add_arrow_to_cell(O_FIREFLY_1, O_FIREFLY_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_CLOCKWISE); + add_arrow_to_cell(O_FIREFLY_2, O_FIREFLY_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_UPSIDEDOWN); + add_arrow_to_cell(O_FIREFLY_3, O_FIREFLY_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE); + add_arrow_to_cell(O_FIREFLY_4, O_FIREFLY_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_NONE); - add_arrow_to_cell(O_ALT_GUARD_1, O_ALT_GUARD_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_CLOCKWISE); - add_arrow_to_cell(O_ALT_GUARD_2, O_ALT_GUARD_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_UPSIDEDOWN); - add_arrow_to_cell(O_ALT_GUARD_3, O_ALT_GUARD_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE); - add_arrow_to_cell(O_ALT_GUARD_4, O_ALT_GUARD_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_NONE); + add_arrow_to_cell(O_ALT_FIREFLY_1, O_ALT_FIREFLY_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_CLOCKWISE); + add_arrow_to_cell(O_ALT_FIREFLY_2, O_ALT_FIREFLY_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_UPSIDEDOWN); + add_arrow_to_cell(O_ALT_FIREFLY_3, O_ALT_FIREFLY_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE); + add_arrow_to_cell(O_ALT_FIREFLY_4, O_ALT_FIREFLY_1, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_NONE); add_arrow_to_cell(O_H_EXPANDING_WALL, O_H_EXPANDING_WALL, O_LEFTRIGHT_ARROW, GDK_PIXBUF_ROTATE_NONE); add_arrow_to_cell(O_V_EXPANDING_WALL, O_V_EXPANDING_WALL, O_LEFTRIGHT_ARROW, GDK_PIXBUF_ROTATE_CLOCKWISE); @@ -449,8 +449,10 @@ loadcells_from_pixbuf(GdkPixbuf *cells_pixbuf) add_arrow_to_cell(O_DIAMOND_GLUED, O_DIAMOND, O_GLUED, 0); add_arrow_to_cell(O_DIRT_GLUED, O_DIRT, O_GLUED, 0); add_arrow_to_cell(O_STONE_F, O_STONE, O_DOWN_ARROW, 0); + add_arrow_to_cell(O_FLYING_STONE_F, O_FLYING_STONE, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_UPSIDEDOWN); add_arrow_to_cell(O_MEGA_STONE_F, O_MEGA_STONE, O_DOWN_ARROW, 0); add_arrow_to_cell(O_DIAMOND_F, O_DIAMOND, O_DOWN_ARROW, 0); + add_arrow_to_cell(O_FLYING_DIAMOND_F, O_FLYING_DIAMOND, O_DOWN_ARROW, GDK_PIXBUF_ROTATE_UPSIDEDOWN); add_arrow_to_cell(O_FALLING_WALL, O_BRICK, O_EXCLAMATION_MARK, 0); add_arrow_to_cell(O_FALLING_WALL_F, O_BRICK, O_DOWN_ARROW, 0); add_arrow_to_cell(O_TIME_PENALTY, O_GRAVESTONE, O_EXCLAMATION_MARK, 0); @@ -633,6 +635,9 @@ gd_loadcells_default() c64_custom_gfx=NULL; using_png_gfx=FALSE; color0=GD_COLOR_INVALID; /* so that pixbufs will be recreated */ + + /* size of array (in bytes), -1 which is the cell size */ + g_assert(sizeof(c64_gfx)-1 == NUM_OF_CELLS_X*NUM_OF_CELLS_Y*c64_gfx[0]*c64_gfx[0]); } /* wrapper */ @@ -813,13 +818,14 @@ gd_get_element_pixbuf_simple_with_border (GdElement element) also up to the caller to call this function only for rendered caves. */ GdkPixbuf * -gd_drawcave_to_pixbuf(const GdCave * cave, const int width, const int height, const gboolean game_view) +gd_drawcave_to_pixbuf(const GdCave *cave, const int width, const int height, const gboolean game_view, const gboolean border) { int x, y; int cell_size; GdkPixbuf *pixbuf, *scaled; float scale; int x1, y1, x2, y2; + int borderadd=border?4:0, borderpos=border?2:0; g_assert(cave->map!=NULL); if (game_view) { @@ -842,8 +848,9 @@ gd_drawcave_to_pixbuf(const GdCave * cave, const int width, const int height, co cell_size=gdk_pixbuf_get_width (cells_pb[0]); /* add two pixels black border: +4 +4 for width and height */ - pixbuf=gdk_pixbuf_new (GDK_COLORSPACE_RGB, gdk_pixbuf_get_has_alpha (cells_pb[0]), 8, (x2-x1+1)*cell_size+4, (y2-y1+1)*cell_size+4); - gdk_pixbuf_fill (pixbuf, 0x000000ff); /* fill with opaque black */ + pixbuf=gdk_pixbuf_new(GDK_COLORSPACE_RGB, gdk_pixbuf_get_has_alpha (cells_pb[0]), 8, (x2-x1+1)*cell_size+borderadd, (y2-y1+1)*cell_size+borderadd); + if (border) + gdk_pixbuf_fill(pixbuf, 0x000000ff); /* fill with opaque black, so border is black */ /* take visible part into consideration */ for (y=y1; y<=y2; y++) @@ -860,7 +867,11 @@ gd_drawcave_to_pixbuf(const GdCave * cave, const int width, const int height, co case O_EXPANDING_WALL: case O_H_EXPANDING_WALL: case O_V_EXPANDING_WALL: - element=cave->expanding_wall_looks_like; + /* only change the view, if it is not brick wall (the default value). */ + /* so arrows remain - as well as they always remaing for the steel expanding wall, + which has no visual effect. */ + if (cave->expanding_wall_looks_like!=O_BRICK) + element=cave->expanding_wall_looks_like; break; case O_AMOEBA_2: element=cave->amoeba_2_looks_like; @@ -875,7 +886,7 @@ gd_drawcave_to_pixbuf(const GdCave * cave, const int width, const int height, co } else draw=gd_elements[element].image; /* pixbuf like in the editor */ - gdk_pixbuf_copy_area (cells_pb[draw], 0, 0, cell_size, cell_size, pixbuf, (x-x1)*cell_size+2, (y-y1)*cell_size+2); + gdk_pixbuf_copy_area (cells_pb[draw], 0, 0, cell_size, cell_size, pixbuf, (x-x1)*cell_size+borderpos, (y-y1)*cell_size+borderpos); } /* if requested size is 0, return unscaled */ diff --git a/src/gtkgfx.h b/src/gtkgfx.h index 4958240..f11a0df 100644 --- a/src/gtkgfx.h +++ b/src/gtkgfx.h @@ -43,7 +43,7 @@ GdkPixmap *gd_editor_pixmap(int index); GdkPixbuf *gd_get_element_pixbuf_with_border (GdElement element); GdkPixbuf *gd_get_element_pixbuf_simple_with_border (GdElement element); -GdkPixbuf *gd_drawcave_to_pixbuf(const GdCave * cave, const int width, const int height, const gboolean game_view); +GdkPixbuf *gd_drawcave_to_pixbuf(const GdCave *cave, const int width, const int height, const gboolean game_view, const gboolean border); void gd_create_pixbuf_for_builtin_theme(); GdkPixbuf *gd_pixbuf_load_from_data(guchar *data, int length); diff --git a/src/gtkmain.c b/src/gtkmain.c index 79b65f5..3ef4096 100644 --- a/src/gtkmain.c +++ b/src/gtkmain.c @@ -45,7 +45,7 @@ static gboolean fullscreen=FALSE; typedef struct _gd_main_window { GtkWidget *window; - GtkActionGroup *actions_normal, *actions_title, *actions_game, *actions_snapshot; + GtkActionGroup *actions_normal, *actions_title, *actions_title_replay, *actions_game, *actions_snapshot; GtkWidget *scroll_window; GtkWidget *drawing_area, *title_image, *story_label; /* three things that could be drawn in the main window */ GdkPixmap **title_pixmaps; @@ -321,9 +321,9 @@ main_window_set_fullscreen_idle_func(gpointer data) so we put fullscreening call into a low priority idle function, which will be called after all window resizing & the like did take place. */ static void -main_window_set_fullscreen() +main_window_set_fullscreen(gboolean ingame) { - if (main_window.game && fullscreen) { + if (ingame && fullscreen) { gtk_widget_hide(main_window.menubar); gtk_widget_hide(main_window.toolbar); g_idle_add_full(G_PRIORITY_LOW, (GSourceFunc) main_window_set_fullscreen_idle_func, main_window.window, NULL); @@ -440,11 +440,9 @@ main_window_init_title() gtk_widget_hide(main_window.error_hbox); } - /* set or unset fullscreen if necessary */ - main_window_set_fullscreen(); - /* enable menus and buttons of game */ gtk_action_group_set_sensitive(main_window.actions_title, !gd_editor_window); + gtk_action_group_set_sensitive(main_window.actions_title_replay, !gd_editor_window && gd_caveset_has_replays()); gtk_action_group_set_sensitive(main_window.actions_game, FALSE); gtk_action_group_set_sensitive(main_window.actions_snapshot, snapshot!=NULL); /* if editor window exists, no music. */ @@ -455,6 +453,9 @@ main_window_init_title() if (gd_editor_window) gtk_widget_set_sensitive(gd_editor_window, TRUE); gtk_widget_hide(main_window.replay_image_align); + + /* set or unset fullscreen if necessary */ + main_window_set_fullscreen(FALSE); } @@ -511,11 +512,9 @@ main_window_init_cave(GdCave *cave) gd_label_set_markup_printf(GTK_LABEL(main_window.label_topleft), _("%s, level %d"), name_escaped, cave->rendered); g_free(name_escaped); - /* set or unset fullscreen if necessary */ - main_window_set_fullscreen(); - /* enable menus and buttons of game */ gtk_action_group_set_sensitive(main_window.actions_title, FALSE); + gtk_action_group_set_sensitive(main_window.actions_title_replay, FALSE); gtk_action_group_set_sensitive(main_window.actions_game, TRUE); gtk_action_group_set_sensitive(main_window.actions_snapshot, snapshot!=NULL); @@ -523,6 +522,9 @@ main_window_init_cave(GdCave *cave) if (gd_editor_window) gtk_widget_set_sensitive(gd_editor_window, FALSE); gtk_widget_hide(main_window.replay_image_align); /* it will be shown if needed. */ + + /* set or unset fullscreen if necessary */ + main_window_set_fullscreen(TRUE); } static void @@ -562,11 +564,9 @@ main_window_init_story(GdCave *cave) gtk_widget_hide(main_window.error_hbox); } - /* set or unset fullscreen if necessary */ - main_window_set_fullscreen(); - /* enable menus and buttons of game */ gtk_action_group_set_sensitive(main_window.actions_title, FALSE); + gtk_action_group_set_sensitive(main_window.actions_title_replay, FALSE); gtk_action_group_set_sensitive(main_window.actions_game, TRUE); gtk_action_group_set_sensitive(main_window.actions_snapshot, snapshot!=NULL); /* if editor window exists, no music. */ @@ -574,6 +574,9 @@ main_window_init_story(GdCave *cave) if (gd_editor_window) gtk_widget_set_sensitive(gd_editor_window, FALSE); gtk_widget_hide(main_window.replay_image_align); + + /* set or unset fullscreen if necessary */ + main_window_set_fullscreen(TRUE); } @@ -671,7 +674,7 @@ main_int_set_labels() gd_label_set_markup_printf(GTK_LABEL(main_window.label_variables), _("Speed: %dms, Amoeba timer: %ds %d, %ds %d, Magic wall timer: %ds\n" "Expanding wall: %s, Creatures: %ds, %s, Gravity: %s\n" - "Kill player: %s, Sweet eaten: %s, Diamond key: %s"), + "Kill player: %s, Sweet eaten: %s, Diamond key: %s, Diamonds: %d"), cave->speed, gd_cave_time_show(cave, cave->amoeba_time), cave->amoeba_state, @@ -682,10 +685,11 @@ main_int_set_labels() cave->expanding_wall_changed?_("vertical"):_("horizontal"), gd_cave_time_show(cave, cave->creatures_direction_will_change), cave->creatures_backwards?_("backwards"):_("forwards"), - gd_direction_get_visible_name(cave->gravity_disabled?MV_STILL:cave->gravity), + gettext(gd_direction_get_visible_name(cave->gravity_disabled?MV_STILL:cave->gravity)), cave->kill_player?_("yes"):_("no"), cave->sweet_eaten?_("yes"):_("no"), - cave->diamond_key_collected?_("yes"):_("no") + cave->diamond_key_collected?_("yes"):_("no"), + cave->diamonds_collected ); } } @@ -716,7 +720,7 @@ main_int_scroll() int i; int player_x, player_y; const GdCave *cave=main_window.game->cave; - gboolean exact_scroll; + gboolean exact_scroll=FALSE; /* to avoid compiler warning */ /* hystheresis size is this, multiplied by two. * so player can move half the window without scrolling. */ int scroll_start_x=main_window.scroll_window->allocation.width/4; @@ -728,8 +732,8 @@ main_int_scroll() /* if cave not yet rendered, return. (might be the case for 50hz scrolling */ if (main_window.game==NULL || main_window.game->cave==NULL) return; - if (paused) - return; /* no scrolling when pause button is pressed */ + if (paused && main_window.game->cave->player_state!=GD_PL_NOT_YET) + return; /* no scrolling when pause button is pressed, BUT ALLOW SCROLLING when the player is not yet born */ /* max scrolling speed depends on the speed of the cave. */ /* game moves cell_size_game* 1s/cave time pixels in a second. */ @@ -1048,7 +1052,6 @@ main_stop_game_but_maybe_highscore() gd_sound_off(); /* hack for game over dialog */ main_window_init_title(); - main_window_set_fullscreen(); /* if editor is active, go back to its window. */ if (gd_editor_window) gtk_window_present(GTK_WINDOW(gd_editor_window)); @@ -1328,7 +1331,7 @@ static void toggle_fullscreen_cb (GtkWidget * widget, gpointer data) { fullscreen=gtk_toggle_action_get_active(GTK_TOGGLE_ACTION (widget)); - main_window_set_fullscreen(); + main_window_set_fullscreen(main_window.game!=NULL); /* we do not exactly know if in game, but try to guess */ } static void @@ -1401,7 +1404,7 @@ new_game_update_preview(GtkWidget *widget, gpointer data) /* loading cave, draw cave and scale to specified size. seed=0 */ cave=gd_cave_new_from_caveset(gtk_combo_box_get_active(GTK_COMBO_BOX (jump_dialog->combo_cave)), gtk_range_get_value (GTK_RANGE(jump_dialog->spin_level))-1, 0); - cave_image=gd_drawcave_to_pixbuf(cave, 320, 240, TRUE); + cave_image=gd_drawcave_to_pixbuf(cave, 320, 240, TRUE, TRUE); gtk_image_set_from_pixbuf(GTK_IMAGE (jump_dialog->image), cave_image); g_object_unref(cave_image); @@ -1470,6 +1473,7 @@ new_game_cb (const GtkWidget * widget, const gpointer data) gtk_table_attach_defaults(GTK_TABLE(table), gd_label_new_printf(_("Level:")), 0, 1, 2, 3); jump_dialog.spin_level=gtk_hscale_new_with_range(1.0, 5.0, 1.0); + gtk_range_set_increments(GTK_RANGE(jump_dialog.spin_level), 1.0, 1.0); gtk_scale_set_value_pos(GTK_SCALE(jump_dialog.spin_level), GTK_POS_LEFT); gtk_table_attach_defaults(GTK_TABLE(table), jump_dialog.spin_level, 1, 2, 2, 3); @@ -1941,7 +1945,10 @@ create_main_window() {"SaveFile", GTK_STOCK_SAVE, NULL, NULL, NULL, G_CALLBACK(save_caveset_cb)}, {"SaveAsFile", GTK_STOCK_SAVE_AS, NULL, NULL, NULL, G_CALLBACK(save_caveset_as_cb)}, {"HighScore", GD_ICON_AWARD, N_("Hi_ghscores"), NULL, NULL, G_CALLBACK(highscore_cb)}, - {"ShowReplays", GD_ICON_REPLAY, N_("Show _replays"), NULL, NULL, G_CALLBACK(show_replays_cb)}, + }; + + static GtkActionEntry action_entries_title_replay[]={ + {"ShowReplays", GD_ICON_REPLAY, N_("Show _replays"), NULL, N_("List replays which are recorded for caves in this caveset"), G_CALLBACK(show_replays_cb)}, }; static GtkActionEntry action_entries_game[]={ @@ -2012,6 +2019,7 @@ create_main_window() "" "" "" + "" "" ""; @@ -2040,25 +2048,29 @@ create_main_window() /* menu */ main_window.actions_normal=gtk_action_group_new("main_window.actions_normal"); - gtk_action_group_set_translation_domain (main_window.actions_normal, PACKAGE); - gtk_action_group_add_actions (main_window.actions_normal, action_entries_normal, G_N_ELEMENTS (action_entries_normal), &main_window); - gtk_action_group_add_toggle_actions (main_window.actions_normal, action_entries_toggle, G_N_ELEMENTS (action_entries_toggle), NULL); + gtk_action_group_set_translation_domain(main_window.actions_normal, PACKAGE); + gtk_action_group_add_actions(main_window.actions_normal, action_entries_normal, G_N_ELEMENTS(action_entries_normal), &main_window); + gtk_action_group_add_toggle_actions(main_window.actions_normal, action_entries_toggle, G_N_ELEMENTS(action_entries_toggle), NULL); main_window.actions_title=gtk_action_group_new("main_window.actions_title"); - gtk_action_group_set_translation_domain (main_window.actions_title, PACKAGE); - gtk_action_group_add_actions (main_window.actions_title, action_entries_title, G_N_ELEMENTS (action_entries_title), &main_window); + gtk_action_group_set_translation_domain(main_window.actions_title, PACKAGE); + gtk_action_group_add_actions(main_window.actions_title, action_entries_title, G_N_ELEMENTS(action_entries_title), &main_window); + main_window.actions_title_replay=gtk_action_group_new("main_window.actions_title_replay"); + gtk_action_group_set_translation_domain(main_window.actions_title_replay, PACKAGE); + gtk_action_group_add_actions(main_window.actions_title_replay, action_entries_title_replay, G_N_ELEMENTS(action_entries_title_replay), &main_window); /* make this toolbar button always have a title */ g_object_set (gtk_action_group_get_action (main_window.actions_title, "NewGame"), "is_important", TRUE, NULL); main_window.actions_game=gtk_action_group_new("main_window.actions_game"); - gtk_action_group_set_translation_domain (main_window.actions_game, PACKAGE); - gtk_action_group_add_actions (main_window.actions_game, action_entries_game, G_N_ELEMENTS (action_entries_game), &main_window); + gtk_action_group_set_translation_domain(main_window.actions_game, PACKAGE); + gtk_action_group_add_actions(main_window.actions_game, action_entries_game, G_N_ELEMENTS(action_entries_game), &main_window); main_window.actions_snapshot=gtk_action_group_new("main_window.actions_snapshot"); - gtk_action_group_set_translation_domain (main_window.actions_snapshot, PACKAGE); - gtk_action_group_add_actions (main_window.actions_snapshot, action_entries_snapshot, G_N_ELEMENTS (action_entries_snapshot), &main_window); + gtk_action_group_set_translation_domain(main_window.actions_snapshot, PACKAGE); + gtk_action_group_add_actions(main_window.actions_snapshot, action_entries_snapshot, G_N_ELEMENTS(action_entries_snapshot), &main_window); /* build the ui */ ui=gtk_ui_manager_new(); gtk_ui_manager_insert_action_group (ui, main_window.actions_normal, 0); gtk_ui_manager_insert_action_group (ui, main_window.actions_title, 0); + gtk_ui_manager_insert_action_group (ui, main_window.actions_title_replay, 0); gtk_ui_manager_insert_action_group (ui, main_window.actions_game, 0); gtk_ui_manager_insert_action_group (ui, main_window.actions_snapshot, 0); gtk_window_add_accel_group (GTK_WINDOW(main_window.window), gtk_ui_manager_get_accel_group (ui)); @@ -2076,7 +2088,7 @@ create_main_window() gtk_menu_item_set_submenu (GTK_MENU_ITEM (gtk_ui_manager_get_widget (ui, "/MenuBar/FileMenu/LoadInternal")), menu); names=gd_caveset_get_internal_game_names (); while (names[i]) { - GtkWidget *menuitem=gtk_menu_item_new_with_label (names[i]); + GtkWidget *menuitem=gtk_menu_item_new_with_label(names[i]); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_widget_show(menuitem); @@ -2167,8 +2179,10 @@ main(int argc, char *argv[]) GOptionEntry entries[]={ {"editor", 'e', 0, G_OPTION_ARG_NONE, &editor, N_("Start editor")}, {"gallery", 'g', 0, G_OPTION_ARG_FILENAME, &gallery_filename, N_("Save caveset in a HTML gallery")}, + {"stylesheet", 's', 0, G_OPTION_ARG_STRING /* not filename! */, &gd_html_stylesheet_filename, N_("Link stylesheet from file to a HTML gallery, eg. \"../style.css\"")}, + {"favicon", 's', 0, G_OPTION_ARG_STRING /* not filename! */, &gd_html_favicon_filename, N_("Link shortcut icon to a HTML gallery, eg. \"../favicon.ico\"")}, {"png", 'p', 0, G_OPTION_ARG_FILENAME, &png_filename, N_("Save cave C, level L in a PNG image. If no cave selected, uses a random one")}, - {"png_size", 's', 0, G_OPTION_ARG_STRING, &png_size, N_("Set PNG image size. Default is 128x96, set to 0x0 for unscaled")}, + {"png_size", 'P', 0, G_OPTION_ARG_STRING, &png_size, N_("Set PNG image size. Default is 128x96, set to 0x0 for unscaled")}, {"save", 'S', 0, G_OPTION_ARG_FILENAME, &save_cave_name, N_("Save caveset in a BDCFF file")}, {"quit", 'q', 0, G_OPTION_ARG_NONE, &quit, N_("Batch mode: quit after specified tasks")}, {NULL} @@ -2280,7 +2294,7 @@ main(int argc, char *argv[]) /* rendering cave for png: seed=0 */ renderedcave=gd_cave_new_from_caveset (gd_param_cave-1, gd_param_level-1, 0); - pixbuf=gd_drawcave_to_pixbuf(renderedcave, size_x, size_y, TRUE); + pixbuf=gd_drawcave_to_pixbuf(renderedcave, size_x, size_y, TRUE, FALSE); if (!gdk_pixbuf_save (pixbuf, png_filename, "png", &error, "compression", "9", NULL)) g_critical ("Error saving PNG image %s: %s", png_filename, error->message); g_object_unref(pixbuf); @@ -2306,7 +2320,10 @@ main(int argc, char *argv[]) create_main_window(); gd_main_window_set_title(); - gd_sound_init(); + gd_sound_init(0); + + gd_sound_set_music_volume(gd_sound_music_volume_percent); + gd_sound_set_chunk_volumes(gd_sound_chunks_volume_percent); main_window_init_title(); diff --git a/src/gtkui.c b/src/gtkui.c index 8580a82..5f55d51 100644 --- a/src/gtkui.c +++ b/src/gtkui.c @@ -28,6 +28,7 @@ #include "config.h" #include "gtkmain.h" #include "gfxutil.h" +#include "sound.h" /* pixbufs of icons and the like */ #include "icons.h" @@ -640,6 +641,8 @@ gd_preferences (GtkWidget *parent) {TypeBoolean, N_("No invisible outbox"), N_("Show invisible outboxes as visible (blinking) ones."), &gd_no_invisible_outbox, FALSE}, {TypeLabel, N_("Sound options (require restart)"), NULL, NULL}, {TypeBoolean, N_("Sound"), N_("Play sounds. Enabling this setting requires a restart!"), &gd_sdl_sound, FALSE}, + {TypePercent, N_("Music volume"), N_("Volume of title screen music."), &gd_sound_music_volume_percent, FALSE}, + {TypePercent, N_("Cave volume"), N_("Volume of sounds played in a cave."), &gd_sound_chunks_volume_percent, FALSE}, {TypeBoolean, N_("Classic sounds only"), N_("Play only classic sounds taken from the original game."), &gd_classic_sound, FALSE}, {TypeBoolean, N_("16-bit mixing"), N_("Use 16-bit mixing of sounds. Try changing this setting if sound is clicky. Changing this setting requires a restart!"), &gd_sdl_16bit_mixing, FALSE}, {TypeBoolean, N_("44kHz mixing"), N_("Use 44kHz mixing of sounds. Try changing this setting if sound is clicky. Changing this setting requires a restart!"), &gd_sdl_44khz_mixing, FALSE}, @@ -648,10 +651,6 @@ gd_preferences (GtkWidget *parent) {TypeNewColumn, }, {TypeLabel, N_("Display options"), NULL, NULL}, {TypeBoolean, N_("Random colors"), N_("Use randomly selected colors for caves."), &gd_random_colors, FALSE}, -/* - XXX currently dirt mod is not shown to the user. - {N_("Allow dirt mod"), N_("Enable caves to use alternative dirt graphics. This applies only to imported caves, not BDCFF (*.bd) files."), &allow_dirt_mod, FALSE}, -*/ {TypeBoolean, N_("PAL emulation for game"), N_("Use PAL emulated graphics, ie. lines are striped."), &gd_pal_emulation_game, TRUE}, {TypeBoolean, N_("PAL emulation for editor"), N_("Use PAL emulated graphics, ie. lines are striped."), &gd_pal_emulation_editor, TRUE}, // {TypeBoolean, N_("Even lines vertical scroll"), N_("Even lines vertical scroll. Scrolls to every second scanline vertically. If you use PAL emulation and PAL scanline shade, scrolling might look better with this turned on."), &gd_even_line_pal_emu_vertical_scroll, FALSE}, @@ -861,6 +860,9 @@ gd_preferences (GtkWidget *parent) /* graphics settings might have changed (ie. pal emu or zoom), so recreate main winow. */ gd_main_window_set_title_animation(); + + gd_sound_set_music_volume(gd_sound_music_volume_percent); + gd_sound_set_chunk_volumes(gd_sound_chunks_volume_percent); } @@ -1053,6 +1055,7 @@ gd_show_highscore(GtkWidget *parent, GdCave *cave, gboolean show_clear_button, G #undef GD_HIGHLIGHT_CAVE #undef GD_HIGHLIGHT_RANK +/* try to guess which window is active */ static GtkWidget * guess_active_toplevel() { @@ -1062,7 +1065,6 @@ guess_active_toplevel() /* before doing anything, process updates, as windows may have been opened or closed right at the previous moment */ gdk_window_process_all_updates(); - /* try to guess which window is active */ /* if we find a modal window, it is active. */ toplevels=gtk_window_list_toplevels(); for (iter=toplevels; iter!=NULL; iter=iter->next) @@ -1091,14 +1093,14 @@ show_message(GtkMessageType type, const char *primary, const char *secondary) { GtkWidget *dialog; - dialog=gtk_message_dialog_new ((GtkWindow *) guess_active_toplevel(), + dialog=gtk_message_dialog_new((GtkWindow *) guess_active_toplevel(), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_OK, "%s", primary); gtk_window_set_title(GTK_WINDOW(dialog), "GDash"); /* secondary message exists an is not empty string: */ if (secondary && secondary[0]!=0) - gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog), "%s", secondary); + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG (dialog), "%s", secondary); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } @@ -1135,7 +1137,7 @@ gd_discard_changes (GtkWidget *parent) if (!gd_caveset_edited) return TRUE; - dialog=gtk_message_dialog_new((GtkWindow *) parent, 0, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("Cave set \"%s\" is edited. Discard changes?"), gd_caveset_data->name); + dialog=gtk_message_dialog_new((GtkWindow *) parent, 0, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("Caveset \"%s\" is edited or new replays are added. Discard changes?"), gd_caveset_data->name); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG (dialog), _("If you discard the caveset, all changes and new replays will be lost.")); gtk_dialog_add_button(GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CANCEL); diff --git a/src/help.c b/src/help.c index 87d513d..d905c87 100644 --- a/src/help.c +++ b/src/help.c @@ -42,19 +42,24 @@ static const struct helpdata gamehelp[] = { N_("The game comes with many built-in and pre-installed cave sets, and you can also make " "up your own levels. Just use the options in the File menu. You can load caves stored in the BDCFF format, and import " "from other older file formats, like the No One's Final Boulder, the Construction Kit file format, " - "No One's Delight Boulder, an Atari game format, and many more.")}, + "No One's Delight Boulder, an Atari game format and many more.")}, {NULL, NULL, O_NONE, NULL}, {GTK_STOCK_MEDIA_PLAY, N_("Playing the game"), O_NONE, -N_("To play the game, press the New Game button. You can select which level you start playing at. During the game, you can control your player with the cursor keys. The Ctrl key has a special meaning: you can snap items, ie. pick up things without moving. If you get stuck, press Escape to restart the level. If there are too many players in the cave and you cannot move, pressing F2 causes the active one to explode. With F11, you can switch to full screen mode. To view the alternative status bar which show keys and skeletons collected, hold down the left shift button.\nThese are the game elements:")}, + N_("The main idea of this game is very simple. You have to guide your player through the mazes of dirt and stones, to collect " + "diamonds within a given time limit. Make sure not to let stones fall on your head or enemies touch you! After you collect " + "the correct amount of diamonds, the screen will flash quickly and a secret door is revealed for you to advance to the next level. " + "As the game progresses, levels usually become more intricate and difficult.")}, {NULL, NULL, O_PLAYER, N_("This is the player. He can move through space and dirt. He can pick up diamonds and push stones, but he should avoid flies.")}, {NULL, NULL, O_SPACE, N_("Stones and diamonds fall down in space, creatures can freely move here.")}, {NULL, NULL, O_DIRT, N_("You can move through dirt leaving empty space behind. Amoeba eats it.")}, {NULL, NULL, O_DIRT2, N_("This is also dirt, but has a different color. In any other sense, it is identical to the above one.")}, - {NULL, NULL, O_DIRT_BALL, N_("A rolling ball of dirt. You cannot push it, but you can dig it away. Sometimes it helps you to solve puzzles.")}, + {NULL, N_("Dirt ball and loose dirt"), O_DIRT_BALL, N_("A rolling ball and a falling piece of dirt. You cannot push them, but you can dig them away. Sometimes they help you to solve puzzles.")}, {NULL, NULL, O_DIAMOND, N_("The main object of the game is to collect required number of diamonds.")}, {NULL, NULL, O_STONE, N_("Stones can be pushed by the player, and he can drop them on flies to make an explosion.")}, + {NULL, NULL, O_FLYING_DIAMOND, N_("Exactly like a diamond, but instead of falling down, it flies upwards, as high as it can.")}, + {NULL, NULL, O_FLYING_STONE, N_("The flying variant of a stone. Note that this one can also crush enemies as well as the player!")}, {NULL, NULL, O_MEGA_STONE, N_("Like ordinary stones, but these are so heavy, that you cannot push them.")}, {NULL, NULL, O_BRICK, N_("The wall can't be moved but an explosion destroys it. You can't pass through the wall - instead try to blow it up.")}, {NULL, NULL, O_STEEL, N_("This is rock stable wall. It's impossible to move or blow it up.")}, @@ -63,8 +68,8 @@ N_("To play the game, press the New Game button. You can select which level you "Closed out box looks like steel wall, but beware of explosions near the out box: " "you could accidentally destroy an exit. This prevents you from successfully finishing the cave.")}, {NULL, NULL, O_PRE_INVIS_OUTBOX, N_("This is also an exit, but it remains non-flashing and thus is difficult to find.")}, - {NULL, N_("Guard"), O_GUARD_1, N_("Guards move through the space. They can fly in the entire cave. Guards blow up when hit by falling stone or diamond. Amoeba is also deadly for them. They explode into space, producing 3x3 square of empty space. Guards are left spinning - they prefer turning left, usually counter clockwise.")}, - {NULL, N_("Alternative guard"), O_ALT_GUARD_1, N_("Just like a normal guard, but it is right spinning.")}, + {NULL, N_("Firefly"), O_FIREFLY_1, N_("Fireflies move through the space. They can fly in the entire cave. Fireflies blow up when hit by falling stone or diamond. Amoeba is also deadly for them. They explode into space, producing 3x3 square of empty space. Fireflies are left spinning - they prefer turning left, usually counter clockwise.")}, + {NULL, N_("Alternative firefly"), O_ALT_FIREFLY_1, N_("Just like a normal firefly, but it is right spinning.")}, {NULL, N_("Dragonfly"), O_DRAGONFLY_1, N_("These creatures also guard the diamonds you would like to collect. But they move very differently. They like to run straight ahead, and only change direction if they bump into something. Like normal guards, you must not touch them. But you can easily crush them with stones.")}, {NULL, N_("Butterfly"), O_BUTTER_1, N_("Butterflies are similar to guards. In contrast to guards they explode into diamonds, producing 3x3 square of diamonds. Butterflies are right spinning, they usually fly clockwise.")}, {NULL, N_("Alternative butterfly"), O_ALT_BUTTER_1, N_("Just like a normal butterfly, but it is left spinning.")}, @@ -78,7 +83,7 @@ N_("To play the game, press the New Game button. You can select which level you {NULL, NULL, O_SLIME, N_("Slime is permeable. It means that stones and diamonds laying on the slime can randomly pass on.")}, {NULL, NULL, O_ACID, N_("Acid eats dirt. Sometimes it spreads in all four directions, leaving a small explosion behind. If there is no dirt to swallow, it just disappears.")}, {NULL, NULL, O_WATER, N_("Water, which floods all empty space slowly.")}, - {NULL, NULL, O_MAGIC_WALL, N_("This very special wall converts stones into diamonds and vice versa. Note that a magic wall can only be activated for some limited time.")}, + {NULL, NULL, O_MAGIC_WALL, N_("This very special wall converts stones into diamonds and vice versa. Note that a magic wall can only be activated for some limited time. It can also turn mega stones into nitro packs, nitro packs into mega stones. Even flying diamonds and stones pass them to be converted to each other - but these two do that from bottom to up, of course.")}, {NULL, NULL, O_EXPANDING_WALL, N_("Expanding wall expands in horizontal or vertical (or both) direction, if there is an empty space to fill up. You should be very careful not to be catched by the expanding wall.")}, {NULL, NULL, O_EXPANDING_STEEL_WALL, N_("Expanding wall, but made of steel. You cannot even blow it up!")}, {NULL, NULL, O_FALLING_WALL, N_("Whenever there is a falling wall above the player merely separated by empty space, it starts falling. It does so at any distance. If it hits the player, it explodes. If hit on anything else, it just stops.")}, @@ -92,8 +97,8 @@ N_("To play the game, press the New Game button. You can select which level you {NULL, NULL, O_BOX, N_("Sometimes you have to block a passage, for example to protect a voodoo. This is when a box like this comes handy. You can push it in every direction using the Ctrl key.")}, {NULL, NULL, O_PNEUMATIC_HAMMER, N_("Sometimes diamonds or keys are buried in brick walls. You can use a pneumatic hammer to break these walls, or simple brick walls which contain nothing. Stand on something, and press fire and left or right to use the hammer on a wall which is near the player, next to the element you stand on.")}, {NULL, NULL, O_REPLICATOR, N_("This machine replicates the element which is on the top of it. At regular intervals, a new element drops out underneath; if there is space to do this. The rate of materializing the new elements can be different in every cave.")}, - {NULL, N_("Conveyor belt"), O_CONVEYOR_LEFT, N_("The indestructible and immobile conveyor belt carries free-moving elements. Its direction can be changed or its power can be turned completely off with a switch.")}, - {NULL, NULL, O_LAVA, N_("Heavy elemenets sink into the lava, and disappear without any trace left. Creatures can also step into the lava.")}, + {NULL, N_("Conveyor belt"), O_CONVEYOR_LEFT, N_("The indestructible and immobile conveyor belt carries free-moving elements. Its direction can be changed or its power can be turned completely off with a switch. It only carries the elements which are resting on it (ie. it will not move a piece of dirt or a firefly.) Flying stones and diamonds under it will also be carried.")}, + {NULL, NULL, O_LAVA, N_("Heavy elemenets sink into the lava and disappear without any trace left. Creatures can also step into the lava.")}, {NULL, NULL, O_CLOCK, N_("Collect this to get extra time.")}, {NULL, NULL, O_BLADDER, N_("Bladders can be pushed around easily. They slowly climb up; if they touch a voodoo, they convert into clocks. They can also pass slime.")}, {NULL, NULL, O_BLADDER_SPENDER, N_("If there is space above it, the bladder spender turns to a bladder.")}, @@ -110,18 +115,22 @@ N_("To play the game, press the New Game button. You can select which level you {NULL, NULL, O_CONVEYOR_SWITCH, N_("The conveyor belts also have a switch which can completely stop their action.")}, {NULL, N_("Strange elements"), O_DIRT_GLUED, N_("Some caves contain strange elements, for example, diamonds which cannot be collected, a player that cannot move... Don't be surprised!")}, - {GTK_STOCK_DIALOG_INFO, N_("Playing hints"), O_NONE, N_("Obviously, holding fire and pushing a direction causes you to 'touch' an adjacent square without moving into it, collecting diamonds or removing dirt, but a move which is very useful is to push a boulder in this way. It's a good way of making sure you don't 'overpush' the boulder and later on you will have to use this.")}, - {NULL, NULL, O_NONE, N_("Boulders do not roll off of the side of magic walls. In some caves it is shown where these walls are by placing a boulder to show you that it's magic.")}, + {GTK_STOCK_DIALOG_INFO, N_("Playing hints"), O_NONE, N_("Obviously, holding fire and pushing a direction causes you to 'touch' an adjacent square without moving into it, collecting diamonds or removing dirt, but a move which is very useful is to push a stone in this way. It's a good way of making sure you don't 'overpush' the stone and later on you will have to use this.")}, + {NULL, NULL, O_NONE, N_("Stones do not roll off of the side of magic walls. In some caves it is shown where these walls are by placing a stone to show you that it's magic.")}, {NULL, NULL, O_NONE, N_("Expanding walls are always horizontally expanding on both sides. In some caves it is shown which parts of the wall are expanding by forcing you to pass it on the other side. You will see the passage close in behind you and this eliminates some guessword in the next puzzle.")}, {NULL, NULL, O_NONE, N_("The screen starts scrolling at the edge of the screen. This means it's a bad idea to run in places where enemies are likely to be, since you won't have time to react. Either move very carefully in these situations, keep track of where the enemies roughly are in the cave, or take a different route away from danger - for example in empty space (where enemies are less likely to travel) or through undug mud. Never rush unless you're sure you can or you need to.")}, {NULL, NULL, O_NONE, N_("Enemies like to have dirt to move around on. Clearing lots of dirt can create safe patches for you. This technique can be used on levels where you let several fireflies loose and it's hard to kill them. Beware though - certain formations of enemies can hover in 'mid air' and even move slowly through empty space (when two enemies are circling each other in a certain way).")}, - {NULL, NULL, O_NONE, N_("Magic walls often have a fairly strict time limit, some more than others. Collect up as many boulders as you can just above the magic wall, leaving one strip of mud, and then finally remove this strip and watch the goods get delivered. Just make sure you've cleared an appropriate amount of space under the wall ;)")}, - {NULL, NULL, O_NONE, N_("Voodoo dolls need to be protected from enemies at all costs, but dropping a boulder on one is usually harmless!")}, + {NULL, NULL, O_NONE, N_("Magic walls often have a fairly strict time limit, some more than others. Collect up as many stones as you can just above the magic wall, leaving one strip of mud, and then finally remove this strip and watch the goods get delivered. Just make sure you've cleared an appropriate amount of space under the wall ;)")}, + {NULL, NULL, O_NONE, N_("Voodoo dolls need to be protected from enemies at all costs, but dropping a stone on one is usually harmless!")}, {NULL, NULL, O_NONE, N_("You can't collect diamonds which are falling, but you can collect them when they momentarily bounce off of something or down the side of a pile.")}, {NULL, NULL, O_NONE, N_("Some levels have hidden exits. These always look like titanium wall, but don't flash. You can always tell where they are by visual clues and deduction.")}, {NULL, NULL, O_NONE, N_("Don't blindly take all diamonds. Some of them are red herrings, some may be unobtainable or part of a trap, and believe it or not, sometimes a diamond is more useful to you on the screen than it is collected, due to some sadistic puzzles :)")}, {NULL, NULL, O_NONE, NULL}, + {GD_ICON_KEYBOARD, N_("Keys to control the player"), O_NONE, +N_("To play the game, press the New Game button. You can select which level you start playing at. During the game, you can control your player with the cursor keys. The Ctrl key has a special meaning: you can snap items, ie. pick up things without moving. If you get stuck, press Escape to restart the level. If there are too many players in the cave and you cannot move, pressing F2 causes the active one to explode. With F11, you can switch to full screen mode. To view the alternative status bar which show keys and skeletons collected, hold down the left shift button.\nThese are the game elements:")}, + {NULL, NULL, O_NONE, NULL}, + {GD_ICON_SNAPSHOT, N_("Snapshots"), O_NONE, N_("You can experiment with levels by saving and reloading snapshots. However, if you are playing a reloaded cave, you will not get score or extra lives.")}, {GD_ICON_REPLAY, N_("Replays"), O_NONE, N_("Every time you play a game, GDash records all your movements. These recordings can be viewed later, and can be saved with the caveset. To check them out, click on Show replays in the Play menu.")}, {NULL, NULL, O_NONE, N_("If you were very lucky in a cave, or something interesting happened, you do not have to be worry, as all played caves are recorded. In the Replays window, you can select some of them to be saved with the caveset. You can also add comments to selected movies. The replays are stored no matter if the cave was solved or not, so you can even send the recording of your unsuccessful missions for others to discuss.")}, diff --git a/src/sdlgfx.c b/src/sdlgfx.c index ed7b5c7..0ed7218 100644 --- a/src/sdlgfx.c +++ b/src/sdlgfx.c @@ -69,7 +69,7 @@ static int play_area_h=180; int gd_statusbar_height=20; int gd_statusbar_y1=1; int gd_statusbar_y2=10; -int gd_statusbar_mid=(20-8)/2; +int gd_statusbar_mid=(20-8)/2; /* (height-fontheight)/2 */ static int scroll_x, scroll_y; @@ -755,7 +755,7 @@ copy_alpha(SDL_Surface *src, SDL_Surface *dst) up to the caller to free. */ SDL_Surface ** -gd_get_title_animation() +gd_get_title_animation(gboolean one_frame_only) { SDL_Surface *screen; SDL_Surface *tile; @@ -763,6 +763,7 @@ gd_get_title_animation() SDL_Surface *frame; SDL_Surface **animation; int x, y, i; + int framenum; screen=NULL; tile=NULL; @@ -807,7 +808,11 @@ gd_get_title_animation() /* do not allow more than 40 frames of animation */ g_assert(tile->h<40); - animation=g_new0(SDL_Surface *, tile->h+1); + if (one_frame_only) + framenum=1; + else + framenum=tile->h; + animation=g_new0(SDL_Surface *, framenum+1); /* create a big image, which is one tile larger than the title image size */ bigone=SDL_CreateRGBSurface(0, screen->w, screen->h+tile->h, 32, 0, 0, 0, 0); @@ -822,7 +827,7 @@ gd_get_title_animation() } frame=SDL_CreateRGBSurface(0, screen->w, screen->h, 32, rmask, gmask, bmask, amask); /* must be same *mask so copy_alpha works correctly */ - for (i=0; ih; i++) { + for (i=0; icave->y1, yd=0; y<=game->cave->y2; y++, yd++) { for (x=game->cave->x1, xd=0; x<=game->cave->x2; x++, xd++) { @@ -1770,6 +1777,240 @@ gd_drawcave(SDL_Surface *dest, GdGame *game) return 0; } +void +gd_play_game_select_status_bar_colors(GdStatusBarColors *cols, const GdCave *cave) +{ + GdColor (*color_indexer) (int i); + int c64_col; + + /* first, count the number of c64 colors the cave uses. */ + /* if it uses mostly c64 colors, we will use c64 colors for the status bar. */ + /* otherwise we will use gdash colors. */ + /* note that the atari original status bar color setting only uses the game colors. */ + c64_col=0; + if (gd_color_is_c64(cave->color0)) c64_col++; + if (gd_color_is_c64(cave->color1)) c64_col++; + if (gd_color_is_c64(cave->color2)) c64_col++; + if (gd_color_is_c64(cave->color3)) c64_col++; + if (gd_color_is_c64(cave->color4)) c64_col++; + if (gd_color_is_c64(cave->color5)) c64_col++; + if (c64_col>4) + color_indexer=gd_c64_color; + else + color_indexer=gd_gdash_color; + + switch (gd_status_bar_type) { + case GD_STATUS_BAR_ORIGINAL: + cols->background=color_indexer(GD_COLOR_INDEX_BLACK); + cols->diamond_needed=cols->diamond_collected=color_indexer(GD_COLOR_INDEX_YELLOW); + cols->diamond_value=cols->score=cols->default_color=color_indexer(GD_COLOR_INDEX_WHITE); + break; + case GD_STATUS_BAR_1STB: + cols->background=color_indexer(GD_COLOR_INDEX_BLACK); + cols->diamond_needed=cols->diamond_collected=cols->score=color_indexer(GD_COLOR_INDEX_YELLOW); + cols->diamond_value=cols->default_color=color_indexer(GD_COLOR_INDEX_WHITE); + break; + case GD_STATUS_BAR_CRLI: + cols->background=color_indexer(GD_COLOR_INDEX_BLACK); + cols->diamond_needed=color_indexer(GD_COLOR_INDEX_RED); + cols->diamond_collected=color_indexer(GD_COLOR_INDEX_GREEN); + cols->diamond_value=color_indexer(GD_COLOR_INDEX_CYAN); + cols->score=color_indexer(GD_COLOR_INDEX_YELLOW); + cols->default_color=color_indexer(GD_COLOR_INDEX_WHITE); + break; + case GD_STATUS_BAR_FINAL: + cols->background=color_indexer(GD_COLOR_INDEX_BLACK); + cols->diamond_needed=color_indexer(GD_COLOR_INDEX_RED); + cols->diamond_collected=color_indexer(GD_COLOR_INDEX_GREEN); + cols->diamond_value=cols->score=cols->default_color=color_indexer(GD_COLOR_INDEX_WHITE); + break; + case GD_STATUS_BAR_ATARI_ORIGINAL: + cols->background=cave->color0; + cols->diamond_needed=cols->diamond_collected=cave->color2; + cols->diamond_value=cols->score=cols->default_color=cave->color3; + break; + default: + g_assert_not_reached(); + } +} + + +void +gd_clear_header(GdColor c) +{ + SDL_Rect r; + + r.x=0; + r.y=0; + r.w=gd_screen->w; + r.h=gd_statusbar_height; + SDL_FillRect(gd_screen, &r, SDL_MapRGB(gd_screen->format, gd_color_get_r(c), gd_color_get_g(c), gd_color_get_b(c))); +} + +void +gd_showheader_uncover(const GdGame *game, const GdStatusBarColors *cols, gboolean show_replay_sign) +{ + int cavename_y; + int len; + char *str; + gboolean first_line; + + gd_clear_header(cols->background); + first_line=FALSE; /* will be set to TRUE, if we draw in the next few code lines. so the y coordinate of the second status line can be decided. */ + + /* if playing a replay, tell the user! */ + if (game->type==GD_GAMETYPE_REPLAY && show_replay_sign) { + gd_blittext(gd_screen, -1, gd_statusbar_y1, GD_GDASH_YELLOW, "PLAYING REPLAY"); + first_line=TRUE; + } + else { + /* also inform about intermission, but not if playing a replay. also the replay saver should not show it! f */ + if (game->cave->intermission && !game->type==GD_GAMETYPE_REPLAY) { + gd_blittext(gd_screen, -1, gd_statusbar_y1, cols->default_color, "ONE LIFE EXTRA"); + first_line=TRUE; + } + else + /* if not an intermission, we may show the name of the game (caveset) */ + if (gd_show_name_of_game) { /* if showing the name of the cave... */ + len=g_utf8_strlen(gd_caveset_data->name, -1); + if (gd_screen->w/gd_font_width()/2>=len) /* if have place for double-width font */ + gd_blittext(gd_screen, -1, gd_statusbar_y1, cols->default_color, gd_caveset_data->name); + else + gd_blittext_n(gd_screen, -1, gd_statusbar_y1, cols->default_color, gd_caveset_data->name); + first_line=TRUE; + } + } + + cavename_y=first_line?gd_statusbar_y2:gd_statusbar_mid; + /* "xy players, cave ab/3" */ + if (game->type==GD_GAMETYPE_NORMAL) + str=g_strdup_printf("%d%c, %s/%d", game->player_lives, GD_PLAYER_CHAR, game->cave->name, game->cave->rendered); + else + /* if not a normal game, do not show number of remaining lives */ + str=g_strdup_printf("%s/%d", game->cave->name, game->cave->rendered); + len=g_utf8_strlen(str, -1); + if (gd_screen->w/gd_font_width()/2>=len) /* if have place for double-width font */ + gd_blittext(gd_screen, -1, cavename_y, cols->default_color, str); + else + gd_blittext_n(gd_screen, -1, cavename_y, cols->default_color, str); + g_free(str); +} + +void +gd_showheader_game(const GdGame *game, int timeout_since, const GdStatusBarColors *cols, gboolean show_replay_sign) +{ + int x, y; + gboolean first_line; + first_line=FALSE; /* will be set to TRUE, if we draw in the next few code lines. so the y coordinate of the second status line can be decided. */ + + gd_clear_header(cols->background); + + /* if playing a replay, tell the user! */ + if (game->type==GD_GAMETYPE_REPLAY && show_replay_sign) { + gd_blittext(gd_screen, -1, gd_statusbar_y1, GD_GDASH_YELLOW, "PLAYING REPLAY"); + first_line=TRUE; + } + + /* y position of status bar */ + y=first_line?gd_statusbar_y2:gd_statusbar_mid; + + if (game->cave->player_state==GD_PL_TIMEOUT && timeout_since/50%4==0) { + gd_clear_header(cols->background); + gd_blittext(gd_screen, -1, y, GD_GDASH_WHITE, "OUT OF TIME"); + return; + } + if (game->cave->player_state==GD_PL_NOT_YET) { + /* ... if the player is not yet born, we should rather show the uncover bar. */ + gd_showheader_uncover(game, cols, show_replay_sign); + return; + } + + if (gd_keystate[SDLK_LSHIFT] || gd_keystate[SDLK_RSHIFT]) { + /* ALTERNATIVE STATUS BAR BY PRESSING SHIFT */ + x=10*gd_scale; + + x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%c%02d", GD_PLAYER_CHAR, MIN(game->player_lives, 99)); /* max 99 in %2d */ + x+=14*gd_scale; + /* color numbers are not the same as key numbers! c3->k1, c2->k2, c1->k3 */ + /* this is how it was implemented in crdr7. */ + x=gd_blittext_printf(gd_screen, x, y, game->cave->color3, "%c%1d", GD_KEY_CHAR, MIN(game->cave->key1, 9)); /* max 9 in %1d */ + x+=10*gd_scale; + x=gd_blittext_printf(gd_screen, x, y, game->cave->color2, "%c%1d", GD_KEY_CHAR, MIN(game->cave->key2, 9)); + x+=10*gd_scale; + x=gd_blittext_printf(gd_screen, x, y, game->cave->color1, "%c%1d", GD_KEY_CHAR, MIN(game->cave->key3, 9)); + x+=12*gd_scale; + if (game->cave->gravity_will_change>0) { + int gravity_char; + + switch(game->cave->gravity_next_direction) { + case MV_DOWN: gravity_char=GD_DOWN_CHAR; break; + case MV_LEFT: gravity_char=GD_LEFT_CHAR; break; + case MV_RIGHT: gravity_char=GD_RIGHT_CHAR; break; + case MV_UP: gravity_char=GD_UP_CHAR; break; + default: gravity_char='?'; break; + } + x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%c%02d", gravity_char, MIN(gd_cave_time_show(game->cave, game->cave->gravity_will_change), 99)); + } else { + int gravity_char; + + switch(game->cave->gravity) { + case MV_DOWN: gravity_char=GD_DOWN_CHAR; break; + case MV_LEFT: gravity_char=GD_LEFT_CHAR; break; + case MV_RIGHT: gravity_char=GD_RIGHT_CHAR; break; + case MV_UP: gravity_char=GD_UP_CHAR; break; + default: gravity_char='?'; break; + } + x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%c%02d", gravity_char, 0); + } + x+=10*gd_scale; + x=gd_blittext_printf(gd_screen, x, y, cols->diamond_collected, "%c%02d", GD_SKELETON_CHAR, MIN(game->cave->skeletons_collected, 99)); + } else { + /* NORMAL STATUS BAR */ + x=1*gd_scale; + int time_secs; + + /* cave time is rounded _UP_ to seconds. so at the exact moment when it changes from + 2sec remaining to 1sec remaining, the player has exactly one second. when it changes + to zero, it is the exact moment of timeout. */ + time_secs=gd_cave_time_show(game->cave, game->cave->time); + + if (gd_keystate[SDLK_f]) { + /* fast forward mode - show "FAST" */ + x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%cFAST%c", GD_DIAMOND_CHAR, GD_DIAMOND_CHAR); + } else { + /* normal speed mode - show diamonds NEEDED <> VALUE */ + /* or if collected enough diamonds, <><><> VALUE */ + if (game->cave->diamonds_needed>game->cave->diamonds_collected) { + if (game->cave->diamonds_needed>0) + x=gd_blittext_printf(gd_screen, x, y, cols->diamond_needed, "%03d", game->cave->diamonds_needed); + else + /* did not already count diamonds needed */ + x=gd_blittext_printf(gd_screen, x, y, cols->diamond_needed, "%c%c%c", GD_DIAMOND_CHAR, GD_DIAMOND_CHAR, GD_DIAMOND_CHAR); + } + else + x=gd_blittext_printf(gd_screen, x, y, cols->default_color, " %c%c", GD_DIAMOND_CHAR, GD_DIAMOND_CHAR); + x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%c", GD_DIAMOND_CHAR, GD_DIAMOND_CHAR); + x=gd_blittext_printf(gd_screen, x, y, cols->diamond_value, "%02d", game->cave->diamond_value); + } + x+=10*gd_scale; + x=gd_blittext_printf(gd_screen, x, y, cols->diamond_collected, "%03d", game->cave->diamonds_collected); + x+=11*gd_scale; + x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%03d", time_secs); + x+=10*gd_scale; + x=gd_blittext_printf(gd_screen, x, y, cols->score, "%06d", game->player_score); + } +} + + + + + + + + + + + diff --git a/src/sdlgfx.h b/src/sdlgfx.h index 791ed9f..eade8f7 100644 --- a/src/sdlgfx.h +++ b/src/sdlgfx.h @@ -46,11 +46,31 @@ extern Uint8 *gd_keystate; extern gboolean gd_quit; + + +/* color sets for different status bar types. */ +typedef struct _status_bar_colors { + GdColor background; + GdColor diamond_needed; + GdColor diamond_value; + GdColor diamond_collected; + GdColor score; + GdColor default_color; +} GdStatusBarColors; + int gd_drawcave(SDL_Surface *dest, GdGame *gameplay); gboolean gd_sdl_init(GdScalingType scaling_type); gboolean gd_scroll(GdGame *gameplay, gboolean exact_scroll); void gd_scroll_to_origin(); +void gd_clear_header(GdColor c); +void gd_showheader_uncover(const GdGame *game, const GdStatusBarColors *cols, gboolean show_replay_sign); +void gd_showheader_game(const GdGame *game, int timeout_since, const GdStatusBarColors *cols, gboolean show_replay_sign); +void gd_play_game_select_status_bar_colors(GdStatusBarColors *cols, const GdCave *cave); + + + + void gd_select_pixbuf_colors(GdColor c0, GdColor c1, GdColor c2, GdColor c3, GdColor c4, GdColor c5); gboolean gd_is_surface_ok_for_theme(SDL_Surface *surface); void gd_loadcells_default(); @@ -59,7 +79,7 @@ gboolean gd_loadcells_file(const char *filename); void gd_loadfont_file(const char *filename); void gd_loadfont_default(); -SDL_Surface **gd_get_title_animation(); +SDL_Surface **gd_get_title_animation(gboolean one_frame_only); /* write text to gd_screen. return the next usable x coordinate */ /* pass x=-1 to center on screen */ diff --git a/src/sdlmain.c b/src/sdlmain.c index 33625d0..addb4cf 100644 --- a/src/sdlmain.c +++ b/src/sdlmain.c @@ -32,226 +32,14 @@ #include "sound.h" #include "about.h" -/* for main menu */ -typedef enum _state { - M_NONE, - M_QUIT, /* quit immediately */ - M_EXIT, /* normal quit */ - M_ABOUT, - M_LICENSE, - M_PLAY, - M_SAVE, - M_INFO, - M_SAVE_AS_NEW, - M_REPLAYS, - M_OPTIONS, - M_INSTALL_THEME, - M_HIGHSCORE, - M_LOAD, - M_LOAD_FROM_INSTALLED, - M_ERRORS, - M_HELP, -} State; static int cavenum; static int levelnum; static char *username; -static char *caveset_filename=NULL; -static char *last_folder=NULL; - -/* color sets for different status bar types. */ -typedef struct _status_bar_colors { - GdColor background; - GdColor diamond_needed; - GdColor diamond_value; - GdColor diamond_collected; - GdColor score; - GdColor default_color; -} StatusBarColors; - - -static void -clear_header(GdColor c) -{ - SDL_Rect r; - - r.x=0; - r.y=0; - r.w=gd_screen->w; - r.h=gd_statusbar_height; - SDL_FillRect(gd_screen, &r, SDL_MapRGB(gd_screen->format, gd_color_get_r(c), gd_color_get_g(c), gd_color_get_b(c))); -} - -static void -showheader_uncover(GdGame *game, StatusBarColors *cols) -{ - int cavename_y; - int len; - char *str; - gboolean first_line; - - clear_header(cols->background); - first_line=FALSE; /* will be set to TRUE, if we draw in the next few code lines. so the y coordinate of the second status line can be decided. */ - - /* if playing an intermission, tell the user! */ - if (game->type==GD_GAMETYPE_REPLAY) { - gd_blittext(gd_screen, -1, gd_statusbar_y1, GD_GDASH_YELLOW, "PLAYING REPLAY"); - first_line=TRUE; - } - else { - if (game->cave->intermission) { - gd_blittext(gd_screen, -1, gd_statusbar_y1, cols->default_color, "ONE LIFE EXTRA"); - first_line=TRUE; - } - else - /* if not an intermission, we may show the name of the game (caveset) */ - if (gd_show_name_of_game) { /* if showing the name of the cave... */ - len=g_utf8_strlen(gd_caveset_data->name, -1); - if (gd_screen->w/gd_font_width()/2>=len) /* if have place for double-width font */ - gd_blittext(gd_screen, -1, gd_statusbar_y1, cols->default_color, gd_caveset_data->name); - else - gd_blittext_n(gd_screen, -1, gd_statusbar_y1, cols->default_color, gd_caveset_data->name); - first_line=TRUE; - } - } - - cavename_y=first_line?gd_statusbar_y2:gd_statusbar_mid; - /* "xy players, cave ab/3" */ - if (game->type==GD_GAMETYPE_NORMAL) - str=g_strdup_printf("%d%c, %s/%d", game->player_lives, GD_PLAYER_CHAR, game->cave->name, game->cave->rendered); - else - /* if not a normal game, do not show number of remaining lives */ - str=g_strdup_printf("%s/%d", game->cave->name, game->cave->rendered); - len=g_utf8_strlen(str, -1); - if (gd_screen->w/gd_font_width()/2>=len) /* if have place for double-width font */ - gd_blittext(gd_screen, -1, cavename_y, cols->default_color, str); - else - gd_blittext_n(gd_screen, -1, cavename_y, cols->default_color, str); - g_free(str); -} - -static void -showheader_pause(StatusBarColors *cols) -{ - clear_header(cols->background); - gd_blittext(gd_screen, -1, gd_statusbar_mid, cols->default_color, "SPACEBAR TO RESUME"); -} - -static void -showheader_gameover(StatusBarColors *cols) -{ - clear_header(cols->background); - gd_blittext(gd_screen, -1, gd_statusbar_mid, cols->default_color, "G A M E O V E R"); -} - -static void -showheader_game(GdGame *game, int timeout_since, StatusBarColors *cols) -{ - int x, y; - gboolean first_line; - first_line=FALSE; /* will be set to TRUE, if we draw in the next few code lines. so the y coordinate of the second status line can be decided. */ - - clear_header(cols->background); - - /* if playing an intermission, tell the user! */ - if (game->type==GD_GAMETYPE_REPLAY) { - gd_blittext(gd_screen, -1, gd_statusbar_y1, GD_GDASH_YELLOW, "PLAYING REPLAY"); - first_line=TRUE; - } - - /* y position of status bar */ - y=first_line?gd_statusbar_y2:gd_statusbar_mid; - - if (game->cave->player_state==GD_PL_TIMEOUT && timeout_since/50%4==0) { - clear_header(cols->background); - gd_blittext(gd_screen, -1, y, GD_GDASH_WHITE, "OUT OF TIME"); - return; - } - if (game->cave->player_state==GD_PL_NOT_YET) { - showheader_uncover(game, cols); - return; - } - - if (gd_keystate[SDLK_LSHIFT] || gd_keystate[SDLK_RSHIFT]) { - /* ALTERNATIVE STATUS BAR BY PRESSING SHIFT */ - x=10*gd_scale; - - x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%c%02d", GD_PLAYER_CHAR, MIN(game->player_lives, 99)); /* max 99 in %2d */ - x+=14*gd_scale; - /* color numbers are not the same as key numbers! c3->k1, c2->k2, c1->k3 */ - /* this is how it was implemented in crdr7. */ - x=gd_blittext_printf(gd_screen, x, y, game->cave->color3, "%c%1d", GD_KEY_CHAR, MIN(game->cave->key1, 9)); /* max 9 in %1d */ - x+=10*gd_scale; - x=gd_blittext_printf(gd_screen, x, y, game->cave->color2, "%c%1d", GD_KEY_CHAR, MIN(game->cave->key2, 9)); - x+=10*gd_scale; - x=gd_blittext_printf(gd_screen, x, y, game->cave->color1, "%c%1d", GD_KEY_CHAR, MIN(game->cave->key3, 9)); - x+=12*gd_scale; - if (game->cave->gravity_will_change>0) { - int gravity_char; - - switch(game->cave->gravity_next_direction) { - case MV_DOWN: gravity_char=GD_DOWN_CHAR; break; - case MV_LEFT: gravity_char=GD_LEFT_CHAR; break; - case MV_RIGHT: gravity_char=GD_RIGHT_CHAR; break; - case MV_UP: gravity_char=GD_UP_CHAR; break; - default: gravity_char='?'; break; - } - x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%c%02d", gravity_char, MIN(gd_cave_time_show(game->cave, game->cave->gravity_will_change), 99)); - } else { - int gravity_char; - - switch(game->cave->gravity) { - case MV_DOWN: gravity_char=GD_DOWN_CHAR; break; - case MV_LEFT: gravity_char=GD_LEFT_CHAR; break; - case MV_RIGHT: gravity_char=GD_RIGHT_CHAR; break; - case MV_UP: gravity_char=GD_UP_CHAR; break; - default: gravity_char='?'; break; - } - x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%c%02d", gravity_char, 0); - } - x+=10*gd_scale; - x=gd_blittext_printf(gd_screen, x, y, cols->diamond_collected, "%c%02d", GD_SKELETON_CHAR, MIN(game->cave->skeletons_collected, 99)); - } else { - /* NORMAL STATUS BAR */ - x=1*gd_scale; - int time_secs; - - /* cave time is rounded _UP_ to seconds. so at the exact moment when it changes from - 2sec remaining to 1sec remaining, the player has exactly one second. when it changes - to zero, it is the exact moment of timeout. */ - time_secs=gd_cave_time_show(game->cave, game->cave->time); - - if (gd_keystate[SDLK_f]) { - /* fast forward mode - show "FAST" */ - x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%cFAST%c", GD_DIAMOND_CHAR, GD_DIAMOND_CHAR); - } else { - /* normal speed mode - show diamonds NEEDED <> VALUE */ - /* or if collected enough diamonds, <><><> VALUE */ - if (game->cave->diamonds_needed>game->cave->diamonds_collected) { - if (game->cave->diamonds_needed>0) - x=gd_blittext_printf(gd_screen, x, y, cols->diamond_needed, "%03d", game->cave->diamonds_needed); - else - /* did not already count diamonds needed */ - x=gd_blittext_printf(gd_screen, x, y, cols->diamond_needed, "%c%c%c", GD_DIAMOND_CHAR, GD_DIAMOND_CHAR, GD_DIAMOND_CHAR); - } - else - x=gd_blittext_printf(gd_screen, x, y, cols->default_color, " %c%c", GD_DIAMOND_CHAR, GD_DIAMOND_CHAR); - x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%c", GD_DIAMOND_CHAR, GD_DIAMOND_CHAR); - x=gd_blittext_printf(gd_screen, x, y, cols->diamond_value, "%02d", game->cave->diamond_value); - } - x+=10*gd_scale; - x=gd_blittext_printf(gd_screen, x, y, cols->diamond_collected, "%03d", game->cave->diamonds_collected); - x+=11*gd_scale; - x=gd_blittext_printf(gd_screen, x, y, cols->default_color, "%03d", time_secs); - x+=10*gd_scale; - x=gd_blittext_printf(gd_screen, x, y, cols->score, "%06d", game->player_score); - } -} - static void game_help() { @@ -282,6 +70,20 @@ game_help() +static void +showheader_pause(GdStatusBarColors *cols) +{ + gd_clear_header(cols->background); + gd_blittext(gd_screen, -1, gd_statusbar_mid, cols->default_color, "SPACEBAR TO RESUME"); +} + +static void +showheader_gameover(GdStatusBarColors *cols) +{ + gd_clear_header(cols->background); + gd_blittext(gd_screen, -1, gd_statusbar_mid, cols->default_color, "G A M E O V E R"); +} + /* generate an user event */ static Uint32 @@ -296,68 +98,11 @@ timer_callback(Uint32 interval, void *param) } -static void -play_game_select_status_bar_colors(StatusBarColors *cols, GdCave *cave) -{ - GdColor (*color_indexer) (int i); - int c64_col; - - /* first, count the number of c64 colors the cave uses. */ - /* if it uses mostly c64 colors, we will use c64 colors for the status bar. */ - /* otherwise we will use gdash colors. */ - /* note that the atari original status bar color setting only uses the game colors. */ - c64_col=0; - if (gd_color_is_c64(cave->color0)) c64_col++; - if (gd_color_is_c64(cave->color1)) c64_col++; - if (gd_color_is_c64(cave->color2)) c64_col++; - if (gd_color_is_c64(cave->color3)) c64_col++; - if (gd_color_is_c64(cave->color4)) c64_col++; - if (gd_color_is_c64(cave->color5)) c64_col++; - if (c64_col>4) - color_indexer=gd_c64_color; - else - color_indexer=gd_gdash_color; - - switch (gd_status_bar_type) { - case GD_STATUS_BAR_ORIGINAL: - cols->background=color_indexer(GD_COLOR_INDEX_BLACK); - cols->diamond_needed=cols->diamond_collected=color_indexer(GD_COLOR_INDEX_YELLOW); - cols->diamond_value=cols->score=cols->default_color=color_indexer(GD_COLOR_INDEX_WHITE); - break; - case GD_STATUS_BAR_1STB: - cols->background=color_indexer(GD_COLOR_INDEX_BLACK); - cols->diamond_needed=cols->diamond_collected=cols->score=color_indexer(GD_COLOR_INDEX_YELLOW); - cols->diamond_value=cols->default_color=color_indexer(GD_COLOR_INDEX_WHITE); - break; - case GD_STATUS_BAR_CRLI: - cols->background=color_indexer(GD_COLOR_INDEX_BLACK); - cols->diamond_needed=color_indexer(GD_COLOR_INDEX_RED); - cols->diamond_collected=color_indexer(GD_COLOR_INDEX_GREEN); - cols->diamond_value=color_indexer(GD_COLOR_INDEX_CYAN); - cols->score=color_indexer(GD_COLOR_INDEX_YELLOW); - cols->default_color=color_indexer(GD_COLOR_INDEX_WHITE); - break; - case GD_STATUS_BAR_FINAL: - cols->background=color_indexer(GD_COLOR_INDEX_BLACK); - cols->diamond_needed=color_indexer(GD_COLOR_INDEX_RED); - cols->diamond_collected=color_indexer(GD_COLOR_INDEX_GREEN); - cols->diamond_value=cols->score=cols->default_color=color_indexer(GD_COLOR_INDEX_WHITE); - break; - case GD_STATUS_BAR_ATARI_ORIGINAL: - cols->background=cave->color0; - cols->diamond_needed=cols->diamond_collected=cave->color2; - cols->diamond_value=cols->score=cols->default_color=cave->color3; - break; - default: - g_assert_not_reached(); - } -} - /* the game itself */ static void play_game_func(GdGame *game) { - static gboolean toggle=FALSE; /* this is used to divide the rate of the user interrupt by 2, if no fine scrolling requested */ + gboolean toggle=FALSE; /* this is used to divide the rate of the user interrupt by 2, if no fine scrolling requested */ gboolean exit_game; gboolean show_highscore; int statusbar_since=0; /* count number of frames from when the outoftime or paused event happened. */ @@ -365,19 +110,18 @@ play_game_func(GdGame *game) SDL_TimerID tim; SDL_Event event; gboolean restart, suicide; /* for sdl key_downs */ - StatusBarColors cols_struct; - StatusBarColors *cols=&cols_struct; + GdStatusBarColors cols_struct; + GdStatusBarColors *cols=&cols_struct; char *wrapped; - exit_game=FALSE; - show_highscore=FALSE; - paused=FALSE; - /* install the sdl timer which will generate events to control the speed of the game and drawing, at an 50hz rate; 1/50hz=20ms */ tim=SDL_AddTimer(20, timer_callback, NULL); suicide=FALSE; /* detected suicide and restart level keys */ restart=FALSE; + exit_game=FALSE; + show_highscore=FALSE; + paused=FALSE; while (!exit_game && SDL_WaitEvent(&event)) { GdGameState state; GdDirection player_move; @@ -453,8 +197,8 @@ play_game_func(GdGame *game) gd_scroll_to_origin(); SDL_FillRect(gd_screen, NULL, SDL_MapRGB(gd_screen->format, 0, 0, 0)); /* fill whole gd_screen with black - cave might be smaller than previous! */ /* select status bar colors here, as some depend on actual cave colors */ - play_game_select_status_bar_colors(cols, game->cave); - showheader_uncover(game, cols); + gd_play_game_select_status_bar_colors(cols, game->cave); + gd_showheader_uncover(game, cols, TRUE); /* true = show "playing replay" if necessary */ suicide=FALSE; /* clear detected keypresses, so we do not "remember" them from previous cave runs */ restart=FALSE; break; @@ -464,13 +208,13 @@ play_game_func(GdGame *game) break; case GD_GAME_LABELS_CHANGED: - showheader_game(game, statusbar_since, cols); + gd_showheader_game(game, statusbar_since, cols, TRUE); /* true = show "playing replay" if necessary */ suicide=FALSE; /* clear detected keypresses, as cave was iterated and they were processed */ break; case GD_GAME_TIMEOUT_NOW: statusbar_since=0; - showheader_game(game, statusbar_since, cols); /* also update the status bar here. */ + gd_showheader_game(game, statusbar_since, cols, TRUE); /* also update the status bar here. */ /* true = show "playing replay" if necessary */ suicide=FALSE; /* clear detected keypresses, as cave was iterated and they were processed */ break; @@ -507,12 +251,11 @@ play_game_func(GdGame *game) if (statusbar_since/50%4==0) showheader_pause(cols); else - showheader_game(game, statusbar_since, cols); + gd_showheader_game(game, statusbar_since, cols, TRUE); /* true = show "playing replay" if necessary */ } } - + SDL_Flip(gd_screen); /* can always be called, as it keeps track of dirty regions of the screen */ - break; } } SDL_RemoveTimer(tim); @@ -609,207 +352,17 @@ next_selectable_cave(int cavenum) -/* - * SDASH REPLAYS MENU - */ - -static void -replays_menu() -{ - gboolean finished; - /* an item stores a cave (to see its name) or a cave+replay */ - typedef struct _item { - GdCave *cave; - GdReplay *replay; - } Item; - int n, page; - int current; - const int lines_per_page=gd_screen->h/gd_line_height()-5; - GList *citer; - GPtrArray *items=NULL; - GdCave *cave; - Item i; - - items=g_ptr_array_new(); - /* for all caves */ - for (citer=gd_caveset; citer!=NULL; citer=citer->next) { - GList *riter; - - cave=citer->data; - /* if cave has replays... */ - if (cave->replays!=NULL) { - /* add cave data */ - i.cave=cave; - i.replay=NULL; - g_ptr_array_add(items, g_memdup(&i, sizeof(i))); - - /* add replays, too */ - for (riter=cave->replays; riter!=NULL; riter=riter->next) { - i.replay=(GdReplay *)riter->data; - g_ptr_array_add(items, g_memdup(&i, sizeof(i))); - } - } - } - - if (items->len==0) { - gd_message("No replays."); - } else { - - gd_backup_and_dark_screen(); - gd_status_line("CRSR:MOVE SPACE:PLAY S:SAVED ESC:EXIT"); - - current=1; - finished=FALSE; - while (!finished && !gd_quit) { - page=current/lines_per_page; /* show 18 lines per page */ - SDL_Event event; - - /* show lines */ - gd_clear_line(gd_screen, 0); /* for empty top row */ - for (n=0; nlen/lines_per_page+1); - for (n=0; nlen; n++) { - int pos=page*lines_per_page+n; - GdColor col_cave=current==pos?GD_GDASH_YELLOW:GD_GDASH_LIGHTBLUE; /* selected=yellow, otherwise blue */ - GdColor col=current==pos?GD_GDASH_YELLOW:GD_GDASH_GRAY3; /* selected=yellow, otherwise blue */ - Item *i; - int x, y; - - i=(Item *) g_ptr_array_index(items, pos); - x=0; - y=(n+2)*gd_line_height(); - - if (!i->replay) { - /* no replay pointer: this is a cave, so write its name. */ - x=gd_blittext_n(gd_screen, x, y, col_cave, i->cave->name); - } else { - const char *comm; - int c; - char buffer[100]; - - /* successful or not */ - x=gd_blittext_printf_n(gd_screen, x, y, i->replay->success?GD_GDASH_GREEN:GD_GDASH_RED, " %c ", GD_BALL_CHAR); - - /* player name */ - g_utf8_strncpy(buffer, i->replay->player_name, 15); /* name: maximum 15 characters */ - x=gd_blittext_n(gd_screen, x, y, col, buffer); - /* put 16-length spaces */ - for (c=g_utf8_strlen(buffer, -1); c<16; c++) - x=gd_blittext_n(gd_screen, x, y, col, " "); - - /* write comment */ - if (!g_str_equal(i->replay->comment, "")) - comm=i->replay->comment; - else - /* or date */ - if (!g_str_equal(i->replay->date, "")) - comm=i->replay->date; - else - /* or nothing */ - comm="-"; - g_utf8_strncpy(buffer, comm, 19); /* comment or data: maximum 20 characters */ - x=gd_blittext_n(gd_screen, x, y, col, comm); - /* put 20-length spaces */ - for (c=g_utf8_strlen(buffer, -1); c<19; c++) - x=gd_blittext_n(gd_screen, x, y, col, " "); - - /* saved - check box */ - x=gd_blittext_printf_n(gd_screen, x, y, col, " %c", i->replay->saved?GD_CHECKED_BOX_CHAR:GD_UNCHECKED_BOX_CHAR); - } - } - SDL_Flip(gd_screen); /* draw to usere's screen */ - - SDL_WaitEvent(&event); - switch (event.type) { - case SDL_QUIT: - gd_quit=TRUE; - break; - - case SDL_KEYDOWN: - switch (event.key.keysym.sym) { - case SDLK_UP: - do { - current=gd_clamp(current-1, 1, items->len-1); - } while (((Item *)g_ptr_array_index(items, current))->replay==NULL && current>=1); - break; - case SDLK_DOWN: - do { - current=gd_clamp(current+1, 1, items->len-1); - } while (((Item *)g_ptr_array_index(items, current))->replay==NULL && currentlen); - break; - case SDLK_s: - { - Item *i=(Item *)g_ptr_array_index(items, current); - - if (i->replay) { - i->replay->saved=!i->replay->saved; - gd_caveset_edited=TRUE; - } - } - break; - case SDLK_SPACE: - case SDLK_RETURN: - { - Item *i=(Item *)g_ptr_array_index(items, current); - - if (i->replay) { - gd_backup_and_black_screen(); - play_replay(i->cave, i->replay); - gd_restore_screen(); - } - } - break; - case SDLK_ESCAPE: - finished=TRUE; - break; - - case SDLK_PAGEUP: - current=gd_clamp(current-lines_per_page, 0, items->len-1); - break; - - case SDLK_PAGEDOWN: - current=gd_clamp(current+lines_per_page, 0, items->len-1); - break; - - default: - /* other keys do nothing */ - break; - } - break; - - default: - /* other events do nothing */ - break; - } - } - - gd_restore_screen(); - } - - /* set the theme. other variables are already set by the above code. */ - /* forget list of themes */ - g_ptr_array_foreach(items, (GFunc) g_free, NULL); - g_ptr_array_free(items, TRUE); - -} - - -static State +static GdMainMenuSelected main_menu() { const int image_centered_threshold=164*gd_scale; SDL_Surface **animation; int animcycle; int count; - State s; + GdMainMenuSelected s; int x; int waitcycle=0; int y_gameline, y_caveline; @@ -817,7 +370,7 @@ main_menu() gboolean show_status; gboolean title_image_shown; - animation=gd_get_title_animation(); + animation=gd_get_title_animation(FALSE); animcycle=0; /* count number of frames */ count=0; @@ -875,8 +428,12 @@ main_menu() if (gd_caveset_edited) /* if edited (new replays), draw a sign XXX */ x=gd_blittext_n(gd_screen, x, y_gameline, GD_GDASH_RED, " *"); } - if (show_status) - gd_status_line("CRSR: SELECT SPACE: PLAY F1: HELP"); + if (show_status) { + if (gd_caveset_has_replays()) + gd_status_line("CRSR: SELECT SPC: PLAY R: REPLAYS"); + else + gd_status_line("CRSR: SELECT SPC: PLAY F1: HELP"); + } if (gd_has_new_error()) /* show error flag */ @@ -1070,59 +627,6 @@ main_help() } -static void -caveset_file_operation_successful(const char *filename) -{ - /* if it is a bd file, remember new filename */ - if (g_str_has_suffix(filename, ".bd")) { - char *stored; - - /* first make copy, then free and set pointer. we might be called with filename=caveset_filename */ - stored=g_strdup(filename); - g_free(caveset_filename); - caveset_filename=stored; - } else { - g_free(caveset_filename); - caveset_filename=NULL; - } -} - -static void -load_file(const char *directory) -{ - char *filename; - char *filter; - - /* if the caveset is edited, ask the user if to save. */ - /* if does not want to discard, get out here */ - if (!gd_discard_changes()) - return; - - if (!last_folder) - last_folder=g_strdup(g_get_home_dir()); - - filter=g_strjoinv(";", gd_caveset_extensions); - filename=gd_select_file("SELECT CAVESET TO LOAD", directory?directory:last_folder, filter, FALSE); - g_free(filter); - - /* if file selected */ - if (filename) { - /* remember last directory */ - g_free(last_folder); - last_folder=g_path_get_dirname(filename); - - gd_save_highscore(gd_user_config_dir); - - gd_caveset_load_from_file(filename, gd_user_config_dir); - - /* if successful loading and this is a bd file, and we load highscores from our own config dir */ - if (!gd_has_new_error() && g_str_has_suffix(filename, ".bd") && !gd_use_bdcff_highscore) - gd_load_highscore(gd_user_config_dir); - - g_free(filename); - } -} - /* save caveset to specified directory, and pop up error message if failed */ /* if not, call function to remember file name. */ @@ -1135,7 +639,7 @@ caveset_save(const gchar *filename) if (!saved) gd_error_console(); else - caveset_file_operation_successful(filename); + gd_caveset_file_operation_successful(filename); } /* ask for new filename to save file to. then do the save. */ @@ -1145,18 +649,18 @@ save_file_as(const char *directory) char *filename; char *filter; - if (!last_folder) - last_folder=g_strdup(g_get_home_dir()); + if (!gd_last_folder) + gd_last_folder=g_strdup(g_get_home_dir()); filter=g_strjoinv(";", gd_caveset_extensions); - filename=gd_select_file("SAVE CAVESET AS", directory?directory:last_folder, filter, TRUE); + filename=gd_select_file("SAVE CAVESET AS", directory?directory:gd_last_folder, filter, TRUE); g_free(filter); /* if file selected */ if (filename) { /* remember last directory */ - g_free(last_folder); - last_folder=g_path_get_dirname(filename); + g_free(gd_last_folder); + gd_last_folder=g_path_get_dirname(filename); caveset_save(filename); @@ -1168,19 +672,18 @@ save_file_as(const char *directory) static void save_file() { - if (!caveset_filename) + if (!gd_caveset_filename) /* if no filename remembered, rather start the save_as function, which asks for one. */ save_file_as(NULL); else /* if given, save. */ - caveset_save(caveset_filename); + gd_caveset_save(gd_caveset_filename); } int main(int argc, char *argv[]) { - State s; GOptionContext *context; GError *error=NULL; @@ -1227,7 +730,7 @@ main(int argc, char *argv[]) if (!gd_caveset_load_from_file (gd_param_cavenames[0], gd_user_config_dir)) { g_critical (_("Errors during loading caveset from file '%s'"), gd_param_cavenames[0]); } else - caveset_file_operation_successful(gd_param_cavenames[0]); + gd_caveset_file_operation_successful(gd_param_cavenames[0]); } else if (gd_param_internal) { /* if specified an internal caveset */ @@ -1248,16 +751,19 @@ main(int argc, char *argv[]) } gd_sdl_init(gd_sdl_scale); - gd_sound_init(); - + gd_create_dark_background(); + gd_sound_init(0); + gd_sound_set_music_volume(gd_sound_music_volume_percent); + gd_sound_set_chunk_volumes(gd_sound_chunks_volume_percent); + gd_loadfont_default(); gd_load_theme(); - gd_create_dark_background(); - username=g_strdup(g_get_real_name()); while (!gd_quit) { + GdMainMenuSelected s; + /* if a cavenum was given on the command line */ if (gd_param_cave) { /* do as if it was selected from the menu */ @@ -1282,7 +788,7 @@ main(int argc, char *argv[]) play_game(cavenum, levelnum); break; case M_REPLAYS: - replays_menu(); + gd_replays_menu(play_replay, TRUE); break; case M_HIGHSCORE: gd_show_highscore(NULL, 0); @@ -1293,10 +799,10 @@ main(int argc, char *argv[]) /* FILES */ case M_LOAD: - load_file(NULL); + gd_open_caveset(NULL); break; case M_LOAD_FROM_INSTALLED: - load_file(gd_system_caves_dir); + gd_open_caveset(gd_system_caves_dir); break; case M_SAVE: save_file(NULL); diff --git a/src/sdlreplay.c b/src/sdlreplay.c new file mode 100644 index 0000000..1d4929b --- /dev/null +++ b/src/sdlreplay.c @@ -0,0 +1,650 @@ +/* + * Copyright (c) 2007, 2008, 2009, Czirkos Zoltan + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include +#include +#include "IMG_savepng.h" +#include +#include "config.h" +#include "cave.h" +#include "caveobject.h" +#include "caveengine.h" +#include "cavesound.h" +#include "cavedb.h" +#include "caveset.h" +#include "c64import.h" +#include "settings.h" +#include "util.h" +#include "gameplay.h" +#include "sdlgfx.h" +#include "sdlui.h" +#include "sound.h" +#include "about.h" + + +/* for saving the wav file */ +static unsigned int wavlen; +static unsigned int frame; +static Uint16 format; +static int frequency, channels, bits; + +/* this function saves the wav file, + and also does the timing! */ +static void +mixfunc(void *udata, Uint8 *stream, int len) +{ + SDL_Event ev; + + if (fwrite(stream, 1, len, (FILE *)udata)!=len) { + g_critical("Cannot write to wav file!"); + } + + ev.type=SDL_USEREVENT; + SDL_PushEvent(&ev); + + wavlen+=len; +} + +/* the game itself */ +static void +play_game_func(GdGame *game, const char *filename_prefix) +{ + gboolean toggle=FALSE; /* this is used to divide the rate of the user interrupt by 2, if no fine scrolling requested */ + gboolean exit_game; + int statusbar_since=0; /* count number of frames from when the outoftime or paused event happened. we need it for timeout header flash */ + SDL_Event event; + GdStatusBarColors cols_struct; + GdStatusBarColors *cols=&cols_struct; + Uint32 out32; + Uint16 out16; + FILE *wavfile; + char *filename, *text; + int i; + gboolean show; + + /* start the wave file */ + filename=g_strdup_printf("%s.wav", filename_prefix); + wavfile=fopen(filename, "wb"); + if (!wavfile) { + g_critical("Cannot open %s for sound output", filename); + return; + } + g_free(filename); + + fseek(wavfile, 44, SEEK_SET); /* 44bytes offset: start of data in a wav file */ + wavlen=0; + frame=0; + Mix_SetPostMix(mixfunc, wavfile); + + /* these are not important, but otherwise the "saved xxxx.png" line in the first frame could not be seen. */ + cols->background=GD_GDASH_BLACK; + cols->default_color=GD_GDASH_WHITE; + + /* now do the replay */ + exit_game=FALSE; + while (!exit_game && SDL_WaitEvent(&event)) { + GdGameState state; + + switch(event.type) { + case SDL_QUIT: /* application closed by window manager */ + gd_quit=TRUE; + exit_game=TRUE; + break; + + case SDL_KEYDOWN: + switch(event.key.keysym.sym) { + case SDLK_ESCAPE: + case SDLK_F1: + exit_game=TRUE; + break; + + case SDLK_q: + if (gd_keystate[SDLK_LCTRL]||gd_keystate[SDLK_RCTRL]) { + gd_quit=TRUE; + exit_game=TRUE; + } + break; + default: + break; + } + break; + + case SDL_USEREVENT: + /* get movement */ + /* tell the interrupt "20ms has passed" */ + /* no movement, no fire, no suicide, no restart, no pause, no fast movement */ + state=gd_game_main_int(game, 20, MV_STILL, FALSE, FALSE, FALSE, !game->out_of_window, FALSE, FALSE); + show=FALSE; + + /* state of game, returned by gd_game_main_int */ + switch (state) { + case GD_GAME_INVALID_STATE: + g_assert_not_reached(); + break; + + case GD_GAME_SHOW_STORY: + /* should not happen */ + break; + + case GD_GAME_CAVE_LOADED: + /* select colors, prepare drawing etc. */ + gd_select_pixbuf_colors(game->cave->color0, game->cave->color1, game->cave->color2, game->cave->color3, game->cave->color4, game->cave->color5); + gd_scroll_to_origin(); + SDL_FillRect(gd_screen, NULL, SDL_MapRGB(gd_screen->format, 0, 0, 0)); /* fill whole gd_screen with black - cave might be smaller than previous! */ + /* select status bar colors here, as some depend on actual cave colors */ + gd_play_game_select_status_bar_colors(cols, game->cave); + gd_showheader_uncover(game, cols, FALSE); /* false=do not say "playing replay" in the status bar */ + show=TRUE; + break; + + case GD_GAME_NOTHING: + /* normally continue. */ + break; + + case GD_GAME_LABELS_CHANGED: + gd_showheader_game(game, statusbar_since, cols, FALSE); /* false=not showing "playing replay" as it would be ugly in the saved video */ + show=TRUE; + break; + + case GD_GAME_TIMEOUT_NOW: + statusbar_since=0; + gd_showheader_game(game, statusbar_since, cols, FALSE); /* also update the status bar here. */ + show=TRUE; + break; + + case GD_GAME_NO_MORE_LIVES: + /* should not reach */ + break; + + case GD_GAME_STOP: + exit_game=TRUE; /* game stopped, this could be a replay or a snapshot */ + break; + + case GD_GAME_GAME_OVER: + exit_game=TRUE; + /* ... but should not reach. */ + break; + } + + statusbar_since++; + + /* for the sdl version, it seems nicer if we first scroll, and then draw. */ + /* scrolling for the sdl version will merely invalidate the whole gfx buffer. */ + /* if drawcave was before scrolling, it would draw, scroll would invalidate, and then it should be drawn again */ + /* only do the drawing if the cave already exists. */ + toggle=!toggle; + if (game->gfx_buffer) { + /* if fine scrolling, scroll at 50hz. if not, only scroll at every second call, so 25hz. */ + if (game->cave && (toggle || gd_fine_scroll)) + game->out_of_window=gd_scroll(game, game->cave->player_state==GD_PL_NOT_YET); /* do the scrolling. scroll exactly, if player is not yet alive */ + + gd_drawcave(gd_screen, game); /* draw the cave. */ + } + + /* before incrementing frame number, check if to save the frame to disk. */ + if (frame%2==0) { + /* save every second frame, so 25hz */ + filename=g_strdup_printf("%s_%08d.png", filename_prefix, frame/2); + IMG_SavePNG(filename, gd_screen, -1); +#if 0 + /* now we can ruin the screen */ + if (game->cave && game->replay_from) { + gd_clear_header(cols->background); + gd_blittext_printf_n(gd_screen, -1, gd_statusbar_y1, cols->default_color, "Movement %d of %d", game->replay_from->current_playing_pos, game->replay_from->movements->len); + gd_blittext_printf_n(gd_screen, -1, gd_statusbar_y2, cols->default_color, filename, game->replay_from->current_playing_pos, game->replay_from->movements->len); + } +#endif + g_free(filename); + + } + + /* once per iteration, show it to the user. */ + if (show || frame%10==0) + SDL_Flip(gd_screen); + + frame++; + break; + } + } + + Mix_SetPostMix(NULL, NULL); /* remove wav file saver */ + gd_sound_off(); /* we stop sounds. gd_game_free would do it, but we need the game struct for highscore */ + + /* write wav header, as now we now its final size. */ + fseek(wavfile, 0, SEEK_SET); + + i=0; + out32=GUINT32_TO_BE(0x52494646); i+=fwrite(&out32, 1, 4, wavfile); /* "RIFF" */ + out32=GUINT32_TO_LE(wavlen+36); i+=fwrite(&out32, 1, 4, wavfile); /* 4 + 8+subchunk1size + 8+subchunk2size */ + out32=GUINT32_TO_BE(0x57415645); i+=fwrite(&out32, 1, 4, wavfile); /* "WAVE" */ + + out32=GUINT32_TO_BE(0x666d7420); i+=fwrite(&out32, 1, 4, wavfile); /* "fmt " */ + out32=GUINT32_TO_LE(16); i+=fwrite(&out32, 1, 4, wavfile); /* fmt chunk size=16 bytes */ + out16=GUINT16_TO_LE(1); i+=fwrite(&out16, 1, 2, wavfile); /* 1=pcm */ + out16=GUINT16_TO_LE(channels); i+=fwrite(&out16, 1, 2, wavfile); + out32=GUINT32_TO_LE(frequency); i+=fwrite(&out32, 1, 4, wavfile); + out32=GUINT32_TO_LE(frequency*bits/8*channels); i+=fwrite(&out32, 1, 4, wavfile); /* byterate */ + out16=GUINT16_TO_LE(bits/8*channels); i+=fwrite(&out16, 1, 2, wavfile); /* blockalign */ + out16=GUINT16_TO_LE(bits); i+=fwrite(&out16, 1, 2, wavfile); /* bitspersample */ + + out32=GUINT32_TO_BE(0x64617461); i+=fwrite(&out32, 1, 4, wavfile); /* "data" */ + out32=GUINT32_TO_LE(wavlen); i+=fwrite(&out32, 1, 4, wavfile); /* actual data length */ + + if (i!=44) + g_critical("Could not write wav header to file!"); + + text=g_strdup_printf("Saved %d video frames and %dMiB of audio data to %s_*.png and %s.wav.", frame/2, wavlen/1048576, filename_prefix, filename_prefix); + gd_message(text); + g_free(text); + + fclose(wavfile); +} + +/* draws the title screen (maybe that of the game) */ +static void +draw_title_screen() +{ + SDL_Surface **animation; + SDL_Rect r; + int x; + + animation=gd_get_title_animation(TRUE); /* true=we need only the first frame */ + + SDL_FillRect(gd_screen, NULL, SDL_MapRGB(gd_screen->format, 0, 0, 0)); + r.x=(gd_screen->w-animation[0]->w)/2; + r.y=(gd_screen->h-animation[0]->h)/2; + SDL_BlitSurface(animation[0], NULL, gd_screen, &r); + SDL_Flip(gd_screen); + + /* forget animation */ + for (x=0; animation[x]!=NULL; x++) + SDL_FreeSurface(animation[x]); + g_free(animation); +} + + +static void +play_replay(GdCave *cave, GdReplay *replay) +{ + GdGame *game; + char *prefix; + char *prefix_rec; + + gd_wait_for_key_releases(); + prefix_rec=g_strdup_printf("%s%sout", gd_last_folder?gd_last_folder:g_get_home_dir(), G_DIR_SEPARATOR_S); /* recommended */ + prefix=gd_input_string("OUTPUT FILENAME PREFIX", prefix_rec); + g_free(prefix_rec); + if (!prefix) + return; + + /* draw the title screen, so it will be the first frame of the movie */ + draw_title_screen(); + + game=gd_game_new_replay(cave, replay); + play_game_func(game, prefix); + gd_game_free(game); + g_free(prefix); + + /* wait for keys, as for example escape may be pressed at this time */ + gd_wait_for_key_releases(); +} + + + + + + + + + +static GdMainMenuSelected +main_menu() +{ + const int image_centered_threshold=164*gd_scale; + SDL_Surface **animation; + int animcycle; + int count; + GdMainMenuSelected s; + int x; + int y_gameline; + int image_h; + gboolean show_status; + gboolean title_image_shown; + + animation=gd_get_title_animation(FALSE); + animcycle=0; + /* count number of frames */ + count=0; + while(animation[count]!=NULL) + count++; + + /* height of title screen, then decide which lines to show and where */ + image_h=animation[0]->h; + if (gd_screen->h-image_h < 2*gd_font_height()) { + /* less than 2 lines - place for only one line of text. */ + y_gameline=image_h + (gd_screen->h-image_h-gd_font_height())/2; /* centered in the small place */ + show_status=FALSE; + } else + if (gd_screen->h-image_h < 3*gd_font_height()) { + /* more than 2, less than 3 - place for status bar. game name is not shown, as this will */ + /* only be true for a game with its own title screen, and i decided that in that case it */ + /* would make more sense. */ + y_gameline=image_h + (gd_screen->h-image_h-gd_font_height()*2)/2; /* centered there */ + show_status=TRUE; + } else { + image_h=image_centered_threshold; /* "minimum" height for the image, and it will be centered */ + /* more than 3, less than 4 - place for everything. */ + y_gameline=image_h + (gd_screen->h-image_h-gd_font_height()-gd_font_height())/2; + show_status=TRUE; + } + + /* fill whole gd_screen with black */ + SDL_FillRect(gd_screen, NULL, SDL_MapRGB(gd_screen->format, 0, 0, 0)); + /* then fill with the tile, so if the title image is very small, there is no black border */ + /* only do that if the image is significantly smaller */ + if (animation[0]->w < gd_screen->w*9/10 || animation[0]->h < image_centered_threshold*9/10) { + SDL_Rect rect; + + rect.x=0; + rect.y=0; + rect.w=gd_screen->w; + rect.h=image_centered_threshold; + SDL_SetClipRect(gd_screen, &rect); + gd_dark_screen(); + SDL_SetClipRect(gd_screen, NULL); + } + + if (y_gameline!=-1) { + x=gd_blittext_n(gd_screen, 0, y_gameline, GD_GDASH_WHITE, "GAME: "); + x=gd_blittext_n(gd_screen, x, y_gameline, GD_GDASH_YELLOW, gd_caveset_data->name); + } + if (show_status) + gd_status_line("L: LOAD R: REPLAYS ESC: EXIT"); + + if (gd_has_new_error()) + /* show error flag */ + gd_blittext_n(gd_screen, gd_screen->w-gd_font_width(), gd_screen->h-gd_font_height(), GD_GDASH_RED, "E"); + + s=M_NONE; + + title_image_shown=FALSE; + while(!gd_quit && s==M_NONE) { + SDL_Event event; + + /* play animation. if more frames, always draw. if only one frame, draw only once */ + if (!title_image_shown || count>1) { + SDL_Rect dest_pos; + animcycle=(animcycle+1)%count; + dest_pos.x=(gd_screen->w-animation[animcycle]->w)/2; /* centered horizontally */ + if (animation[animcycle]->hh)/2; /* centered vertically */ + else + dest_pos.y=0; /* top of screen, as not too much space left for info lines */ + SDL_BlitSurface(animation[animcycle], 0, gd_screen, &dest_pos); + title_image_shown=TRUE; /* shown at least once, so if not animated, we do not waste cpu */ + } + SDL_Flip(gd_screen); + + while (SDL_PollEvent(&event)) { + switch(event.type) { + case SDL_QUIT: /* application closed by window manager */ + gd_quit=TRUE; + s=M_QUIT; + break; + + case SDL_KEYDOWN: + switch(event.key.keysym.sym) { + case SDLK_ESCAPE: /* escape: quit app */ + case SDLK_q: + s=M_EXIT; + break; + + case SDLK_F1: /* f1: help */ + s=M_HELP; + break; + + case SDLK_l: /* load file */ + s=M_LOAD; + break; + case SDLK_c: + s=M_LOAD_FROM_INSTALLED; + break; + + case SDLK_r: + s=M_REPLAYS; + break; + case SDLK_i: /* caveset info */ + s=M_INFO; + break; + case SDLK_h: /* h: highscore */ + s=M_HIGHSCORE; + break; + + case SDLK_a: + s=M_ABOUT; + break; + + case SDLK_b: + s=M_LICENSE; + break; + + case SDLK_e: /* show error console */ + s=M_ERRORS; + break; + + default: /* other keys do nothing */ + break; + } + default: /* other events we don't care */ + break; + } + } + SDL_Delay(40); /* 25 fps - we need exactly this for the animation */ + } + + gd_wait_for_key_releases(); + + /* forget animation */ + for (x=0; xmessage); + g_error_free(error); + } + + /* show license? */ + if (gd_param_license) { + char *wrapped=gd_wrap_text(gd_about_license, 72); + + /* print license and quit. */ + g_print("%s", wrapped); + g_free(wrapped); + return 0; + } + + gd_settings_init_dirs(); + + gd_install_log_handler(); + + gd_cave_init(); + gd_cave_db_init(); + gd_cave_sound_db_init(); + gd_c64_import_init_tables(); + + gd_load_settings(); + + gd_caveset_clear(); + + gd_clear_error_flag(); + + gd_wait_before_game_over=TRUE; + + /* we setup mixing and other parameters for our own needs. */ + /* this is why settings cannot be saved on exit! */ + gd_sdl_sound=TRUE; + gd_sdl_44khz_mixing=TRUE; + gd_sdl_16bit_mixing=TRUE; + gd_fine_scroll=FALSE; + gd_sdl_fullscreen=FALSE; + gd_sdl_scale=GD_SCALING_ORIGINAL; + gd_sdl_pal_emulation=FALSE; + gd_even_line_pal_emu_vertical_scroll=FALSE; + gd_random_colors=FALSE; + + /* and after tweaking settings to our own need, we can init sdl. */ + putenv("SDL_AUDIODRIVER=dummy"); /* do not output audio; also this will make sure sdl accepts 44khz 16bit. */ + gd_sdl_init(gd_sdl_scale); + gd_create_dark_background(); + + gd_sound_init(44100/50); /* so the buffer will be 1/50th of a second. and we get our favourite 50hz interrupt from the mixer. */ + /* query audio format from sdl, and start the wave file */ + Mix_QuerySpec(&frequency, &format, &channels); + if (frequency!=44100) { + /* something must be really going wrong. */ + g_critical("Cannot initialize mixer to 44100Hz mixing. The application will not work correctly!"); + } + switch(format) { + case AUDIO_U8: bits=8; break; + case AUDIO_S8: bits=8; break; + case AUDIO_U16LSB: bits=16; break; + case AUDIO_S16LSB: bits=16; break; + case AUDIO_U16MSB: bits=16; break; + case AUDIO_S16MSB: bits=16; break; + default: + g_assert_not_reached(); + } + gd_sound_set_music_volume(gd_sound_music_volume_percent); + gd_sound_set_chunk_volumes(gd_sound_chunks_volume_percent); + + gd_loadfont_default(); + gd_load_theme(); + + /* LOAD A CAVESET FROM A FILE */ + if (gd_param_cavenames && gd_param_cavenames[0]) { + /* load caveset, "ignore" errors. */ + if (!gd_caveset_load_from_file (gd_param_cavenames[0], gd_user_config_dir)) { + g_critical ("Errors during loading caveset from file '%s'", gd_param_cavenames[0]); + } + } + else + /* set caveset name to this, otherwise it would look ugly */ + gd_strcpy(gd_caveset_data->name, ("No caveset loaded")); + + while (!gd_quit) { + GdMainMenuSelected s; + + s=main_menu(); + + switch(s) { + case M_NONE: + break; + + case M_INSTALL_THEME: + case M_OPTIONS: + case M_PLAY: + case M_SAVE: + case M_SAVE_AS_NEW: + g_assert_not_reached(); + break; + + case M_REPLAYS: + gd_replays_menu(play_replay, FALSE); + break; + case M_HIGHSCORE: + gd_show_highscore(NULL, 0); + break; + case M_INFO: + gd_show_cave_info(NULL); + break; + + /* FILES */ + case M_LOAD: + gd_open_caveset(NULL); + break; + case M_LOAD_FROM_INSTALLED: + gd_open_caveset(gd_system_caves_dir); + break; + + /* INFO */ + case M_ABOUT: + gd_about(); + break; + case M_LICENSE: + gd_show_license(); + break; + case M_HELP: + main_help(); + break; + + /* SETUP */ + case M_ERRORS: + gd_error_console(); + break; + + /* EXIT */ + case M_EXIT: + case M_QUIT: + gd_quit=TRUE; + break; + }; + } + + SDL_Quit(); + + /* MUST NOT SAVE SETTINGS */ + + return 0; +} + diff --git a/src/sdlui.c b/src/sdlui.c index c36c59c..13281d8 100644 --- a/src/sdlui.c +++ b/src/sdlui.c @@ -25,9 +25,73 @@ #include "settings.h" #include "util.h" #include "about.h" +#include "sound.h" #include "sdlui.h" + +char *gd_last_folder=NULL; +char *gd_caveset_filename=NULL; + + +/* operation successful, so we should remember file name. */ +void +gd_caveset_file_operation_successful(const char *filename) +{ + /* if it is a bd file, remember new filename */ + if (g_str_has_suffix(filename, ".bd")) { + char *stored; + + /* first make copy, then free and set pointer. we might be called with filename=caveset_filename */ + stored=g_strdup(filename); + g_free(gd_caveset_filename); + gd_caveset_filename=stored; + } else { + g_free(gd_caveset_filename); + gd_caveset_filename=NULL; + } +} + +void +gd_open_caveset(const char *directory) +{ + char *filename; + char *filter; + + /* if the caveset is edited, ask the user if to save. */ + /* if does not want to discard, get out here */ + if (!gd_discard_changes()) + return; + + if (!gd_last_folder) + gd_last_folder=g_strdup(g_get_home_dir()); + + filter=g_strjoinv(";", gd_caveset_extensions); + filename=gd_select_file("SELECT CAVESET TO LOAD", directory?directory:gd_last_folder, filter, FALSE); + g_free(filter); + + /* if file selected */ + if (filename) { + /* remember last directory */ + g_free(gd_last_folder); + gd_last_folder=g_path_get_dirname(filename); + + gd_save_highscore(gd_user_config_dir); + + gd_caveset_load_from_file(filename, gd_user_config_dir); + + /* if successful loading and this is a bd file, and we load highscores from our own config dir */ + if (!gd_has_new_error() && g_str_has_suffix(filename, ".bd") && !gd_use_bdcff_highscore) + gd_load_highscore(gd_user_config_dir); + + g_free(filename); + } +} + + + + + static int filenamesort(gconstpointer a, gconstpointer b) { @@ -516,6 +580,8 @@ gd_settings_menu() { 0, TypeStringv, "Preferred palette", &gd_preferred_palette, gd_color_get_palette_types_names() }, { 1, TypeBoolean, "Sound", &gd_sdl_sound }, + { 1, TypePercent, "Music volume", &gd_sound_music_volume_percent }, + { 1, TypePercent, "Cave volume", &gd_sound_chunks_volume_percent }, { 1, TypeBoolean, "Classic sounds only", &gd_classic_sound }, { 1, TypeBoolean, "16-bit mixing", &gd_sdl_16bit_mixing }, { 1, TypeBoolean, "44kHz mixing", &gd_sdl_44khz_mixing }, @@ -764,6 +830,9 @@ gd_settings_menu() g_ptr_array_free(themes, TRUE); gd_restore_screen(); + + gd_sound_set_music_volume(gd_sound_music_volume_percent); + gd_sound_set_chunk_volumes(gd_sound_chunks_volume_percent); } @@ -1144,11 +1213,19 @@ void gd_message(const char *message) { SDL_Rect rect; - const int height=5*gd_line_height(); + int height, lines; int y1; + char *wrapped; + int x; + + wrapped=gd_wrap_text(message, 38); + /* wrapped always has a \n on the end, so this returns at least 2 */ + lines=gd_lines_in_text(wrapped); + height=(1+lines)*gd_font_height(); + g_print("%d", lines); gd_backup_and_dark_screen(); - gd_status_line("SPACE: EXIT"); + gd_status_line("SPACE: CONTINUE"); y1=(gd_screen->h-height)/2; rect.x=gd_font_width(); @@ -1157,13 +1234,20 @@ gd_message(const char *message) rect.h=height; draw_window(&rect); SDL_SetClipRect(gd_screen, &rect); + + /* lines is at least 2. so 3 and above means multiple lines */ + if (lines>2) + x=rect.x; + else + x=-1; - gd_blittext_n(gd_screen, -1, y1+2*gd_line_height(), GD_GDASH_WHITE, message); + gd_blittext_n(gd_screen, x, y1+gd_font_height(), GD_GDASH_WHITE, wrapped); SDL_Flip(gd_screen); wait_for_keypress(); SDL_SetClipRect(gd_screen, NULL); gd_restore_screen(); + g_free(wrapped); } char * @@ -1494,7 +1578,7 @@ gd_discard_changes() return TRUE; /* if the caveset is edited, ask the user if to save. */ - answered=gd_ask_yes_no("Caveset edited. Discard changes?", "Cancel", "Discard", &result); + answered=gd_ask_yes_no("New replays are added. Discard them?", "Cancel", "Discard", &result); if (!answered || !result) /* if does not want to discard, say false */ return FALSE; @@ -1574,7 +1658,7 @@ gd_about() gd_title_line("GDASH " PACKAGE_VERSION); gd_status_line("SPACE: EXIT"); - y=20; + y=10; y=help_writeattrib(-1, y, "", gd_about_comments); y=help_writeattrib(10, y, "WEBSITE", gd_about_website); @@ -1620,3 +1704,202 @@ gd_show_error(GdErrorMessage *error) g_strfreev(lines); } + + +/* + * SDASH REPLAYS MENU + */ +void +gd_replays_menu(void (*play_func) (GdCave *cave, GdReplay *replay), gboolean for_game) +{ + gboolean finished; + /* an item stores a cave (to see its name) or a cave+replay */ + typedef struct _item { + GdCave *cave; + GdReplay *replay; + } Item; + int n, page; + int current; + const int lines_per_page=gd_screen->h/gd_line_height()-5; + GList *citer; + GPtrArray *items=NULL; + GdCave *cave; + Item i; + + items=g_ptr_array_new(); + /* for all caves */ + for (citer=gd_caveset; citer!=NULL; citer=citer->next) { + GList *riter; + + cave=citer->data; + /* if cave has replays... */ + if (cave->replays!=NULL) { + /* add cave data */ + i.cave=cave; + i.replay=NULL; + g_ptr_array_add(items, g_memdup(&i, sizeof(i))); + + /* add replays, too */ + for (riter=cave->replays; riter!=NULL; riter=riter->next) { + i.replay=(GdReplay *)riter->data; + g_ptr_array_add(items, g_memdup(&i, sizeof(i))); + } + } + } + + if (items->len==0) { + gd_message("No replays."); + } else { + + gd_backup_and_dark_screen(); + if (for_game) + gd_status_line("CRSR:MOVE SPACE:PLAY S:SAVED ESC:EXIT"); + else + gd_status_line("CRSR: MOVE SPACE: SAVE ESC: EXIT"); + + current=1; + finished=FALSE; + while (!finished && !gd_quit) { + page=current/lines_per_page; /* show 18 lines per page */ + SDL_Event event; + + /* show lines */ + gd_clear_line(gd_screen, 0); /* for empty top row */ + for (n=0; nlen/lines_per_page+1); + for (n=0; nlen; n++) { + int pos=page*lines_per_page+n; + GdColor col_cave=current==pos?GD_GDASH_YELLOW:GD_GDASH_LIGHTBLUE; /* selected=yellow, otherwise blue */ + GdColor col=current==pos?GD_GDASH_YELLOW:GD_GDASH_GRAY3; /* selected=yellow, otherwise blue */ + Item *i; + int x, y; + + i=(Item *) g_ptr_array_index(items, pos); + + x=0; + y=(n+2)*gd_line_height(); + + if (!i->replay) { + /* no replay pointer: this is a cave, so write its name. */ + x=gd_blittext_n(gd_screen, x, y, col_cave, i->cave->name); + } else { + const char *comm; + int c; + char buffer[100]; + + /* successful or not */ + x=gd_blittext_printf_n(gd_screen, x, y, i->replay->success?GD_GDASH_GREEN:GD_GDASH_RED, " %c ", GD_BALL_CHAR); + + /* player name */ + g_utf8_strncpy(buffer, i->replay->player_name, 15); /* name: maximum 15 characters */ + x=gd_blittext_n(gd_screen, x, y, col, buffer); + /* put 16-length spaces */ + for (c=g_utf8_strlen(buffer, -1); c<16; c++) + x=gd_blittext_n(gd_screen, x, y, col, " "); + + /* write comment */ + if (!g_str_equal(i->replay->comment, "")) + comm=i->replay->comment; + else + /* or date */ + if (!g_str_equal(i->replay->date, "")) + comm=i->replay->date; + else + /* or nothing */ + comm="-"; + g_utf8_strncpy(buffer, comm, 17); /* comment or data: maximum 18 characters */ + x=gd_blittext_n(gd_screen, x, y, col, comm); + /* put 20-length spaces */ + for (c=g_utf8_strlen(buffer, -1); c<17; c++) + x=gd_blittext_n(gd_screen, x, y, col, " "); + + /* level */ + x=gd_blittext_printf_n(gd_screen, x, y, col, " %d", i->replay->level+1); + /* saved - check box */ + x=gd_blittext_printf_n(gd_screen, x, y, col, " %c", i->replay->saved?GD_CHECKED_BOX_CHAR:GD_UNCHECKED_BOX_CHAR); + } + } + SDL_Flip(gd_screen); /* draw to usere's screen */ + + SDL_WaitEvent(&event); + switch (event.type) { + case SDL_QUIT: + gd_quit=TRUE; + break; + + case SDL_KEYDOWN: + switch (event.key.keysym.sym) { + case SDLK_UP: + do { + current=gd_clamp(current-1, 1, items->len-1); + } while (((Item *)g_ptr_array_index(items, current))->replay==NULL && current>=1); + break; + case SDLK_DOWN: + do { + current=gd_clamp(current+1, 1, items->len-1); + } while (((Item *)g_ptr_array_index(items, current))->replay==NULL && currentlen); + break; + case SDLK_s: + /* only allow toggling the "saved" flag, if we are in a game. not in the replay->video converter app. */ + if (for_game) { + Item *i=(Item *)g_ptr_array_index(items, current); + + if (i->replay) { + i->replay->saved=!i->replay->saved; + gd_caveset_edited=TRUE; + } + } + break; + case SDLK_SPACE: + case SDLK_RETURN: + { + Item *i=(Item *)g_ptr_array_index(items, current); + + if (i->replay) { + gd_backup_and_black_screen(); + SDL_Flip(gd_screen); + play_func(i->cave, i->replay); + gd_restore_screen(); + } + } + break; + case SDLK_ESCAPE: + finished=TRUE; + break; + + case SDLK_PAGEUP: + current=gd_clamp(current-lines_per_page, 0, items->len-1); + break; + + case SDLK_PAGEDOWN: + current=gd_clamp(current+lines_per_page, 0, items->len-1); + break; + + default: + /* other keys do nothing */ + break; + } + break; + + default: + /* other events do nothing */ + break; + } + } + + gd_restore_screen(); + } + + /* set the theme. other variables are already set by the above code. */ + /* forget list of themes */ + g_ptr_array_foreach(items, (GFunc) g_free, NULL); + g_ptr_array_free(items, TRUE); + +} + + diff --git a/src/sdlui.h b/src/sdlui.h index 0808980..667fcd7 100644 --- a/src/sdlui.h +++ b/src/sdlui.h @@ -16,6 +16,34 @@ #ifndef _GD_SDL_UI_H #define _GD_SDL_UI_H +/* for main menu */ +typedef enum _gd_main_menu_selected { + M_NONE, + M_QUIT, /* quit immediately */ + M_EXIT, /* normal quit */ + M_ABOUT, + M_LICENSE, + M_PLAY, + M_SAVE, + M_INFO, + M_SAVE_AS_NEW, + M_REPLAYS, + M_OPTIONS, + M_INSTALL_THEME, + M_HIGHSCORE, + M_LOAD, + M_LOAD_FROM_INSTALLED, + M_ERRORS, + M_HELP, +} GdMainMenuSelected; + + +char *gd_last_folder; +char *gd_caveset_filename; +void gd_open_caveset(const char *directory); +void gd_caveset_file_operation_successful(const char *filename); + + char *gd_select_file(const char *title, const char *start_dir, const char *glob, gboolean for_save); void gd_settings_menu(); void gd_show_highscore(GdCave *highlight_cave, int highlight_line); @@ -23,6 +51,9 @@ void gd_show_cave_info(GdCave *show_cave); void gd_help(const char **strings); void gd_message(const char *message); +void gd_title_line(const char *format, ...); +void gd_status_line(const char *text); + void gd_error_console(); void gd_show_error(GdErrorMessage *error); @@ -34,8 +65,7 @@ gboolean gd_discard_changes(); void gd_about(); void gd_show_license(); -void gd_title_line(const char *format, ...); -void gd_status_line(const char *text); +void gd_replays_menu(void (*play_func) (GdCave *cave, GdReplay *replay), gboolean for_game); void gd_install_theme(); diff --git a/src/settings.c b/src/settings.c index ce8482b..15f0752 100644 --- a/src/settings.c +++ b/src/settings.c @@ -136,6 +136,11 @@ guint gd_gtk_key_fire_2=GDK_Control_R; #define SETTING_GTK_KEY_SUICIDE "gtk_key_suicide" guint gd_gtk_key_suicide=GDK_F2; +/* html output option */ +/* CURRENTLY ONLY FROM THE COMMAND LINE */ +char *gd_html_stylesheet_filename=NULL; +char *gd_html_favicon_filename=NULL; + #endif /* only if having gtk */ @@ -214,11 +219,17 @@ gboolean gd_sdl_16bit_mixing=FALSE; gboolean gd_sdl_44khz_mixing=TRUE; #define SETTING_CLASSIC_SOUND "classic_sound" gboolean gd_classic_sound=FALSE; +#define SETTING_SOUND_CHUNKS_VOLUME_PERCENT "sound_chunks_volume_percent" +int gd_sound_chunks_volume_percent=75; +#define SETTING_SOUND_MUSIC_VOLUME_PERCENT "sound_music_volume_percent" +int gd_sound_music_volume_percent=75; #endif /* if gd_sound */ + + /* some directories the game uses */ char *gd_user_config_dir; char *gd_system_data_dir; @@ -484,6 +495,8 @@ gd_load_settings() gd_sdl_16bit_mixing=keyfile_get_boolean_with_default(ini, SETTINGS_GDASH_GROUP, SETTING_SDL_16BIT_MIXING, gd_sdl_16bit_mixing); gd_sdl_44khz_mixing=keyfile_get_boolean_with_default(ini, SETTINGS_GDASH_GROUP, SETTING_SDL_44KHZ_MIXING, gd_sdl_44khz_mixing); gd_classic_sound=keyfile_get_boolean_with_default(ini, SETTINGS_GDASH_GROUP, SETTING_CLASSIC_SOUND, gd_classic_sound); + gd_sound_chunks_volume_percent=keyfile_get_integer_with_default(ini, SETTINGS_GDASH_GROUP, SETTING_SOUND_CHUNKS_VOLUME_PERCENT, gd_sound_chunks_volume_percent); + gd_sound_music_volume_percent=keyfile_get_integer_with_default(ini, SETTINGS_GDASH_GROUP, SETTING_SOUND_MUSIC_VOLUME_PERCENT, gd_sound_music_volume_percent); #endif /* if gd_sound */ g_key_file_free(ini); @@ -575,6 +588,8 @@ gd_save_settings() g_key_file_set_boolean(ini, SETTINGS_GDASH_GROUP, SETTING_SDL_16BIT_MIXING, gd_sdl_16bit_mixing); g_key_file_set_boolean(ini, SETTINGS_GDASH_GROUP, SETTING_SDL_44KHZ_MIXING, gd_sdl_44khz_mixing); g_key_file_set_boolean(ini, SETTINGS_GDASH_GROUP, SETTING_CLASSIC_SOUND, gd_classic_sound); + g_key_file_set_integer(ini, SETTINGS_GDASH_GROUP, SETTING_SOUND_CHUNKS_VOLUME_PERCENT, gd_sound_chunks_volume_percent); + g_key_file_set_integer(ini, SETTINGS_GDASH_GROUP, SETTING_SOUND_MUSIC_VOLUME_PERCENT, gd_sound_music_volume_percent); #endif /* if gd_sound */ /* convert to string and free */ diff --git a/src/settings.h b/src/settings.h index e2a8df4..0a82c89 100644 --- a/src/settings.h +++ b/src/settings.h @@ -79,6 +79,11 @@ extern guint gd_gtk_key_fire_1; extern guint gd_gtk_key_fire_2; extern guint gd_gtk_key_suicide; +/* html output option */ +char *gd_html_stylesheet_filename; +char *gd_html_favicon_filename; + + #endif /* only if having gtk */ @@ -135,6 +140,8 @@ extern gboolean gd_sdl_sound; extern gboolean gd_sdl_16bit_mixing; extern gboolean gd_sdl_44khz_mixing; extern gboolean gd_classic_sound; +extern int gd_sound_chunks_volume_percent; +extern int gd_sound_music_volume_percent; #endif /* if gd_sound */ diff --git a/src/sound.c b/src/sound.c index 23cdadd..f334333 100644 --- a/src/sound.c +++ b/src/sound.c @@ -61,6 +61,9 @@ static Mix_Chunk *sounds[GD_S_MAX]; static gboolean mixer_started=FALSE; static GdSound snd_playing[5]; static Mix_Music *music=NULL; + +static int chunk_volumes=MIX_MAX_VOLUME; +static int music_volume=MIX_MAX_VOLUME; #endif #ifdef GD_SOUND @@ -71,6 +74,30 @@ sound_playing(int channel) } #endif +void +gd_sound_set_music_volume(int percent) +{ +#ifdef GD_SOUND + music_volume=MIX_MAX_VOLUME*percent/100; + Mix_VolumeMusic(music_volume); +#endif +} + +void +gd_sound_set_chunk_volumes(int percent) +{ +#ifdef GD_SOUND + int i; + + chunk_volumes=MIX_MAX_VOLUME*percent/100; + + for (i=0; ilen))); if (!music) g_warning("%s", SDL_GetError()); - if (music) + if (music) { + Mix_VolumeMusic(music_volume); Mix_PlayMusic(music, -1); + } #endif } diff --git a/src/sound.h b/src/sound.h index 1498d83..9d306da 100644 --- a/src/sound.h +++ b/src/sound.h @@ -17,7 +17,8 @@ #define _GD_SOUND_H #include "cave.h" -void gd_sound_init(); +/* init sound. allows setting buffer size (for replays saving), 0 for default. */ +void gd_sound_init(unsigned int bufsize); void gd_sound_off(); void gd_sound_play_cave(GdCave *cave); void gd_sound_play_bonus_life(); @@ -25,5 +26,9 @@ void gd_sound_play_bonus_life(); void gd_music_play_random(); void gd_music_stop(); +void gd_sound_set_music_volume(int percent); +void gd_sound_set_chunk_volumes(int percent); + + #endif diff --git a/src/util.c b/src/util.c index ac9d995..f66b25a 100644 --- a/src/util.c +++ b/src/util.c @@ -174,6 +174,7 @@ gd_wrap_text(const char *orig, int width) char **lines; int l; + g_assert(orig!=NULL); wrapped=g_string_new(NULL); lines=g_strsplit_set(orig, "\n", -1); for (l=0; lines[l]!=NULL; l++) { @@ -209,6 +210,19 @@ gd_wrap_text(const char *orig, int width) return g_string_free(wrapped, FALSE); } +int +gd_lines_in_text(const char *text) +{ + int lines, i; + + g_assert(text!=NULL); + lines=0; + for (i=0; text[i]!=0; i++) + if (text[i]=='\n') + lines++; + + return lines+1; +} /* return current date in 2008-12-04 format */ const char * diff --git a/src/util.h b/src/util.h index 3eb496e..7b47bd1 100644 --- a/src/util.h +++ b/src/util.h @@ -53,6 +53,8 @@ const char *gd_find_file(const char *filename); /* wrap a text to specified width */ char *gd_wrap_text(const char *orig, int width); +/* count lines in text (number of \n's + 1) */ +int gd_lines_in_text(const char *text); /* return current date in 2008-12-04 format */ const char *gd_get_current_date(); diff --git a/util/Makefile.in b/util/Makefile.in index 29ddebf..42cfb82 100644 --- a/util/Makefile.in +++ b/util/Makefile.in @@ -115,6 +115,8 @@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ -- 2.11.4.GIT
\n"); + for (i=0; i%s\n
%s
\n", i+1, cave->name, cave->description); + } + g_string_append(contents, "